写在前面:合法学习边界
应急响应面向真实事件,处置必须保留证据、合法合规。取证优先于处置,先保全再分析。
一、目标与原则
1
2
| 目标:遏制 → 定位 → 清除 → 恢复 → 溯源
原则:先保全证据,再隔离处置;不要在取证前乱删乱改
|
顺序很重要:内存(易失)→ 磁盘(持久)→ 隔离 → 分析。

二、第一步:判断“发生了什么”
先确认现象,判断事件类型,决定后续动作:
1
2
3
4
5
6
| 现象 → 类型
CPU 飙高/挖矿进程 → 挖矿事件
Web 目录异常文件 → WebShell 入侵
勒索提示/文件加密 → 勒索事件
异常登录/新账号 → 弱口令/失陷
外联可疑 IP → C2 回连
|
三、第二步:内存取证(最先做)
内存里有运行中的进程、网络连接、解密后的密码、无文件攻击痕迹,一旦断电/断网就丢失,必须最先抓。
方法 1:LiME(推荐)
1
2
3
4
| # 加载 LiME 模块,把内存写到证据盘
insmod lime-4.15.0-xxx-generic.ko "path=/mnt/evidence/mem.lime format=lime"
# 解释:LiME 是专门的内存取证内核模块
# 为什么:/dev/mem 在高版本内核被限制,LiME 绕过限制直接抓
|
方法 2:fmem + dd
1
2
3
4
| insmod fmem.ko
dd if=/dev/fmem of=/mnt/evidence/mem.dd bs=1M
# 解释:fmem 暴露 /dev/fmem,dd 拷贝内存
# 注意:bs 大小影响速度,大内存较慢
|
方法 3:/proc/kcore(免装驱动)
1
2
3
| dd if=/proc/kcore of=/mnt/evidence/mem.raw bs=1M
# 解释:/proc/kcore 是内存的原始接口,root 可读
# 缺点:体积大、可能有空洞,但无需编译内核模块
|
分析内存
1
2
3
4
5
| # Volatility3
vol -f mem.lime linux.info
vol -f mem.lime linux.pslist
vol -f mem.lime linux.bash
# 解释:从内存还原进程列表、命令历史等
|
为什么先抓内存:断网/关机后这些证据就没了。
四、第四步:磁盘快照/镜像
磁盘证据持久,但要防止在分析时改动原始盘。
1
2
3
4
5
6
7
8
9
10
11
12
| # 1. 整盘镜像(原始证据)
dd if=/dev/sda of=/mnt/evidence/sda.img bs=4M conv=noerror,sync
# 解释:conv=noerror,sync 遇到坏块继续、不足补零,保证镜像完整
# 2. 只读挂载原盘,避免污染
mount -o ro,noexec,nodev /dev/sda1 /mnt/evidence/ro
# 3. LVM 快照(生产环境好用)
lvcreate -L 10G -s -n snap /dev/vg/root
# 解释:秒级创建快照,不影响业务
# 4. 云主机:先在云控制台做磁盘快照
|
五、第五步:隔离主机
遏制扩散,但在内存/磁盘取证完成之后再做。
1
2
3
4
5
6
7
8
9
10
11
| # 1. 断外网(保留内网便于排查)
iptables -A OUTPUT -o eth0 -j DROP
# 解释:把去往外网的流量全丢,阻止 C2 回连与横向外联
# 2. 彻底下线网卡(取证已完成时)
ifdown eth0
# 3. 从管理面隔离(最稳妥)
# 云控制台:安全组拒绝所有入站
# 交换机:端口 shutdown
# 解释:物理/管理面隔离比在主机内断网更可靠
|
为什么先取证再隔离:隔离(尤其断电)会丢失内存和实时进程证据。
六、第六步:五查排查(命令 + 解释)
1. 账号排查
1
2
3
4
5
6
| awk -F: '$3==0{print $1}' /etc/passwd
# 解释:UID 为 0 的都是 root 权限账号,非 root 的 UID0 就是后门
last / lastlog
# 解释:查看成功登录记录,找异常登录时间/IP
cat /etc/sudoers | grep -v '^#'
# 解释:检查是否有异常的 sudo 提权
|
2. 进程与网络排查
1
2
3
4
5
6
| ps -ef --forest
# 解释:进程树,找异常进程(挖矿/陌生程序)
ss -antlp
# 解释:监听与连接,找外联 IP 和异常端口
ls -l /proc/<pid>/exe
# 解释:定位异常进程对应的可执行文件
|
3. 文件排查
1
2
3
4
5
6
| find / -mtime -3 -type f ! -path '/proc/*' ! -path '/sys/*' 2>/dev/null | head -100
# 解释:找近 3 天修改的文件(webshell/后门常在这)
grep -rl 'eval(\|base64_decode\|assert' /var/www/html/ 2>/dev/null
# 解释:扫 Web 目录里的一句话木马特征
ls -la /tmp /var/tmp /dev/shm
# 解释:临时目录常被用来藏文件
|
4. 启动项与计划任务
1
2
3
4
5
6
7
8
| crontab -l && ls -la /etc/cron.* /var/spool/cron/
# 解释:计划任务是持久化高发点
cat /etc/rc.local
# 解释:开机自启脚本
systemctl list-unit-files | grep enabled
# 解释:查看开机自启服务
cat /etc/ld.so.preload
# 解释:LD_PRELOAD 劫持后门
|
5. 日志分析
1
2
3
4
5
6
7
8
| grep 'Accepted' /var/log/secure | tail
# 解释:SSH 成功登录记录
grep 'Failed password' /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head
# 解释:统计爆破来源 IP 次数
grep -E 'POST|\.php' /var/log/nginx/access.log | tail
# 解释:Web 攻击痕迹
cat ~/.bash_history
# 解释:攻击者执行过的命令
|
七、第七步:清理加固与溯源
1
2
3
4
| 清理:删恶意文件/账号/计划任务/服务,杀进程
加固:改口令、打补丁、收敛暴露面、上 WAF/EDR
溯源:把时间线+日志+文件证据串起来还原攻击链
复测:确认后门不再复活
|
八、小结
Linux 应急响应是“判断事件 → 内存取证 → 磁盘快照 → 隔离 → 五查 → 清理加固”。核心是先保住证据(尤其内存),再隔离处置。每条命令都要知道它“看什么、为什么这么写”,才能真正排得动。