攻击在访问日志里的形态
Web 攻击在访问日志里通常有可识别的形态:短时间内大量 4xx(扫描与探测)、异常路径(历史组件路径、配置文件、目录穿越序列)、异常 User-Agent(扫描器或空值)、参数中带拼接符号(注入尝试)。判读方法是先看模式再落到个案:先统计状态码分布与路径分布找出异常聚集,再针对少数可疑请求去应用日志、错误日志与文件系统侧印证是否真的造成了影响。日志里的可疑请求不等于攻击成功。
基本信息
| 日志位置 | Nginx/Apache 的 access.log、IIS 的 W3C 日志 |
|---|---|
| 常见格式 | combined 格式:来源 IP、时间、请求行、状态码、字节数、Referer、UA |
| 关键字段 | 状态码、请求路径与查询串、请求方法、UA、响应字节数 |
| 配套日志 | error.log、应用日志、WAF 日志、上游服务日志 |
| 环境干扰 | 反向代理会让来源地址变成代理地址,需查 X-Forwarded-For 类字段 |
| 分析口径 | 先统计模式,再逐条核实是否造成实际影响 |
典型使用场景
- 从海量访问日志中筛出扫描与利用候选请求
- 确认某个已知漏洞是否被真正利用(需要成功痕迹,而非仅探测)
- 判断攻击来源是单一 IP 还是分布式
- 把可疑请求时间与文件落地、进程创建时间对齐,形成证据链
- 评估影响面:哪些接口被访问、是否有数据被读取的迹象
- 为 WAF 规则与虚拟补丁提供输入
模式统计与精筛
模式统计与精筛
# 状态码分布:4xx 密集往往对应扫描
awk '{print $9}' access.log | sort | uniq -c | sort -rn | head
# 按来源 IP 统计请求量,找出异常高频来源
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -20
# 目录穿越与敏感路径特征(先看原始编码,再做解码后匹配)
grep -Ei '(\.\./|%2e%2e|/etc/passwd|/\.env|\.git)' access.log | head -30
# 异常 User-Agent 与空 UA
awk -F'"' '{print $6}' access.log | sort | uniq -c | sort -rn | head -20
# 取可疑 IP 的完整请求序列,按时间排开
awk '$1=="203.0.113.9"' access.log | head -50模式与判读
| 模式 | 可能含义 | 确认方式 |
|---|---|---|
| 4xx 密集 | 扫描与路径探测 | 看是否集中在少数来源,是否伴随 200 的少数命中 |
| 异常路径 | 针对特定组件或配置文件的探测 | 与组件版本、漏洞公告时间对照 |
| 异常 UA 或空 UA | 自动化工具与扫描器 | 结合请求频率与路径规律判断 |
| 参数含拼接符号 | 注入类尝试 | 到应用日志与数据库侧确认是否有执行痕迹 |
| 状态码 200 且响应体异常大 | 可能的数据外带 | 核对接口语义与响应大小的正常范围 |
扫描器 UA 与路径特征更新很快,仅凭特征库判断容易误判;确证以具体利用行为与造成的后果为准,特征只用于缩小候选范围。
做路径特征匹配前先做 URL 解码,直接匹配原文会漏掉编码变体(大小写、双重编码、Unicode 编码)。同时注意业务系统自身也会产生 4xx/5xx,先排除发布与配置变更带来的干扰。