点击蓝字
关注我们
日期:2023-05-19 作者:nothing 介绍:如何根据 Linux
内核版本制作对应的profile
。
0x00 前言
之前参与的CTF
比赛中,内存取证多以Windows
为主,随着取证的发展,现在的取证题目,开始逐渐向Linux
转移,但volatility
官方给的内核profile
都比较老了,而且比较少,这里学习一下如何根据新的内核版本制作对应的profile
。
0x01 linux内存镜像制作
在学习制作profile
之前,我们先学一下如何进行linux
内存镜像制作。
1.1 前期准备
Windows
下的内存转储,我们通常可以使用DumpIt[https://www.downloadcrew.com/article/23854-dumpit]
去完成,Linux
下,我们需要准备的东西就比较多了。
1、Lmg: https://github.com/halpomeranz/lmg/
脚本主程序
Linux Memory Grabber
一个用于转储Linux
内存并创建volatility(TM)
配置文件的脚本。
2、avml:https://github.com/microsoft/avml
Linux
的便携式内存采集工具,直接下载这两个二进制程序。
3、LiME: https://github.com/504ensicsLabs/LiME
下载来的所有文件必须处于同一文件夹。
1.2 安装过程
首先修改avml
二进制文件名。
# 改名
mv
avml avml-$(uname -m)
mv
avml-convert avml-convert-$(uname -m)
# 添加执行权限
chmod
+x avml-convert-x86_64 avml-x86_64
新建一个文件夹linux_memory
,将lmg/lmg
,avml
的两个二进制程序和LiME
的源代码放进去。
进入到LiME/src
目录。
cd
LiME/src
patch
< ../../../lmg/lime-Makefile.patch
# ubuntu下自带,Centos7下patch 命令使用yum -y install patch安装即可
到这里即安装完成,可以使用二进制文件lmg
来转储Linux
系统内存,该项目地址中还可以配置volatility
进行联动。
1.3 内存镜像转储
sudo
./lmg -y
在当前目录下的capture
文件夹生成一个带有运行时间的文件夹。
其中,.lime
为后缀的文件为系统内存转储文件,可用于导入volatility
进行内存分析。
0x02 profile 制作
2.1 前期准备
首先要安装dwarfdump
(调试文件导出工具)&GCC/Make
&KernelHeaders
(待分析系统的内核头文件)
sudo apt
install
dwarfdump
build
-essential
KernelHeaders
可以根据uname -r
得到内核版本。
linux-header-
`uname -r`
2.2 制作新内核版本的profile
首先,我们针对内存镜像进行分析,一般来讲有两种方式:
1、针对已知版本内存镜像,我们用volatility
的imageinfo
插件进行识别
2、针对未知版本的内存镜像,我们采用strings
中内存镜像中搜索关键词
我们先用imageinfo
分析了镜像,很久没出结果,我们就知道是未知版本的内存镜像,我们采用strings
搜索关键词Linux version
。
strings
1
.lime | grep -i
'Linux version'
| uniq
我们可以发现,是64
位的内核版本为4.15.0-210-generic
的ubuntu18.04
版本的操作系统。
翻阅官方的profile
社区,发现ubuntu18.04
有两个profile
,一个内核版本是4.18.0-25
,另一个查看后得知是4.15.0-42
,都与目标镜像不符,所以需要重新制作。
要制作对应版本的profile
,需要两样东西:
1
、vtypes
vtypes是内核数据结构,为创建该数据结构,我们需要检查我们的源码并针对我们要分析的系统内核编译
module
.c文件,这将会为我们生成一个名为
module
.dwarf文件,该文件包含了我们所需的内核调试信息。
2
、符号表
一般我们可以在/boot目录下找到该System.
map
文件。该文件包含系统的符号信息。
如果我们恰好有对应内核版本的操作系统版本,那就不用进行下面这步,但巧合一般不会那么多,这时候我们就需要安装对应的内核,下面以ubuntu
为例。
可以选择一个对应的操作系统版本docker
或者直接装一个虚拟机,我拉了一个ubuntu18.04
的docker
,默认内核版本为5.10.124
。
然后执行下面的命令安装我们需要的内核版本。
apt
install
-y
linux-headers-4
.15
.0-210-generic
linux-image-4
.15
.0-210-generic
dwarfdump
build-essential
vim
zip
gcc
g
++
git
安装完对应版本的内核后,会在/boot
目录下出现对应的文件,System.map-4.15.0-210-generic
就是我们所需的符号表。
然后将volatility
工具下载到本地,使用volatility
带的工具编译需要的vtypes
。
git
clone
https://github.com/volatilityfoundation/volatility.git
# 随后切换目录至volatilityatility/tools/linux/下
cd
volatility/tools/linux/
make
此时make
可能会出错,因为此时make
使用的是uname -r
读取我们本身的内核版本符号表,但我们boot
下没有相关文件,所以报错了。
如果boot
下有相关文件的话,会编译成功,但是我们还是不能用,所以需要对Makefile
进行一些修改,规定内核版本。
sed -i
's/$(shell uname -r)/4.15.0-210-generic/g'
Makefile
echo
'MODULE_LICENSE("GPL");'
module
.
c
然后再次进行make
,就成功了,并且在当前文件夹下出现了我们需要的module.dwarf
文件。
然后将module.dwarf
文件和System.map-4.15.0-210-generic
符号表一起进行打包。
zip
Ubuntu1804
-
4.15
.
0
-
210
.
zip
/volatility/tools/linux/module.dwarf /boot/
System
.
map
-
4.15
.
0
-
210
-generic
将压缩包放至volatility/volatility/plugins/overlays/linux
下,然后使用命令查看是否识别到该profile
。
volatility
--
info
| grep Linux
发现已经成功识别,那么接下来就可以使用该profile
配合插件进行内存取证了。
0x03 总结
这只是volatility2
版本添加profile
的办法,目前可以针对市面上大部分常见的发行版Linux
去进行制作,针对一些特别新版本的内核还是会有一些问题,等待后续大佬们的开发和解决吧。
https://www.freebuf.com/articles/network/265797.html
https://blog.csdn.net/weixin_46081055/article/details/121897319
免责声明:本文仅供安全研究与讨论之用,严禁用于非法用途,违者后果自负。
原文始发于微信公众号(宸极实验室):『CTF』制作新内核版本的 Volatility Profile
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论