插件:
imageinfo:显示目标镜像的摘要信息
kdbgscan:
kernel debugger block,KDBG是由Windows内核维护的用于调试目的的结构。
它包含正在运行的进程和加载的内核模块的列表。它还包含一些版本信息,可让您确定内存转储是否来自Windows XP系统与Windows 7,安装了哪个Service Pack以及内存模型(32位与64位)
通过KDBG结构可以得到重要的KernBase内核基址、PAE开关、KiCallUserMode函数地址、KeUserCallbackDispatcher函数地址、模块链表PsLoadedModuleList、活动进程链表头PsActiveProcesshead、蓝屏回调函数、分页和非分页池使用情况、内存使用情况等许多非常重要的信息
kpcrscan:
Kernel Processor Control Region,描述当前运行CPU的详细信息
插件:
pslist:该插件通过遍历PsActiveProcessHead指向的双向链表,来列举出系统进程,但它不能检测到隐藏或者解链的进程,psscan可以
pstree:以树的形式查看进程列表,和pslist一样,也无法检测隐藏或解链的进程
psscan:使用池标签扫描(_POOL_HEADER)来枚举进程,可以找到先前已终止(不活动)的进程以及被rootkit隐藏或解链的进程
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:将内存中所有的驻留页面转储到单个文件中
procdump:转储进程的可执行文件
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
文件
unloadedmodules:Windows会存储最近卸载的驱动程序的信息以供调试,该模块可以看出系统上到底发生了什么
插件:
connections:获取内存中处于活动状态的TCP连接
connscan:使用池标签扫描查找_TCPT_OBJECT
结构,它可以找到除了活动连接以外,已经终止的链接
sockets:检测任何协议(TCP, UDP, RAW等)的侦听套接字(listening sockets)
sockscan:使用池标签扫描查找_ADDERSS_OBJECT
结构,类似connscan,可以从先前的socket中提取残留的数据等
netscan:在内存转储中扫描网络,它将查找TCP端点、TCP侦听器、UDP端点和UDP侦听器
注意:shellbags也许可以作为新的检测方法
插件:
hivescan:查找内存中的CMHIVE(registry hives,注册表配置单元),单独只用这一个插件用处不大,一般用比它更进一步的插件,比如hivelist
hivelist:在内存中查找注册表配置单元的虚拟地址以及磁盘上相应配置单元的完整路径
printkey:显示指定注册表中包含的子项、值、数据和数据类型,它默认情况下会打印指定注册表项的信息
hivedump:递归列出配置单元中所有子项
hashdump:提取和解密存储在注册表中的缓存域凭证(cached domain credentials)
lsadump:从注册表中转储LSA secrets,它会显示诸如默认密码(针对启用了自动登录的系统),RDP公钥和DPAPI使用的凭证等信息
userassist:获取UserAssist键。Windows在系统注册表数据库中维护UserAssit键来跟踪执行的程序,这些键中存储了执行次数和上次执行的时间。
shellbags:解析并打印从注册表中获取的Shellbag信息。其中shellbag是一组注册表项,被windows用来维护使用资源管理器时文件夹的大小、视图、图表和位置;即使在删除目录以后,Shellbags仍会保留目录的信息,可以用来枚举过去装入的卷,删除的文件和用户操作,重建用户活动。
shimcache:该插件分析应用程序兼容性缓冲区缓存注册表项(Application Compatibility Shim Cache)。Shim是用APIHook来实现Windows的各项兼容性的。
getservicesids:计算出服务的SID(Security Identifier)并以Python格式输出以供将来使用
dumpregistry:将注册表配置单元转储到磁盘
volatility支持以不同的格式转储内存,比如休眠文件,崩溃转储,Virtualbox核心转储等
插件:
crashinfo:打印crashdump头文件中的信息
hibinfo:显示存储在休眠文件中的附加信息,包括控制寄存器的状态,例如CR0等。它还标识休眠文件的创建时间,休眠文件的状态以及正在休眠的Windows版本
imagecopy:将任何现有类型的地址空间(例如,崩溃转储,休眠文件,virtualbox核心转储,vmware快照或live firewire session)转换为原始内存映像
raw2dmp:要将原始内存转储(例如,从win32dd获取的文件或VMware .vmem文件)转换为Microsoft crash dump
vboxinfo:从虚拟机核心转储中提取详细信息
vmwareinfo:分析vmware保存状态(vmss)或vmware快照(vmsn)文件中的标题信息。元数据包含guest VM的CPU寄存器,整个VMX配置文件,内存运行信息和PNG屏幕截图
hpakinfo:显示由FDPro.exe创建的hpak格式化内存转储中的信息
hpakextract:可以使用这个插件来提取和解压一个内容被压缩的hpak文件的物理内存映像
插件:
mbrparser:扫描并分析潜在的主引导记录(Master Boot Records,MBR)
mftparser:扫描内存中潜在的主文件表(MFT)条目(使用“FILE”和“BAAD”签名),并打印出当前某些属性的信息:$ FILE_NAME
($ FN
),$ STANDARD_INFORMATION
($ SI
),$FN
和$SI
属性来自$ATTRIBUTE_LIST
,$OBJECT_ID
(仅限默认输出)和常驻$DATA
插件:
strings:对于给定的镜像和文件,其格式为
或
,输出可找到该字符串的相应进程和虚拟地址。
volshell:可以交互式浏览内存映像,它提供一个类似于WinDbg的界面进入内存转储
bioskbd:从内存的BIOS区域读取键盘输入,它可以揭示输入HP,Intel和Lenovo BIOS以及SafeBoot,TrueCrypt和BitLocker软件的密码,但并非所有内存样本都将包含必要的BIOS区域
patcher:该插件接受一个单一的-x
参数后跟一个XML文件,XML文件指定任何必需的修补程序
pagecheck:使用内核DTB(来自System/Idle进程),并确定哪些页面应该驻留内存(使用AddressSpace.get_available_pages方法)
timeliner:从以下来源的内存中的各种部分创建一个时间轴
System time (ImageDate)
Processes (Process)
Create and Exit times
LastTrimTime (XP and 2003 only)
DLLs (Process, LoadTime)
LoadTime (Windows 7 and 8 only)
PE Timestamps (TimeDateStamp)
Modules/Processes/DLLs
_IMAGE_FILE_HEADER
_IMAGE_DEBUG_DIRECTORY
Threads (Thread)
Create and Exit times
Sockets (Socket)
Create time
Event logs (XP and 2003 only) (EvtLog)
IE History (IEHistory)
Registry hives (_CMHIVE and _HBASE_BLOCK)
Registry keys
LastWriteTime of registry keys in _CMHIVE (Registry)
LastWriteTime of registry key objects referenced in the handle table (_CM_KEY_BODY)
Embedded registry (filters below)
Userassist
Shimcache
Symbolic links (Symlink)
分析gui内存的插件:
sessions:分析唯一_MM_SESSION_SPACE
对象并打印在每个登录会话、映射驱动程序,分页/非分页池等中运行的进程相关的详细信息。此插件输出的备用进程列表可以用psxview插件进行rootkit检测
wndscan:此命令扫描tagWINDOWSTATION
对象,并在window station,其atom table和available clipboard formats以及当前与剪贴板交互的进程或线程中打印详细信息,具体可看
deskscan:它是wndscan插件的子类,它可以找到每个窗口工作站,并遍历桌面列表,可以用于以下目的:
查找用于隐藏应用程序的恶意桌面
检测勒索软件创建的桌面
将线程链接到它们的桌面
分析桌面的堆内存损坏情况
配置文件dekstop堆分配以查找USER对象
atomscan:在物理内存中扫描atom table。atom table是存储字符串和相应标识符的系统定义表,应用程序可以在atom table里放置一个字符串,并接受16位的称为atom的整数,可用于访问该字符串。放置在atom table里的字符串叫做atom name
atoms:和atomscan类似,但是它允许将atom table与它们自己的window station相关联
clipboard:从用户剪贴板恢复数据。它遍历由tagWINDOWSTATION.pClipBase
指向的tagCLIP
对象数组,并采用格式(即unicode,ansi,ole,bmp)和句柄值。然后它遍历USER句柄表(userhandles插件),并过滤TYPE_CLIPDATA
对象。它将这些对象的句柄值与来自tagCLIP
的句柄进行匹配,以便格式可以与原始数据相关联。
eventhooks:枚举通过SetWinEventHook
API安装的event hook。它会显示hook应用的最小和最大事件ID,目标线程,拥有进程和hook程序的偏移量
gahti:使用算法方法来查找win32kgahti
符号,该符号是一个tagHANDLETYPEINFO
结构数组,对于系统的每种类型的USER对象都有一个。该插件显示与分配相关联的4字节标签,其中对象是从(桌面堆,共享堆,会话池)分配的,以及对象是被谁拥有的(线程拥有,进程拥有或匿名)
messagehooks:打印通过SetWindowsHookEx
API安装的本地和全局消息hook
screenshot:从系统上的每个桌面获取屏幕截图
userhandles:查找会话特定的tagSHAREDINFO
结构,并遍历aheList
成员(_HANDLEENTRY
数组)结构。它判断每个句柄条目是否拥有线程或进程,显示对象类型及其在会话空间中的偏移量
gditimers:利用USER句柄表API,而且对每个TYPE_TIMER,它将对象解释为tagTIMER
并打印详细信息。恶意软件通常使用计时器来达到自己的目的,例如确保需要隐藏的进程隐藏。
windows:枚举系统所有桌面中的所有窗口(不论可见或不可见),它以桌面的spwnd
值(前景窗口)开始以Z-顺序(即前后焦点)遍历窗口
wintree:以与windows插件相同的方式枚举窗口,但它打印的详细信息较少,因此可以用树形式轻松表示窗口父/子关系。可以看到哪些窗口包含在其他窗口中,而不是“平面”视图
专门用于捕获rootkit和恶意代码的插件:
malfind:基于VAD标签和页面权限等特征,在用户模式内存中查找隐藏或注入的代码/DLL。注意,malfind检测不到使用CreateRemoteThread->LoadLibrary注入的DLL,因为用这种方法注入的DLL不会隐藏起来,所以用dlllist插件就可以检测
yarascan:Volatility具有多个内置扫描引擎,可在物理或虚拟地址空间中简单模式匹配,如池标签,如果需要扫描更复杂的内容(如正则表达式或复合规则),则该插件可以查找用户模式或内核内存中的任何字节序列(如带有通配符的汇编指令),正则表达式,ANSI字符串或Unicode字符串
svcscan:volatility是唯一能够在不使用Windows API的情况下列出服务的内存取证框架。该插件可查看在内存镜像上注册了哪些服务
ldrmodules:隐藏DLL的一个方法是将DLL从PEB中的一个(或全部)链接列表中解除链接。但是,完成此操作后,VAD中仍有信息,该信息标识DLL的基地址及其在磁盘上的完整路径。该插件可以使用3个PEB列表交叉引用此信息(称为内存映射文件)
impscan:在不解析PE的IAT的情况下识别对API的调用,甚至可以在恶意软件彻底清除PE头依然有效,并且它可以在内核驱动程序上运行
apihook:在用户模式或内核模式下查找API hook
idt:打印系统的IDT(Interrupt Descriptor Table,中断描述符表)
gdt:打印系统的GDT(Global Descriptor Table,全局描述符表),对于检测安装后门的rootkit十分有用
threads:提供了有关线程的详细信息,包括每个线程的寄存器(如果可用)的内容,线程起始地址处的代码反汇编以及可能与取证相关的各种其他字段
callbacks:该插件可以检测到线程创建回调函数。volatility是唯一能够打印内核回调的内存取证工具。rootkit、防病毒工具、动态分析工具(比如Sysinternals的Process Monitor和Tcpview),以及Windows内核的许多组件使用回调函数来监视或响应事件
driverirp:打印驱动程序的IRP(Major Function,主功能)表,它从driverscan继承,以便它能够找到DRIVER_OBJECT
,然后循环遍历函数表,打印每个函数的说明,函数的地址以及地址的拥有模块
devicetree:Windows使用分层驱动程序体系结构或驱动程序链,来以便多个驱动程序可以检查或响应IRP。Rootkit通常会将驱动程序(或设备)插入此链中以进行恶意过滤(隐藏文件,隐藏网络连接,窃取按键或鼠标移动)。 该插件显示驱动程序对象与其设备(通过遍历_DRIVER_OBJECT.DeviceObject.NextDevice
)和任何附加设备(_DRIVER_OBJECT.DeviceObject.AttachedDevice
)的关系
psxview:通过比较PsActiveProcessHead
包含的内容和各种其他来源的进程列表来检测隐藏进程,比较的对象包括:
PsActiveProcessHead linked list
EPROCESS pool scanning
ETHREAD pool scanning (then it references the owning EPROCESS)
PspCidTable
Csrss.exe handle table
Csrss.exe internal linked list
timer:打印已安装的内核定时器(KTIMER)和任何关联的DPC(Deferred Procedure Calls,延迟过程调用)。尽管恶意软件试图通过多种不同的方式隐藏并隐藏在内核空间中,但通过查找KTIMER并查看DPC的地址,来快速定位恶意代码范围