先聚合再比对
面对海量失败认证记录,逐条看没有意义。做法是先按来源地址聚合,统计每个地址的尝试次数与时间跨度,得到一份高频来源清单;再把这些地址拿去与威胁情报平台或本单位的历史告警记录比对。命中已知恶意地址可以加快定性速度,但要注意,未命中并不能说明该地址是安全的。
私网地址说明经过了转换
如果聚合结果里的来源地址是私网地址,说明日志记录的位置在 NAT 或代理之后:真正的外部来源被网关地址掩盖了。这种情况需要向网络团队索取转换映射表或对应时段的上层设备日志,才能继续追查。反之,公网地址仍需谨慎对待共享出口的情况。
基本信息
| 适用平台 | Linux(日志处理命令组合) |
|---|---|
| 聚合命令 | grep 提取地址后配合 sort、uniq -c、sort -rn |
| 比对对象 | 威胁情报平台、本单位历史告警、封禁名单 |
| 私网情形 | 说明经过 NAT 或代理,需上层设备日志 |
| 输出 | 高频来源清单与时间跨度、对应尝试的用户名集合 |
典型使用场景
- 内部情报积累:把本次事件的来源地址加入本单位观察名单
- 判断攻击来源结构:区分单源持续尝试与多源分布式尝试
- 评估封禁优先级:按尝试次数与涉及账号确定处置顺序
- 验证情报价值:把情报命中情况与实际行为强度对照
- 为报告取证:附上聚合命令与统计结果,数字可复算
聚合失败来源
聚合失败来源
# 提取来源地址并统计出现次数
awk '/Failed password|Failed publickey/ {print $(NF-3)}' /var/log/auth.log | \
sort | uniq -c | sort -rn | head -20
# 另一种写法:直接从 from 字段提取地址
grep -oE 'from [0-9a-fA-F:.]+ port' /var/log/auth.log | awk '{print $2}' | \
sort | uniq -c | sort -rn | head -20
# 找出高频地址尝试过的用户名集合
for ip in 203.0.113.9 198.51.100.7; do
printf '== %s\n' "$ip"
grep "from $ip" /var/log/auth.log | awk '{print $(NF-5)}' | sort -u | head -10
done
# 私网来源说明经过转换,需要上层设备日志
awk '/Failed password/ {print $(NF-3)}' /var/log/auth.log | grep -E '^(10\.|192\.168\.|172\.)' | sort -u | head聚合结果读法
| 表现 | 可能含义 | 下一步 |
|---|---|---|
| 单地址尝试上千次 | 定向爆破或自动化工具 | 优先封禁并核查是否成功登录 |
| 多地址低频尝试 | 分布式或多层代理 | 关注尝试的账号与时间分布 |
| 地址集中在同一网段 | 同一来源或云区域 | 按网段整体评估影响 |
| 私网地址高频出现 | 经过 NAT 或代理 | 索取转换映射表追查出口 |
| 尝试用户名高度集中 | 针对特定账号 | 检查该账号的安全状态 |
情报命中不等于本次攻击由该组织发起:共享地址、被劫持主机、云出口都会造成误归因,报告中的表述要限定在「地址曾与已知恶意活动关联」这一层级。
云主机出口地址常被多个租户共享,同一个地址在不同时间的行为可能毫无关联;结合时间窗与实际行为判断,避免过度解读。