CentOS基于volatility2的内存取证实验

CentOS,Redhat和Fedora 都是Red Hat体系,采用yum管理器,不同于Debian、Ubuntu作为Debian体系使用apt

本文以CentOS为例,采用avml制作内存镜像,并利用volatility官方所给工具制作profile符号文件,进行简单的内存取证实验

虚拟机安装

本次实验测试了centos7和centos8版本,其他同理

https://mirrors.aliyun.com/centos/8.5.2111/isos/x86_64/CentOS-8.5.2111-x86_64-dvd1.iso
https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso

安装过程不过多赘述了,安装时建议直接选最小安装,centos一般用ssh连,图形化界面不太好用

其他都默认就行

安装好后查看一下ip 发现net没分配到ip

配置一下网卡,ifcfg后跟的ens网卡名称和上面对应

vi /etc/sysconfig/network-scripts/ifcfg-ens160

重启一下服务

# CentOS7
service network restart
# CentOS8
service NetworkManager restart

有内网ip了就可以ssh连了

制作内存镜像(建议可以放到最后)

下载avmlReleases · microsoft/avml (github.com)

然后用ssh传到centos里,给予运行权限

chmod 711 avml

打内存镜像

./avml out.lime

制作profile

将vol的tools目录下的linux文件夹传到centos里,并尝试编译

make

遇到致命错误

make -C //lib/modules/3.10.0-1160.el7.x86_64/build CONFIG_DEBUG_INFO=y M="/root/linux" modules
make: *** //lib/modules/3.10.0-1160.el7.x86_64/build: 没有那个文件或目录。 停止。
make: *** [dwarf] 错误 2

提示/lib/modules/3.10.0-1160.el7.x86_64/build目录不存在

查看了一下发现build符号链接指向/usr/src/kernels/3.10.0-1160.el7.x86_64

这符合通常的情况,因为在许多Linux发行版中,内核源码通常位于/usr/src/kernels/目录下。

这种设置是为了让开发人员方便地访问内核源码,特别是用于编译内核模块时。

进一步发现kernels目录下没有对应内核开发包

[root@localhost 3.10.0-1160.el7.x86_64]# cd /usr/src/kernels/3.10.0-1160.el7.x86_64
-bash: cd: /usr/src/kernels/3.10.0-1160.el7.x86_64: 没有那个文件或目录
[root@localhost 3.10.0-1160.el7.x86_64]# ls -a /usr/src/kernels
.  ..

安装内核开发包,全部选yes就可以

sudo yum install kernel-devel

再查看,发现已经有了

但是发现名字跟之前的软连接对不上,之前软连接指向的是/usr/src/kernels/3.10.0-1160.el7.x86_64

重新构造软连接

sudo rm /lib/modules/3.10.0-1160.el7.x86_64/build
sudo ln -s /usr/src/kernels/3.10.0-1160.108.1.el7.x86_64 /lib/modules/3.10.0-1160.el7.x86_64/build

ps:在这里可以看到其实内核的kernel已经做了一部分修改了,建议在这一步先reboot一下

如果内存镜像在这一步之前打的,后面做下去会提示报错

 ArmAddressSpace: Failed valid Address Space check

所以建议内存镜像放在最后去制作

再进行make,又遇到致命错误

[root@localhost linux]# make
make -C //lib/modules/3.10.0-1160.el7.x86_64/build CONFIG_DEBUG_INFO=y M="/root/linux" modules
make[1]: 进入目录"/usr/src/kernels/3.10.0-1160.108.1.el7.x86_64"
arch/x86/Makefile:96: stack-protector enabled but compiler support broken
arch/x86/Makefile:169: *** CONFIG_RETPOLINE=y, but not supported by the compiler. Compiler update recommended.。 停止。
make[1]: 离开目录"/usr/src/kernels/3.10.0-1160.108.1.el7.x86_64"
make: *** [dwarf] 错误 2

指出编译器不支持所需的特性。特别地,指出启用了 RETPOLINE(一种用于缓解Spectre漏洞的技术),但是编译器不支持。

centos默认编译器是gcc,重新安装一下

# 安装软件源
sudo yum install epel-release
# 安装gcc
sudo yum install gcc

再make,这次提示报错没有dwarfdump

[root@localhost linux]# make
make -C //lib/modules/3.10.0-1160.el7.x86_64/build CONFIG_DEBUG_INFO=y M="/root/linux" modules
make[1]: 进入目录"/usr/src/kernels/3.10.0-1160.108.1.el7.x86_64"
  Building modules, stage 2.
  MODPOST 1 modules
make[1]: 离开目录"/usr/src/kernels/3.10.0-1160.108.1.el7.x86_64"
dwarfdump -di module.ko > module.dwarf
/bin/sh: dwarfdump: 未找到命令
make: *** [dwarf] 错误 127
[root@localhost linux]# dwarfdump
-bash: dwarfdump: 未找到命令
安装dwarfdump

这里不建议安装最新版本的dwarfdump,在后面继续做会产生报错ValueError: invalid literal for int() with base 16: '128 (-128)' · Issue #866 · volatilityfoundation/volatility (github.com)

但是暂未有前辈给出修改方案,所以建议安装了较新版本的dwarfdump或者产生如下所述报错的,重新卸载并装老版本的dwarfdump

ValueError: invalid literal for int() with base 16: '168 (-88)'

# 下载并解压包
wget https://www.prevanders.net/libdwarf-20201201.tar.gz

tar -xf libdwarf-20201201.tar.gz
cd libdwarf-20201201

# 配置并编译
sudo ./configure
sudo make install 

继续回到linux目录下编译,成功得到dwarf内核调试文件

[root@localhost linux]# make
make -C //lib/modules/3.10.0-1160.el7.x86_64/build CONFIG_DEBUG_INFO=y M="/root/linux" modules
make[1]: 进入目录"/usr/src/kernels/3.10.0-1160.108.1.el7.x86_64"
  Building modules, stage 2.
  MODPOST 1 modules
make[1]: 离开目录"/usr/src/kernels/3.10.0-1160.108.1.el7.x86_64"
dwarfdump -di module.ko > module.dwarf
make -C //lib/modules/3.10.0-1160.el7.x86_64/build M="/root/linux" clean
make[1]: 进入目录"/usr/src/kernels/3.10.0-1160.108.1.el7.x86_64"
  CLEAN   /root/linux/.tmp_versions
  CLEAN   /root/linux/Module.symvers
make[1]: 离开目录"/usr/src/kernels/3.10.0-1160.108.1.el7.x86_64"
[root@localhost linux]# ls
kcore  libdwarf-0.9.1.tar.xz  Makefile  Makefile.enterprise  module.c  module.cile  module.dwarf
[root@localhost linux]# ls -lh
总用量 5.0M
drwxr-xr-x. 2 root root   71 2月   5 20:14 kcore
-rw-r--r--. 1 root root 2.6M 1月  28 03:27 libdwarf-0.9.1.tar.xz
-rw-r--r--. 1 root root  384 2月   5 20:14 Makefile
-rw-r--r--. 1 root root  314 2月   5 20:14 Makefile.enterprise
-rw-r--r--. 1 root root  18K 2月   5 20:14 module.c
-rw-r--r--. 1 root root   46 2月   5 20:20 module.cile
-rw-r--r--. 1 root root 2.4M 2月   5 21:12 module.dwarf

获取system.map内存表文件

ls -lh /boot/System.map-$(uname -r)

[root@localhost linux]# ls -lh /boot/System.map-$(uname -r)
-rw-------. 1 root root 3.5M 10月 20 2020 /boot/System.map-3.10.0-1160.el7.x86_64

打包

sudo zip $(lsb_release -i -s)_$(uname -r)_profile.zip module.dwarf /boot/System.map-$(uname -r)

# 如果没有lsb_release命令
yum install redhat-lsb-core

[root@localhost linux]# sudo zip $(lsb_release -i -s)_$(uname -r)_profile.zip module.dwarf /boot/System.map-$(uname -r)
  adding: module.dwarf (deflated 91%)
  adding: boot/System.map-3.10.0-1160.108.1.el7.x86_64 (deflated 79%)
[root@localhost linux]# ls
CentOS_3.10.0-1160.108.1.el7.x86_64_profile.zip  kcore  Makefile  Makefile.enterprise  module.c  module.cile  module.dwarf

将zip移到volatility2\volatility\plugins\overlays\linux目录下

# linux下用grep,我volatility2装在windows里
python2 vol.py --info | findstr "Linux" 
python2 vol.py -f out.lime --profile=LinuxCentOS_3_10_0-1160_108_1_el7_x86_64_profilex64 linux_banner

成功解析

相关推荐
CoolTiger、5 分钟前
【Vmware16安装教程】
linux·虚拟机·vmware16
学习3人组1 小时前
CentOS 中配置 OpenJDK以及多版本管理
linux·运维·centos
厨 神2 小时前
vmware中的ubuntu系统扩容分区
linux·运维·ubuntu
Karoku0662 小时前
【网站架构部署与优化】web服务与http协议
linux·运维·服务器·数据库·http·架构
geek_Chen012 小时前
虚拟机共享文件夹开启后mnt/hgfs/下无sharefiles? --已解决
linux·运维·服务器
(⊙o⊙)~哦2 小时前
linux 解压缩
linux·运维·服务器
牧小七3 小时前
Linux命令---查看端口是否被占用
linux
鸡鸭扣4 小时前
虚拟机:3、(待更)WSL2安装Ubuntu系统+实现GPU直通
linux·运维·ubuntu
友友马5 小时前
『 Linux 』HTTP(一)
linux·运维·服务器·网络·c++·tcp/ip·http
记得开心一点嘛6 小时前
在Linux系统上使用Docker部署javaweb项目
linux·运维·docker