vol2取证-入门向

WriteUp 3周前 admin
74 0 0

在现在的CTF比赛中取证题目越来越常见,作为一个可得较大分数的题型,需要更加深入的学习。

记一篇入门向的vol2取证,结合基础知识以及例题呈现。

简介

Volatility是一款开源的基于 Python 开发的内存分析框架,它自带的分析插件支持分析内存镜像中所保留的历史网络连接信息、历史进程、历史命令记录等等。它可以分析 .raw、.vmem、.img 后缀的文件。

认识文件

常见文件类型:

  • • .vmem文件虚拟机内存页面文件,备份了客户机里运行的内存信息。这个文件只有在虚拟机运行时或崩溃后存在

  • • .vmdk文件虚拟机的磁盘文件,它储存了虚拟机硬盘驱动器里的信息

  • • .raw文件本机的内存镜像文件

VMware 虚拟机在 EXSi 宿主机上的文件类型

后缀 描述
.vmx 虚拟机的配置文件
.vmdk 虚拟机磁盘文件的元数据文件
flat.vmdk 虚拟机的二进制磁盘文件,是虚拟机真正磁盘数据文件
ctk.vmdk 虚拟机磁盘文件的数据块变化追踪文件,保存自从上次快照以来的所发生变化的数据块偏移量信息
.vmem 虚拟机的内存页面文件,存放虚拟机运行时的内存数据,在虚拟机运行或者崩溃时被创建
.vmss 虚拟机挂起时的状态信息文件
.vmsd 虚拟机快照的元数据文件,保存了如快照名、UID(Unique Identifier)、磁盘文件名等信息。在创建快照前,其 size 为 0byte
.vmsn 虚拟机快照的状态信息文件,用于保存创建快照时虚拟机的状态。这个文件的大小取决于创建快照时是否选择保存内存的状态。如果保存的话,那么这个文件会比分配给这个虚拟机的内存大小还要大几兆
.vmtx 虚拟机模板文件
.nvram 虚拟机 bios 文件
.vswp 虚拟机交换文件
.log 虚拟机日志文件

volatility2基本命令

(加粗为常用命令)

插件名称 功能
amcache 查看AmCache应用程序痕迹信息
apihooks 检测内核及进程的内存空间中的API hook
atoms 列出会话及窗口站atom表
atomscan Atom表的池扫描(Pool scanner)
auditpol 列出注册表HKLMSECURITYPolicyPolAdtEv的审计策略信息
bigpools 使用BigPagePoolScanner转储大分页池(big page pools)
bioskbd 从实时模式内存中读取键盘缓冲数据(早期电脑可以读取出BIOS开机密码)
cachedump 获取内存中缓存的域帐号的密码哈希
callbacks 打印全系统通知例程
clipboard 提取Windows剪贴板中的内容
cmdline 显示进程命令行参数
cmdscan 提取执行的命令行历史记录(扫描_COMMAND_HISTORY信息)
connections 打印系统打开的网络连接(仅支持Windows XP 和2003)
connscan 打印TCP连接信息
consoles 提取执行的命令行历史记录(扫描_CONSOLE_INFORMATION信息)
crashinfo 提取崩溃转储信息
deskscan tagDESKTOP池扫描(Poolscaner)
devicetree 显示设备树信息
dlldump 从进程地址空间转储动态链接库
dlllist 打印每个进程加载的动态链接库列表
driverirp IRP hook驱动检测
drivermodule 关联驱动对象至内核模块
driverscan 驱动对象池扫描
dumpcerts 提取RAS私钥及SSL公钥
dumpfiles 提取内存中映射或缓存的文件
dumpregistry 转储内存中注册表信息至磁盘
editbox 查看Edit编辑控件信息 (Listbox正在实验中)
envars 显示进程的环境变量
eventhooks 打印Windows事件hook详细信息
evtlogs 提取Windows事件日志(仅支持XP/2003)
filescan 提取文件对象(file objects)池信息
gahti 转储用户句柄(handle)类型信息
gditimers 打印已安装的GDI计时器(timers)及回调(callbacks)
gdt 显示全局描述符表(Global Deor Table)
getservicesids 获取注册表中的服务名称并返回SID信息
getsids 打印每个进程的SID信息
handles 打印每个进程打开的句柄的列表
hashdump 转储内存中的Windows帐户密码哈希(LM/NTLM)
hibinfo 转储休眠文件信息
hivedump 打印注册表配置单元信息
hivelist 打印注册表配置单元列表
hivescan 注册表配置单元池扫描
hpakextract 从HPAK文件(Fast Dump格式)提取物理内存数据
hpakinfo 查看HPAK文件属性及相关信息
idt 显示中断描述符表(Interrupt Deor Table)
iehistory 重建IE缓存及访问历史记录
imagecopy 将物理地址空间导出原生DD镜像文件
imageinfo 查看/识别镜像信息
impscan 扫描对导入函数的调用
joblinks 打印进程任务链接信息
kdbgscan 搜索和转储潜在KDBG值
kpcrscan 搜索和转储潜在KPCR值
ldrmodules 检测未链接的动态链接DLL
lsadump 从注册表中提取LSA密钥信息(已解密)
machoinfo 转储Mach-O 文件格式信息
malfind 查找隐藏的和插入的代码
mbrparser 扫描并解析潜在的主引导记录(MBR)
memdump 转储进程的可寻址内存
memmap 打印内存映射
messagehooks 桌面和窗口消息钩子的线程列表
mftparser 扫描并解析潜在的MFT条目
moddump 转储内核驱动程序到可执行文件的示例
modscan 内核模块池扫描
modules 打印加载模块的列表
multiscan 批量扫描各种对象
mutantscan 对互斥对象池扫描
netscan 查看ip地址,连接过的网络
notepad 查看记事本当前显示的文本
objtypescan 扫描窗口对象类型对象
patcher 基于页面扫描的补丁程序内存
poolpeek 可配置的池扫描器插件
printkey 打印注册表项及其子项和值
privs 显示进程权限
procdump 进程转储到一个可执行文件示例
pslist 按照EPROCESS列表打印所有正在运行的进程
psscan 进程对象池扫描
pstree 以树型方式打印进程列表
psxview 查找带有隐藏进程的所有进程列表
qemuinfo 转储Qemu 信息
raw2dmp 将物理内存原生数据转换为windbg崩溃转储格式
screenshot 基于GDI Windows的虚拟屏幕截图保存
servicediff Windows服务列表(ala Plugx)
sessions _MM_SESSION_SPACE的详细信息列表(用户登录会话)
shellbags 打印Shellbags信息
shimcache 解析应用程序兼容性Shim缓存注册表项
shutdowntime 从内存中的注册表信息获取机器关机时间
sockets 打印已打开套接字列表
sockscan TCP套接字对象池扫描
ssdt 显示SSDT条目
strings 物理到虚拟地址的偏移匹配(需要一些时间,带详细信息)
svcscan Windows服务列表扫描
symlinkscan 符号链接对象池扫描
thrdscan 线程对象池扫描
threads 调查_ETHREAD 和_KTHREADs
timeliner 创建内存中的各种痕迹信息的时间线
timers 打印内核计时器及关联模块的DPC
truecryptmaster 恢复TrueCrypt 7.1a主密钥
truecryptpassphrase 查找并提取TrueCrypt密码
truecryptsummary TrueCrypt摘要信息
unloadedmodules 打印卸载的模块信息列表
userassist 打印注册表中UserAssist相关信息
userhandles 转储用户句柄表
vaddump 转储VAD数据为文件
vadinfo 转储VAD信息
vadtree 以树形方式显示VAD树信息
vadwalk 显示遍历VAD树
vboxinfo 转储Virtualbox信息(虚拟机)
verinfo 打印PE镜像中的版本信息
vmwareinfo 转储VMware VMSS/VMSN 信息
volshell 内存镜像中的shell
windows 打印桌面窗口(详细信息)
wintree Z顺序打印桌面窗口树
wndscan 池扫描窗口站
yarascan 以Yara签名扫描进程或内核内存

先以例题的方式熟悉一下流程

例题解析

[鹏城杯 2022]简单取证

查看镜像信息

vol2取证-入门向

得到版本为WinXPSP2x86,再看看进程

vol2取证-入门向

看到了secret.jpg,提取出来

vol2取证-入门向

打开发现是base64的逆序zip

vol2取证-入门向

脚本还原,发现还原的zip有密码

f1=open('secret.jpg','rb')
f2=open('1.zip','wb')
f2.write(f1.read()[::-1])
f1.close()
f2.close()

获取cmd输入的内容,找到密码

vol2取证-入门向

打开发现应该是个坐标绘图,使用工具gnuplot

vol2取证-入门向

扫码得到flag:flag{a6b93e36-f097-11ec-a9b2-5254002d2b31}

[陇剑杯 2021]内存分析

问(1)网管小王制作了一个虚拟机文件,让您来分析后作答:虚拟机的密码是________。

volatility 2.6 打开查看信息

vol2取证-入门向

得到版本为Win7SP1x64,需要得到密码,使用hashdump

vol2取证-入门向

发现抓取出来的hash无法直接解密,尝试直接抓取明文,使用lsadump

vol2取证-入门向

得到flag:flag{W3lCoM3_T0_THIiS_34SY_FOR3NSiCX}

当然这里也可以用插件mimikatz,这里也介绍一下安装方式

mimikatz插件安装

mimikatz插件地址

https://github.com/volatilityfoundation/community/blob/master/FrancescoPicasso/mimikatz.py

此插件需要这个construct库的支持

复制到你对应的volatility/volatility/plugins/

例如我这里是root/桌面/volatility/volatility/plugins/

使用时在 -f 前指定对应的路径即可 --plugins=

vol.py --plugins=/root/桌面/volatility/volatility/plugins/ -f /root/桌面/WIN-DOOJTVIN21M-20231005-091206.raw --profile=Win7SP1x64 mimikatz

常见问题

如果出现

*** Failed to import volatility.plugins.mimikatz (AttributeError: 'module' object has no attribute 'ULInt32')

就是construct版本的问题

sudo pip uninstall construct
sudo pip install construct==2.5.5-reupload

这时就可以正常使用了

volatility2的基础技巧总结

filescan快速筛选

 filescan | grep -E "jpg|png|bmp|gif|zip|rar|7z|pdf|txt|rtf|doc|ccx|kdbx|vera|py|dmp"

kdbx(keepass) ccx(Cncrypt) vera(VeraCrypt)

(.dmp文件是windows系统中的错误转储文件,当Windows发生错误蓝屏的时候,系统将当前内存【含虚拟内存】中的数据直接写到文件中去,方便定位故障原因。)

filescan | grep "Desktop"
filescan | grep -iE "flag|ctf"
filescan | grep -iE "flag|.zip$|.rar$|.7z$|.txt$|.png$|.jpg$|.gif$|.pdf$|.doc$|.docx$|.pcapng$|.raw$|.kdbx$"

查看hostname

这里利用了注册表内储存了相关信息

volatility -f example.raw --profile=版本号 hivelist

主机名会储存在REGISTRYMACHINESYSTEM中的ControlSet001ControlComputerNameComputerName条目中,可以直接读取

volatility -f example.raw --profile=Win7SP1x64 printkey -o 0xfffff8a000024010 -K "ControlSet001ControlComputerNameComputerName"

或者

volatility -f example.raw --profile=Win7SP1x64 printkey -o 0xfffff8a000024010 -K "ControlSet001ServicesTcpipParameters"
vol2取证-入门向

查看系统用户名

volatility -f example.raw --profile=版本号 printkey -K "SAMDomainsAccountUsersNames"

dump运用

dump可疑文件加以分析

volatility -f example.raw --profile=版本号 dumpfiles -Q 偏移量 --dump-dir=保存路径

dump可疑进程加以分析

volatility -f example.raw --profile=版本号 memdump -p PID --dump-dir=保存路径

查看网络连接

volatility -f example.raw --profile=版本号 netscan

查看截图

volatility -f example.raw --profile=版本号 screenshot --dump-dir=保存路径

查看内存中的cmd命令使用情况

volatility -f example.raw --profile=版本号 cmdscan
volatility -f example.raw --profile=版本号 cmdline

使用插件 mimikatz 抓取系统口令

volatility -f example.raw --profile=版本号 mimikatz

有时 lsadump也可以

volatility -f example.raw --profile=版本号 lsadump

获取最后登陆系统用户

volatility -f 1.raw  --profile=版本号 printkey -K "SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon"

导出日志

volatility -f 1.raw  --profile=版本号 evtlogs --dump-dir logs/

内存取证的思路总结

先使用imageinfo命令即可获取镜像信息

filescan查看是否存在可疑文件,结合dumpfile、memdump命令尝试取出进行进一步分析

分析进程,如pstree、pesscan、pslist查找可疑进程,如mspaint.exe(绘图进程)

同时关注一下命令行信息、浏览器历史记录以及用户密码,或许能得到启发

注册表内的信息利用

注册表(英语:Registry)是Microsoft Windows操作系统和其应用程序中的一个重要的层次型数据库

用于存储系统和应用程序的配置信息

Windows 注册表是 Windows 系统的一个非常丰富的信息来源。取证人员可以通过提取注册表中的数据了解到当前系统的大部分细节

主要配置单元有:

  • • SYSTEM:对应的注册表分支为HKEY_LOCAL_MACHINESYSTEM,对应的存储文件是WindowsSystem32configSYSTEM,其作用是存储计算机硬件和系统的信息。

  • • NTUSER.DAT:对应的注册表分支是HKEY_CURRENT_USER,存储在用户目录下,与其他注册表文件是分开的,主要用于存储用户的配置信息。

  • • SAM:分支是HKEY_LOCAL_MACHINESAM,存储在C:WindowsSystem32configSAM文件中,保存了用户的密码信息。

  • • SECURITY:对应的分支HKEY_LOCAL_MACHINESECURITY,存储在C:WindowsSystem32configSECURITY文件中,保存了安全性设置信息。

  • • SOFTWARE:分支是HKEY_LOCAL_MACHINESOFTWARE,文件存储在C:WindowsSystem32configSOFTWARE中,保存安装软件的信息

实操演示

如需获取的是 Tom 用户的信息,因此我们把来自 Tom 的 ntuser.dat 提取为注册表文件

利用 dumpregistry 转储内存中注册表信息至磁盘

volatility -f windows.vmem --profile=版本号 dumpregistry -o 偏移量 -D 保存路径
vol2取证-入门向

导出的 .reg 文件实际上是一种windows操作系统的注册表脚本文件

可利用注册表工具 Windows Registry Recovery 或 RegistryExplorer打开进行下一步利用

SoftwareMicrosoftWindowsCurrentVersionExplorerUserAssist\Count路径下可以找到 exe文件 的最后运行时间

Windows 注册表中关于用户的细节位于 SAM 表

可在SAMDomainsAccountUsers这个路径下得到一些细节信息,如最后一次密码输入错误的时间

近期打开文件的记录存储在 NTUSER.DAT 的 RecentDocs 键中

可在SoftwareMicrosoftWindowsCurrentVersionExplorerRecentDocs路径下得到想要查询的文件打开记录

拓展

当然在一般情况下,只使用volatility2来进行取证分析是不够的,还得结合一些别的工具,如DiskGenius,RStudio,WRR等工具。

同样的内存取证也只是取证题型里的冰山一角。注册表取证、安卓机取证、数据库取证等也是我们后续需要学习的。

在某些场景下的取材安全性是不能保障的,建议在虚拟机环境下使用,可疑exe文件记得先放云沙箱。


往期精选

DASCTF X HDCTF 2024|生而无畏战

2024-05-22

vol2取证-入门向


安恒书院首场!2024年嘉兴市职业技能竞赛—网络安全技能竞赛顺利举办

2024-05-24

vol2取证-入门向

安恒培训|六月认证培训开课了!热门课程火热报名中~

2024-05-23

vol2取证-入门向

vol2取证-入门向

原文始发于微信公众号(恒星EDU):vol2取证-入门向

版权声明:admin 发表于 2024年6月28日 上午10:01。
转载请注明:vol2取证-入门向 | CTF导航

相关文章