首页/安全/应急响应速查/多源日志时间线重建

多源日志时间线重建

把 auth、nginx、audit 与命令历史按统一时区排序合并成事件表,是还原「攻击者做了什么」的主线方法。

应急响应速查安全更新于 2026-10-13

多源日志时间线重建

时间线重建是把来自不同来源的记录统一格式、统一时间基准后按时间排序,拼出「攻击者做了什么」的主线。常用来源包括登录日志、Web 访问日志、内核审计、命令历史与系统日志。关键在于两点:一是所有记录统一换算到同一时区,二是每条记录保留原始行或原始位置,便于结论回溯到证据。缺了这两点,时间线就只是看起来整齐的表格。

基本信息

常见数据源auth.log 或 secure、nginx access.log、audit.log、命令历史、journal
时间规范统一时区并转成 ISO8601 前缀,便于字符串排序
字段设计时间、来源类型、主机、主体、动作、原始行
产物事件表文件(可用制表符分隔),可回溯到原始证据行
常用方法awk 提取关键字段后排序;大量数据可借助专业时间线工具
注意不同来源字段顺序不同,提取前先取几行核对

典型使用场景

  • 还原入侵过程:从初始访问到持久化与横向的完整顺序
  • 验证某个结论是否有时间上的矛盾(例如进程启动早于文件落地)
  • 为报告提供可排序、可复核的事实基础
  • 评估清理动作与攻击行为在时间上的先后关系
  • 把多个团队的结论对齐到同一时间基准上讨论

生成规范化事件表

生成规范化事件表
grep -hE 'Accepted|Failed password' /var/log/auth.log 2>/dev/null | sed 's/^/AUTH /' >> /evidence/events.tsv
awk '{print "NGINX "$4" "$5" "$7" "$9}' /var/log/nginx/access.log >> /evidence/events.tsv 2>/dev/null
sudo ausearch -ts recent --format text 2>/dev/null | head -n 40 >> /evidence/events.tsv
cat /root/.bash_history >> /evidence/events.tsv 2>/dev/null
sort /evidence/events.tsv | head -n 40                    # 按字符串排序合并
wc -l /evidence/events.tsv                               # 事件条数
sha256sum /evidence/events.tsv | tee /evidence/events.tsv.sha256

来源与时间字段位置

来源时间位置注意点
auth.log 或 secure行首月 日 时:分:秒无年份,跨年事件需按文件时间推断
nginx access.log第 4 个字段,形如 [日/月/年:时:分:秒 +时区]自带时区偏移,与其他来源换算时要处理
audit.logtype=PROCTITLE 等记录的 timestamp 字段epoch 秒数,需换算成本地或 UTC 时间
命令历史默认没有时间戳存在时间戳行时按 # 开头的行对下一条命令生效
journal自带完整时间戳与微秒输出为本地时区,需统一换算
时间线要显式标注证据缺口:某个来源在某个时段没有记录,就留空标记并注明原因,不要用推测填补。把「没有记录」和「记录显示没发生」混为一谈,是报告里最常见的错误。
字段化比单纯合并重要得多:把主体与动作拆成独立列之后,才能按账号、按主机、按动作筛选,进而回答「这个账号在这台机器上做过几件事」这类问题。

易错点

  • 混用本地时间与 UTC:没有统一基准的时间线必然出错,顺序还会整体反转
  • 只合并不字段化:后续无法按主体或动作筛选,时间线只剩肉眼浏览的价值
  • 忽略日志来源缺失:跨年日期、无年份的时间戳需要按文件时间推断,不做说明会得出错误结论
  • 不保留原始行:结论无法回溯到证据,复核时只能重新做一遍
  • 把覆盖与轮转当删除:文件被轮转不代表记录被删除,应把历史文件一并纳入

数据来源与参考

  • NIST SP 800-86:取证中的时间线分析
  • SANS:超级时间线(Super Timeline)方法

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌