2018-07-28 首发于阿里先知: https://xz.aliyun.com/t/2497
0x00前言
本文利用Volatility进行内存取证,分析入侵攻击痕迹,包括网络连接、进程、服务、驱动模块、DLL、handles、检测进程注入、检测Meterpreter、cmd历史命令、IE浏览器历史记录、启动项、用户、shimcache、userassist、部分rootkit隐藏文件、cmdliner等。
环境准备:
Kali2中自带Volatility(版本2.4),可下载最新版本2.6,下载即可使用。
下载地址:https://github.com/volatilityfoundation/volatility
windows系统可使用DumpIt等制作镜像。
本为以window系统镜像为例,简单模拟了一次入侵行为,然后利用Volatility进行分析:
0x01查看网络连接
netscan 查看网络连接情况1
python vol.py -f /root/lltest/PC-20170527XAOD-20180409-232828.raw --profile=Win7SP1x86 netscan
0x02查看进程
pslist、psxview可查看进程,其中psxview可查看一些隐藏进程1
2python vol.py -f /root/lltest/PC-20170527XAOD-20180409-232828.raw --profile=Win7SP1x86 pslist
python vol.py -f /root/lltest/PC-20170527XAOD-20180409-232828.raw --profile=Win7SP1x86 psxview
0x03查找进程注入
malfind 查找隐藏或注入的代码/ DLL1
python vol.py -f /root/lltest/PC-20170527XAOD-20180409-232828.raw --profile=Win7SP1x86 malfind
可看到进程pid为620的svchost.exe存在异常:
0x04提取文件
memdump 提取进程在内存中的信息保存到文件中 –D 指定保存的目录
procdump 提取进程的可执行文件
提取出文件后,可以到www.virustotal.com进行检验1
2python vol.py -f /root/lltest/PC-20170527XAOD-20180409-232828.raw --profile=Win7SP1x86 procdump -p 620 -D dump
python vol.py -f /root/lltest/PC-20170527XAOD-20180409-232828.raw --profile=Win7SP1x86 memdump -p 620 -D dump #时间较长,文件较大
成功检测出提取的文件有Meterpreter攻击痕迹:
0x05yarascan 检测Meterpreter
上面通过memdump 提取pid为620的进程,可检测出Meterpreter攻击痕迹,还可以通过YARA进行检测。yarascan 可利用YARA规则进行检测 -Y 指定自定义的规则,-y 指定包含YARA规则。通过文章(http://cyberforensicator.com/2018/03/11/finding-metasploits-meterpreter-traces-with-memory-forensics/) 的规则学习,可进行检测Meterpreter攻击痕迹。
1 | python vol.py -f /root/lltest/PC-20170527XAOD-20180409-232828.raw --profile=Win7SP1x86 yarascan -y fm.yara |
fm.yara文件如下1
2
3
4
5
6
7
8
9
10
11rule Find_Meterpreter
{
meta:
desrciption = "it's the Meterpreter!"
strings:
$a = { 6D 65 74 73 72 76 2E 64 6C 6C 00 00 52 65 66 6C 65 63 74 69 76 65 4C 6F 61 64 65 72 }
$b = "stdapi_" ascii nocase
condition:
$a and $b
}
成功检测到Meterpreter攻击痕迹:
0x06查看&提取DLL
dlllist 查看dll文件
ldrmodules 可查看一些隐藏的dll
dlldump 提取dll文件
提取出dll文件后,可以到www.virustotal.com进行检验1
2
3python vol.py -f /root/lltest/PC-20170527XAOD-20180409-232828.raw --profile=Win7SP1x86 dlllist -p 1656
python vol.py -f /root/lltest/PC-20170527XAOD-20180409-232828.raw --profile=Win7SP1x86 dlldump -p 1656 -D dump
python vol.py -f /root/lltest/PC-20170527XAOD-20180409-232828.raw --profile=Win7SP1x86 ldrmodules
成功检测出提取出来的可疑dll文件:
0x07查看文件句柄
handles 查看进程打开的handles1
python vol.py -f /root/lltest/PC-20170527XAOD-20180409-232828.raw --profile=Win7SP1x86 handles -p 620 -t file
0x08查看cmd历史命令
cmdscan 查看内存中保留的 cmd 命令使用情况,还可以看到powershell命令1
python vol.py -f /root/lltest/PC-20170527XAOD-20180409-232828.raw --profile=Win7SP1x86 cmdscan
0x09查看IE浏览器历史记录
1)iehistory插件
iehistory 可查看IE浏览中的历史记录,但是有时会出bug,查看不到信息1
python vol.py -f /root/lltest/PC-20170527XAOD-20180410-073551.raw --profile=Win7SP1x86 iehistory
2)yarascan搜索记录
可以先找到iexplore进程,然后通过yarascan来定义YARA规则进行搜索IE浏览器历史记录1
2python vol.py -f /root/lltest/PC-20170527XAOD-20180410-073551.raw --profile=Win7SP1x86 pslist | grep iexplore
python vol.py -f /root/lltest/PC-20170527XAOD-20180410-073551.raw --profile=Win7SP1x86 yarascan -Y "/(URL|REDR|LEAK)/" -p 1904,220,3276,3676
查看iexplore进程pid:
成功检测到ie历史记录:
3)memdump & strings提取记录
还可以通过memdump提取iexplore进程中的信息到文件中,然后通过strings来搜索IE浏览器历史记录1
2python vol.py -f /root/lltest/PC-20170527XAOD-20180410-073551.raw --profile=Win7SP1x86 memdump -p 1904,220,3276,3676 -D dump
strings dump/1904.dmp | grep -i http:// | sort | uniq -u
根据pid提取iexplore进程文件:
strings成功提取到ie历史记录:
0x10查看注册表
printkey可查看指定注册表项信息
1)查看启动项1
python vol.py -f /root/lltest/PC-20170527XAOD-20180409-232828.raw --profile=Win7SP1x86 printkey -K "Microsoft\Windows\CurrentVersion\Run"
2)查看用户1
python vol.py -f /root/lltest/PC-20170527XAOD-20180409-232828.raw --profile=Win7SP1x86 printkey -K "SAM\Domains\Account\Users\Names"
3)shimcache信息查看
ShimCache来识别应用程序兼容性问题。跟踪文件路径,大小,最后修改时间和最后“执行”时间。1
python vol.py -f /root/lltest/PC-20170527XAOD-20180409-232828.raw --profile=Win7SP1x86 shimcache
4)userassist信息查看
userassist键值包含系统或桌面执行文件的信息,如名称、路径、执行次数、最后一次执行时间等。1
python vol.py -f /root/lltest/PC-20170527XAOD-20180407-042003.raw --profile=Win7SP1x86 userassist
0x11查看服务svcscan
svcscan查看服务1
python vol.py -f /root/lltest/PC-20170527XAOD-20180409-232828.raw --profile=Win7SP1x86 svcscan
0x12查看内核驱动模块
modules 查看内核驱动
modscan、driverscan 可查看一些隐藏的内核驱动1
2
3python vol.py -f /root/lltest/PC-20170527XAOD-20180409-232828.raw --profile=Win7SP1x86 modules
python vol.py -f /root/lltest/PC-20170527XAOD-20180409-232828.raw --profile=Win7SP1x86 modscan
python vol.py -f /root/lltest/PC-20170527XAOD-20180409-232828.raw --profile=Win7SP1x86 driverscan
0x13查看文件
filescan 可查看 一些rootkit隐藏文件1
python vol.py -f /root/lltest/PC-20170527XAOD-20180409-232828.raw --profile=Win7SP1x86 filescan #可查看 一些rootkit隐藏文件
0x14查看时间线cmdliner
timeliner 查看各组件时间线。 输出会很多,建议输出到指定文件中1
python vol.py -f /root/lltest/PC-20170527XAOD-20180407-042003.raw --profile=Win7SP1x86 timeliner --output=text --output-file=out1.txt
当然,volatility还有许多命令和插件,本文只是抛砖引玉,简单写了一些常用方式。
参考
https://github.com/volatilityfoundation/volatility/wiki/Command-Reference
http://cyberforensicator.com/2018/03/11/finding-metasploits-meterpreter-traces-with-memory-forensics/
https://eforensicsmag.com/finding-advanced-malware-using-volatility/
https://volatility-labs.blogspot.com/2012/09/howto-scan-for-internet-cachehistory.html