Linux 内存镜像制作

Linux 内存镜像制作

Linux 内存镜像制作

Linux下有Dumplt for Linux、不过没有release、可以自行编译,项目地址

https://github.com/MagnetForensics/dumpit-linux

有编译好的版本可以直接下载

https://github.com/deeFIR/dumpit-linux/releases/tag/v0.1.0

不过、更推荐使用微软提供的avml

项目地址: https://github.com/microsoft/avml

以root权限直接+x运行即可

wget https://github.com/microsoft/avml/releases/download/v0.14.0/avml
./avml output.lime

Windows 内存镜像制作

Windows内存镜像制作工具较多,常用的有如下几个:

- AccessData FTK Imager
- Belkasoft RAM Capture
- Magnet RAM Capture
- DumpIt
- 取证大师
- WinPmem

较为好用的是 DumpIt、WinPmem

DumpIt项目地址:https://www.magnetforensics.com/resources/magnet-dumpit-for-windows/

WinPmem项目地址:https://winpmem.velocidex.com/

以管理员权限直接运行即可,会在当前文件夹下生成dmp文件

利用volatility3进行内存分析取证

git clone https://github.com/volatilityfoundation/volatility3.git

使用volatility3开始分析即可,具体操作参考官方文档

python3 vol.py -f image.dmp -h

Linux符号表缺失问题

Windows版本支持较好,Linux则由于版本过多支持缺失。

从现有ISF库中获取

首先获取banner信息、或者kernel信息

$ python3 vol.py -f ./ubuntu20_memory.lime banners.Banners
Volatility 3 Framework 2.4.2
Progress:  100.00               PDB scanning finished
Offset  Banner

0x2b8001a0      Linux version 5.4.0-26-generic (buildd@lcy01-amd64-029) (gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2)) #30-Ubuntu SMP Mon Apr 20 16:58:30 UTC 2020 (Ubuntu 5.4.0-26.30-generic 5.4.30)
0x2c392e54      Linux version 5.4.0-26-generic (buildd@lcy01-amd64-029) (gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2)) #30-Ubuntu SMP Mon Apr 20 16:58:30 UTC 2020 (Ubuntu 5.4.0-26.30-generic 5.4.30)
0x6fafd1e0      Linux version 5.4.0-26-generic (buildd@lcy01-amd64-029) (gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2)) #30-Ubuntu SMP Mon Apr 20 16:58:30 UTC 2020 (Ubuntu 5.4.0-26.30-generic 5.4.30)
0xc4f1f220      Linux version 5.4.0-26-generic (buildd@lcy01-amd64-029) (gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2)) #30-Ubuntu SMP Mon Apr 20 16:58:30 UTC 2020 (Ubuntu 5.4.0-26.30-generic 5.4.30)
0x10e33bc88     Linux version 5.4.0-26-generic (buildd@lcy01-amd64-029) (gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2)) #30-Ubuntu SMP Mon Apr 20 16:58:30 UTC 2020 (Ubuntu 5.4.0-26.30-generic 5.4.30)

下面两个项目搜集了大量ISF数据

https://isf-server.techanarchy.net

https://github.com/Abyss-W4tcher/volatility3-symbols/tree/master

下载到对应目录

$ cd volatility3/volatility3/symbols/
$ wget [download link]
$ ls -l
total 1944
-rwxr-xr-x 1 cpuu cpuu 1979312 May 11 11:19 5.4.0-26-generic_5.4.0-26.30_amd64.json.xz

使用dwarf2json工具自制符号表

dwarf2json是一个Go(1.14+必需)程序,它处理包含符号和类型信息的文件,以生成适用于Linux和macOS分析的Volatity3中间符号文件(ISF)JSON输出。

$ git clone https://github.com/volatilityfoundation/dwarf2json.git
$ cd dwarf2json/
$ go build
$ ./dwarf2json --help
Usage: ./dwarf2json COMMAND

A tool for generating intermediate symbol file (ISF)

Commands:
  linux  generate ISF for Linux analysis
  mac    generate ISF for macOS analysis

创建ISF文件需要两个组件:

    1. Linux kernel DWARF file (vmlinux)

    1. System.Map

简单来说,需要一个vmlinux文件,如果有一个额外的system.map文件,可以获得更准确的结果。如果提供的信息之间存在冲突,则以system.map信息为准。然而,根据我的执行,即使只提供vmlinux文件,分析本身似乎也可以完成(仅使用system.map文件无法进行分析)。

那么,如何获取vmlinux文件呢?首先,如果转到/boot目录,默认情况下可以看到一个名为vmlinuz-5.4.0-26-generic的文件。然而,这是vmlinux文件的压缩形式。我们需要的是原始的vmlinux文件。人们可能会认为,简单地解压就足够了,但事实并非如此。当vmlinux被压缩到vmlinuz时,大量的内核调试信息被删除(剥离)并丢失。我们想要查找的信息包含在此类调试数据中,因此简单地解压缩它是不令人满意的。

因此,必须获取vmlinux文件的相应版本。首先,检查Linux系统的确切版本信息(如果是任意内存映像,请检查banner信息):

$ uname -r
5.4.0-26-generic

要安装调试符号,请参阅以下基于Ubuntu的页面(调试符号包:

$ echo "deb http://ddebs.ubuntu.com $(lsb_release -cs) main restricted universe multiverse
deb http://ddebs.ubuntu.com $(lsb_release -cs)-updates main restricted universe multiverse
deb http://ddebs.ubuntu.com $(lsb_release -cs)-proposed main restricted universe multiverse" | \
sudo tee -a /etc/apt/sources.list.d/ddebs.list

$ sudo apt install ubuntu-dbgsym-keyring

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F2EDC64DC5AEE1F6B9C621F0C8CAB6595FDFF622

$ sudo apt-get update

现在,您可以输入所需内核映像版本的dbgsym信息:

$ sudo apt install linux-image-5.4.0-26-generic-dbgsym
$ cd /usr/lib/debug/boot
$ ls -lh 
total 742M
-rw-r--r-- 1 root root 742M Apr 20  2020 vmlinux-5.4.0-26-generic

包含内核调试符号的vmlinux文件位于/usr/lib/debug/boot目录中,如上所示。您可以使用dwarf2json基于vmlinux文件提取ISF output.json文件。

$ ./dwarf2json linux --elf /usr/lib/debug/boot/vmlinux-5.4.0-26-generic > output.json

如果您还获得了system.map文件(检查它是否存在于/boot目录下),您可以将其合并:

$ sudo ./dwarf2json linux --elf /usr/lib/debug/boot/vmlinux-5.4.0-26-generic --system-map /boot/System.map-5.4.0-26-generic > output2.json

将创建的output.json文件保存到~/volatility3/volatility3/symbols/。此时,JSON文件的名称并不重要,因为搜索是基于文件的内容。但是,为了便于管理,建议使用内核名称并指定一个文件名,如[kernel-name].json。例如,您可以将其命名为linux-image-4.9.0-3-amd64-dbg_4.9.30-2+deb9u2_amd64.json。

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容