1. 1. 00 - 学习路线与应急响应概述
  2. 2. 一、什么是应急响应
    1. 2.1. 1.1 定义
    2. 2.2. 1.2 为什么应急响应很重要
    3. 2.3. 1.3 应急响应 vs 渗透测试
  3. 3. 二、应急响应标准流程
    1. 3.1. 2.1 PDCERF 模型
      1. 3.1.1. P - Preparation(准备阶段)
      2. 3.1.2. D - Detection(检测阶段)
      3. 3.1.3. C - Containment(遏制阶段)
      4. 3.1.4. E - Eradication(根除阶段)
      5. 3.1.5. R - Recovery(恢复阶段)
      6. 3.1.6. F - Follow-up(跟踪阶段)
  4. 4. 三、应急响应的核心思路
    1. 4.1. 3.1 从异常现象出发
    2. 4.2. 3.2 溯源攻击路径
    3. 4.3. 3.3 应急响应的四个关键问题
  5. 5. 四、技能树
    1. 5.1. 4.1 基础技能
      1. 5.1.1. Linux 系统知识
      2. 5.1.2. 核心排查命令
      3. 5.1.3. 日志分析能力
    2. 5.2. 4.2 进阶技能
      1. 5.2.1. 入侵排查方法论
      2. 5.2.2. 后门检测与分析
      3. 5.2.3. 恶意样本分析基础
    3. 5.3. 4.3 高级技能
      1. 5.3.1. 数字取证
      2. 5.3.2. 自动化能力
      3. 5.3.3. Java Web 专项(结合你的优势)
    4. 5.4. 4.4 技能树全景图
  6. 6. 五、学习路径详细规划
    1. 6.1. 第1周:基础篇
      1. 6.1.1. 学习目标
      2. 6.1.2. 学习内容
      3. 6.1.3. 练习任务
    2. 6.2. 第2周:入侵排查篇
      1. 6.2.1. 学习目标
      2. 6.2.2. 学习内容
      3. 6.2.3. 练习任务
    3. 6.3. 第3周:实战场景篇(上)
      1. 6.3.1. 学习目标
      2. 6.3.2. 学习内容
      3. 6.3.3. Java 工程师加分项
    4. 6.4. 第4周:实战场景篇(下)
      1. 6.4.1. 学习目标
      2. 6.4.2. 学习内容
    5. 6.5. 第5周:持久化后门篇(上)
      1. 6.5.1. 学习目标
      2. 6.5.2. 学习内容
    6. 6.6. 第6周:持久化后门篇(下)
      1. 6.6.1. 学习目标
      2. 6.6.2. 学习内容
    7. 6.7. 第7周:工具篇 + 综合实验
      1. 6.7.1. 学习目标
      2. 6.7.2. 学习内容
  7. 7. 六、应急响应通用 Checklist
    1. 7.1. 6.1 信息采集
    2. 7.2. 6.2 进程与网络
    3. 7.3. 6.3 文件系统
    4. 7.4. 6.4 定时任务与服务
    5. 7.5. 6.5 后门排查
    6. 7.6. 6.6 日志分析
  8. 8. 七、实验环境使用指南
    1. 8.1. 7.1 环境要求
    2. 8.2. 7.2 Docker 基础命令
    3. 8.3. 7.3 docker-compose 用法
    4. 8.4. 7.4 实验流程
    5. 8.5. 7.5 常见问题处理
  9. 9. 八、常用在线资源推荐
    1. 9.1. 知识学习类
    2. 9.2. 工具资源类
    3. 9.3. 实战练习类
    4. 9.4. 社区与博客类
  10. 10. 九、术语表

Linux应急响应 - 00 学习路线

00 - 学习路线与应急响应概述

所属系列Linux应急响应

前置页面:无(本页为起点)

后续页面01-系统基础与关键目录

难度:入门

预计学习时间:2 小时

一、什么是应急响应

1.1 定义

应急响应(Incident Response, IR) 是指组织为应对信息安全事件而采取的一系列有组织的方法和行动

核心目标:

快速检测 安全事件

有效遏制 事件影响范围

彻底根除 攻击者的访问权限和后门

安全恢复 业务正常运行

事后总结 提升防御能力

通俗理解:服务器”生病了”,应急响应就是”看病 → 诊断 → 治疗 → 康复 → 防复发”的全过程

1.2 为什么应急响应很重要

没有 100% 安全的系统,入侵只是时间问题

应急响应能力决定了安全事件的损失程度

企业合规要求(等保2.0、GDPR、SOC2 等)都对应急响应有明确要求

一个典型的时间线对比:

1
2
3
4
5
有应急响应能力:
发现异常(T+0h) → 确认入侵(T+1h) → 遏制隔离(T+2h) → 清除后门(T+6h) → 恢复业务(T+8h)

无应急响应能力:
发现异常(T+0h) → 手忙脚乱(T+2h) → 格式化重装(T+24h) → 后门残留再次被入侵(T+48h)

1.3 应急响应 vs 渗透测试

维度 渗透测试 应急响应
视角 攻击者视角 防御者视角
目标 发现漏洞 检测入侵、消除威胁
时间 计划内 突发事件
压力 相对可控 高压、紧迫
技能重叠 漏洞利用、网络知识 漏洞利用、网络知识
独特技能 绕过防御、社工 日志分析、取证、溯源

对于有渗透测试背景的工程师,学习应急响应意味着”换一个视角看安全”

理解攻击者的手法,是做好应急响应的基础

二、应急响应标准流程

2.1 PDCERF 模型

PDCERF 是 CERT/CC 提出的应急响应方法论,也是国内等保体系推荐的标准流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
┌────────────────────────────────────────────────────────┐
PDCERF 模型 │
│ │
│ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │
│ │ P │──▶│ D │──▶│ C │──▶│ E │──▶│ R │ │
│ │准备 │ │检测 │ │遏制 │ │根除 │ │恢复 │ │
│ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘ │
│ │ │
│ ▼ │
│ ┌─────┐ │
│ │ F │ │
│ │跟踪 │ │
│ └─────┘ │
└────────────────────────────────────────────────────────┘

P - Preparation(准备阶段)

在安全事件发生之前做好准备工作

关键动作:

建立应急响应团队(CSIRT)

制定应急响应预案和流程

准备应急响应工具包(静态编译的二进制工具、取证工具)

建立日志收集和监控系统

定期进行应急演练

对于 Linux 系统,准备工作包括:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 准备静态编译的排查工具(避免系统工具被替换)
# 推荐准备以下工具的静态编译版本:
# - busybox(包含大部分常用命令)
# - ps, netstat, ls, find, lsof
# - strace, ltrace

# 建立基线
# 记录正常状态下的系统信息
ps auxf > /root/baseline/ps_baseline.txt
netstat -tlnp > /root/baseline/netstat_baseline.txt
find / -perm -4000 -type f > /root/baseline/suid_baseline.txt
rpm -Va > /root/baseline/rpm_verify_baseline.txt # CentOS/RHEL
dpkg -V > /root/baseline/dpkg_verify_baseline.txt # Debian/Ubuntu

D - Detection(检测阶段)

发现和确认安全事件

常见发现渠道:

安全设备告警(IDS/IPS、WAF、HIDS)

用户/运维人员上报(服务器卡顿、异常进程)

外部通报(CERT、合作伙伴、安全社区)

日志审计发现异常

蜜罐触发

检测阶段的核心任务:

确认是否真的发生了安全事件(排除误报)

初步判断事件类型和严重程度

确定受影响的范围

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 检测阶段的快速排查命令
# 1. 查看异常登录
last -n 20
lastb -n 20

# 2. 查看异常进程
ps auxf | grep -v '\[' | sort -k3 -rn | head -20

# 3. 查看异常网络连接
netstat -tlnp
ss -tlnp

# 4. 查看最近修改的文件
find /etc /usr /var -mtime -3 -type f 2>/dev/null

# 5. 查看异常定时任务
for user in $(cut -d: -f1 /etc/passwd); do
crontab -l -u "$user" 2>/dev/null
done

C - Containment(遏制阶段)

限制安全事件的影响范围,防止进一步扩散

遏制策略分为两类:

短期遏制:快速止血

断开网络(物理断网或 iptables 隔离)

封禁攻击源 IP

停止被入侵的服务

长期遏制:在彻底清除前的临时方案

部署临时访问控制规则

限制账户权限

启用增强日志记录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 短期遏制示例

# 封禁攻击IP
iptables -I INPUT -s 1.2.3.4 -j DROP

# 隔离服务器(只允许管理IP访问)
iptables -I INPUT -p tcp --dport 22 -s 10.0.0.100 -j ACCEPT
iptables -I INPUT -p tcp --dport 22 -j DROP

# 停止可疑服务
systemctl stop suspicious-service

# 禁用可疑账户
usermod -L suspicious-user
passwd -l suspicious-user

# 杀死可疑进程(先记录信息再杀)
# 重要:杀之前先采集证据!
ls -la /proc/<PID>/exe
cat /proc/<PID>/cmdline
ls -la /proc/<PID>/fd/
cat /proc/<PID>/environ
cp /proc/<PID>/exe /tmp/evidence/malware_sample
kill -9 <PID>

E - Eradication(根除阶段)

彻底清除攻击者的所有后门和恶意文件

这是最复杂的阶段,需要全面排查:

清除所有后门(参见 15-Crontab后门 ~ 27-反弹Shell技术与检测

修复被利用的漏洞

重置所有可能泄露的凭据

验证系统文件完整性

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
# 根除阶段的排查要点

# 1. 检查所有用户的 crontab
for user in $(cut -d: -f1 /etc/passwd); do
echo "=== $user ==="
crontab -l -u "$user" 2>/dev/null
done

# 2. 检查系统级定时任务
ls -la /etc/cron.d/
cat /etc/crontab
ls -la /etc/cron.daily/ /etc/cron.hourly/ /etc/cron.weekly/ /etc/cron.monthly/

# 3. 检查 SSH 后门
find / -name "authorized_keys" -exec ls -la {} \; -exec cat {} \;

# 4. 检查异常服务
systemctl list-unit-files --type=service | grep enabled

# 5. 检查启动项
ls -la /etc/init.d/
cat /etc/rc.local
ls -la /etc/profile.d/

# 6. 检查 SUID 文件
find / -perm -4000 -type f 2>/dev/null

# 7. 检查 LD_PRELOAD
cat /etc/ld.so.preload
echo $LD_PRELOAD

# 8. 检查 PAM 配置
find /etc/pam.d/ -mtime -30 -type f
find /lib/security/ -mtime -30 -o -name "*.so" -newer /usr/sbin/sshd

R - Recovery(恢复阶段)

将系统恢复到正常运行状态

关键步骤:

从可信备份恢复数据(如需要)

重新部署受影响的服务

更新安全补丁

加强安全配置

恢复网络连接

持续监控一段时间确保没有残留

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 恢复阶段

# 1. 更新系统补丁
# CentOS/RHEL
yum update -y
# Debian/Ubuntu
apt update && apt upgrade -y

# 2. 加强 SSH 配置
cat >> /etc/ssh/sshd_config << 'SSHEOF'
PermitRootLogin no
PasswordAuthentication no
MaxAuthTries 3
AllowUsers deploy admin
SSHEOF
systemctl restart sshd

# 3. 部署 HIDS(主机入侵检测)
# 例如安装 OSSEC/Wazuh

# 4. 加强日志审计
# 确保关键日志远程备份

F - Follow-up(跟踪阶段)

事后总结与改进

输出物:

应急响应报告:事件时间线、影响范围、处置过程、根因分析

改进建议:安全加固方案、流程优化建议

知识沉淀:将新的攻击手法和检测方法纳入知识库

预案更新:更新应急响应预案

报告模板关键要素:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
一、事件概述
- 事件类型、发现时间、影响范围
二、事件时间线
- 攻击者入侵时间 → 横向移动 → 发现时间 → 处置时间
三、攻击路径分析
- 初始入侵点 → 权限提升 → 横向移动 → 持久化
四、处置过程
- 遏制措施 → 根除操作 → 恢复步骤
五、影响评估
- 受影响系统、数据泄露情况
六、根因分析
- 漏洞原因、管理原因
七、改进建议
- 短期加固、长期建设

三、应急响应的核心思路

3.1 从异常现象出发

应急响应通常从一个”异常现象”开始:

1
2
3
4
5
6
7
8
9
10
11
12
常见的异常现象触发点:

┌─────────────────────────────────────────────────┐
│ CPU 占用异常高 → 挖矿?恶意进程? │
│ 磁盘空间突然减少 → 数据外泄?日志清除? │
│ 服务器无法 SSH 登录 → 密码被改?SSH配置篡改? │
│ 网站被篡改/挂马 → Webshell?数据库注入? │
│ 大量外联连接 → 反弹Shell?C2通信? │
│ 文件被加密 → 勒索病毒? │
│ 出现陌生用户/进程 → 后门?持久化? │
│ 安全设备告警 → 漏洞利用?暴力破解? │
└─────────────────────────────────────────────────┘

3.2 溯源攻击路径

从异常现象反向追踪,还原攻击者的完整路径:

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
攻击路径还原思路:

异常现象(发现点)


确认入侵(排除误报)


分析攻击方式(怎么进来的)

├── Web漏洞利用?→ 分析Web日志
├── SSH暴力破解?→ 分析auth.log
├── 服务漏洞利用?→ 分析服务日志
└── 供应链/内部人员?→ 分析操作日志


确定入侵时间(最早的恶意行为)


排查横向移动(还影响了哪些机器)


排查持久化(留了什么后门)


全面清除 + 加固

3.3 应急响应的四个关键问题

每次应急响应都要回答这四个问题:

谁?(Who)

攻击者是谁(IP/地理位置/组织)

内部人员还是外部攻击者

何时?(When)

最早入侵时间

各阶段的时间线

怎么?(How)

通过什么漏洞/方式进入

使用了什么工具/技术

做了什么操作(数据窃取/后门植入/横向移动)

影响?(Impact)

受影响的系统范围

数据泄露程度

业务影响程度

四、技能树

4.1 基础技能

Linux 系统知识

文件系统层次结构(FHS)

用户与权限管理(passwd/shadow/sudoers)

进程管理与信号

系统服务管理(systemd/init)

网络配置(iptables/firewalld/ss/ip)

包管理(yum/apt/rpm/dpkg)

核心排查命令

进程类:ps, top, htop, pstree, strace, ltrace

网络类:netstat, ss, lsof, tcpdump, nmap

文件类:find, stat, file, strings, md5sum, sha256sum

用户类:who, w, last, lastb, lastlog, id

日志类:journalctl, grep, awk, sed, sort, uniq

系统类:uname, uptime, dmesg, vmstat, iostat

日志分析能力

Linux 日志体系理解(rsyslog/journald)

常见日志文件位置和格式

正则表达式

awk/sed/grep 文本处理

日志时间线重建

4.2 进阶技能

入侵排查方法论

账户安全排查流程

进程与网络异常分析

文件系统取证方法

计划任务与服务审计

历史记录分析与时间线重建

后门检测与分析

13种 Linux 持久化后门识别

Crontab 后门检测

SSH authorized_keys 后门检测

Systemd 服务后门检测

Bashrc/Profile 后门检测

LD_PRELOAD 劫持检测

PAM 后门检测

Rootkit 检测

SUID 后门检测

Alias 后门检测

Vim Modeline 后门检测

SSH 软链接后门检测

inetd/xinetd 后门检测

反弹 Shell 检测

恶意样本分析基础

静态分析(strings/file/binwalk/readelf)

沙箱分析

YARA 规则编写

4.3 高级技能

数字取证

磁盘镜像与分析

内存取证(Volatility)

网络流量取证

时间线取证(plaso/log2timeline)

自动化能力

编写自动化排查脚本

日志集中化与自动分析(ELK/Splunk)

YARA 规则管理与自动化扫描

SOAR 平台使用

Java Web 专项(结合你的优势)

Tomcat 应急响应

Spring Boot/Cloud 应急响应

Java 内存马检测(参见 01-内存马概述

Java 反序列化攻击痕迹分析

Dubbo 框架安全事件分析

4.4 技能树全景图

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
应急响应技能树
├── 基础层
│ ├── Linux 系统知识
│ ├── 网络协议基础
│ ├── Shell 脚本编程
│ └── 日志分析基础
├── 核心层
│ ├── 入侵排查方法论
│ │ ├── 账户排查
│ │ ├── 进程排查
│ │ ├── 网络排查
│ │ ├── 文件排查
│ │ ├── 计划任务排查
│ │ └── 服务排查
│ ├── 后门检测(13种)
│ └── 常见场景应急
│ ├── SSH 暴力破解
│ ├── Web 应急(Tomcat/Nginx/Apache)
│ ├── 中间件应急(Redis/MySQL)
│ ├── 挖矿病毒
│ └── 勒索病毒
├── 进阶层
│ ├── 数字取证
│ ├── 恶意样本分析
│ ├── YARA 规则
│ └── 自动化排查
└── 专项层(Java安全)
├── Tomcat 应急
├── Spring 应急
├── 内存马检测
└── 反序列化痕迹分析

五、学习路径详细规划

第1周:基础篇

学习目标

理解 Linux 文件系统结构和关键目录

掌握应急响应中最常用的 20 个命令

能够分析 Linux 系统日志

学习内容

Day 1-2:系统基础

阅读 01-系统基础与关键目录

重点掌握 /etc、/var/log、/proc、/tmp 目录结构

练习:在 Docker 环境中浏览各关键目录,记录每个目录的作用

Day 3-4:排查命令

阅读 02-排查命令速查

重点练习 ps/netstat/ss/lsof/find/grep 命令

练习:编写一个信息采集脚本,自动收集系统状态信息

Day 5-7:日志分析

阅读 03-日志分析基础

重点掌握 auth.log 和 syslog 的分析方法

练习:分析实验环境中的日志,回答”谁在什么时间做了什么”

练习任务

编写一个 system-info.sh 脚本,收集以下信息:

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
#!/bin/bash
# 系统信息采集脚本 - 第1周练习

echo "========== 系统基本信息 =========="
uname -a
uptime

echo "========== 用户信息 =========="
cat /etc/passwd | grep -v nologin | grep -v false
who
last -n 10

echo "========== 进程信息 =========="
ps auxf --sort=-%cpu | head -20

echo "========== 网络信息 =========="
ss -tlnp
ss -tnp

echo "========== 定时任务 =========="
crontab -l 2>/dev/null
ls -la /etc/cron.d/

echo "========== 最近修改的文件 =========="
find /etc -mtime -7 -type f 2>/dev/null

第2周:入侵排查篇

学习目标

掌握系统化的入侵排查方法论

能够从账户、进程、文件、计划任务、服务五个维度进行排查

能够重建攻击时间线

学习内容

Day 1:账户安全排查

阅读 04-账户安全排查

重点:异常 UID 0 用户、sudo 权限、SSH 密钥

Day 2-3:进程与网络分析

阅读 05-进程与网络分析

重点:进程树分析、/proc 深入分析、异常网络连接

Day 4:文件系统取证

阅读 06-文件系统取证

重点:可疑文件搜索、文件完整性验证

Day 5:计划任务审计

阅读 07-计划任务审计

重点:所有 cron 位置、systemd timer

Day 6:服务与启动项审计

阅读 08-服务与启动项审计

重点:systemd 服务审计、自启动排查

Day 7:历史记录与时间线

阅读 09-历史记录与时间线分析

重点:bash_history 分析、MAC 时间、时间线重建

练习任务

启动 backdoor-lab 实验环境,完成以下排查:

找出所有异常用户账户

找出所有可疑进程

找出所有可疑文件

找出所有异常定时任务

重建攻击时间线

第3周:实战场景篇(上)

学习目标

掌握 SSH 暴力破解的检测和防护

掌握 Tomcat/Java Web 应急响应流程

掌握 Nginx/Apache Web 日志分析

学习内容

Day 1-2:SSH 暴力破解与未授权访问

阅读 10-SSH暴力破解与未授权访问

实验:启动 ssh-bruteforce 实验环境

练习:分析 auth.log,统计攻击 IP,确认是否有成功登录

Day 3-5:Tomcat 与 Java Web 应急

阅读 11-Tomcat与Java-Web应急

结合 00-前置知识02-Servlet型内存马

实验:启动 tomcat-webshell 实验环境

练习:分析 Tomcat 日志、查找 Webshell、检测内存马

Day 6-7:Nginx 与 Apache 应急

阅读 12-Nginx与Apache应急

练习:分析 Web 访问日志,识别攻击行为,还原攻击过程

Java 工程师加分项

本周的 Tomcat 应急是重点中的重点,结合你的 Java 背景可以深入研究:

JSP Webshell 的字节码级分析

Tomcat Filter/Valve/Listener 内存马的检测

Spring Controller/Interceptor 内存马的检测

Java Agent 内存马的检测

反序列化攻击的 gadget chain 痕迹

第4周:实战场景篇(下)

学习目标

掌握 Redis/MySQL 数据库应急

掌握挖矿病毒和勒索病毒的应急响应

了解供应链攻击检测方法

学习内容

Day 1-2:Redis 未授权访问应急

阅读 13-Redis未授权访问应急

实验:启动 redis-unauth 实验环境

练习:还原 Redis 攻击过程(写SSH密钥/Crontab/Webshell)

Day 3:MySQL 入侵分析

阅读 14-MySQL入侵分析

重点:UDF 提权排查、SQL 注入痕迹

Day 4-5:挖矿病毒应急

阅读 Linux应急响应/14.3-挖矿病毒应急

实验:启动 mining-malware 实验环境

练习:发现挖矿进程、清除挖矿木马、排查持久化、溯源

Day 6:勒索病毒应急

阅读 Linux应急响应/14.5-勒索病毒应急

重点:应急处置流程、常见勒索家族特征

Day 7:供应链攻击检测

阅读 14.7-供应链攻击检测

重点:Maven 依赖审计、恶意包检测

第5周:持久化后门篇(上)

学习目标

掌握 7 种常见 Linux 持久化后门的原理和检测方法

学习内容

Day 1:Crontab 后门

阅读 15-Crontab后门

实验:在实验环境中植入和检测各种 crontab 后门

Day 2:SSH authorized_keys 后门

阅读 16-SSH-authorized_keys后门

重点:command= 选项利用、隐蔽密钥后门

Day 3:Systemd Service 后门

阅读 17-Systemd-Service后门

实验:创建恶意服务并检测

Day 4:Bashrc 与 Profile 后门

阅读 18-Bashrc与Profile后门

重点:Shell 初始化文件加载顺序

Day 5:LD_PRELOAD 劫持

阅读 19-LD_PRELOAD劫持

重点:动态链接库劫持原理和检测

Day 6:PAM 后门

阅读 20-PAM后门

重点:PAM 认证框架、万能密码后门

Day 7:Rootkit 检测

阅读 21-Rootkit检测

重点:rkhunter/chkrootkit 使用

第6周:持久化后门篇(下)

学习目标

掌握剩余 6 种后门的检测方法

能够综合运用后门检测技能

学习内容

Day 1:SUID 后门

阅读 22-SUID后门

重点:SUID 提权利用和检测

Day 2:Alias 后门

阅读 23-Alias后门

重点:命令别名劫持的隐蔽性

Day 3:Vim Modeline 后门

阅读 24-Vim-Modeline后门

Day 4:SSH 软链接后门

阅读 25-SSH软链接后门

重点:PAM 认证绕过原理

Day 5:inetd 与 xinetd 后门

阅读 26-inetd与xinetd后门

Day 6:反弹 Shell 技术与检测

阅读 27-反弹Shell技术与检测

重点:各种反弹 Shell 的检测方法

Day 7:后门综合排查练习

启动 backdoor-lab 综合实验环境

要求:找出环境中植入的所有后门(至少 8 种)

第7周:工具篇 + 综合实验

学习目标

掌握专业应急响应工具的使用

能够独立完成端到端的应急响应

学习内容

Day 1-2:日志分析工具

阅读 28-日志分析工具

练习:使用 GoAccess 分析 Web 日志

Day 3:取证工具

阅读 29-取证工具

练习:使用 Volatility 分析内存镜像

Day 4:YARA 规则

阅读 30-YARA规则

练习:编写 Webshell 检测规则和挖矿程序检测规则

Day 5:自动化排查脚本

阅读 31-自动化排查脚本

练习:编写或定制一个综合排查脚本

Day 6-7:综合实验

完成一次完整的应急响应流程

从发现异常 → 确认入侵 → 遏制 → 排查 → 清除 → 恢复 → 报告

输出一份完整的应急响应报告

六、应急响应通用 Checklist

6.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
# =============================================
# 应急响应信息采集 Checklist
# =============================================

# --- 系统基本信息 ---
hostname # 主机名
uname -a # 内核版本
cat /etc/os-release # 操作系统版本
uptime # 运行时间
date # 当前时间(注意时区)
timedatectl # 时间和时区配置

# --- 用户账户 ---
cat /etc/passwd # 所有用户
cat /etc/shadow # 密码哈希(需root)
cat /etc/group # 用户组
awk -F: '$3==0{print}' /etc/passwd # UID为0的用户
cat /etc/sudoers # sudo权限
cat /etc/sudoers.d/* # sudo附加配置
who # 当前登录用户
w # 当前登录用户详情
last -n 50 # 最近登录记录
lastb -n 50 # 最近失败登录
lastlog # 所有用户最后登录

6.2 进程与网络

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# --- 进程排查 ---
ps auxf # 进程树
ps -eo pid,ppid,user,%cpu,%mem,stat,start,command --sort=-%cpu | head -30
top -bn1 | head -30 # CPU占用TOP
pstree -p # 进程树(PID)

# --- 网络排查 ---
ss -tlnp # TCP监听端口
ss -ulnp # UDP监听端口
ss -tnp # TCP已建立连接
netstat -tlnp # 同上(旧版工具)
iptables -L -n -v # 防火墙规则
ip addr # 网络接口
ip route # 路由表
cat /etc/resolv.conf # DNS配置
cat /etc/hosts # hosts文件

# --- 进程-网络关联 ---
lsof -i -P -n # 所有网络连接与进程关联
lsof -i :22 # 查看特定端口

6.3 文件系统

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# --- 可疑文件 ---
find / -mtime -3 -type f -not -path "/proc/*" -not -path "/sys/*" 2>/dev/null
find / -ctime -3 -type f -not -path "/proc/*" -not -path "/sys/*" 2>/dev/null
find /tmp /var/tmp /dev/shm -type f 2>/dev/null
find / -name ".*" -type f 2>/dev/null | head -50
find / -perm -4000 -type f 2>/dev/null # SUID文件
find / -perm -2000 -type f 2>/dev/null # SGID文件

# --- 文件完整性 ---
rpm -Va 2>/dev/null # RPM验证(CentOS)
dpkg -V 2>/dev/null # DPKG验证(Ubuntu)

# --- Webshell排查 ---
# Java Web
find /opt /usr/local -name "*.jsp" -mtime -30 2>/dev/null
find /opt /usr/local -name "*.war" -mtime -30 2>/dev/null
find /opt /usr/local -name "*.class" -mtime -30 2>/dev/null
# PHP
find /var/www -name "*.php" -mtime -30 2>/dev/null

6.4 定时任务与服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# --- 定时任务 ---
crontab -l # 当前用户crontab
for user in $(cut -d: -f1 /etc/passwd); do
echo "=== crontab for $user ==="
crontab -l -u "$user" 2>/dev/null
done
cat /etc/crontab # 系统crontab
ls -la /etc/cron.d/ # cron.d目录
ls -la /etc/cron.daily/ # 每日任务
ls -la /etc/cron.hourly/ # 每小时任务
ls -la /etc/cron.weekly/ # 每周任务
ls -la /etc/cron.monthly/ # 每月任务
at -l # at任务
systemctl list-timers # systemd定时器

# --- 服务与启动项 ---
systemctl list-unit-files --type=service | grep enabled
systemctl list-units --type=service --state=running
ls -la /etc/init.d/ # init.d脚本
cat /etc/rc.local # rc.local
ls -la /etc/systemd/system/ # 自定义systemd服务

6.5 后门排查

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
# --- SSH相关 ---
find / -name "authorized_keys" 2>/dev/null
find / -name "authorized_keys" -exec cat {} \;
cat /etc/ssh/sshd_config | grep -v "^#" | grep -v "^$"

# --- 环境变量与别名 ---
env # 环境变量
alias # 命令别名
cat /etc/profile # 全局profile
cat /etc/profile.d/*.sh # profile.d脚本
cat ~/.bashrc # 用户bashrc
cat ~/.bash_profile # 用户bash_profile

# --- 动态链接 ---
cat /etc/ld.so.preload 2>/dev/null # LD_PRELOAD
echo $LD_PRELOAD # 环境变量
ldconfig -p | wc -l # 动态库数量

# --- 历史记录 ---
cat ~/.bash_history # bash历史
cat ~/.mysql_history # MySQL历史
cat ~/.python_history # Python历史

# --- Rootkit检测 ---
# chkrootkit
# rkhunter --check

6.6 日志分析

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
# --- 系统日志 ---
tail -n 500 /var/log/syslog # Debian/Ubuntu
tail -n 500 /var/log/messages # CentOS/RHEL

# --- 认证日志 ---
tail -n 500 /var/log/auth.log # Debian/Ubuntu
tail -n 500 /var/log/secure # CentOS/RHEL

# --- SSH暴力破解检测 ---
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head -20
grep "Accepted password" /var/log/auth.log | tail -20
grep "Accepted publickey" /var/log/auth.log | tail -20

# --- Web日志 ---
# Nginx
tail -n 1000 /var/log/nginx/access.log
tail -n 1000 /var/log/nginx/error.log
# Apache
tail -n 1000 /var/log/apache2/access.log
tail -n 1000 /var/log/httpd/access_log
# Tomcat
tail -n 1000 /opt/tomcat/logs/catalina.out
tail -n 1000 /opt/tomcat/logs/localhost_access_log.*.txt

# --- 日志清除痕迹 ---
ls -la /var/log/ # 检查日志文件大小和时间
cat /var/log/wtmp | wc -c # wtmp文件大小

七、实验环境使用指南

7.1 环境要求

Docker Desktop for macOS(建议 4.x 以上版本)

建议分配资源:CPU 4核+、内存 8GB+

磁盘空间:至少 20GB 可用

7.2 Docker 基础命令

1
2
3
4
5
6
7
8
9
# Docker 基础操作
docker ps # 查看运行中的容器
docker ps -a # 查看所有容器(含已停止)
docker images # 查看本地镜像
docker exec -it <容器名> /bin/bash # 进入容器
docker logs <容器名> # 查看容器日志
docker inspect <容器名> # 查看容器详情
docker stop <容器名> # 停止容器
docker rm <容器名> # 删除容器

7.3 docker-compose 用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 启动实验环境(在对应实验目录下执行)
docker-compose up -d # 后台启动
docker-compose up # 前台启动(可看日志)

# 查看状态
docker-compose ps # 查看容器状态
docker-compose logs # 查看日志
docker-compose logs -f # 实时查看日志

# 停止和清理
docker-compose stop # 停止容器(保留数据)
docker-compose down # 停止并删除容器
docker-compose down -v # 停止并删除容器和数据卷

# 重建环境
docker-compose down -v && docker-compose up -d

7.4 实验流程

标准的实验流程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1. 进入实验目录
cd /Users/lucy/Desktop/AI/应急响应/labs/<场景名>/

2. 阅读实验说明
cat README.md

3. 启动实验环境
docker-compose up -d

4. 确认环境就绪
docker-compose ps
docker-compose logs

5. 进入目标容器开始排查
docker exec -it <容器名> /bin/bash

6. 按照对应的 Logseq 笔记进行排查练习

7. 对照参考答案
cat /Users/lucy/Desktop/AI/应急响应/answers/<场景名>.md

8. 清理环境
docker-compose down -v

7.5 常见问题处理

端口冲突

1
2
3
# 查看端口占用
lsof -i :<端口号>
# 修改 docker-compose.yml 中的端口映射

容器启动失败

1
2
3
4
5
# 查看日志
docker-compose logs
# 重新构建
docker-compose build --no-cache
docker-compose up -d

磁盘空间不足

1
2
# 清理 Docker 缓存
docker system prune -a

八、常用在线资源推荐

知识学习类

SANS Incident Handler’s Handbook —— SANS 出品的应急响应手册,业界权威参考

NIST SP 800-61 —— 美国 NIST 发布的计算机安全事件处理指南,应急响应标准框架

The Art of Memory Forensics —— 内存取证经典书籍,Volatility 框架作者编写

Linux Forensics —— Philip Polstra 编写的 Linux 取证专著

ATT&CK Matrix for Linux —— MITRE ATT&CK 框架的 Linux 攻击技术矩阵

工具资源类

GTFOBins —— 收集可被用于绕过安全限制的 Unix 二进制程序,SUID 后门排查必备

LOLBAS/LOLBins —— Living Off The Land 技术收集,了解攻击者如何利用系统自带工具

Volatility Profiles —— Volatility 内存取证框架的系统 profile 仓库

YARA Rules Repository —— 社区维护的 YARA 规则集,覆盖常见恶意软件

Sigma Rules —— 通用的日志检测规则格式,可转换为各 SIEM 平台的查询语句

实战练习类

CyberDefenders —— 蓝队(防御方)CTF 挑战平台,包含大量取证和应急响应题目

Blue Team Labs Online —— 在线蓝队实验平台,包含 IR 和取证场景

DFIR Madness —— 数字取证与应急响应的实战案例和挑战

Malware Traffic Analysis —— 恶意流量分析练习,提供 pcap 文件和分析指南

HackTheBox Sherlock —— HTB 平台的蓝队挑战系列

社区与博客类

SANS DFIR Blog —— SANS 数字取证与应急响应博客,持续更新行业动态

The DFIR Report —— 高质量的真实入侵案例分析报告

13 Cubed —— YouTube 上的 DFIR 教程频道,内容深入浅出

Hal Pomeranz Blog —— Linux 取证领域的知名专家博客

先知社区 / FreeBuf —— 国内安全社区,有大量中文应急响应案例分享

微步在线威胁情报 —— 国内威胁情报平台,可查询恶意 IP/域名/样本

九、术语表

术语 英文 说明
应急响应 Incident Response (IR) 安全事件的检测、分析和处置
数字取证 Digital Forensics 对数字证据的采集、保全和分析
入侵检测 Intrusion Detection 检测未授权访问或恶意活动
指标 Indicator of Compromise (IoC) 表明系统可能被入侵的迹象
攻击面 Attack Surface 系统可能被攻击的所有入口点
横向移动 Lateral Movement 攻击者在内网中从一台机器移动到另一台
持久化 Persistence 攻击者维持对系统访问权限的技术
提权 Privilege Escalation 从低权限提升到高权限
C2 Command & Control 攻击者控制被入侵主机的通信通道
TTPs Tactics, Techniques, Procedures 攻击者的战术、技术和过程
SIEM Security Information and Event Management 安全信息和事件管理系统
SOAR Security Orchestration, Automation and Response 安全编排、自动化与响应
HIDS Host-based Intrusion Detection System 基于主机的入侵检测系统
EDR Endpoint Detection and Response 端点检测与响应
WAF Web Application Firewall Web应用防火墙
Webshell - 上传到Web服务器的恶意脚本
Rootkit - 隐藏恶意活动的工具集
挖矿木马 Cryptominer 利用受害者算力挖掘加密货币的恶意程序
勒索病毒 Ransomware 加密文件并索要赎金的恶意程序
反弹Shell Reverse Shell 受害者主动连接攻击者的Shell会话

上一章 目录 下一章
Linux应急响应 01-系统基础与关键目录