Linux 入侵检测与应急响应:安全事件排查实战手册
生产环境的安全防护不能只靠边界防火墙。攻击者一旦突破外层防线,主机层面的入侵检测与应急响应能力是最后一道防线。 入侵检测体系分三层:网络层(NIDS)、主机层(HIDS)、应用层(WAF/RASP)。
一、入侵检测体系概览
三层安全检测
| 层级 | 工具 | 能力 | 局限性 |
|---|---|---|---|
| 网络层 (NIDS) | Suricata / Snort | 已知攻击特征检测 | 加密流量无法深度检测 |
| 主机层 (HIDS) | auditd + AIDE + OSSEC/Wazuh | 文件篡改、提权操作、异常进程 | 内核级 Rootkit 可绕过 |
| 应用层 | ModSecurity / OpenRASP | SQL注入、XSS、命令注入 | 业务逻辑漏洞难以覆盖 |
推荐工具组合方案
单一工具无法覆盖所有场景。推荐组合:
| 工具 | 定位 | 核心能力 |
|---|---|---|
| AIDE | 文件完整性基线 | 监控关键二进制/配置文件是否被篡改 |
| rkhunter + chkrootkit | Rootkit 扫描 | 内核级和用户态后门检测 |
| auditd | 内核级审计 | 记录系统调用级别的操作日志,满足等保/PCI-DSS |
| ClamAV | 恶意文件查杀 | 开源杀毒引擎,社区维护病毒库 |
安全加固(预防)与入侵检测(发现/响应)的体系关系参见 server-security-hardening-checklist。
二、文件完整性检测(AIDE)
AIDE(Advanced Intrusion Detection Environment)基于文件属性数据库的完整性检测。
安装与配置
# Ubuntu/Debian
sudo apt install -y aide
# CentOS/RHEL
sudo dnf install -y aide
检测规则组
AIDE 配置文件 /etc/aide/aide.conf 定义不同级别的检测规则:
| 规则组 | 检测范围 | 适用 |
|---|---|---|
BINLIB |
全属性 + sha256 + sha512 | 关键二进制(/bin, /sbin, /usr/bin) |
CONFFILE |
内容变更 + 权限 | 配置文件(/etc) |
LOGFILE |
仅权限和属主 | 日志文件(忽略内容增长) |
DATAONLY |
权限 + 属主 + sha256 | 数据目录 |
基线生成与检查
# 初始化基线数据库
sudo aide --init
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db
# 安全存储基线(攻击者能修改基线则AIDE失效)
sudo cp /var/lib/aide/aide.db /mnt/readonly-backup/aide.db.$(date +%Y%m%d)
# 定期检查
sudo aide --check
# 合法变更后更新基线
sudo aide --update
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db
每日自动检查:
# /etc/cron.d/aide-check
0 3 * * * root /usr/bin/aide --check | mail -s "AIDE Report" [email protected]
三、Rootkit 检测(rkhunter + chkrootkit)
rkhunter
# 安装
sudo apt install -y rkhunter
sudo rkhunter --update
sudo rkhunter --propupd
# 完整扫描
sudo rkhunter --check --skip-keypress --report-warnings-only
# 日志查看
cat /var/log/rkhunter.log
# [Found] 可疑项 → 人工确认
# [Warning] 警告项 → 可能误报或真实威胁
chkrootkit 交叉验证
单一工具可能漏检,用 chkrootkit 做交叉验证(检测原理不同):
sudo apt install -y chkrootkit
sudo chkrootkit # 交互模式
sudo chkrootkit -q # 静默模式(只输出可疑项)
- rkhunter:基于签名匹配 + 文件属性检查 + 系统配置审计
- chkrootkit:基于特征字符串搜索 + 系统命令输出分析
四、系统审计框架(auditd)
auditd 是 Linux 内核审计子系统的用户态守护进程,可记录系统调用级别的操作日志。
架构
内核 audit 模块 → netlink socket → auditd 守护进程 → 日志文件
↓
ausearch / aureport(查询/报告)
企业级审计规则集
# /etc/audit/rules.d/security.rules
# 缓冲区配置
-b 8192 # 审计缓冲区大小
-f 1 # 满策略:1=警告 2=关机
# 身份与认证审计
-w /etc/passwd -p wa -k identity_mod
-w /etc/shadow -p wa -k identity_mod
-w /etc/sudoers -p wa -k privilege_escalation
# 提权操作审计
-a always,exit -F arch=b64 -S setuid,setgid,setreuid,setregid -F auid>=1000 -k priv_cmd
# 网络连接审计(反弹 Shell 检测)
-a always,exit -F arch=b64 -S connect -F auid>=1000 -k net_connect
-a always,exit -F arch=b64 -S bind -F auid>=1000 -k net_bind
# 临时目录执行审计(攻击者释放恶意文件)
-a always,exit -F arch=b64 -S execve -F dir=/tmp -k exec_tmp
-a always,exit -F arch=b64 -S execve -F dir=/var/tmp -k exec_tmp
# 内核模块加载审计(LKM Rootkit 检测)
-a always,exit -F arch=b64 -S init_module,finit_module -k kernel_mod
# 规则锁定
-e 2
日志查询
# ausearch - 条件搜索
sudo ausearch -k identity_mod -ts today # 身份文件变更
sudo ausearch -ua 1001 -ts recent # 指定用户操作
sudo ausearch --success no -ts today # 失败系统调用
# aureport - 汇总报告
sudo aureport -au --summary # 认证事件
sudo aureport -x --summary # 可执行文件
sudo aureport --failed --summary # 失败事件
五、应急响应流程
应急响应六步法
准备 → 识别 → 遏制 → 根除 → 恢复 → 总结
初始响应检查清单
按易失性从高到低顺序采集(切勿直接关机——内存中跑着关键证据):
| # | 排查项 | 命令 | 关注点 |
|---|---|---|---|
| 1 | 系统基本信息 | uname -a, uptime, date |
判断是否被重启、时区 |
| 2 | 用户账号 | awk -F: '$3==0 {print $1}' /etc/passwd |
UID=0 的非 root 用户、空密码、新增用户 |
| 3 | 进程排查 | ps auxf, ls -la /proc/*/exe 2>/dev/null | grep "(deleted)" |
隐藏进程、已删除仍运行的可执行文件 |
| 4 | 网络连接 | ss -tulnp, ss -tnp state established |
异常监听端口、反弹 Shell、挖矿外联 |
| 5 | 文件排查 | find / -mtime -3 -type f, find / -perm -4000 |
近期变更文件、SUID/SGID 提权文件、隐藏文件 |
| 6 | 定时任务 | crontab -l, systemctl list-timers --all |
crontab/systemd 后门持久化 |
自动化排查脚本
文章提供了两个实战脚本(详见 raw 源文件):
security_audit.sh— 一键采集系统安全状态,生成巡检报告intrusion_detect.sh— 自动化检测常见入侵痕迹(异常用户/隐藏进程/挖矿连接/Webshell/Rootkit)
六、纵深防御体系
┌─────────────────────────────────────────────┐
│ 网络层:iptables/nftables + Suricata NIDS │
│ ┌─────────────────────────────────────────┐│
│ │ 主机层:auditd + AIDE + rkhunter ││
│ │ ┌─────────────────────────────────────┐││
│ │ │ 应用层:WAF + RASP + 输入校验 │││
│ │ │ ┌─────────────────────────────────┐│││
│ │ │ │ 数据层:加密存储 + 访问控制 ││││
│ │ │ └─────────────────────────────────┘│││
│ │ └─────────────────────────────────────┘││
│ └─────────────────────────────────────────┘│
└─────────────────────────────────────────────┘
告警分级与升级机制
| 级别 | 触发条件 | 响应动作 | 通知方式 |
|---|---|---|---|
| P3-低 | 单次 SSH 失败、端口扫描 | 记录日志 | 日报汇总 |
| P2-中 | 5 分钟内 ≥ 10 次 SSH 失败 | 自动封禁 IP 1 小时 | 企业微信/钉钉 |
| P1-高 | SUID 文件变更、新增 crontab | 封禁 + 隔离主机网络 | 电话告警 |
| P0-紧急 | Rootkit 检出、内核模块加载 | 立即隔离 + 保留现场 | 电话 + 短信 |
日志集中管理
攻击者拿到 root 后第一件事往往是清日志:
# rsyslog 远程转发(TCP 保证可靠)
*.* @@logserver.internal:514
# 本地日志防篡改(只追加属性)
sudo chattr +a /var/log/auth.log
sudo chattr +a /var/log/syslog
七、安全基线建设
CIS Benchmark 提供了各发行版的详细加固清单,核心动作:
# 清理不必要的包和端口
sudo apt purge -y telnetd rsh-server xinetd
# 关闭不必要的服务
for svc in avahi-daemon cups bluetooth; do
sudo systemctl disable --now "$svc"
done
# SUID 文件清理
find / -type f \( -perm -4000 -o -perm -2000 \) -exec ls -la {} \; 2>/dev/null
安全加固详细操作参见 server-security-hardening-checklist 和 ssh-brute-force-protection-guide。
八、常见问题
| 错误现象 | 原因 | 解决方案 |
|---|---|---|
| AIDE 大量误报 | 未排除动态变化文件(日志/缓存) | 在 aide.conf 中用 ! 排除 /var/log、/tmp |
| auditd 导致系统卡顿 | 规则匹配范围过大 | 缩小规则 + 增加 -F auid>=1000 过滤系统进程 |
| rkhunter "Hidden file found" | /dev/.udev 等系统正常文件 |
加入 /etc/rkhunter.conf 白名单 |
| ClamAV 占满 CPU | 默认全盘扫描无限制 | nice -n 19 + --max-filesize 限制 |
| 日志转发丢失数据 | rsyslog 使用 UDP 网络抖动 | 改用 TCP(@@)+ 启用磁盘队列缓冲 |
关联页面
| 页面 | 关联点 |
|---|---|
| server-security-hardening-checklist | 服务器安全加固(预防→检测→响应的安全体系第一环) |
| ssh-brute-force-protection-guide | SSH 暴力破解防御(检测+应急排查的配合) |
| linux-kernel-tuning-production | 内核安全参数(入侵检测的底层基础设施) |
| docker-production-pitfalls | Docker 安全(Docker daemon 入侵检测补充) |
| linux-user-management-guide | Linux 用户管理避坑指南(last/lastb/auditd/用户行为监控的实战方法) |