thisisdhruvchopra/log-analyser
GitHub: thisisdhruvchopra/log-analyser
基于 Python 的模块化 HTTP 蜜罐日志分析工具包,通过事件分类、GeoIP 定位、凭证提取和端点分析等脚本将原始日志转化为结构化的周度威胁情报报告。
Stars: 7 | Forks: 0
# HTTP 蜜罐日志分析器
一个基于 Python 的模块化威胁情报工具包,用于分析 HTTP 蜜罐日志。作为关键工业基础设施客户欺骗技术防御项目的一部分,专为实际部署而构建。
每个脚本都是独立的,并针对攻击者行为的特定方面:事件分类、凭证收集、地理定位、端点针对和时间分析。
## 模块概述
| 脚本 | 用途 |
|---|---|
| `analysis.py` | 按类型和严重程度对日志事件进行分类 |
| `geo_analysis.py` | 使用 GeoIP 将攻击 IP 映射到国家/地区 |
| `endpoint.py` | 识别哪些端点正在被攻击以及攻击者是谁 |
| `passwords.py` | 提取并对凭证(密码)尝试进行排名 |
| `usernames.py` | 提取并对用户名尝试进行排名 |
| `summary.py` | 将输出聚合为单个攻击摘要 |
| `split_logs_by_date.py` | 将日志按特定日期范围切片 |
| `remove_localhost_logs.py` | 从原始日志中清除 localhost/loopback 条目 |
## 要求
- Python 3.8+
- [`maxminddb`](https://pypi.org/project/maxminddb/) — 用于 GeoIP 查询
- `GeoLite2-Country.mmdb` — MaxMind GeoLite2 数据库(包含在仓库中)
安装依赖:
```
pip install maxminddb
```
## 用法
每个脚本独立运行,并以交互方式提示输入。
### 1. 首先清理日志
在进行任何分析之前,去除 loopback/localhost 噪音:
```
python remove_localhost_logs.py
# 你的原始 .log 文件
# 输出: _no_localhost.log
```
### 2. 按日期范围切片(可选)
将分析重点放在特定的一周或报告周期内:
```
python split_logs_by_date.py
# 接受格式: YYYY-MM-DD, DD-MM-YYYY, YYYY/MM/DD 等
# 输出: __to_.log
```
### 3. 按类型和严重程度对事件进行分类
```
python analysis.py
# 输出: analysis_event_statistics.csv, analysis_severity_breakdown.csv
```
**检测到的事件类型:**
| 事件 | 严重程度 | 示例 |
|---|---|---|
| `command_execution_attempts` | 高 | shell 管道、反引号执行、`$()` |
| `exploit_attempts` | 高 | `/etc/passwd`、`../`、`/bin/sh`、`/cmd=` |
| `attack_log_attempts` | 高 | 错误的请求版本、HTTP 400 |
| `scan_attempts` | 中 | `/admin`、`/wp-`、`.env`、`.git`、`/phpmyadmin` |
| `connect_attempts` | 低 | 标准 GET/POST/HEAD 请求 |
### 4. 对攻击 IP 进行地理定位
```
python geo_analysis.py
# 输出: attacking_countries.csv, attacking_ips_country.csv
```
仅统计匹配攻击模式的行——这与 `analysis.py` 保持一致。
### 5. 提取凭证尝试
```
python passwords.py # Top 50 passwords attempted
python usernames.py # Top 50 usernames attempted
# 输出: _top_passwords.csv / _top_usernames.csv
```
从 POST body 参数(`password=`、`pass=`、`username=`、`user=` 等)中提取。自动过滤掉路径遍历和漏洞利用垃圾数据。
### 6. 分析端点针对情况
```
python endpoint.py
# 提示输入特定的 endpoint,例如 /admin, /cgi-bin
# 输出: endpoint.csv (IP → 命中次数,降序排列)
```
### 7. 生成完整的攻击摘要
```
python summary.py
# 需要: attacking_countries.csv 和 attacking_ips_country.csv 存在
# 输出: 排名第一的日期、排名第一的国家、排名第一的 IP、被攻击最多的 endpoint
```
## 摘要输出示例
```
=== BSP Aggregated Attack Summary ===
Most Traffic / Attacks On
14 May 2025 (3,241 events)
Most Attacking Country
China (1,872 events)
Most Attacking IP
45.xxx.xxx.xxx (304 events)
Most Targeted Endpoint
/admin (918 hits)
```
## 攻击检测逻辑
所有脚本共享一致的基于 regex 的检测引擎。如果日志行匹配以下任何模式,则被归类为攻击:
- **命令注入**:`;cmd`、`|cmd`、`` `cmd` ``、`$(cmd)`
- **路径遍历/漏洞利用**:`../`、`/etc/passwd`、`/proc/self`、`/bin/sh`
- **CMS/管理员后台扫描**:`/wp-`、`/phpmyadmin`、`/manager/html`、`/HNAP1`
- **敏感文件探测**:`.env`、`.git`、`/cgi-bin`
- **格式错误的 HTTP**:`Bad request version`、`code 400`、`invalid HTTP version`
在处理之前,所有日志行都会被去除 ANSI 转义序列,以处理带颜色的终端输出格式。
## 注意事项
- 基于日期切片时,日志预期使用 IST (UTC+5:30) 时区。
- `geo_analysis.py` 必须在工作目录中存在 `GeoLite2-Country.mmdb` 数据库才能运行。
- 所有 CSV 均采用 UTF-8 编码,并兼容 Excel 和 Google Sheets。
- 这些脚本专为**每周威胁情报报告**工作流而设计。
## 作者
**Dhruv Chopra**
Associate – Deception Technology, C3iHub @ IIT Kanpur
[github.com/thisisdhruvchopra](https://github.com/thisisdhruvchopra)
标签:Python, 威胁情报, 密码管理, 开发者工具, 无后门, 蜜罐分析, 逆向工具