[[401668]]
利用 Volatility 找出应用程序、工具网络连接、进行内核模块、使用文件等方面的开源情况。
计算机的工具操作系统和应用使用主内存(RAM)来执行不同的任务。这种易失性内存包含大量关于运行应用、进行网络连接、使用内核模块、开源打开的工具文件以及几乎所有其他的内容信息,但这些信息每次计算机重启的时候都会被清除。
内存取证是一种从内存中找到和抽取这些有价值的信息的方式。Volatility 是一种使用插件来处理这类信息的开源工具。但是,存在一个问题:在你处理这些信息前,必须将物理内存转储到一个文件中,而 Volatility 没有这种能力。
因此,这篇文章分为两部分:
我在本教程中使用了以下测试系统,不过它可以在任何 Linux 发行版上工作:
$ cat /etc/redhat-release
Red Hat Enterprise Linux release 8.3 (Ootpa)
$
$ uname -r
4.18.0-240.el8.x86_64
$
注意事项: 部分 1 涉及到编译和加载一个内核模块。不要担心:它并不像听起来那么困难。
一些指南:
- 按照以下的步骤。
- 不要在生产系统或你的主要计算机上尝试任何这些步骤。
- 始终使用测试的虚拟机(VM)来尝试,直到你熟悉使用这些工具并理解它们的工作原理为止。
在开始之前安装必要的工具。如果你经常使用基于 Debian 的发行版,可以使用 apt-get
命令。这些包大多数提供了需要的内核信息和工具来编译代码:
$ yum install kernel-headers kernel-devel gcc elfutils-libelf-devel make git libdwarf-tools python2-devel.x86_64-y
在开始分析内存之前,你需要一个内存转储供你使用。在实际的取证活动中,这可能来自一个被破坏或者被入侵的系统。这些信息通常会被收集和存储来分析入侵是如何发生的及其影响。由于你可能没有可用的内存转储,你可以获取你的测试 VM 的内存转储,并使用它来执行内存取证。
Linux 内存提取器(LiME)是一个在 Linux 系统上获取内存很常用的工具。使用以下命令获得 LiME:
$ git clone https://github.com/504ensicsLabs/LiME.git
$
$ cd LiME/src/
$
$ ls
deflate.c disk.c hash.c lime.h main.c Makefile Makefile.sample tcp.c
$
在 src
文件夹下运行 make
命令。这会创建一个以 .ko 为扩展名的内核模块。理想情况下,在 make
结束时,lime.ko
文件会使用格式 lime-<your-kernel-version>.ko
被重命名。
$ make
make -C /lib/modules/4.18.0-240.el8.x86_64/build M="/root/LiME/src" modules
make[1]: Entering directory '/usr/src/kernels/4.18.0-240.el8.x86_64'
<< 删节 >>
make[1]: Leaving directory '/usr/src/kernels/4.18.0-240.el8.x86_64'
strip --strip-unneeded lime.ko
mv lime.ko lime-4.18.0-240.el8.x86_64.ko
$
$
$ ls -l lime-4.18.0-240.el8.x86_64.ko
-rw-r--r--. 1 root root 25696 Apr 17 14:45 lime-4.18.0-240.el8.x86_64.ko
$
$ file lime-4.18.0-240.el8.x86_64.ko
lime-4.18.0-240.el8.x86_64.ko: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), BuildID[sha1]=1d0b5cf932389000d960a7e6b57c428b8e46c9cf, not stripped
$
现在是时候加载内核模块来获取系统内存了。insmod
命令会帮助加载内核模块;模块一旦被加载,会在你的系统上读取主内存(RAM)并且将内存的内容转储到命令行所提供的 path
目录下的文件中。另一个重要的参数是 format
;保持 lime
的格式,如下所示。在插入内核模块之后,使用 lsmod
命令验证它是否真的被加载。
$ lsmod | grep lime
$
$ insmod ./lime-4.18.0-240.el8.x86_64.ko "path=../RHEL8.3_64bit.mem format=lime"
$
$ lsmod | grep lime
lime 16384 0
$
你应该看到给 path
命令的文件已经创建好了,而且文件大小与你系统的物理内存(RAM)大小相同(并不奇怪)。一旦你有了内存转储,你就可以使用 rmmod
命令删除该内核模块:
$
$ ls -l ~/LiME/RHEL8.3_64bit.mem
-r--r--r--. 1 root root 4294544480 Apr 17 14:47 /root/LiME/RHEL8.3_64bit.mem
$
$ du -sh ~/LiME/RHEL8.3_64bit.mem
4.0G /root/LiME/RHEL8.3_64bit.mem
$
$ free -m
total used free shared buff/cache available
Mem: 3736 220 366 8 3149 3259
Swap: 4059 8 4051
$
$ rmmod lime
$
$ lsmod | grep lime
$
这个内存转储文件只是原始数据,就像使用 file
命令可以看到的一样。你不可能通过手动去理解它;是的,在这里边有一些 ASCII 字符,但是你无法用编辑器打开这个文件并把它读出来。hexdump
的输出显示,最初的几个字节是 EmiL
;这是因为你的请求格式在上面的命令行中是 lime
:
$ file ~/LiME/RHEL8.3_64bit.mem
/root/LiME/RHEL8.3_64bit.mem: data
$
$ hexdump -C ~/LiME/RHEL8.3_64bit.mem | head
00000000 45 4d 69 4c 01 00 00 00 00 10 00 00 00 00 00 00 |EMiL............|
00000010 ff fb 09 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000020 b8 fe 4c cd 21 44 00 32 20 00 00 2a 2a 2a 2a 2a |..L.!D.2 ..*****|
00000030 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |
(责任编辑:时尚)
冬奥带火河南冰雪运动热潮 目前有超过220家冰雪运动相关企业
13个粮食主产省份三大粮食作物农业保险将全覆盖 提升农业保险保障水平