首页/安全/取证与溯源速查/时间线缺口分析
溯源思路与流程68 条

时间线缺口分析

把事件按小时聚合条数后观察缺口,缺口可能是停机、日志未开、被清理或无关时段,需要交叉其他痕迹排除。

取证与溯源速查安全更新于 2026-10-13

缺口分析在找什么

把合并后的时间线按小时(或更细粒度)统计事件条数,观察哪些时段数据稀疏甚至为零,就是时间线缺口分析。缺口有几种完全不同的成因:主机确实停机或睡眠、日志服务未开启或级别过低、日志轮转与保留期导致旧数据缺失、采集过程漏抓,以及被人为清理。把它们逐一排除之后剩下的缺口才值得当作线索。缺口的价值在于它既可能掩盖攻击行为,也可能本身就是清理痕迹的证据。

基本信息

适用平台通用方法,配合 Linux/Windows 时间线数据使用
输入已统一时区与格式的合并时间线(CSV 或数据库)
统计口径按小时或按分钟计数,必要时按数据来源分开统计
必要的排除项停机与休眠窗口、日志保留期起点、采集工具的覆盖范围
交叉来源系统启动记录、日志服务状态、日志文件的首末时间戳

典型使用场景

  • 判断某台主机在可疑时段是否真的“没有活动”,避免把数据缺失当成无行为
  • 发现日志被清理的痕迹:运行期间突然出现整段空白而系统仍在正常工作
  • 确认采集盲区,为报告中的结论边界提供依据
  • 验证多源时间线的完整性,识别某个数据源整体未接入的情况
  • 为后续取证优先级排序:缺口时段是需要补证的时段

按小时统计与核对

按小时统计与核对
# 前提:时间列已统一为 YYYY-MM-DDTHH 前缀
awk -F, 'NR>1{print substr($1,1,13)}' merged.csv | sort | uniq -c > hourly.txt
sed -n '1,12p' hourly.txt
# 找出运行期间的空缺:把统计结果与完整小时序列对比
seq 0 23 | while read -r h; do printf '%02d ' "$h"; done; echo
# 交叉核对:该主机在此期间是否重启或关机
last -x reboot | head
journalctl --list-boots | tail -5
# 核对日志文件自身的时间范围与轮转情况
ls -l --time-style=full-iso /var/log/syslog* /var/log/messages* 2>/dev/null | head

缺口成因对照

缺口特征可能原因验证方式
整段连续空白且系统仍在服务日志被清理或服务被停查日志服务状态、文件大小与轮转记录
每台主机同一天同一时刻都空白采集侧或转发链路故障查转发队列、采集任务日志
缺口出现在日志文件起点之前保留期限制或轮转删除看最早一条记录时间与轮转配置
缺口伴随启动记录正常停机或重启比对重启记录与系统事件
某类事件全无而其他事件正常日志级别或审核策略未开核查对应日志的配置与开关
缺口不等于没有活动,也不等于有人清理日志。把缺口直接写进报告当结论会误导判断,必须先排除停机、轮转与采集故障,排不掉时明确标注为“原因未明的数据缺失”。
分来源统计比总体统计更有价值:总体曲线平滑的时段,某个关键数据源可能已经中断,按来源分行统计才能发现这类局部缺口。

易错点

  • 统计前未统一时间格式:截取位置错位会产生大量假缺口,务必先把时间列规范到统一前缀后再聚合
  • 把正常停机当清理痕迹:夜间关机、系统维护窗口都会形成缺口,先查重启与关机记录再下判断
  • 只看总量不看来源:某个日志源断链会被其他来源的数据掩盖,按来源分行统计才能发现
  • 忽略日志保留期:最早记录之前必然空白,若把它当作证据会得出错误结论
  • 缺口结论缺乏复核材料:报告里要写清统计口径、时间范围与排除过程,否则复核者无法重现判断

数据来源与参考

  • SANS 时间线分析资料
  • GNU awk 手册
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌