jjzjj

【内存取证】基础知识(volatility内存取证)

NUIST数字取证中心 2023-07-07 原文

目录

一、基本概念

二、运行内存镜像的获取

2.1 Windows内存镜像获取

2.1.1 Magnet RAM Capture获取内存镜像

2.1.2 AccessData FTK Imager软件获取内存镜像

2.1.3 DumpIt软件获取内存镜像

2.1.4 额外知识补充:

2.2 Linux\Mac OS 下内存获取方法

 三、内存信息取证与分析

3.1 volatility安装

3.1.1 Windows

3.1.2 Linux

        3.2 内存取证命令

3.2.1 获取镜像信息

3.2.2 查看用户

3.2.3 查看用户SID

3.2.4 查看用户名密码

 3.2.5 查看LSA密钥信息

3.2.6 查看系统浏览器的浏览记录

3.2.7 查看网络连接情况

3.2.8 查看服务

3.2.9 查看进程

3.2.10查看进程树:

3.2.11 查看cmd历史命令

3.2.12 查看文件

3.2.13 获取主机名

3.2.14 查看注册表配置单元

3.2.15 事件时间线信息

 3.2.16 查看剪切板信息

 3.2.17 系统最后一次关机时间


一、基本概念

        内存取证是对传统磁盘取证的补充攻击者通过隐藏或删除攻击痕迹 的手段, 使得传统的对硬盘的取证获得的信息变得越来 越困难。同时,磁盘中的数据加密技术也越来 越普及,比如 EFS、Bitlocker 和 TrueCrypt 加密等等,此 时就涉及到了内存取证,内存取证是指从计算机物理内存和页面交换文件中查找、 提取、分析易失性证据,是对传统基于硬盘中数据取证的重要补充,也是对抗网 络攻击或网络犯罪的有力武器。内存取证有着速度快,镜像占用空间小等优势。

内存取证的优势

  •  符合传统物证技术的要求
  • 内存取证能够评估计算在线证据的可信性
  • 内存取证最大限度地减少对目标系统的影响

注意:

        内存镜像和磁盘分区镜像是不一样的。计算机内主要的存储部件是内存和磁盘,磁盘中存储着各种数据,而存储的程序是必须加载到内存中才能运行(即程序在内存中运行)。

  1. 磁盘分区镜像文件后缀有*.dd、*.E01、*. qcow2等。
  2. 内存镜像文件后缀有*.raw、*.mem、*.dd等。 

二、运行内存镜像的获取

2.1 Windows内存镜像获取

当拿到嫌疑人电脑后,有以下常见的获取物理内存的方法:

(1)内存获取软件获取

(2)直接内存访问(DMA)方式获取.

        在Windows电脑处于可进入系统桌面下,可以使用内存获取软件获取内存镜像,常见的内存获取软件有DumpltMagnet RAM CaptureAccessData FTK Image等。

2.1.1 Magnet RAM Capture获取内存镜像

        运行软件后,可选择分段大小,之后选内存镜像保存路径,点击“start”后,软件自动获取物理内存镜像。

 2.1.2 AccessData FTK Imager软件获取内存镜像

        点击工具栏获取内存图标或选择“File”->“Capture Memory”。点击“Browse”选择内存镜像保存路径,可自行修改内存镜像文件名称,默认名称为“memdump.mem”。点击“Capture Memory”开始制作镜像,制作完成后可在相应路径中找到制作的内存镜像文件。

 

2.1.3 DumpIt软件获取内存镜像

        双击软件即可运行,输入“y”,即开始制作当前机器的内存镜像。内存镜像默认保存在“DumpIt软件所在的目录”,镜像名格式默认为“主机名+当前时间”。

 2.1.4 额外知识补充:

  • 断电情况下:Windows还使用页交换文件(Pagefile.sys)来协助内存的工作,当内存不满足系统所需的情况下,会释放部分内存数据到Pagefile.sys文件中,因此,当设备断电后,若无法拿到内存镜像,可以通过分析Pagefile.sys文件获取有价值的内存数据。
  • 休眠情况下:当Windows系统处于休眠状态下,系统会在磁盘中生成一个休眠文件(Hiberfil.sys)用于存放内存中的数据,当计算机重新加电时,又将休眠文件中的数据重新写到物理内存中 ,这个文件也会包含很多价值的内存数据。
  1. powercfg -a查询是否支持休眠,
  2. powercfg -h off,即可关闭休眠功能,
  3. powercfg -h on,就能开启休眠功能。

 2.2 Linux\Mac OS 下内存获取方法

LiME:GitHub - 504ensicsLabs/LiME: LiME (formerly DMD) is a Loadable Kernel Module (LKM), which allows the acquisition of volatile memory from Linux and Linux-based devices, such as those powered by Android. The tool supports acquiring memory either to the file system of the device or over the network. LiME is unique in that it is the first tool that allows full memory captures from Android devices. It also minimizes its interaction between user and kernel space processes during acquisition, which allows it to produce memory captures that are more forensically sound than those of other tools designed for Linux memory acquisition.LiME (formerly DMD) is a Loadable Kernel Module (LKM), which allows the acquisition of volatile memory from Linux and Linux-based devices, such as those powered by Android. The tool supports acquiring memory either to the file system of the device or over the network. LiME is unique in that it is the first tool that allows full memory captures from Android devices. It also minimizes its interaction between user and kernel space processes during acquisition, which allows it to produce memory captures that are more forensically sound than those of other tools designed for Linux memory acquisition. - GitHub - 504ensicsLabs/LiME: LiME (formerly DMD) is a Loadable Kernel Module (LKM), which allows the acquisition of volatile memory from Linux and Linux-based devices, such as those powered by Android. The tool supports acquiring memory either to the file system of the device or over the network. LiME is unique in that it is the first tool that allows full memory captures from Android devices. It also minimizes its interaction between user and kernel space processes during acquisition, which allows it to produce memory captures that are more forensically sound than those of other tools designed for Linux memory acquisition.https://github.com/504ensicslabs/lime (获取镜像)

lmg-master:GitHub - halpomeranz/lmg: Script for automating Linux memory capture and analysis (配合LiME获取镜像,简化操作)

将lmg-master内文件放入LiME的src文件夹,运行sudo ./lmg 搞定。


 三、内存信息取证与分析

3.1 volatility安装

        Volatility Framework 是一个完全开放的内存分析工具集,基于GNU GPL2 许可,以python 语言进行编写。由于Volatility 是一款开源免费的工具,无需花任何钱即可进行内存数据的高级分析,此外代码开源的特点,遇到一些无法解决的问题时,还可以对源代码进行修改或扩展功能。Volatility官网https://www.volatilityfoundation.org/

3.1.1 Windows

直接官网安装Volatility 2.6 Release

解压后如下:

命令行打开,进入到该目录,运行volatility.exe(命令格式请往下看)

3.1.2 Linux

GitHub下载项目包:GitHub - volatilityfoundation/volatility: An advanced memory forensics framework

解压项目包:unzip volatility-master.zip

安装crypto依赖包:pip install pycrypto

安装失败参考:python2安装pycrypto_python2 pycrypto_xxL7-的博客-CSDN博客

安装distorm3依赖包:pip install distorm3

3.2 内存取证命令

命令格式vol.py -f [镜像] --profile=[操作系统] [插件]

  • windows中把vol.py换成volatility.exe即可
  • windows中配合find命令来匹配关键字
  • Linux中配合grep命令来匹配关键字

3.2.1 获取镜像信息

vol.py -f Win7x64.vmem imageinfo

        这一步主要是为了获取操作系统信息,在Suggested Profile(s)参数处会给出可能的操作系统,一般第一个就是正确的操作系统。

  3.2.2 查看用户

vol.py -f Win7x64.vmem --profile=Win7SP1x64 printkey -K "SAM\Domains\Account\Users\Names"

        通过注册表项中的SAM键查看该计算机创建的用户信息

3.2.3 查看用户SID

volatility.exe -f 镜像 --profile=操作系统 getsids | find "用户名"Windows中使用volatility配合find命令使用来匹配关键字

3.2.4 查看用户名密码

  • vol.py -f Win7x64.vmem --profile=Win7SP1x64 hashdump
  • 显示的格式是:用户名:RID:LM hash:NTLM hash:::

  3.2.5 查看LSA密钥信息

vol.py -f Win7x64.vmem --profile=Win7SP1x64 lsadump

3.2.6 查看系统浏览器的浏览记录

vol.py -f Win7x64.vmem --profile=Win7SP1x64 iehistory

3.2.7 查看网络连接情况

vol.py -f Win7x64.vmem --profile=Win7SP1x64 netscan也可能是connscanconnections

3.2.8 查看服务

vol.py -f Win7x64.vmem --profile=Win7SP1x64 svcscan

3.2.9 查看进程

vol.py -f Win7x64.vmem --profile=Win7SP1x64 pslist

vol.py -f Win7x64.vmem --profile=Win7SP1x64 psscan可以找到已经终止/不活动的进程以及杯rootkit隐藏或解链的进程

3.2.10查看进程树:

vol.py -f Win7x64.vmem --profile=Win7SP1x64 pstree

 3.2.11 查看cmd历史命令

vol.py -f Win7x64.vmem --profile=Win7SP1x64 cmdscan

3.2.12 查看文件

vol.py -f Win7x64.vmem --profile=Win7SP1x64 filescan

3.2.13 获取主机名

vol.py -f Win7x64.vmem --profile=Win7SP1x64 printkey -K "ControlSet001\Control\ComputerName\ComputerName"

3.2.14 查看注册表配置单元

vol.py -f 镜像 --profile=操作系统 hivelist可以查看道注册表信息及其虚拟地址和物理地址

3.2.15 事件时间线信息

vol.py -f Win7x64.vmem --profile=Win7SP1x64 timeliner

  3.2.16 查看剪切板信息

vol.py -f Win7x64.vmem --profile=Win7SP1x64 clipboard

  3.2.17 系统最后一次关机时间

vol.py -f Win7x64.vmem --profile=Win7SP1x64 shutdowntime

有关【内存取证】基础知识(volatility内存取证)的更多相关文章

  1. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  2. ruby-on-rails - Ruby 中的内存模型 - 2

    ruby如何管理内存。例如:如果我们在执行过程中采用C程序,则以下是内存模型。类似于这个ruby如何处理内存。C:__________________|||stack|||------------------||||------------------|||||Heap|||||__________________|||data|__________________|text|__________________Ruby:? 最佳答案 Ruby中没有“内存”这样的东西。Class#allocate分配一个对象并返回该对象。这就是程序

  3. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  4. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  5. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  6. 键删除后 ruby​​ 哈希内存泄漏 - 2

    你好,我无法成功如何在散列中删除key后释放内存。当我从哈希中删除键时,内存不会释放,也不会在手动调用GC.start后释放。当从Hash中删除键并且这些对象在某处泄漏时,这是预期的行为还是GC不释放内存?如何在Ruby中删除Hash中的键并在内存中取消分配它?例子:irb(main):001:0>`ps-orss=-p#{Process.pid}`.to_i=>4748irb(main):002:0>a={}=>{}irb(main):003:0>1000000.times{|i|a[i]="test#{i}"}=>1000000irb(main):004:0>`ps-orss=-p

  7. ruby-on-rails - HTTParty 的内存问题和下载大文件 - 2

    这会导致Ruby出现内存问题吗?我知道如果大小超过10KB,Open-URI会写入TempFile。但是HTTParty会在写入TempFile之前尝试将整个PDF保存到内存吗?src=Tempfile.new("file.pdf")src.binmodesrc.writeHTTParty.get("large_file.pdf").parsed_response 最佳答案 您可以使用Net::HTTP。参见thedocumentation(特别是标题为“流媒体响应机构”的部分)。这是文档中的示例:uri=URI('http://e

  8. ruby - 我怎样才能更好地了解/了解更多关于 Ruby 的知识? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?

  9. 【网络】-- 网络基础 - 2

    (本文是网络的宏观的概念铺垫)目录计算机网络背景网络发展认识"协议"网络协议初识协议分层OSI七层模型TCP/IP五层(或四层)模型报头以太网碰撞路由器IP地址和MAC地址IP地址与MAC地址总结IP地址MAC地址计算机网络背景网络发展        是最开始先有的计算机,计算机后来因为多项技术的水平升高,逐渐的计算机变的小型化、高效化。后来因为计算机其本身的计算能力比较的快速:独立模式:计算机之间相互独立。    如:有三个人,每个人做的不同的事物,但是是需要协作的完成。    而这三个人所做的事是需要进行协作的,然而刚开始因为每一台计算机之间都是互相独立的。所以前面的人处理完了就需要将数据

  10. ruby-on-rails - 内存中具有相同 ID 的更多对象? - 2

    在部署在heroku上的Rails应用程序(v:3.1)中,我在内存中获得了更多具有相同ID的对象。我的heroku控制台日志:>>Project.find_all_by_id(92).size=>2>>ActiveRecord::Base.connection.execute('select*fromprojectswhereid=92').to_a.size=>1这怎么可能?可能是什么问题? 最佳答案 解决方案根据您的SQL查询,您的数据库中显然没有重复条目。也许您的类项目中的size或length方法已被覆盖。我试过find_

随机推荐