The Art of Memory Forensics-Windows取证(Virut样本取证)
1、前言
The Art of Memory Forensics真是一本很棒的书籍,其中使用volatility对内存进行分析的描述可以辅助我们对更高级类的木马进行分析和取证,这里对书中的命令进行了笔记记录。
2、volatility-Windows命令
与分析Linux镜像相似,而Windows系统的profile都是volatility自带的,无需再制作。

- 选择元数据 imageinfo
查看正在分析的内存样本的摘要信息。显示主机所使用的操作系统版本、服务包以及硬件结构(32位或64位)、页目录表的起始地址和该获取该内存镜像的时间等信息。显示出当前所支持的元数据系统。

- 结束进程分析 psscan
使用PSSCAN命令。可以找到以前终止的进程(非活动)和被rootkit隐藏或未链接的进程。输出显示ping.exe、ipconfig.exe两个进程启动与退出时间。


- 进程列表 pslist
列出系统进程,显示偏移量、进程名称、进程ID、父进程ID、线程数、句柄的数量,以及进程启动和退出时的日期/时间。

- 进程树 pstree
查看以树形形式列出的进程,与pslist显示的技术一样,但不会显示隐藏或未链接的进程。子进程使用缩进和句点表示。

- 检测横向运动 getsids
查看与进程关联的SIDs(安全标识符),识别恶意升级特权的进程,以及哪些进程属于特定的用户。例子中以explorer.exe为示例,其中一个SID (S-1-5-21-[snip]-1115)没有显示帐户名称。
EXE是管理员的成员组。在这个特殊的场景,攻击者组合了一个毒葛(PI)远控。(RAT)使用一个Pass the Hash (PtH)攻击。


- 识别远程映射驱动器
许多攻击者都依赖于像net view和net use这样的命令来探索周围环境。通过远程驱动器功能获取对服务器的读访问权限后在内网进行横向运动。

- 识别远程映射驱动器-handles
在内存中找到远程映射驱动器的证据,可通过查找文件句柄实现。使用handles命令可查看文件、注册表键、互斥锁、命名管道、事件、窗口站、桌面、线程和所有其他类型的可保存执行对象。


- 识别远程映射驱动器
另一种检测远程映射共享的方法,可以结合使用。通过symlinkscan插件检查符号链接。

- 进程内存查看 memmap
memmap命令显示了哪些页面是内存驻留的,给定一个特定的进程DTB。可显示页面的虚拟地址、页面相应的物理偏移量以及页面的大小。这个命令生成的映射信息来自底层地址空间的get_available_address方法。

- 进程内存提取 memdump
要在一个进程中提取所有内存驻留页面,可使用memdump命令将系统进程的可寻址内存提取到单个文件之中。

- Yara规则扫描内存
Yara是Victor M. Alvarez (http://plusvic.github.io/yara)的一款匹配特征数据的工具。
在任意数据集内的模式匹配。Yarascan命令可以通过虚拟内存进行扫描,可以指定PID扫描,扫描规则除了使用字符也可以使用匹配规则文件。




- 环境变量 envars
使用envars命令可以显示进程的环境变量,将显示安装的cpu数量和硬件架构、进程的当前目录、临时目录、会话名称、计算机名称、用户名等相关信息。

- 网络套接字 netscan
扫描32位和64位Windows Vista、Windows 2008服务器和Windows 7内存转储中的网络构件,可以使用netscan命令。显示TCP端点、TCP监听器、UDP端点和UDP侦听器。区分IPv4和IPv6,打印本地和远程IP、本地和远程端口、套接字被绑定的时间或连接何时建立,以及当前状态(仅用于TCP连接)。

- 内存中的DLL列表 dlllist
使用dlllist命令可以显示进程加载的dll,通过遍历由PEB的InLoadOrderModuleList指向的_LDR_DATA_TABLE_ENTRY结构的doubly链接列表。当进程调用LoadLibrary(或诸如LdrLoadDll之类的一些衍生工具)时,DLL会添加到这个列表中,直到调用FreeLibrary,引用计数为0时才会被删除。

- 内存中的DLL导出 dlldump
要从进程的内存空间中提取DLL并将其转储到磁盘进行分析,可以使用dlldump命令。从一个特定的进程转储所有dll(使用pid= pid)

- 进程PE提取 procdump
使用procdump命令可以转储进程的可执行文件,通过--unsafe 或者 -u 标记来绕过解析PE头时使用的某些完整性检查。某些恶意软件会故意在PE报头中伪造大小字段,这样内存转储工具就会失败。

- 隐藏\注入代码检测 malfind
malfind命令基于VAD标记和页面权限等特性,帮助在用户模式内存中找到隐藏或注入的代码。


- 注册表列表 hivelist
使用hivelist扫描注册表,然后打印物理和虚拟偏移量、路径。通过这个命令查找某些恶意软件存在的注册表键。

- 注册表值打印 printkey
大部分恶意代码都会对注册表操作,可以通过printkey打印出某些注册表键值,以下命令为打印出自启动项。

- 转储密码哈希 hashdump
使用hashdump命令可以从内存样本中转储帐户密码哈希(LM/NTLM),查看密码是否已经受到篡改。

- 检测网络连接 connscan
使用connscan命令可以打印出正在建立连接的TCP和物理偏移地址


- 检测原始套接字 sockets
使用sockets可以打印出原始套接字的信息(TCP、UDP)

- 逆推netstat.exe结果 Netscan
使用netscan命令可以倒推出Windows系统中netstat.exe的结果。

- Internet History - iehistory
使用iehistory可恢复Internet Explorer缓存数据,查看受害主机访问过的历史记录。

- DNS缓存恢复 filescan\dumpfiles
当应用程序使用DnsQuery,恶意代码经常破坏hosts文件以防止访问某些安全网站或者劫持流量。可以通过filescan命令查找到的物理偏移量。再通过dumpfile命令将文件的内容提取到磁盘。

- 活动模块列表 modules
使用modules命令可以打印出系统中加载模块的列表,可借助于此命令查找某些具有特定名称的rootkit模块。

- 提取内核模块 moddump
要提取所有当前加载的模块,只需提供所需输出的路径。

- 检测可疑线程 threads
Threads命令可以识别试图隐藏在进程中的线程。通过枚举加载的模块查询双链表并记录它们的基础地址和大小。然后扫描系统线程检查线程启动地址值是否在模块的范围内。

3、示例分析-virut感染性病毒
virut是一款具有很强感染能力的一款病毒,通过感染正常进程空间,然后对注册表防火墙键值设定使受感染进程放行不拦截。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\AuthorizedApplications\List]
"C:\\Windows\\system32\\wininit.exe"="C:\\Windows\\system32\\wininit.exe:*:enabled:@shell32.dll,-1"
"C:\\Windows\\system32\\winlogon.exe"="C:\\Windows\\system32\\winlogon.exe:*:enabled:@shell32.dll,-1"
使用dumpit.exe对受害主机的内存提取,受感染进程winlogon.exe进程PID为604。

使用volatility中的memdump命令对winlogon.exe进程空间数据进行提取,保存文件为604.dmp。

在已得知C&C域名为ilo.brenz[.]pl的情况下。通过字符串搜索可在进程内存数据中搜索到C&C域名,证明正常进程空间已经受到病毒的感染。

除了使用memdump外,还可以使用yarascan命令直接对字符串进行扫描。

Shellcode提取思路
这个病毒既然是感染性病毒,那么可以对受感染的病毒进行分析,然后提取特征字符串,dump的时候通过特征字符串+偏移定位的形式来提取。
The Art of Memory Forensics-Windows取证(Virut样本取证)的更多相关文章
- Virut样本取证特征
1.网络特征 ant.trenz.pl ilo.brenz.pl 2.文件特征 通过对文件的定位,使用PEID查看文件区段,如果条件符合增加了7个随机字符区段的文件,则判定为受感染文件. 3.受感染特 ...
- windows下的volatility取证分析与讲解
volatility(win64) 1.下载 volatility 下载地址:(我下载的版本2.6,并把名字稍微改了一下) Release Downloads | Volatility Foundat ...
- 详解Windows注册表分析取证
大多数都知道windows系统中有个叫注册表的东西,但却很少有人会去深入的了解它的作用以及如何对它进行操作.然而对于计算机取证人员来说注册表无疑是块巨大的宝藏.通过注册表取证人员能分析出系统发生了什么 ...
- windows系统安全日志取证工具
0x01 关于日志 Windows安全事件日志中详细记录了是谁在什么时候通过什么手段登录到系统或者注销了登录,通过分析该日志可以详细了解服务器的安全情况以及必要时的取证工作. 0x02 查看日志 传统 ...
- Wannacry样本取证特征与清除
一.取证特征 1)网络域名特征 http://www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com 2)文件特征 母体文件 mssecsvc.exe c: ...
- [手机取证] Apple Watch取证初探
转载文章请注明出处 1. 关于Apple Watch 苹果公司在2015年3月正式发布了智能手表Apple Watch,包括Apple Watch.Apple Watch Sport以及Apple W ...
- Linux XOR.DDoS样本取证特征与清除
一.取证特征 1)获取进程ID 使用top命令,查看占用内存率最高的十位随机名称进程名(示例:进程名pygdykcrqf) 2)获取进程对应路径 Linux 在启动一个进程时,系统会在/proc下创建 ...
- 取证学习资料DVD
http://www.infiniteskills.com/training/learning-computer-forensics.html https://www.youtube.com/watc ...
- GitHub:Awesome-Hacking(黑客技能列表-恶意代码)
0 初衷 GitHub这一份黑客技能列表很不错,包含了多个方向的安全.但目前我关注只有逆向工程与恶意代码,所以其他的被暂时略过. 虽然很感谢作者的辛勤付出,但并不打算复制粘贴全套转载.逐条整理是为了从 ...
随机推荐
- 反射就是获取该类的.class文件里面的方法,属性
反射就是获取该类的.class文件里面的方法,属性
- line search中的重要定理 - 梯度与方向的点积为零
转载请注明出处:http://www.codelast.com/ 对精确的line search(线搜索),有一个重要的定理: ∇f(xk+αkdk)Tdk=0 这个定理表明,当前点在dk方向上移动到 ...
- P4417 [COCI2006-2007#2] STOL
题目描述 米尔科买了一套别墅,他想要邀请尽量多的人和他一起庆祝.他需要一张大的木质矩形桌子来让他和他的嘉宾坐下.每张桌子可容纳的人数等于它的周长(四边长度的总和).米尔科想要买一张即可在他的公寓里放下 ...
- 【刷题】BZOJ 2243 [SDOI2011]染色
Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点b路径上所有点都染成颜色c: 2.询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段), 如 ...
- 【bzoj2733】 HNOI2012—永无乡
http://www.lydsy.com/JudgeOnline/problem.php?id=2733 (题目链接) 题意 给出图上$n$个点,每个点有一个点权,每次询问一个连通块中点权第$K$小的 ...
- UVA.12169 Disgruntled Judge ( 拓展欧几里得 )
UVA.12169 Disgruntled Judge ( 拓展欧几里得 ) 题意分析 给出T个数字,x1,x3--x2T-1.并且我们知道这x1,x2,x3,x4--x2T之间满足xi = (a * ...
- 【DP】【P4539】 [SCOI2006]zh_tree
Description 张老师根据自己工作的需要,设计了一种特殊的二叉搜索树. 他把这种二叉树起名为zh_tree,对于具有n个结点的zh_tree,其中序遍历恰好为(1,2,3,-,n),其中数字1 ...
- golang interface 类型变量当作某个具体类型使用
比如,我们定义了一个 struct type person struct { Name string `json:"name"` Age int `json:"age&q ...
- python【数据类型:字符串】
print("欢迎登录".center(10,"*")) #结果输出:***欢迎登录*** isalpha()方法:如果字符串至少有一个字符并且所有字符都是字母 ...
- linux 命令操作记录
1.查找名为 migrations 的文件夹/文件,并删除 find . -name "migrations" -type d #查找当前目录下文件夹名为 migrations 的 ...