volatility 框架是一款用于易失性内存取证的重量级框架。在该框架下我们可以完成许多取证的操作,获取我们想取得的信息。其支持的操作系统也非常广泛,同时支持 windows , linux, Mac OSX,甚至也支持 Android 手机使用ARM处理器的取证。因此,它也是所有网络取证爱好者的必学框架。
在之前的文章我们已经简单介绍了内存镜像工具 DumpIt 的基本使用。传送门:http://www.secist.com/archives/2076.html 。
现在我将使用 DumpIt 工具,dump 一个纯净版 WIN7 的内存镜像,并使用 volatility 对其进行取证分析。
首先,我们使用 imageinfo 插件来查看目标 WIN7 的操作系统信息:
volatility -f WIN7.raw imageinfo
可以看到,内存文件所属的操作系统它给出了两个建议性 profile。这里我用的 SP1 版本,同时还提取出了? CPU 等细节信息。
通过以上命令获取到了所属操作系统类型,现在我们就可以指定 profile 内存文件格式,通过 pslist 来查看其进程情况:
volatility -f WIN7.raw –profile=Win7SP1x86 pslist
除了可以使用 pslist 查看进程外,还可以使用 pstree 效果相同。
接着我们通过 hivelist 来列出缓存在内存中的注册表有哪些(蜂巢):
volatility -f WIN7.raw –profile=Win7SP1x86 hivelist
如果你想打印出注册表中的数据,这里可以使用 hivedump 来实现:
volatility -f WIN7.raw –profile=Win7SP1x86 hivedump -o 注册表的 virtual 地址
如果你想知道 SAM 表中都有哪些用户,我们同样可以获取到:
volatility -f WIN7.raw –profile=Win7SP1x86 printkey -K “SAM\Domains\Account\Users\Names”
可以看到有三个账户。
如果你想知道最后登录系统的账户是谁,可以使用以下命令来获取:
volatility -f WIN7.raw –profile=Win7SP1x86 printkey -K “SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon”
从结果中可以得知 IEUser 是最后登陆过系统的账户 。这里需要说明的是, last updated 的时间并不是最后用户登录时间,而是 账户信息 最后被修改过的时间。
userassist这个插件比较有意思,他可以提取出内存中记录的 当时正在运行的程序有哪些,运行过多少次,最后一次运行的时间等信息。
volatility -f WIN7.raw –profile=Win7SP1x86 userassist
memdump 插件可以将内存中的某个进程数据以 dmp 的格式保存出来,便于我们后续的取证调查:
volatility -f WIN7.raw –profile=Win7SP1x86 memdump -p 1608 -D win7/
-p:指定的进程 ID 。这里我指定的是 DumpIt 的进程 ID。
-D: dump 出的文件保存在哪个目录下。
我们可以使用二进制编辑器 hexeditor 将以上保存的 dmp 文件打开,并进行调查取证的工作。
hexeditor 1608.dmp
如果你觉得下面的格式看的比较费力,那么你还可以使用 strings 这个工具将它的字符串打印出来。
例:strings 1608.dmp > 1608.txt
strings 1608.dmp > 1608.txt | grep shellcode
一般攻击者控制了我们的系统都会使用 CMD 命令来进行操作,因此我们可以使用 cmdscan 这款插件,将内存中保留的 cmd 命令使用情况,提取出来:
volatility -f WIN7.raw –profile=Win7SP1x86 cmdscan
可以看到当时我用 CMD 打开过 DumpIt 这款工具。
我们还可以获取到当时的网络连接情况:
volatility -f WIN7.raw –profile=Win7SP1x86 netscan
获取 IE 浏览器的使用情况:
volatility -f WIN7.raw –profile=Win7SP1x86 iehistory
同时,它还为我们显示出了当时使用的用户是谁。
如果你想获取内存中的系统密码,我们可以使用 hashdump 将它提取出来:
volatility -f WIN7.raw –profile=Win7SP1x86 hashdump -y (注册表 system 的 virtual 地址 )-s (SAM 的 virtual 地址)
可以看到 hash 值都被 dump 出来了。
如果你想最大程度上将内存中的信息提取出来,那么你可以使用 timeliner 这个插件。它会从多个位置来收集系统的活动信息:
volatility -f WIN7.raw –profile=Win7SP1x86 timeliner
转载请注明:即刻安全 » 调查取证之Volatility框架的使用