volatility的实战操作

上一篇 / 下一篇  2019-01-31 15:21:44 / 个人分类:htool

1.volatility -f memory imageinfo
获取内存信息:
root@kali:~/tmp/mem# volatility -f memory imageinfo
Volatility Foundation Volatility Framework 2.6
INFO    : volatility.debug    : Determining profile based on KDBG search...
          Suggested Profile(s) : WinXPSP2x86, WinXPSP3x86 (Instantiated with WinXPSP2x86)
                     AS Layer1 : IA32PagedMemoryPae (Kernel AS)
                     AS Layer2 : FileAddressSpace (/root/tmp/mem/memory)
                      PAE type : PAE
                           DTB : 0xad6000L
                          KDBG : 0x80546ae0L
          Number of Processors : 1
     Image Type (Service Pack) : 3
                KPCR for CPU 0 : 0xffdff000L
             KUSER_SHARED_DATA : 0xffdf0000L
           Image date and time : 2019-01-16 03:19:05 UTC+0000
     Image local date and time : 2019-01-16 11:19:05 +0800
使用这些信息,渗透测试人员可以用额外的模块识别出SAM和来自注册表的系统hives文件


2.volatility hivelist -f memory --profile=WinXPSP2x86
Volatility的hivelist模块可以用于识别内存中的每个注册表位置
hivelist模块显示SAM和System Hives地址
在32位系统中,Volatility有一个hashdump模块,当给出SAM和System hives地址时,能够自动抽取密码hash
root@kali:~/tmp/mem# volatility hivelist -f memory --profile=WinXPSP2x86
Volatility Foundation Volatility Framework 2.6
Virtual    Physical   Name
---------- ---------- ----
0xe1b973e0 0x052c13e0 \Device\HarddiskVolume1\Documents and Settings\LocalService\Local Settings\Application Data\Microsoft\Windows\UsrClass.dat
0xe1b89b60 0x0521bb60 \Device\HarddiskVolume1\Documents and Settings\LocalService\NTUSER.DAT
0xe190a008 0x023a1008 \Device\HarddiskVolume1\Documents and Settings\NetworkService\Local Settings\Application Data\Microsoft\Windows\UsrClass.dat
0xe1901788 0x02343788 \Device\HarddiskVolume1\Documents and Settings\NetworkService\NTUSER.DAT
0xe142cad8 0x03f4cad8 \Device\HarddiskVolume1\WINDOWS\system32\config\software
0xe1485ac8 0x05368ac8 \Device\HarddiskVolume1\WINDOWS\system32\config\default
0xe1420b60 0x03bafb60 \Device\HarddiskVolume1\WINDOWS\system32\config\SECURITY
0xe1451b60 0x0450fb60 \Device\HarddiskVolume1\WINDOWS\system32\config\SAM
0xe12a6b60 0x01b25b60 [no name]
0xe101b008 0x01892008 \Device\HarddiskVolume1\WINDOWS\system32\config\system
0xe1008900 0x01900900 [no name]
0xe1bf8b60 0x00bdab60 \Device\HarddiskVolume1\Documents and Settings\Administrator\Local Settings\Application Data\Microsoft\Windows\UsrClass.dat
0xe185bb60 0x079b5b60 \Device\HarddiskVolume1\Documents and Settings\Administrator\NTUSER.DAT

3.volatility -f memory --profile=WinXPSP2x86 hashdump
c22b315c040ae6e0efee3518d830362b这一段便是admin的密码hash,到somd5解一下   https://www.somd5.com/
root@kali:~/tmp/mem# volatility -f memory --profile=WinXPSP2x86 hashdump
Volatility Foundation Volatility Framework 2.6
Administrator:500:0182bd0bd4444bf867cd839bf040d93b:c22b315c040ae6e0efee3518d830362b:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
HelpAssistant:1000:132893a93031a4d2c70b0ba3fd87654a:fe572c566816ef495f84fdca382fd8bb:::

说明:hash就是md5的解密(ntlm)



======================================================================================================================

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

核心内存和对象 kernel memory and objects
插件:

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:将注册表配置单元转储到磁盘

Crash Dumps,Hibernation,and Conversion
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

Miscellaneous,其他
插件:

strings:对于给定的镜像和文件,其格式为<decimal_offset>:<string>或<decimal_offset> <string>,输出可找到该字符串的相应进程和虚拟地址。

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

Timers (Timer)

Symbolic links (Symlink)

Windows GUI
分析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:枚举通过SetWinEventHookAPI安装的event hook。它会显示hook应用的最小和最大事件ID,目标线程,拥有进程和hook程序的偏移量

gahti:使用算法方法来查找win32kgahti符号,该符号是一个tagHANDLETYPEINFO结构数组,对于系统的每种类型的USER对象都有一个。该插件显示与分配相关联的4字节标签,其中对象是从(桌面堆,共享堆,会话池)分配的,以及对象是被谁拥有的(线程拥有,进程拥有或匿名)

messagehooks:打印通过SetWindowsHookExAPI安装的本地和全局消息hook

screenshot:从系统上的每个桌面获取屏幕截图

userhandles:查找会话特定的tagSHAREDINFO结构,并遍历aheList成员(_HANDLEENTRY数组)结构。它判断每个句柄条目是否拥有线程或进程,显示对象类型及其在会话空间中的偏移量

gditimers:利用USER句柄表API,而且对每个TYPE_TIMER,它将对象解释为tagTIMER并打印详细信息。恶意软件通常使用计时器来达到自己的目的,例如确保需要隐藏的进程隐藏。

windows:枚举系统所有桌面中的所有窗口(不论可见或不可见),它以桌面的spwnd值(前景窗口)开始以Z-顺序(即前后焦点)遍历窗口

wintree:以与windows插件相同的方式枚举窗口,但它打印的详细信息较少,因此可以用树形式轻松表示窗口父/子关系。可以看到哪些窗口包含在其他窗口中,而不是“平面”视图

Windows Malware
专门用于捕获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的地址,来快速定位恶意代码范围




TAG:

 

评分:0

我来说两句

Open Toolbar