基于行为评分的 Nginx 日志研究

引言

在信息安全领域,启发式杀毒(Heuristic Antivirus)一直是一种重要的防御手段。其核心思路不是单纯依赖病毒特征码,而是通过分析程序的行为——如调用哪些 API、操作了哪些文件或注册表、建立了哪些网络连接——来打分、评估潜在威胁。

最近,我在分析 Nginx 日志时,意识到这种思路同样适用于日志分析:如果我们把每条请求看作“行为”,并为其赋予“风险评分”,就能快速识别异常访问、爬虫行为或潜在攻击。本文将从实际日志出发,分享我如何借鉴启发式思路进行分析。

分析最近30天的nginx日志

单独拎出来一条(实际上nginx日志格式是可以自定义的):

47.251.93.227 - - [07/Aug/2025:00:01:53 +0800] "GET / HTTP/1.1" 403 146 "-" "Mozilla/5.0 zgrab/0.x"
字段 含义
47.251.93.227 客户端 IP
- 用户身份信息(通常未启用,显示-)
- 用户名(如果开启 HTTP Basic Auth,否则-)
[07/Aug/2025:00:01:53 +0800] 请求时间(含时区)
"GET / HTTP/1.1" 请求行:方法 + URI + 协议版本
403 HTTP 响应状态码
146 响应体大小(字节)
"-" Referer(上级页面)
"Mozilla/5.0 zgrab/0.x" User-Agent(客户端信息)

其中我们可以根据时间、IP、请求行、状态码、UA来分析

基本行为分析角度

我们可以基于以下维度对日志行为进行分析:

  1. ​时间维度​:请求时间分布,是否有异常高频访问或非工作时间访问。
  2. IP 维度:是否存在异常 IP(爬虫、扫描、黑名单 IP)。
  3. 请求内容​:请求 URI、HTTP 方法,是否访问敏感路径。
  4. 状态码​:403、404、500 等状态码的异常访问频率。
  5. User-Agent​:是否为常见浏览器、爬虫或伪造 UA。

行为评估打分

可以借鉴启发式杀毒的评分方法,为每条请求分配“风险分数”。例如:

行为特征 风险评分
GET参数包含SQL注入嫌疑 4
请求非首页敏感目录(比如/admin、/login) 3
状态码为 4xx 或 5xx 2
非常见或空 User-Agent 2
短时间内同 IP 多次请求 3
Referer 可疑或缺失 1

这种情境下,通过行为风险评分进行标记,后续如果对接威胁情报系统,多维分析,能够大幅提高准确度。

结语

通过启发式思路,日志分析不再仅仅是统计访问次数或状态码,而是赋予行为风险权重,进而快速识别进行封锁,进而实现主动防御。

评论 0

还没有评论,来说点什么吧。

提交后需要审核才会公开。