内存取证

取证工具 : Volatility
V3:https://github.com/volatilityfoundation/volatility3
V2:https://github.com/volatilityfoundation/volatility

Volatility2.6.pdf

Volatility基本使用命令

1
2
3
4
5
6
7
8
9
10
11
12
    ./vol.py ‐f [image] ­‐profile=[profile] [plugin]
-f后面需要跟绝对路径
查看扫描检查、插件、地址空间等信息
./vol.py --info
查看帮助信息
./vol.py -h/--help
查看指定插件的说明
./vol.py [plugin] –help
查找插件:
不带前缀的是windows的插件,带linux前缀的是linux的插件
vol.py --info | grep -i linux_ (列出所有linux插件)
vol.py --info | grep -i windows (windows 插件)

Linux 端:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
更多方法查看 
vol.py --info | grep -i Linux_
查看系统ARP 表:
vol.py -f file(文件) --profile= 查到的profile 文件 linux_arp
查看系统信息表:
vol.py -f /root/centos7.lime --profile=Linuxcentos7x64 linux_banner
查看系统进程信息
vol.py -f /root/centos7.lime --profile=Linuxcentos7x64 linux_psaux
查看系统隐藏进程
vol.py -f /root/centos7.lime --profile=Linuxcentos7x64 linux_pidhashtable
查看具体进程的情况
vol.py -f /root/centos7.lime --profile=Linuxcentos7x64 linux_proc_maps | grep httpd
查看网络连接
vol.py -f /root/centos7.lime --profiel=Linuxcentos7x64 linux_netstat

Windows:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
常见使用方法 
分析 镜像文件系统
vol.py imageinfo -f [file]
常见进程 windows 进程
Lsass 进程
lsass.exe是一个系统进程,用于微软Windows系统的安全机制。它用于本地安全和登陆策略。一个正常的windows xp系统在启动的时候,只会通过winlogon.exe创建一个lsass进程。
Stuxnet会将自身注入到services.exe,然后创建两个新的lsass.exe,然后释放出mrxnet.sys(驱动)和Mrxcls.sys(驱动)等恶意文件。
查看进程 插件 pstree
vol.py pstree -f stuxnet.vmen --profile=WinXPSP3x86
说明:PID:进程ID,PPID:父进程ID HndsTime:进程创建时间
筛选 程序 lsass
调用lsass.exe 是由winlogon.exe 创建的 另外两个是由 services.exe 创建的
vol.py pstree -f stuxnet.vmen --profile=WinXPSP3x86 | egrep '(service.exe|lsass.exe|winlogon.exe)'
检查 恶意链接
vol.py connections -f stuxnet.vmen --profile=WinXPSP3x86
检查端口
vol.py sockets -f stuxnet.vmen --profile=WinXPSP3x86
分析 lsass.exe 调用的dll文件
参数 dlllist -p[pid] 过滤pid
寻找隐藏的dll ldrmoudles -p[pid]
vol.py -f stuxnet.vmem --profile=WinXPSP3x86 ldrmodules -p 1928
找出注入的可执行代码或者 DLL malfind
vol.py -f stuxnet.vmem --profile=WinXPSP3x86 malfind -p 1928 #PID 号
分析api 调用
利用内存转存技术可以将内存中运算的程序导出
vol.py -procdump -p 680,868,1928 -D out/ --profile=WinXPSP3x86 -f stuxnet.vmem
进入交换模式
vol.py volshell --profile=WinXPSP3x86 -f stuxnet.vmem
检查恶意程序驱动
vol.py --profile=WinXPSP3x86 -f stuxnet.vmem modules
使用 moddump 提取驱动程序
vol.py --profile=WinXPSP3x86 -f stuxnet.vmem moddump -D out/ --base 0xb21d8000
检查驱动内核回调
callbacks
vol.py --profile=WinXPSP3x86 -f stuxnet.vmem callbacks
vol.py --profile=WinXPSP3x86 -f stuxnet.vmem callbacks | grep mrx
查看恶意注册表项
Services注册表项
ControlSet001\Services\SERVICENAME
通过关键字查找
vol.py --profile=WinXPSP3x86 -f stuxnet.vmem printkey -K 'ControlSet001\Services\MrxNet'

查看服务
vol.py --profile=WinXPSP3x86 -f stuxnet.vmem svcscan
volpy --profile=WinXPSP3x86 -f stuxnet.vmem svcscan | grep -i MRX

查看文件属于信息
volatility -f cridex.vmem imageinfo

查看ps相关的的插件
volatility --profile=WinXPSP3x86 -f cridex.vmem pslist

与pslist 相似的 pstree
还可以识别子进程 父进程
volatility pstree --profile=WinXPSP3x86 -f cridex.vmem

psscan 显示被恶意软件隐藏的进程
volatility --profile=WinXPSP3x86 -f crdiex.vmem psscan

connections 列出活跃的连接合端口 ,以及本地合远程的ip PID 端口
volatility --profile=WinXPSP3x86 -f cridex.vmem connections

connscan 列出已经被终止的连接
volatility --profile=WinXPSP3x86 -f cridex.vmem connscan

sockets 展示出额外的连接信息监听的sockets ,sockets插件支持所有的协议
volatility --profile=WinXPSP3x86 -f cridex.vmem sockets

DLL分析
列出PE文件的版本信息
volatility --profile=WinXPSP3x86 -f cridex.vmem virinfo

列出正在运行的dll
volatility -profile=WinXPSP3x86 -f cridex.vmem dlllist


注册表分析
hivescan 显示了可用的注册表配置单元的物理地址
volatility --profile=WinXPSP3x86 -f cridex.vmem hivescan

hivelist 显示虚拟地址,物理地址的细节以及更加容易识别的路径
volatility --profile=WinXPSP3x86 -f cridex.vmem hivelist

timeliner 插件可以通过提供所有时间发生时的时间线来帮助取证分析
volatility --profile=WinXPSP3x86 -f cridex.vmem timeliner

恶意软件分析
malfind 寻找可能注入到各种进程的恶意软件,
volatility --profile=WinXPSP3x86 -f cridex.vmem malfind
指定进程
volatility --profile=WinXPSP3x86 -f cridex.vmem malfind -p 111
寻找sid
volatility --profile=Win7SP1x86 -f Crang.raw getsid

MemLabs

通过MemLabs 靶场 了解 内存取证
image.png

Challenge

挑战说明
image.png
分析 基本信息
volatility.exe -f .\Challenge.raw imageinfo
image.png
列出 活动 进程
volatility.exe -f .\Challenge.raw –profile=Win7SP1x86 pslist
image.png
看看cmd输出了啥
volatility.exe -f .\Challenge.raw –profile=Win7SP1x86 cmdscan
image.png
cmd 执行了demon.py 文件 看有没有输出到控制台
volatility.exe -f .\Challenge.raw –profile=Win7SP1x86 consoles
image.png
输出了 一段 16 进制 335d366f5d6031767631707f
对16进制进行转字符串 看看
不知道这是啥 先留着
image.png
根据挑战描述 有一个变量的线索 试试查看环境变量
找到个 疑点
XOR and password
需要和密码进行异或处理 嗯 密码又是啥呢
image.png
对 刚才的 乱码进行 异或 处理试试
输出了 还是很多乱码 但是 有 一个看着像半个flag
1_4m_b3tt3r}
image.png
使用hashdump dump 出 账号密码
image.png
101da33f44e92c27835e64322d72e8b7
使用在线网站把这个碰撞出来 就得出flag 前半部分
flag{you_are_good_but1_4m_b3tt3r}

MemoryDump_Lab1

挑战说明
此挑战由三个flag 组成
image.png

imageinfo
image.png
volatility.exe -f .\MemoryDump_Lab1.raw –profile=Win7SP1x64 psscan
image.png
查看cmd 进程
cmdline cmdscan 无果 ,查看cmd输出 consoles
volatility.exe -f .\MemoryDump_Lab1.raw –profile=Win7SP1x64 consoles
image.png
发现 一串 base64 码 ZmxhZ3t0aDFzXzFzX3RoM18xc3Rfc3Q0ZzMhIX0=
解码 得到 第一个flag
image.png

返回查看进程
volatility.exe -f .\MemoryDump_Lab1.raw –profile=Win7SP1x64 pslist
有一个mspaint.exe 这是一个画图软件
image.png
提取为数据 查看
image.png
用Ubuntu 使用 gimp 打开 数据以图片查看
调节参数
得到个flag 反转之后就是flag 了
image.png

返回前看 cmdline 好像有一个RAR包 尝试提取出来 看看
volatility.exe -f .\MemoryDump_Lab1.raw –profile=Win7SP1x64 cmdlineimage.png

volatility.exe -f .\MemoryDump_Lab1.raw –profile=Win7SP1x64 filescan | Select-String rar
image.png
使用 dumpfiles 提取 rar 文件
volatility.exe -f .\MemoryDump_Lab1.raw –profile=Win7SP1x64 dumpfiles -Q 0x000000003fac3bc0 -D .\a<br />改名 mv .\file.None.0xfffffa8001034450.dat .\file.None.0xfffffa8001034450.rar
打开需要 密码
注释 密码 是 Alissa’s 用户的NTLM hash 值
image.png
使用hashdump dump出来
volatility.exe -f .\MemoryDump_Lab1.raw –profile=Win7SP1x64 hashdump
image.png
转换成大写
a.upper() 大写
a.lower() 小写
image.png
得出 第三个flag
image.png

MemoryDump_Lab2

通过说明 了解到 三个 flag
可能存在于 环境 – 浏览器 – 密码管理器 ??
image.png
imageinfo
image.png
查看环境变量 发现存在很多base64 加密 的 文件夹 名
volatility.exe -f .\MemoryDump_Lab2.raw –profile=Win7SP1x64 envars
image.png
解码 ZmxhZ3t3M2xjMG0zX1QwXyRUNGczXyFfT2ZfTDRCXzJ9
获得得一个flag
image.png

使用filescan 查看 存在哪些文件 一一 提取出来 看看
image.png
只 dumpfiles 两张图片
volatility.exe -f .\MemoryDump_Lab2.raw –profile=Win7SP1x64 dumpfiles -Q 0x000000003fce1c70 -D .\a<br />这张信息里面有个 pass sword is xxx 有点信息
image.png查找压缩文件 无果
看看cmd 输出了什么 打印命令行参数
volatility.exe -f .\MemoryDump_Lab2.raw –profile=Win7SP1x64 cmdline
.kdbx 文件 可能存在flag 这个kdbx 文件需要密码 打开 刚刚已经获取到一个密码了 尝试提取
image.png

image.png
提取出
image.png
使用keepass password 软件打开
得2个flag
image.png

题目说还有一个和 浏览器 相关
volatility — plugins=plugins/ -f MemoryDump_Lab2.raw iehistory 无果
volatility — plugins=plugins/ -f MemoryDump_Lab2.raw chromehistory

下载 链接
https://mega.nz/folder/TrgSQQTS#H0ZrUzF0B-ZKNM3y9E76lg
image.png
下载文件
image.png
打开之后 要密码
image.png
注释提示是 第一关的 flag小写
https://www.cmd5.com/hash.aspx?s=123456
加密 为 SHA1
image.png
打开 获得第三个flag
image.png

MemoryDump_Lab3

关键点 脚本 一个flag 两部分 steghide 工具
image.png

imageinfo
image.png
查看cmd输出 命令行参数
volatility.exe -f .\MemoryDump_Lab3.raw –profile=Win7SP1x86 cmdline
发现两个文件
image.png
使用filescan dumpfiles
得到两个文件
image.png一个base64 一个py 加密 算法文件
py文件的大概意思就是对 vip.txt 文件进行 解码
再对 解码后的 字符串 进行三次XOR 异或
得出前半段 flag inctf{0n3_h4lf
image.png
根据提示 我们安装了一个工具 steghide
是一个隐写工具 ,那就需要寻找被隐写的文件
image.png
filescan 寻找 图片
volatility.exe -f .\MemoryDump_Lab3.raw –profile=Win7SP1x86 filescan | Select-String jpeg
png ,jpg 文件太大 不太像 只有jpeg 文件 提取
image.png
steghide extract -sf file.jpeg
使用工具提取 密码是 前半部分 flag
image.png

MemoryDump_Lab4

数据被删 ,内存转储 。。。
image.png

volatility.exe -f .\MemoryDump_Lab4.raw –profile=Win7SP1x64 psscan
查看进程 有浏览器 查看浏览器 记录
image.png

volatility.exe -f MemoryDump_Lab4.raw –profile=Win7SP1x64 iehistory
之后查看到 ecrets.txt、flag.txt.txt、Important.txt.txt等 文件
一 一 提取出来

image.png

只提取出了Important.txt SCHEDLGU.txt 文件
image.png
没啥信息 根据挑战信息 可能要查看MFT 表
image.png

mftparser - 扫描并解析潜在的 MFT 条目
\volatility.exe -f MemoryDump_Lab4.raw –profile=Win2008R2SP1x64 mftparser > mft.txt
在 mft 条目里面 寻找刚才的那 几个 文件
在 Important.txt 下 找到flag
image.png
FLAG
inctf{1_is_n0t_EQu4l_7o_2_bUt_th1s_d0s3nt_m4ke_s3ns3}

MemoryDump_Lab5

三个flag 只有获取到第一个flag 才能获取到第二个flag
内存转储 文件很怪
image.png

imageinfo
image.png
查看进程
volatility.exe -f .\MemoryDump_Lab5.raw –profile=Win7SP1x64 pstree
发现两个大写的 NOTEPAD.exe 记事本程序 提取看看
image.png
volatility.exe -f .\MemoryDump_Lab5.raw –profile=Win7SP1x64 procdump -p 2724 -D .\a<br />image.png
使用IDA 进行查看
进行反编译 找到一堆 eax 寄存器 寄存器里面存了单个的字符 flag
按R 对 进制进行 快速转换
image.png
bi0s{M3m_l4b5_OVeR_!}
volatility.exe -f .\MemoryDump_Lab5.raw –profile=Win7SP1x64 iehistory
找到一串字符串 base64
ZmxhZ3shIV93M0xMX2QwbjNfU3Q0ZzMtMV8wZl9MNEJfNV9EMG4zXyEhfQ
image.png
解码
image.png
flag{!!w3LL_d0n3_St4g3-1_0f_L4B_5_D0n3!!}
前面提到很奇怪的文件
filescan 查看一下
image.png
提取一下 图片 和 rar 压缩包
volatility.exe -f .\MemoryDump_Lab5.raw –profile=Win7SP1x64 dumpfiles -Q 0x000000003eed56f0 -D .\a<br />image.png
image.png

MemoryDump_Lab6

image.png
imageinfo
image.png

volatility.exe -f .\MemoryDump_Lab6.raw –profile=Win7SP1x64 cmdline
看到一个flag.rar 文件
image.png
提取之后要密码
image.png
找密码可以使用 搜索关键字 查找
.\volatility.exe -f .\MemoryDump_Lab6.raw –profile=Win7SP1x64 envars | Select-String password
easypeasyvirus
在环境变量中找到 密码
image.png
得到后一半 flag
image.png

volatility –plugins=plugins/ -f MemoryDump_Lab6.raw –profile Win7SP1x64 chromehistory > chromehistory.txt
找一下 chrome 的 浏览器 记录
找到个pastebin链接
image.png
里面有一段链接 打开是篇文章
https://docs.google.com/document/d/1lptcksPt1l_w7Y29V4o6vkEnHToAPqiCkgNNZfS9rCk/edit
浏览文章的时候 发现又一段 链接
https://mega.nz/#!SrxQxYTQ
image.png
结果 要密码 。。 感觉有点套娃了
image.png
这里 看了wp之后 发现 找这个密钥 必须 输入 几个好的参数 不然
会出现一堆key 。。。
strings MemoryDump_Lab6.raw | grep “Mega Drive Key”
在内存中寻找 字符串
在这里看到Key值 zyWxCjCYYSEMA-hZe552qWVXiPwa5TecODbjnsscMIU
下载之后是图片
image.png
打不开 可能存在文件错误 需要恢复
image.png

png文件头查看 百度 png文件头
image.png
进行对比
image.png
发现 49 被改成了69 改回来 成功
image.png
内存取证 告一段落 ,接这就是流量分析 ????