自动化与脚本
在 Linux 主机上排查入侵痕迹时,用…
当怀疑 Linux 主机被入侵、提权或植入后门时,通过配置审计规则、查询审计日志并生成汇总报告来定位攻击行为。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
在 Linux 主机上排查入侵痕迹时,用通用
解决思路
- 确认审计系统状态与配置:运行 `systemctl status auditd` 检查服务,`auditctl -l` 查看内核中已加载的规则,`cat /etc/audit/auditd.conf | grep -E "log_file|max_log_file|num_logs|space_left_action"` 查看守护进程配置,`auditctl -s` 检查是否出现审计积压或丢事件;若积压达到上限,用 `auditctl -b 8192` 提高 backlog 上限。
- 部署面向入侵检测的审计规则:将规则写入 `/etc/audit/rules.d/intrusion.rules`,包括:监控凭据文件读写(`-w /etc/passwd -p wa -k credential_access`、`-w /etc/shadow -p rwa -k credential_access`、`-w /etc/gshadow -p rwa -k credential_access`);监控提权配置(`-w /etc/sudoers -p wa -k privilege_escalation`、`-w /etc/sudoers.d/ -p wa -k privilege_escalation`);监控 SSH 配置与密钥(`-w /etc/ssh/sshd_config -p wa -k sshd_config_change`、`-w /root/.ssh/authorized_keys -p wa -k ssh_key_tampering`);监控用户与组管理命令(`-w /usr/sbin/useradd -p x -k user_management`、`-w /usr/sbin/usermod -p x -k user_management`、`-w /usr/sbin/groupadd -p x -k user_management`);检测 ptrace 进程注入(`-a always,exit -F arch=b64 -S ptrace -F a0=0x4 -k process_injection` 及 a0=0x5、0x6 的同类规则);监控从异常目录执行程序(`-a always,exit -F arch=b64 -S execve -F exe=/tmp -k exec_from_tmp`、`-a always,exit -F arch=b64 -S execve -F exe=/dev/shm -k exec_from_shm`);检测内核模块加载(`-a always,exit -F arch=b64 -S init_module -S finit_module -k kernel_module_load`、`-a always,exit -F arch=b64 -S delete_module -k kernel_module_remove`、`-w /sbin/insmod -p x -k kernel_module_tool`、`-w /sbin/modprobe -p x -k kernel_module_tool`);监控网络套接字创建以发现反弹 shell(`-a always,exit -F arch=b64 -S socket -F a0=2 -k network_socket_created`、`-a always,exit -F arch=b64 -S connect -F a0=2 -k network_connection`);检测 cron 持久化(`-w /etc/crontab -p wa -k cron_persistence`、`-w /etc/cron.d/ -p wa -k cron_persistence`、`-w /var/spool/cron/ -p wa -k cron_persistence`);监控日志篡改(`-w /var/log/ -p wa -k log_tampering`)。编辑后用 `augenrules --load` 重新加载,并用 `auditctl -l | wc -l` 确认规则数量。
- 用 ausearch 搜索入侵指标:`ausearch -m USER_LOGIN --success no -ts recent` 查最近失败登录;`ausearch -ua 1001 -m EXECVE -ts today` 查指定用户执行的命令;`ausearch -f /etc/shadow -ts this-week` 查对敏感文件的访问;`ausearch -m USER_CMD -ts today` 查 sudo 提权;`ausearch -k kernel_module_load -ts this-month` 查内核模块加载;`ausearch -k exec_from_tmp -ts this-week` 查从 /tmp 执行进程;`ausearch -k ssh_key_tampering -ts this-month` 查 SSH 密钥篡改;`ausearch -a 12345` 按事件 ID 查询;`ausearch -ts 03/15/2026 08:00:00 -te 03/15/2026 18:00:00` 按时间范围查询;加 `-i` 参数解释系统调用号并格式化输出,如 `ausearch -k credential_access -i -ts today`。
- 用 aureport 生成汇总报告做初步研判:`aureport -au -ts this-week --summary` 认证事件汇总;`aureport --failed --summary -ts today` 失败事件汇总;`aureport -x --summary -ts today` 可执行程序汇总;`aureport --anomaly -ts this-week` 异常事件(段错误、混杂模式等);`aureport -f --summary -ts today` 文件访问汇总;`aureport -k --summary -ts this-month` 按自定义规则键汇总;`aureport -s --summary -ts today` 系统调用汇总;`aureport -u --summary -ts this-week` 按用户汇总;`aureport -ts 03/15/2026 08:00:00 -te 03/15/2026 18:00:00 --summary` 按时间段的详细事件报告。
- 重建攻击时间线:先用 `ausearch -m USER_LOGIN -ua 0 --success yes -ts this-week -i | head -50` 确定初始访问时间;再用 `ausearch -ua <UID> -ts "03/15/2026 14:00:00" -te "03/15/2026 18:00:00" -i | aureport -f -i` 追踪被攻陷账号在事件窗口内的所有文件事件;用 `ausearch -m EXECVE -ts "03/15/2026 14:00:00" -te "03/15/2026 18:00:00" -i` 提取事件窗口内执行的所有命令;用 `ausearch -k cron_persistence -ts "03/15/2026 14:00:00" -i` 和 `ausearch -k ssh_key_tampering -ts "03/15/2026 14:00:00" -i` 检查持久化机制;用 `ausearch -k network_connection -ts "03/15/2026 14:00:00" -i` 检查横向移动的出站连接。
- 将审计日志转发到 SIEM 做关联分析:方案 A 使用 audisp-remote 插件,编辑 `/etc/audit/plugins.d/au-remote.conf` 设置 `active = yes`、`direction = out`、`path = /sbin/audisp-remote`、`type = always`,并在 `/etc/audit/audisp-remote.conf` 中配置 `remote_server = siem.internal.corp`、`port = 6514`、`transport = tcp`;方案 B 使用 Elastic Auditbeat,安装后配置 `/etc/auditbeat/auditbeat.yml`,Auditbeat 会直接从内核审计框架读取事件。
- 验证审计配置有效性:确认 auditd 运行且规则已加载(`auditctl -l` 返回预期规则数);确认无审计积压(`auditctl -s` 显示 backlog 低且 lost: 0);确认每个自定义键都能查到事件(`ausearch -k <key> -ts today` 有结果);确认 aureport 能生成非空的认证、可执行、文件事件汇总;确认时间线重建能形成连贯的攻击动作序列;对关键文件做测试修改(如 `touch /etc/shadow`)能触发事件;确认日志已转发到中心 SIEM(用测试事件验证接收);确认规则在重启后仍生效(规则放在 `/etc/audit/rules.d/` 而非仅用 auditctl 加载)。
适用边界 · 注意事项
- 不适用于网络层入侵检测,网络流量分析应使用 Suricata 或 Zeek;auditd 只在单台主机的内核层工作。
- 需要 root 或 sudo 权限才能配置审计规则和查询日志,无特权账号无法执行。
- 需要系统已安装 auditd 并运行审计守护进程,且日志存储有足够保留空间(默认 `/var/log/audit/audit.log`)。