Linux 日志中如何发现安全入侵迹象

5次阅读

成功登录记录是攻击者突破口令或密钥后的首要痕迹,需重点排查Accepted password、异常IP、非工作时间及高频登录;结合last/lastb/lastlog分析时空异常,并交叉验证其他系统痕迹以确认入侵。

Linux 日志中如何发现安全入侵迹象

/var/log/secure/var/log/auth.log 抓“成功登录”线索

攻击者一旦突破口令或密钥,最常留下的第一处痕迹就是合法的 ssh 登录记录。别只盯着“Failed password”,Accepted password 才是关键信号——尤其是来自陌生 IP、非工作时间、或高频短时多次登录的情况。

  • grep "Accepted" /var/log/secure | tail -50 快速翻最近 50 条成功登录;centos/RHEL 默认用 /var/log/secureubuntu/debian/var/log/auth.log
  • 注意匹配 from 后的 IP 和 port:比如 from 203.124.87.15 port 56231,这个端口不是标准 SSH 端口(22),说明对方可能在扫描或已控制跳板机
  • 如果日志里大量出现同一 IP 对不同用户名的 Accepted 记录(如 rootadmintest01),基本可判定是暴力破解得手后的横向尝试

lastlastblastlog 追踪登录时空异常

这三个命令背后分别读取的是 /var/log/wtmp(历史登录)、/var/log/btmp(失败登录)和 /var/log/lastlog(每个用户最后一次登录)。它们不依赖 syslog,即使攻击者清空了 secure,只要没删或覆盖这些二进制文件,痕迹仍在。

  • last -n 30 查最近 30 次登录,重点看 pts/0 类远程会话的登录时间、IP、持续时长;突然出现凌晨 3 点从俄罗斯 IP 登录并持续 12 小时的记录,大概率异常
  • lastb -n 20 查最近 20 次失败登录,若发现某 IP 在 1 秒内触发 17 次失败(Invalid user + Failed password 组合),说明正在跑字典爆破
  • lastlog | awk '$3 != "" && $3 可快速筛出“最后登录时间早于今年 1 月 1 日”的账号——这类长期未用却突然活跃的账户,极可能是被植入的后门账号

检查 /etc/passwd 里有没有“不该有 shell”的人

攻击者加号账户,往往直接给 /bin/bash/bin/sh,而不是系统默认的 /usr/sbin/nologin/bin/false。但更隐蔽的是 UID=0 的隐藏 root 变体(如 roootadmim),或 UID 小于 1000 却不在初始系统用户列表里的账号。

  • awk -F: '$3 == 0 {print}' /etc/passwd 列出所有 UID 为 0 的用户,除 root 外都需人工确认
  • awk -F: '$7 !~ /(nologin|false|sync|halt|shutdown)$/ {print $1, $3, $7}' /etc/passwd 找出所有能真正登录的用户(shell 不是受限类型),再结合 lastlog 看他们是否真有活动
  • 特别警惕用户名含数字/下划线/非常规拼写的账号(如 www_data_2x99),这些不像管理员手动创建,倒像脚本批量生成

比对 wtmp/btmp 时间戳与系统时间是否严重偏移

高级攻击者有时会篡改系统时间来混淆日志时间轴,让 last 显示的登录时间变成“未来”或“远古”。这时 wtmp 文件本身的修改时间(stat /var/log/wtmp)就成关键证据。

  • stat /var/log/wtmp | grep "Modify:" 查文件最后修改时间;如果显示是“2026-01-28 23:59:59”,但 last 里却有“2026-01-29 01:00:00”的登录记录,说明时间被调过
  • ls -lt /var/log/*.log /var/log/*/*.log 2>/dev/NULL | head -5 快速扫一遍日志文件的修改顺序:正常情况下 securemessageswtmp 应该是相近时间更新;若 wtmp 时间明显晚于其他日志几小时,且内容又“恰好”缺失某段时间,就要怀疑被裁剪过
  • 注意:btmp 默认只有 root 可读,普通用户执行 lastb 会报权限错误——这不是异常,是设计如此;但如果你发现 lastb 返回空,而 stat /var/log/btmp 显示大小为 0,则说明它已被清空

真正的难点不在命令会不会敲,而在判断“多异常才算入侵”。比如单次异地登录未必是问题,但配合 /etc/passwd 新增低 UID 账户、/tmp 下出现无名 ELF 文件、以及 netstat 显示一个监听在 31337 端口的未知进程——这三者同时出现,才构成强证据链。日志只是起点,不是终点。

text=ZqhQzanResources