volatility内存取证


[TOC]

简介

Volatility是一款非常强大的内存取证工具,它是由来自全世界的数百位知名安全专家合作开发的一套工具, 可以用于windows,linux,mac osx,android等系统内存取证。Volatility是一款开源内存取证框架,能够对导出的内存镜像进行分析,通过获取内核数据结构,使用插件获取内存的详细情况以及系统的运行状态。

使用

命令格式

vol.py -f [image] --profile=[profile] [plugin]
image: 内存镜像文件名
profile: 操作系统
plugin: 插件参数

所以在分析之前我们需要确定镜像的操作系统,命令如下:

vol.py -f [image] imageinfo

常见命令插件

注册表相关

printkey

:显示指定注册表中包含的子项、值、数据和数据类型,它默认情况下会打印指定注册表项的信息

  • 查看内存镜像中的用户(通过注册表项中的SAM键查看该计算机创建的用户信息):printkey -K "SAM\Domains\Account\Users\Names"

hashdump

:提取和解密存储在注册表中的缓存域凭证(cached domain credentials),(即查看用户名密码信息,密码信息是hash值,需要john爆破)

lsadump

:从注册表中转储LSA secrets,它会显示诸如默认密码(针对启用了自动登录的系统),RDP公钥和DPAPI使用的凭证等信息

hivescan

:查找内存中的CMHIVE(registry hives,注册表配置单元),单独只用这一个插件用处不大,一般用比它更进一步的插件,比如hivelist

hivelist

:在内存中查找注册表配置单元的虚拟地址以及磁盘上相应配置单元的完整路径

hivedump

:递归列出配置单元中所有子项

userassist

:获取UserAssist键。Windows在系统注册表数据库中维护UserAssit键来跟踪执行的程序,这些键中存储了执行次数和上次执行的时间

shellbags

:解析并打印从注册表中获取的Shellbag信息。其中shellbag是一组注册表项,被windows用来维护使用资源管理器时文件夹的大小、视图、图表和位置;即使在删除目录以后,Shellbags仍会保留目录的信息,可以用来枚举过去装入的卷,删除的文件和用户操作,重建用户活动

shimcache

:该插件分析应用程序兼容性缓冲区缓存注册表项(Application Compatibility Shim Cache)。Shim是用APIHook来实现Windows的各项兼容性的

getservicesids

:计算出服务的SID(Security Identifier)并以Python格式输出以供将来使用

dumpregistry

:将注册表配置单元转储到磁盘

进程与DLLs相关

pslist

:列举出系统进程,该插件通过遍历PsActiveProcessHead指向的双向链表,来列举出系统进程,但它不能检测到隐藏或者解链的进程,psscan可以

psscan

:使用池标签扫描(_POOL_HEADER)来枚举进程,可以找到先前已终止(不活动)的进程以及被rootkit隐藏或解链的进程

pstree

:以树的形式查看进程列表,和pslist一样,也无法检测隐藏或解链的进程

psdispscan

:和psscan相似,只不过它是通过扫描DISPATCHER_HEADER,来枚举进程

dlllist

:显示已加载的dll

dlldump

:从进程的内存空间提取DLL并转储到磁盘分析

handles

:显示进程中打开的句柄

getsids

:查看与进程关联的SID(Security Identifiers,安全标识符)

cmdscan

:该插件搜索win7以前的操作系统版本上的conhost.exe来查找攻击者通过控制台输入的命令

consoles

:该插件和cmdscan类似,区别在于cmdscan是通过扫描COMMAND_HISTORY,而且只能打印攻击者输入的命令,而consoles是通过扫描CONSOLE_INFORMARION,而且不仅可以打印输入的命令,还能收集整个屏幕缓冲区,比如不止能看到命令,还可以看到攻击者看到了什么,比如dir命令列出的所有文件和目录等等操作

privs

:显示哪些进程权限默认存在、启用或默认启用

envars

:显示进程的环境变量

verinfo

:显示PE文件中嵌入的版本信息

enumfunc

:枚举进程,dll和内核驱动程序它们的导入导出函数

进程内存相关

memmap

:给定进程特定的DTB,memmap可以显示出驻留在内存的page,即显示页面的虚拟地址,页面的相应物理偏移量和页面的大小

memdump

:将内存中所有的驻留页面转储到单个文件中

procdum

:转储进程的可执行文件

vadinfo

:显示关于进程的VAD(Virtual Address Descriptor,虚拟地址描述符)节点的扩展信息

vadwalk

:以表格形式检查进程的VAD节点

vadtree

:以树的形式显示VAD节点

vaddump

:提取用VAD节点描述的页面,和memdump类似,区别在于属于每个VAD节点的页面被放置到单独的文件中(根据开始和结束地址命名),而不是像memdump,dump出一个大的集成文件

evtlogs

:从内存中提取并解析二进制事件文件(event log),适用于XP和2003

iehistory

查看系统浏览器的浏览记录;恢复ie历史记录index.dat缓存的文件。可以找到基本的访问链接(通过FTP和HTTP),重定向链接和已经删除的条目。适用于任何加载和使用wininet.dll库的任何进程,不仅仅限于Internet Explore

核心内存和对象相关

modules

:查看系统上加载的内核驱动程序列表,它通过遍历PsLoadedModuleList指向的LDR_DATA_TABLE_ENTRY结构的双向链表。类似于pslist。但是它找不到隐藏/未链接的内核驱动程序,但modscan可以

modscan

:通过池标签扫描来查找LDR_DATA_TABLE_ENTRY结构,可以找到以前卸载的驱动程序和已经被rootkit隐藏/解链的驱动程序

moddump

:将内核驱动程序提取到文件

ssdt

:列出Native和GUI SSDT中的函数,它能显示SSDT中的每个条目的索引

driverscan

:使用池标签扫描在物理内存中查找DRIVER_OBJECT,这是查找内核模块的另一个方法,但不是每个内核模块都有DRIVER_OBJECT

filescan

:扫描所有的文件列表;使用池标签扫描在物理内存中查找FILE_OBJECT,这样一来即使rookit将文件隐藏在磁盘上,并且rootkit hook了某些API函数来隐藏系统上打开的句柄,该插件还是可以找到rootkit打开的文件

mutantscan

:使用池标签扫描在物理内存中查找KMUTANT对象

symlinkscan

:扫描符号链接对象(symbolic link objects)并输出其信息

thrdscan

:使用池标签扫描在物理内存中查找ETHREAD对象,可以用来找到隐藏的进程

dumpfiles

:遍历VAD并提取所有映射为DataSectionObject,ImageSectionObject或SharedCacheMap文件

  • vol.py -f [image] --profile=[profile] dumpfiles -Q 0xaddr -D ./
    -Q指定偏移量 0xaddr
    -D指定目录 ./
    

unloadedmodules

:Windows会存储最近卸载的驱动程序的信息以供调试,该模块可以看出系统上到底发生了什么

网络相关

connections

:获取内存中处于活动状态的TCP连接

connscan

:使用池标签扫描查找_TCPT_OBJECT结构,它可以找到除了活动连接以外,已经终止的链接

sockets

:检测任何协议(TCP, UDP, RAW等)的侦听套接字(listening sockets)

sockscan

:使用池标签扫描查找_ADDERSS_OBJECT结构,类似connscan,可以从先前的socket中提取残留的数据等

netscan

:在内存转储中扫描网络,它将查找TCP端点、TCP侦听器、UDP端点和UDP侦听器,可以获取系统IP


文章作者: XiaozaYa
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 XiaozaYa !
  目录