首页/安全/取证与溯源速查/按小时基线判断异常活动时段
溯源思路与流程68 条

按小时基线判断异常活动时段

把事件按小时计数形成基线后,突增与突降时段就是重点审查窗口,再结合业务排班排除正常高峰。

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

基线怎么建

把归一化后的事件按小时计数,得到一张分布表:绝大多数小时落的条数接近,个别小时明显偏高或偏低,这些离群时段就是优先审查的窗口。基线可以按主机、按事件类型分别建立,粒度一般取小时,事件密度高的场景可以降到十分钟。

先标注合法高峰

任何环境都有规律性的高峰:备份任务、批量扫描、巡检脚本、应用定时任务都会造成固定时段的计数抬升。是否异常取决于与业务时间表能否对上,因此基线表要和运维窗口表、任务计划表放在一起看,否则会把一半的正常活动当成异常。

基本信息

适用平台Linux/macOS 命令行(awk、sort、uniq),也可用表格工具
输入合并后的时间线 CSV,时间列统一为同一时区
粒度建议按小时,密集场景按十分钟
对照材料备份计划、扫描任务、巡检脚本、业务作息
输出每小时计数表与离群时段清单

典型使用场景

  • 夜间三点出现进程创建小高峰:判断是否对应计划任务,否则重点排查
  • 白天某小时登录失败数陡增:结合来源 IP 判断是爆破还是业务误操作
  • 某天整段计数缺失:先查日志轮转与重启,再判断是否被清理
  • 跨主机比较:同一时段只有一台主机异常抬高,缩小到该主机深查
  • 为报告提供量化依据:用计数表说明「异常时段」是怎么定出来的

小时计数与排序

小时计数与排序
# 时间列格式为 2026-01-02T03:20:11Z 时,取第 12-13 位为小时
awk -F, '{print substr($1,12,2)}' merged.csv | sort | uniq -c | sort -k2,2

# 只看某类事件(如进程创建)的小时分布
grep 'execve' merged.csv | awk -F, '{print substr($1,12,2)}' | sort | uniq -c

# 输出成两列便于画图或导入表格
awk -F, '{print substr($1,12,2)}' merged.csv | sort | uniq -c | awk '{print $2","$1}' > hourly.csv

计数结果怎么读

表现可能的解释下一步
平稳低位常规运维节奏抽查若干条确认内容一致
单小时突增批量任务或攻击尝试看该小时的事件类型与来源
连续多小时为零服务停机、日志停写或轮转丢失对照开机记录与轮转时间
周期性规律峰值计划任务或监控探活与任务计划表比对后排除
夜间罕见动作可疑,也可能是补丁窗口核对变更单与运维记录
计数口径要在整份分析里保持一致:同一张表里混用「按行计数」和「按唯一事件计数」会让对比失效,方法章节里要写明用哪一种。
syslog 时间戳没有年份,按小时聚合跨年时会重叠;跨年数据要按轮转文件顺序补上年份再统计。

易错点

  • 把正常运维高峰当异常:没有标注备份与扫描窗口时,误报率极高
  • 截取列位置与时间格式不匹配:substr 取错位置会统计出无意义的分布
  • 整段为零时直接下「日志被删」结论:先排除停机、日志停写与轮转丢档
  • 时区未统一就合并统计:跨时区来源会把高峰搬到错误的钟点
  • 只看计数不看内容:数量正常但内容异常的时段会被漏掉

数据来源与参考

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