利用Volatility进行入侵痕迹分析

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
2
python 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 查找隐藏或注入的代码/ DLL

1
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
2
python 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
11
rule 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
3
python 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 查看进程打开的handles

1
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
2
python 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
2
python 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
3
python 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