Linux 入侵检测与日志分析实践

3次阅读

快速定位可疑进程和网络连接需先用ps auxf和lsof筛选高负载进程及异常监听,再查/proc/pid/信息;关键日志包括auth.log、secure、btmp等;用awk/grep提取攻击特征;auditd应精简规则监控核心路径。

Linux 入侵检测与日志分析实践

怎么快速定位可疑进程和网络连接

入侵发生时,最直接的线索往往藏在正在运行的进程和异常网络连接里。别急着翻日志,先用系统自带工具筛一遍。

常见错误现象:tophtop 里看到 CPU 占用突增但进程名可疑(比如 sshd2.xmrsh2),或者 netstat -tulnp 显示非标准端口(如 :31337:6666)被未知用户监听。

  • 优先用 ps auxf --sort=-%cpu | head -20 看高负载进程树,注意 UID 不是 root 或业务用户的项
  • lsof -i -P -n | grep -E "(LISTEN|ESTABLISHED)"netstat 更可靠,尤其在容器或 Namespace 环境下
  • 发现可疑 PID 后,立刻查它的启动路径:ls -la /proc/<code>PID/exe 和 cat /proc/<code>PID/cmdline | tr ‘’ ‘ ‘
  • 注意:某些 rootkit 会 hook psls,如果结果明显缺失(比如没看到已知服务),考虑用 busybox ps 或从 Live CD 挂载分析

哪些日志文件必须第一时间检查

不是所有日志都同等重要。入侵痕迹往往只在几个关键位置留下蛛丝马迹,其他全是噪音。

使用场景:服务器被横向移动后,攻击者常删日志但漏掉某些文件;或者 syslog 配置不当导致关键事件没落地。

  • /var/log/auth.logdebian/ubuntu)或 /var/log/secure(RHEL/centos):重点搜 Failed passwordAccepted passwordsession opened for user,尤其是非工作时间或非常用 IP
  • /var/log/syslog/var/log/messages:查 systemd 服务异常重启、内核 audit 日志(如果启用了 auditd
  • /var/log/kern.log:有些 rootkit 加载模块会触发 insmodUnknown symbol 报错
  • 别忽略 /var/log/btmp:用 lastb -i 查爆破记录,它不走 syslog,攻击者删 auth.log 也常漏掉这个

用 awk/grep 快速提取攻击特征

人工扫日志效率低还易漏,但写复杂脚本又没必要。几行 awk + grep 就能抓住大部分批量行为。

参数差异:grep -E 支持正则,但对超大文件比 awk 慢;awk '$9 ~ /404|403/ {print $1,$4,$9}' 这类字段筛选更准,避免正则误匹配。

  • 查 Web 扫描痕迹:awk '$9 ~ /^404$/ && $7 ~ /.php|.jsp|/wp-admin/ {print $1,$7}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head -10
  • 查提权尝试:grep -i "sudo.*invalid" /var/log/auth.log | awk '{print $1,$2,$3,$9,$11}' | sort | uniq -c
  • 查定时任务植入:grep -r "curl|wget|base64|sh -c" /var/spool/cron/ /etc/cron* 2>/dev/NULL
  • 注意:日志轮转后路径可能变成 auth.log.1.gz,记得加 zgrep,否则白忙活

auditd 规则怎么设才不拖慢系统

开全量 audit 会让 I/O 和 CPU 明显上涨,尤其在高并发服务上。得抓关键点,不是越多越好。

性能影响:默认规则监控所有 execve 调用,单机每秒数百次调用就可能卡住 auditd 队列,导致日志丢失或系统变慢。

  • 禁用默认的全路径监控:auditctl -e 2(先锁定规则),再 auditctl -D 清空,避免冲突
  • 只监核心二进制:auditctl -w /usr/bin/sudo -p x -k suspicious_exec-p x 表示可执行权限变更
  • 监控敏感目录写入:auditctl -w /etc/passwd -p wa -k etc_passwd_change-p wa 是写+属性修改
  • 规则写进 /etc/audit/rules.d/critical.rulesaugenrules --load,否则重启失效;别用 service auditd restart,它会清空运行中规则

真正难的是判断哪个行为算“可疑”——比如 curl 下载脚本本身不违法,但配合 /tmp 写入 + sh 执行链,就是典型攻击模式。这种关联得靠后续分析,audit 只管收原始数据。

text=ZqhQzanResources