Linux应急响应 - 29 取证工具

数字取证工具 (Digital Forensics)

数字取证(Digital Forensics)是应急响应中的核心环节。正确的取证方法不仅能帮助你找到攻击者的痕迹,还能确保证据在法律程序中有效。本章覆盖从内存取证到磁盘取证的完整工具链。

相关章节:09-历史记录与时间线分析 | 06-文件系统取证

一、证据收集优先级(RFC 3227)

1.1 易失性数据(Volatile Data)

按易失性从高到低排列,必须按此顺序收集

优先级 数据类型 说明 收集命令
1 CPU 寄存器/缓存 最易失,通常不做采集 -
2 内存(RAM) 运行中的进程、网络连接、解密的数据 LiME / /proc/kcore
3 网络连接 当前活动的网络连接和监听端口 netstat -antup / ss -antup
4 运行中的进程 当前执行的程序及其参数 ps auxef / /proc/[pid]/*
5 登录用户 当前和最近登录的用户 w / who / last
6 ARP 缓存 / 路由表 网络层信息 arp -an / ip route

1.2 非易失性数据(Non-Volatile Data)

优先级 数据类型 说明
7 磁盘数据 文件系统内容、已删除文件
8 系统日志 syslog、auth.log、应用日志
9 配置文件 系统和服务配置
10 物理介质 外接存储、备份磁带

1.3 为什么顺序重要

内存数据随时可能丢失:攻击者可能正在清理痕迹,系统可能因资源耗尽随时崩溃

操作系统每一次操作都在改变状态:你运行的每个命令都会覆盖内存中的数据

先采集易失性高的数据:一旦断电或重启,内存中的恶意进程、解密密钥、网络连接全部消失

取证工具本身也会占用资源:加载取证工具会覆盖部分内存数据,所以要提前准备好工具

实际操作原则:

不要重启服务器(除非必须)

不要在目标机器上安装软件

使用预编译的静态链接工具(从 USB 运行)

记录你的每一个操作

二、内存取证

2.1 LiME(Linux Memory Extractor)

LiME 是最常用的 Linux 内存获取工具,以内核模块方式运行

可以将完整的物理内存 dump 到文件或通过网络传输

安装和编译

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 在取证工作站上为目标系统编译 LiME 模块
# 注意:必须使用与目标系统相同的内核版本和内核头文件

# 1. 获取 LiME 源码
git clone https://github.com/504ensicsLabs/LiME.git
cd LiME/src

# 2. 编译(需要目标系统的内核头文件)
# 本地编译(如果在目标系统上)
sudo apt install linux-headers-$(uname -r) -y # Debian/Ubuntu
sudo yum install kernel-devel-$(uname -r) -y # CentOS/RHEL
make

# 编译结果:lime-<kernel_version>.ko
ls *.ko

获取内存 dump

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 方法一:dump 到本地文件
# 注意:输出文件不能写在被取证的系统盘上(使用外接 USB 或网络共享)
sudo insmod lime-$(uname -r).ko "path=/mnt/usb/memory.lime format=lime"

# 方法二:dump 为 raw 格式(Volatility 兼容)
sudo insmod lime-$(uname -r).ko "path=/mnt/usb/memory.raw format=raw"

# 方法三:通过网络传输(避免写入目标磁盘)
# 在取证工作站上监听:
nc -l -p 4444 > memory.lime
# 在目标系统上发送:
sudo insmod lime-$(uname -r).ko "path=tcp:4444 format=lime"

# 方法四:dump 为 padded 格式
sudo insmod lime-$(uname -r).ko "path=/mnt/usb/memory.padded format=padded"

# 完成后卸载模块
sudo rmmod lime

# 立即计算 hash 值
sha256sum /mnt/usb/memory.lime > /mnt/usb/memory.lime.sha256

格式说明

格式 说明 适用场景
lime LiME 原生格式,包含内存范围信息 Volatility 分析
raw 连续的原始内存 dump 通用兼容性最好
padded 用零填充不可读的内存区域 需要精确偏移量的分析

2.2 /proc/kcore 和 /dev/mem

1
2
3
4
5
6
7
8
9
10
11
12
# /proc/kcore:内核虚拟内存的 ELF 格式表示
# 可以用 gdb 或 dd 读取,但有限制
sudo dd if=/proc/kcore of=/mnt/usb/kcore.dump bs=1M

# 注意:/proc/kcore 不包含所有物理内存,且可能不完整
# 现代内核通常限制了 /dev/mem 的访问

# /dev/mem:物理内存设备文件
# 大多数现代发行版已禁用(CONFIG_STRICT_DEVMEM=y)
sudo dd if=/dev/mem of=/mnt/usb/devmem.dump bs=1M

# 如果以上方法都不可用,LiME 是最可靠的选择

替代工具

fmem:创建 /dev/fmem 设备来绕过内核限制

AVML(Azure Virtual Machine Live Memory):Microsoft 开源的内存获取工具

1
2
3
4
# AVML 用法(无需内核头文件编译)
wget https://github.com/microsoft/avml/releases/latest/download/avml
chmod +x avml
sudo ./avml /mnt/usb/memory.lime

2.3 Volatility 3 分析 Linux 内存 dump

Volatility 是最强大的内存取证分析框架

安装 Volatility 3

1
2
3
4
5
6
7
8
9
10
11
12
13
# 方法一:pip 安装
pip3 install volatility3

# 方法二:从源码安装
git clone https://github.com/volatilityfoundation/volatility3.git
cd volatility3
pip3 install -r requirements.txt
python3 setup.py install

# 验证
vol -h
# 或
python3 vol.py -h

Linux 符号表(Symbol Tables)

Volatility 3 分析 Linux 内存需要对应内核的符号表

1
2
3
4
5
6
7
8
9
10
11
12
# 生成符号表(在目标系统或相同环境中)
# 需要 dwarf2json 工具
git clone https://github.com/volatilityfoundation/dwarf2json.git
cd dwarf2json
go build

# 生成 ISF(Intermediate Symbol Format)文件
# 需要目标系统的 vmlinux(带调试符号)
sudo ./dwarf2json linux --elf /usr/lib/debug/boot/vmlinux-$(uname -r) > linux-$(uname -r).json

# 将生成的 JSON 文件放到 Volatility 的符号表目录
cp linux-$(uname -r).json /path/to/volatility3/volatility3/symbols/linux/

核心分析插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# 所有命令格式:vol -f <内存文件> <插件名>

# === 进程分析 ===

# 列出所有进程
vol -f memory.lime linux.pslist
# 输出:PID, PPID, 进程名, 命令行参数等
# 关注点:可疑进程名、异常的父子关系、隐藏进程

# 显示进程树
vol -f memory.lime linux.pstree
# 关注点:从 sshd/bash 衍生的可疑子进程链

# === 网络连接 ===

# 列出网络连接
vol -f memory.lime linux.netstat
# 关注点:与外部 IP 的连接(C2 通信)、异常监听端口

# === Bash 历史 ===

# 提取内存中的 Bash 历史记录
vol -f memory.lime linux.bash
# 即使攻击者清除了 .bash_history 文件
# 内存中仍可能保留执行过的命令

# === 文件系统缓存 ===

# 查看页缓存中的文件
vol -f memory.lime linux.pagecache.Files
# 关注点:攻击者读取/写入过的文件可能还在缓存中

# === 内核模块 ===

# 列出已加载的内核模块
vol -f memory.lime linux.lsmod
# 关注点:未知的内核模块(rootkit)

# 检测隐藏的内核模块
vol -f memory.lime linux.hidden_modules
# Rootkit 可能从 lsmod 中隐藏自己

# === 其他有用插件 ===

# 列出打开的文件
vol -f memory.lime linux.lsof

# 挂载点信息
vol -f memory.lime linux.mountinfo

# 环境变量
vol -f memory.lime linux.envars

# 提取 ELF 文件(从内存中恢复可执行文件)
vol -f memory.lime linux.elfs --pid <PID> --dump

示例:从内存中发现已删除的恶意进程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 场景:攻击者运行了恶意程序后删除了磁盘上的文件
# 但进程仍在运行,内存中保留了完整的二进制

# 1. 列出进程,发现可疑进程
vol -f memory.lime linux.pslist | grep -v -E '(systemd|sshd|nginx|mysql|cron)'
# 输出中发现:PID 12345 名为 "kworker/u:0"(伪装成内核线程)

# 2. 检查进程的内存映射
vol -f memory.lime linux.proc.Maps --pid 12345
# 发现:该进程的可执行文件路径为 /tmp/.x(已被删除)

# 3. 从内存中 dump 出该进程的可执行文件
vol -f memory.lime linux.elfs --pid 12345 --dump --output /tmp/recovered/

# 4. 对恢复的文件进行分析
file /tmp/recovered/pid.12345.elf
sha256sum /tmp/recovered/pid.12345.elf
strings /tmp/recovered/pid.12345.elf | grep -iE '(http|https|ftp|ssh|password|shell|cmd|exec)'

# 5. 提交到 VirusTotal 检查
# sha256: <hash值>

# 6. 查看该进程的网络连接(确认 C2 地址)
vol -f memory.lime linux.netstat | grep 12345
# 输出:12345 tcp ESTABLISHED 10.0.0.5:54321 -> 203.0.113.99:443

三、磁盘取证

3.1 dd / dcfldd 磁盘镜像

创建磁盘的完整镜像是磁盘取证的第一步

使用 dd 创建镜像

1
2
3
4
5
6
7
8
9
10
# 基本磁盘镜像(注意:if 是源,of 是目标,不要搞反!)
sudo dd if=/dev/sda of=/mnt/external/sda.img bs=4M status=progress

# 计算源盘 hash(取证前)
sudo sha256sum /dev/sda > /mnt/external/sda.hash.before

# 计算镜像 hash(取证后验证)
sha256sum /mnt/external/sda.img > /mnt/external/sda.img.hash

# 两个 hash 必须一致!

使用 dcfldd(取证增强版 dd)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 安装
sudo apt install dcfldd -y # Ubuntu/Debian
sudo yum install dcfldd -y # CentOS/RHEL

# dcfldd 的优势:
# - 内置 hash 计算
# - 进度显示
# - 可以同时输出多个副本
# - 支持分割输出

# 创建镜像并同时计算 hash
sudo dcfldd if=/dev/sda of=/mnt/external/sda.img bs=4M hash=sha256 hashlog=/mnt/external/sda.hashlog

# 同时输出到两个目标(创建两份副本)
sudo dcfldd if=/dev/sda of=/mnt/external/sda.img of2=/mnt/backup/sda.img bs=4M hash=sha256

# 分割输出(每个文件 2GB,便于传输)
sudo dcfldd if=/dev/sda of=/mnt/external/sda.img bs=4M split=2G splitformat=000

远程磁盘镜像(通过网络)

1
2
3
4
5
6
7
8
9
10
11
# 在取证工作站上监听
nc -l -p 9999 > sda.img

# 在目标系统上发送
sudo dd if=/dev/sda bs=4M | nc <forensic_workstation_ip> 9999

# 更安全的方式(加密传输)
# 取证工作站:
nc -l -p 9999 | openssl aes-256-cbc -d -k <password> > sda.img
# 目标系统:
sudo dd if=/dev/sda bs=4M | openssl aes-256-cbc -k <password> | nc <forensic_ip> 9999

3.2 Sleuthkit 工具集

Sleuthkit(TSK)是最著名的开源磁盘取证工具集

1
2
3
# 安装
sudo apt install sleuthkit -y # Ubuntu/Debian
sudo yum install sleuthkit -y # CentOS/RHEL

fls:列出文件系统中的文件(包括已删除)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 列出根目录下的文件(包括已删除的)
fls -r /mnt/external/sda.img
# -r 递归列出
# 输出中 * 标记的是已删除文件

# 只列出已删除的文件
fls -r -d /mnt/external/sda.img

# 列出特定分区(如果镜像包含分区表)
mmls /mnt/external/sda.img # 先查看分区表
fls -r -o 2048 /mnt/external/sda.img # -o 指定分区偏移量(扇区数)

# 列出特定目录
fls -r /mnt/external/sda.img /var/www/html/

icat:通过 inode 恢复文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 从 fls 输出中找到已删除文件的 inode 号
# 例如:* d/d 12345: .backdoor.php

# 通过 inode 恢复文件内容
icat /mnt/external/sda.img 12345 > /tmp/recovered_backdoor.php

# 指定分区偏移量
icat -o 2048 /mnt/external/sda.img 12345 > /tmp/recovered_file

# 批量恢复已删除文件
fls -r -d /mnt/external/sda.img | while read line; do
inode=$(echo "$line" | awk -F'[: \t]' '{print $2}' | tr -d '*')
name=$(echo "$line" | awk -F: '{print $2}' | xargs)
if [ -n "$inode" ] && [ "$inode" != "0" ]; then
echo "Recovering inode $inode: $name"
icat /mnt/external/sda.img "$inode" > "/tmp/recovered/$inode-$name" 2>/dev/null
fi
done

mactime:生成文件系统时间线

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 生成 bodyfile(包含所有文件的时间戳信息)
fls -r -m "/" /mnt/external/sda.img > bodyfile.txt

# 从 bodyfile 生成时间线
mactime -b bodyfile.txt > timeline.txt

# 生成特定时间范围的时间线
mactime -b bodyfile.txt -d 2026-04-01..2026-04-02 > timeline_apr01.txt

# 输出 CSV 格式
mactime -b bodyfile.txt -d -z UTC 2026-04-01..2026-04-02 > timeline.csv

# 时间线包含:修改时间(M)、访问时间(A)、变更时间(C)、创建时间(B)
# 这对于确定攻击者在什么时间做了什么操作非常关键

fsstat:文件系统信息

1
2
3
4
5
6
7
8
9
10
# 查看文件系统详细信息
fsstat /mnt/external/sda.img

# 输出包含:
# - 文件系统类型和版本
# - 卷名和 UUID
# - Block 大小和数量
# - Inode 范围和使用情况
# - 最后挂载时间、最后写入时间
# 这些信息有助于了解文件系统状态

3.3 Autopsy — GUI 界面

Autopsy 是基于 Sleuthkit 的图形界面取证工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 安装(Ubuntu)
sudo apt install autopsy -y

# 启动(Web 界面)
autopsy
# 默认访问地址:http://localhost:9999/autopsy

# Autopsy 提供:
# - 文件浏览器(包括已删除文件)
# - 关键词搜索
# - 时间线视图
# - Hash 查找
# - 元数据查看
# - 报告生成

适合需要 GUI 操作或需要团队协作的场景

3.4 extundelete:ext 文件系统文件恢复

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 安装
sudo apt install extundelete -y

# 恢复指定文件(需要知道路径)
sudo extundelete /dev/sda1 --restore-file var/www/html/shell.php

# 恢复指定目录下所有已删除文件
sudo extundelete /dev/sda1 --restore-directory var/www/html/

# 恢复所有已删除文件
sudo extundelete /dev/sda1 --restore-all

# 恢复指定时间之后删除的文件
sudo extundelete /dev/sda1 --restore-all --after $(date -d "2026-04-01" +%s)

# 重要提示:
# - 只支持 ext3/ext4 文件系统
# - 必须卸载分区或使用只读模式
# - 恢复的文件保存在当前目录的 RECOVERED_FILES 下
# - 越早恢复成功率越高(数据被覆盖前)

3.5 foremost / scalpel:文件雕刻

文件雕刻(File Carving):从原始磁盘数据中根据文件头/尾特征恢复文件

不依赖文件系统元数据,适合文件系统严重损坏的场景

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# foremost 安装和使用
sudo apt install foremost -y

# 从磁盘镜像中雕刻文件
foremost -i /mnt/external/sda.img -o /tmp/carved/

# 指定要恢复的文件类型
foremost -t jpg,png,pdf,doc,zip -i /mnt/external/sda.img -o /tmp/carved/

# 直接从设备雕刻
sudo foremost -i /dev/sda1 -o /tmp/carved/

# scalpel 安装和使用(foremost 的高性能分支)
sudo apt install scalpel -y

# 编辑配置文件,取消要恢复的文件类型注释
sudo vim /etc/scalpel/scalpel.conf
# 取消注释需要的文件类型行,例如:
# jpg y 200000000 \xff\xd8\xff\xe0\x00\x10 \xff\xd9
# php y 50000 <?php ?>

scalpel -c /etc/scalpel/scalpel.conf -o /tmp/carved/ /mnt/external/sda.img

四、实时取证

4.1 取证信息收集脚本

在不做磁盘镜像的情况下,快速收集易失性和关键数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/bin/bash
# ir-live-collector.sh - 实时取证数据收集脚本
# 用法:将此脚本放在 USB 中,在目标系统上执行
# 注意:所有输出写入 USB,不写入目标系统磁盘

OUTDIR="/mnt/usb/evidence/$(hostname)_$(date +%Y%m%d_%H%M%S)"
mkdir -p "$OUTDIR"

echo "[*] 开始取证数据收集 - $(date)" | tee "$OUTDIR/collection.log"

# 1. 系统信息
echo "[+] 收集系统信息..."
uname -a > "$OUTDIR/01_uname.txt"
date > "$OUTDIR/01_date.txt"
uptime > "$OUTDIR/01_uptime.txt"
cat /etc/os-release > "$OUTDIR/01_os-release.txt"

# 2. 网络连接(高优先级易失性数据)
echo "[+] 收集网络连接..."
ss -antup > "$OUTDIR/02_ss_connections.txt"
ip addr > "$OUTDIR/02_ip_addr.txt"
ip route > "$OUTDIR/02_ip_route.txt"
arp -an > "$OUTDIR/02_arp_cache.txt"
cat /proc/net/tcp > "$OUTDIR/02_proc_net_tcp.txt"
iptables -L -n -v > "$OUTDIR/02_iptables.txt" 2>&1

# 3. 进程信息(高优先级易失性数据)
echo "[+] 收集进程信息..."
ps auxef > "$OUTDIR/03_ps_full.txt"
ps -eo pid,ppid,user,args --sort=start_time > "$OUTDIR/03_ps_sorted.txt"
ls -la /proc/*/exe 2>/dev/null > "$OUTDIR/03_proc_exe.txt"
ls -la /proc/*/cwd 2>/dev/null > "$OUTDIR/03_proc_cwd.txt"
cat /proc/*/cmdline 2>/dev/null | tr '\0' ' ' > "$OUTDIR/03_proc_cmdline.txt"

# 4. 用户信息
echo "[+] 收集用户信息..."
w > "$OUTDIR/04_who_online.txt"
last -100 > "$OUTDIR/04_last_logins.txt"
lastb -100 > "$OUTDIR/04_last_failed.txt" 2>/dev/null
cat /etc/passwd > "$OUTDIR/04_passwd.txt"
cat /etc/shadow > "$OUTDIR/04_shadow.txt" 2>/dev/null
cat /etc/group > "$OUTDIR/04_group.txt"

# 5. 计划任务
echo "[+] 收集计划任务..."
crontab -l > "$OUTDIR/05_crontab_root.txt" 2>&1
ls -la /etc/cron* > "$OUTDIR/05_cron_dirs.txt" 2>&1
for user in $(cut -d: -f1 /etc/passwd); do
crontab -u "$user" -l > "$OUTDIR/05_crontab_${user}.txt" 2>/dev/null
done
cat /var/spool/cron/crontabs/* > "$OUTDIR/05_spool_crontabs.txt" 2>/dev/null

# 6. 自启动服务
echo "[+] 收集服务信息..."
systemctl list-units --type=service --all > "$OUTDIR/06_systemd_services.txt" 2>&1
systemctl list-unit-files --type=service > "$OUTDIR/06_systemd_unit_files.txt" 2>&1

# 7. 关键文件 hash
echo "[+] 计算关键文件 hash..."
find /usr/bin /usr/sbin /bin /sbin -type f -exec sha256sum {} \; > "$OUTDIR/07_binary_hashes.txt" 2>/dev/null

# 8. SSH 相关
echo "[+] 收集 SSH 信息..."
find / -name "authorized_keys" -exec echo "=== {} ===" \; -exec cat {} \; > "$OUTDIR/08_authorized_keys.txt" 2>/dev/null
cat /etc/ssh/sshd_config > "$OUTDIR/08_sshd_config.txt"

# 9. 环境变量和预加载
echo "[+] 检查持久化机制..."
cat /etc/ld.so.preload > "$OUTDIR/09_ld_preload.txt" 2>/dev/null
env > "$OUTDIR/09_environment.txt"
cat /etc/profile > "$OUTDIR/09_profile.txt"
cat /etc/bashrc > "$OUTDIR/09_bashrc.txt" 2>/dev/null

# 10. 日志文件打包
echo "[+] 打包日志文件..."
tar czf "$OUTDIR/10_var_log.tar.gz" /var/log/ 2>/dev/null

# 11. 生成收集摘要
echo "[+] 生成摘要..."
echo "收集完成时间: $(date)" >> "$OUTDIR/collection.log"
echo "文件列表:" >> "$OUTDIR/collection.log"
ls -la "$OUTDIR/" >> "$OUTDIR/collection.log"

# 12. 对整个证据目录计算 hash
find "$OUTDIR" -type f -exec sha256sum {} \; > "$OUTDIR/evidence_hashes.txt"

echo "[*] 取证数据收集完成,保存在: $OUTDIR"

4.2 取证 USB 工具包准备

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 准备一个 USB 作为取证工具包
# 包含预编译的静态链接工具(不依赖目标系统的库)

# 建议包含的工具:
mkdir -p /mnt/usb/tools/{bin,scripts,yara-rules}

# 静态编译的常用工具
# - busybox(包含 ls, cat, grep, find, dd 等基础命令)
# - ss / netstat 的静态编译版本
# - LiME 内核模块(为常见内核版本预编译)
# - ir-live-collector.sh 脚本
# - YARA 静态编译版本 + 规则文件
# - chkrootkit / rkhunter

# 目录结构:
# /mnt/usb/
# ├── tools/
# │ ├── bin/ # 静态编译的二进制工具
# │ ├── scripts/ # 取证脚本
# │ ├── yara-rules/ # YARA 规则
# │ └── lime/ # 各内核版本的 LiME 模块
# ├── evidence/ # 收集的证据(自动创建)
# └── README.txt # 使用说明

4.3 取证注意事项

证据完整性

对所有证据文件计算 hash 值(SHA-256)

不要在原始证据上做分析,使用副本

使用写保护设备连接目标磁盘

哈希校验

1
2
3
4
5
6
7
8
# 采集时立即计算 hash
sha256sum evidence_file > evidence_file.sha256

# 分析前验证 hash
sha256sum -c evidence_file.sha256

# 对整个证据目录计算 hash
find /evidence/ -type f ! -name "*.sha256" -exec sha256sum {} \; > /evidence/manifest.sha256

操作记录

记录每一步操作的时间、操作人、操作内容

使用 script 命令记录完整的终端会话

1
2
3
4
5
6
7
8
9
# 开始记录(在取证操作前执行)
script -t 2>/mnt/usb/evidence/timing.log /mnt/usb/evidence/session.log

# 所有后续操作都会被记录
# 退出记录
exit

# 回放记录
scriptreplay /mnt/usb/evidence/timing.log /mnt/usb/evidence/session.log

五、证据链维护

5.1 证据链(Chain of Custody)

证据链记录了证据从采集到分析的完整流转过程

每一次证据的转移、访问都必须记录

证据链断裂 = 证据可能被篡改 = 法律上无效

5.2 证据记录模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 证据记录表(每份证据一张)
cat << 'EOF'
============================================
证据编号: IR-2026-0402-001
证据描述: 服务器 web01 内存 dump
采集时间: 2026-04-02 14:30:00 UTC+8
采集人员: [姓名]
采集方法: LiME 内核模块 (v1.9)
采集设备: USB 移动硬盘 SN:XXXX

文件名: web01_memory_20260402.lime
文件大小: 16,384 MB
SHA-256: a1b2c3d4...

保管记录:
| 时间 | 操作人 | 操作 | 备注 |
|------|--------|------|------|
| 2026-04-02 14:30 | 张三 | 采集 | 使用 LiME |
| 2026-04-02 15:00 | 张三 | 转交 | 交给李四分析 |
| 2026-04-02 15:05 | 李四 | 接收 | 验证 hash 一致 |
| 2026-04-02 15:10 | 李四 | 创建副本 | 分析用副本 |
============================================
EOF

5.3 合规要求

国内法规

《网络安全法》要求日志留存不少于 6 个月

《数据安全法》对数据分类分级的要求

等保 2.0 对安全审计的要求

操作原则

最小侵入性:尽量减少对目标系统的影响

可重复性:你的分析过程要能被他人重复验证

完整记录:记录所有操作,包括失败的尝试

双人原则:关键操作有见证人

常见错误

直接在被入侵的系统上安装工具

忘记计算 hash 值

没有记录操作过程

分析原始证据而非副本

使用可能被植入后门的系统工具(应使用自带的静态工具)

参考与延伸

工具资源

LiME:https://github.com/504ensicsLabs/LiME

Volatility 3:https://github.com/volatilityfoundation/volatility3

Sleuthkit:https://www.sleuthkit.org/

AVML:https://github.com/microsoft/avml

下一步:学习 30-YARA规则 中的恶意文件检测技术,可以配合取证工具对恢复的文件进行扫描


上一章 目录 下一章
28.5-冷门持久化技术补充 Linux应急响应 30-YARA规则