缺口分析在找什么
把合并后的时间线按小时(或更细粒度)统计事件条数,观察哪些时段数据稀疏甚至为零,就是时间线缺口分析。缺口有几种完全不同的成因:主机确实停机或睡眠、日志服务未开启或级别过低、日志轮转与保留期导致旧数据缺失、采集过程漏抓,以及被人为清理。把它们逐一排除之后剩下的缺口才值得当作线索。缺口的价值在于它既可能掩盖攻击行为,也可能本身就是清理痕迹的证据。
基本信息
| 适用平台 | 通用方法,配合 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缺口成因对照
| 缺口特征 | 可能原因 | 验证方式 |
|---|---|---|
| 整段连续空白且系统仍在服务 | 日志被清理或服务被停 | 查日志服务状态、文件大小与轮转记录 |
| 每台主机同一天同一时刻都空白 | 采集侧或转发链路故障 | 查转发队列、采集任务日志 |
| 缺口出现在日志文件起点之前 | 保留期限制或轮转删除 | 看最早一条记录时间与轮转配置 |
| 缺口伴随启动记录 | 正常停机或重启 | 比对重启记录与系统事件 |
| 某类事件全无而其他事件正常 | 日志级别或审核策略未开 | 核查对应日志的配置与开关 |
缺口不等于没有活动,也不等于有人清理日志。把缺口直接写进报告当结论会误导判断,必须先排除停机、轮转与采集故障,排不掉时明确标注为“原因未明的数据缺失”。
分来源统计比总体统计更有价值:总体曲线平滑的时段,某个关键数据源可能已经中断,按来源分行统计才能发现这类局部缺口。