首页/安全/应急响应速查/日志断档与完整性判断

日志断档与完整性判断

日志断档既可能是正常轮转,也可能是人为清除:用行数、按小时分布与文件时间戳交叉判断,别急着下结论。

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

日志断档怎么判断

日志断档既可能是正常轮转,也可能是人为清除。判断时要用多个维度交叉:按小时统计条目数找出空洞时段、用 stat 看文件 mtime 与内容时间是否矛盾、对比当前文件与轮转归档的行数。结论要谨慎——把轮转误判成反取证,会带偏整个排查方向。

基本信息

统计方法按小时聚合条目数,找条目为 0 的时段
时间戳检查stat 看 mtime/ctime 与内容最后时间是否矛盾
常见正常原因日志轮转、服务重启、磁盘写满
反取证特征断档前后权限或属主变化、部分行被删改
交叉来源上游日志采集平台与本机轮转归档
前置要求先统一时区口径再跨文件比对

典型使用场景

  • 事件时间线出现空档,需要先判断原因
  • 日志文件的体积与时间跨度明显不匹配
  • 排查日志文件属主或权限被改动的情况
  • 与其他主机上同类服务的日志量做横向对比
  • 判断是否需要补装日志采集或调整轮转策略
  • 上报材料中说明日志可得性与缺口原因
  • 观察期内监控日志是否再次出现异常空档

检查分布与时间戳

检查分布与时间戳
awk '{print $1" "$2}' /var/log/auth.log | uniq -c | tail -n 40        # 按小时看条目分布
stat -c '%y %z %s %n' /var/log/auth.log /var/log/secure 2>/dev/null    # mtime/ctime 与体积
wc -l /var/log/auth.log /var/log/auth.log.1 2>/dev/null               # 当前与上一份的行数
ls -la --time-style=long-iso /var/log/ | head -n 20                   # 属主与权限是否变动
head -n 3 /var/log/auth.log; tail -n 3 /var/log/auth.log              # 首尾时间跨度

现象与成因判读

现象常见正常原因反取证信号
某小时条目为 0服务重启或轮转断档前后权限、属主变化
体积突然变小轮转后重建文件体积与时间跨度严重不匹配
mtime 晚于末条日志有新日志写入mtime 与内容时间明显矛盾
归档文件缺失轮转未保留或已删除归档被人为清空
条目格式不一致版本升级改了格式部分行被改写或伪造
内容时间与 mtime 矛盾时要提高警惕:例如 mtime 是凌晨,而最后一条日志停在昨天下午,说明文件在那之后被人动过。
单机日志缺失不等于全丢:多数环境配有上游日志采集,采集侧保留时间更长,也更难被本机攻击者删改。
不要直接在原日志上做清洗或截断:先复制副本再分析,原始文件是最关键的证据。

易错点

  • 把断档全当攻击:轮转与重启同样会造成断档,先排除正常原因
  • 只统计总行数:必须按小时分布才能看出空洞的具体位置
  • 在原文件上清洗或过滤:改动原始证据会破坏证据链
  • 不核对时区:跨时区日志按本机时间比对,会把整段活动看错位

数据来源与参考

  • stat(1) 文件时间戳语义
  • SANS:日志完整性检查思路

相关工具

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