取证(Forensic)
内存取证
工具:volatility,DiskGenius
volatility
https://github.com/volatilityfoundation/volatility
镜像基本信息(得到profile):
volatility -f mem.data imageinfo
python3 vol.py -f mem.data windows.info
搜索进程、导出内存块:
volatility -f mem.data --profile=XXX pslist
python3 vol.py -f mem.data windows.pstree
volatility -f mem.data --profile=XXX memdump -p 2768 -D ./
查看命令行输入、命令行历史记录:
volatility -f mem.data --profile=XXX cmdline
python3 vol.py -f mem.data windows.cmdline
volatility -f mem.data --profile=XXX cmdscan
volatility -f mem.data --profile=XXX consoles
查看可疑文件、导出文件:
volatility -f mem.data --profile=XXX filescan | grep -E ".zip|.rar|.jpg|.png|.txt|.bmp|.7z"
volatility -f mem.data --profile=XXX dumpfiles -D ./ -Q 0x000000001e85f430 -n
python3 vol.py -f mem.data windows.dumpfiles --pid 8180
python3 vol.py -f mem.data windows.dumpfiles --virtaddr 0xd0064181c950
特殊文件后缀:
evtx
- Windows系统日志无法导出.dat文件,加 -u 参数(-u = —unsafe relax safety constraints more data)
volatility -f mem.data dumpfiles -r pdf$ -i --name -D dumpfiles/ -u
dumpfiles
参数:
参考:https://www.andreafortuna.org/2017/07/17/volatility-my-own-cheatsheet-part-4-kernel-memory-and-objects
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 -r REGEX, --regex=REGEX
Dump files matching REGEX
-i, --ignore-case Ignore case in pattern match
-o OFFSET, --offset=OFFSET
Dump files for Process with physical address OFFSET
-Q PHYSOFFSET, --physoffset=PHYSOFFSET
Dump File Object at physical address PHYSOFFSET
-D DUMP_DIR, --dump-dir=DUMP_DIR
Directory in which to dump extracted files
-S SUMMARY_FILE, --summary-file=SUMMARY_FILE
File where to store summary information
-p PID, --pid=PID Operate on these Process IDs (comma-separated)
-n, --name Include extracted filename in output file path
-u, --unsafe Relax safety constraints for more data
-F FILTER, --filter=FILTER
Filters to apply (comma-separated)
查看内存中记录的当时正在运行的程序、运行次数、最后运行时间:
volatility -f mem.data --profile=XXX userassist
查看截图:
volatility -f mem.data --profile=XXX screenshot -D ./
查看剪贴板:
volatility -f mem.data --profile=XXX clipboard
volatility -f mem.data --profile=XXX clipboard -v
查看Edit编辑控件信息:
volatility -f mem.data --profile=XXX editbox
查看当前notepad文本:
volatility -f mem.data --profile=XXX notepad
查看账户与密码:
volatility --plugins=plugins/ -f mem.data --profile=XXX mimikatz
(或PasswareKitForensic)
查看系统计算机名:
volatility -f mem.data --profile=XXX printkey -K "ControlSet001\Control\ComputerName\ComputerName"
(或PasswareKitForensic)
查看系统用户名:
volatility -f mem.data --profile=XXX printkey -K "SAM\Domains\Account\Users\Names"
查看最后登录系统的账户:
volatility -f mem.data --profile=xxx printkey -K "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
查看网络连接:
volatility -f mem.data --profile=XXX netscan
查看缓存在内存中的注册表:
volatility -f mem.data --profile=XXX hivelist
提取注册表:
volatility -f mem.data --profile=XXX dumpregistry
(dumpregistry插件)
提取注册表system和SAM虚拟地址的hash内容:
volatility -f mem.data --profile=XXX hashdump
volatility -f mem.data --profile=XXX hashdump -y 0xfffff8a000024010 -s 0xfffff8a00167a010 -D ./
python3 vol.py -f mem.data windows.hashdump
提取内存中主文件表(MFT)记录信息(文件属性):
volatility -f mem.data --profile=XXX mftparser > mft.txt
提取IE历史记录:
volatility -f mem.data --profile=XXX iehistory
显示环境变量:
volatility -f mem.data --profile=XXX envars
python3 vol.py -f mem.data windows.envars
提取Chrome历史记录(插件):
Chrome Cookies 的本质是 SQLite。
Chrome 80 以后更改了 Cookies 的加密方法。
cookies 表 encrypted_value 字段不为 V10 / V11 开头,是 Chrome 79 及以前版本的 Cookies。
volatility --plugins=plugins/ -f mem.data chromehistory
volatility --plugins=plugins/ -f mem.data chromevisits -Q
(visits – QUICK)
volatility --plugins=plugins/ -f mem.data chromevisits
(visits – FULL)
volatility --plugins=plugins/ -f mem.data chromesearchterms
volatility --plugins=plugins/ -f mem.data chromedownloads
(Standard Text Output)
volatility --plugins=plugins/ -f mem.data chromedownloads --output=csv
(CSV Output)
volatility --plugins=plugins/ -f mem.data chromedownloads --output=body
(Bodyfile Output)
volatility --plugins=plugins/ -f mem.data chromedownloadchains
volatility --plugins=plugins/ -f mem.data chromecookies | more
(Cookies – Basic example)
volatility --plugins=plugins/ -f mem.data chromecookies
(Cookies – No Decryption)
volatility --plugins=plugins/ -f mem.data chromecookies -K "rq2uadV+VvAD+IBiBeJ75a=="
(Cookies – Decrypted)
提取登录密码(LassPass插件):
volatility --plugins=plugins/ -f mem.data --profile=XXX lasspass
USB设备相关(usbstor插件):
volatility --plugins=plugins/ -f mem.data --profile=XXX usbstor
特殊进程
便签:StikyNot.exe
(.snt
文件,对应路径:C:\Users\XXX\AppData\Roaming\Microsoft\Sticky Notes\
)
联系人:wab.exe
(.contact
文件)
插件收集
https://github.com/superponible/volatility-plugins(chromehistory)
https://github.com/kevthehermit/volatility_plugins(usbstor)
参考
https://wiki.wgpsec.org/knowledge/ctf/Volatility.html
Linux镜像制作
Linux内存镜像需要制作相应的profile来进⾏分析。
先查看版本:strings mem | grep 'Linux version'
去 Deep Security 12.0 Supported Linux Kernels 上搜索版本号,安装好对应的内核之后就可以开始做profile:
1 | sudo apt install build-essential dwarfdump |
以debian为例,debian新版本的systemmap可以在这里找到。做完profile就可以开始取证。
查看命令行:
volatility -f mem --profile=Linuxdebian51021x64 linux_bash
恢复⽂件系统:
volatility -f mem --profile=Linuxdebian51021x64 linux_recover_filesystem --dump-dir=../files/
恢复完毕后,就可以看到相关文件。
参考:
0xGame 2023 Week4 - oh-my-linux
磁盘取证
vmdk
AccessData FTK Imager 挂载
Bitlocker
磁盘+内存
Elcomsoft Forensic Disk Decryptor
volume选择挂载过的物理磁盘,memory dump选择内存文件,一直往后解密。
日志
到$Extend---$UsnJrnl---$J
,使用NTFS Log Tracker或解析UsnJrnl的工具,加载 $J
文件,然后生成db文件,导出CSV。
社工(信息收集)
用户名
https://github.com/sherlock-project/sherlock
Sherlock Project提供了一个非常强大的命令行工具Sherlock来查找社交网络(社交网络列表及规则可自定义扩展延伸)中的用户名,以方便您进行信息收集相关的安全保障工作。
命令:python3 sherlock.py user1 user2 user3
WiFi
参考:How to decrypt stored Windows passwords using mimikatz and DAPA
工具:mimikatz
保存/使用主密钥(master keys):
dpapi::cache /save /file:cache.bin
提取WiFi密码:
dpapi::wifi /in:"{fullpath}\file.xml"
Cookies
工具:mimikatz
保存/使用主密钥(master keys):
Windows 下:文件夹选项 -> 查看 -> 取消勾选 “隐藏受保护的操作系统文件” 才能看到 SID 文件夹下的 protect 文件
dpapi::masterkey /in:S-1-5-21-262715442-3761430816-2198621988-1001\57935170- beab-4565-ba79-2b09570b95a6 /sid:S-1-5-21-262715442-3761430816-2198621988-1001 /password:<登录密码>
解密Cookies:
dpapi::chrome /in:"Cookies"
AirDrop
AirDrop有一个安全漏洞将发送者的Apple ID和电话号码的哈希值泄露给接收者设备。在AirDrop连接或文件传输之前,发送设备的Apple ID和电话号码的SHA-256哈希值会广播给所有邻近的设备。所以在传输过程中可以捕获该苹果ID和电话号码的部分SHA-256哈希值,爆破出完整的信息以此来识别发送设备。
关键文件:sysdiagnose/system_logs.archive
AirDrop AWDL数据存储在日志内的sharingd进程下,因此可以添加过滤条件只显示sharingd进程和Hashes的数据。
投递设备的部分Hash数据(前五位…后五位),可以写脚本爆破国内运营商所有手机号的号段,需要注意的是手机号前面要加上中国的手机号前缀86。
1 | import hashlib |