yasssefrei/log-anomaly-analyzer
GitHub: yasssefrei/log-anomaly-analyzer
纯 Python 标准库实现的 SSH 日志异常分析器,通过滑动窗口检测暴力破解并识别潜在账户入侵,自动生成报告,适合网络安全教学与防御性日志审计。
Stars: 0 | Forks: 0
# log-anomaly-analyzer
使用**纯 Python 3(仅限标准库)**编写的 SSH 日志异常分析器。
它能够分析 `auth.log` 文件,检测**暴力破解**(brute force)攻击以及
**潜在的账户入侵**,随后自动生成报告。
## 功能特性
- **稳健解析** `sshd` 日志行:包括 `Failed password`、`Failed password for invalid user`、
`Accepted password`、`Invalid user`。提取时间戳、主机、用户名、
IP 地址和端口。不相关的行(如会话、sudo、cron 等)将被忽略。
- **滑动窗口检测**:如果某个 IP 在 *T* 秒的时间窗口内累计出现 *N* 次失败记录,则会触发警报
(默认值:60 秒内 5 次失败)。
- **区分失败与成功**:在连续多次失败后出现的成功验证,将被归类为
**潜在的账户入侵**(最高级别的警报)。
- **自动生成报告**:包含全局摘要、可疑 IP 表格(失败次数、受影响账户、
时间线)、单个 IP 结论以及全局结论。支持可选的 **JSON** 导出。
- **支持命令行配置**阈值与时间窗口。
- **零依赖**:仅需 `re`、`collections`、`argparse`、`datetime`、`json`、
`pathlib` 和 `unittest`。
## 安装说明
无需安装步骤或额外依赖。只需具备 Python 3.10+(已在 3.14 版本上测试)。
```
git clone
cd log-anomaly-analyzer
python3 analyze.py data/sample_auth.log
```
## 使用说明
```
# 默认分析(阈值 5 次失败,窗口 60 秒)
python3 analyze.py data/sample_auth.log
# 自定义阈值和窗口
python3 analyze.py data/sample_auth.log --threshold 10 --window 120
# 导出 JSON 到文件
python3 analyze.py data/sample_auth.log --json --output rapport.json
```
可用选项:`-t/--threshold`、`-w/--window`、`--json`、`-o/--output`、`--year`、`--version`。
如果检测到至少一个可疑 IP,退出代码为 `1`(适用于 CI/脚本环境),否则为 `0`。
### 基于 `data/sample_auth.log` 生成的报告摘要
```
====================================================================
RAPPORT D'ANALYSE — DÉTECTION D'ANOMALIES SSH
====================================================================
Fichier analysé : data/sample_auth.log
Seuil brute force: 5 échecs dans une fenêtre de 60 s
-- Résumé ----------------------------------------------------------
Évènements d'authentification : 55
Échecs : 47
Succès : 8
Adresses IP uniques : 6
IP suspectes : 3
-- IP suspectes ----------------------------------------------------
[!!!] 198.51.100.23 — COMPROMISSION POTENTIELLE
Échecs : 7 | Succès : 1 | Pic dans la fenêtre : 7
Comptes visés : admin
Période : 02/08 12:30:01 -> 02/08 12:30:57
/!\ Un succès a suivi une série d'échecs : accès potentiellement obtenu.
[!] 203.0.113.7 — BRUTE FORCE
Échecs : 20 | Succès : 0 | Pic dans la fenêtre : 20
Comptes visés : admin, root, oracle, postgres, test, ubuntu, git, jenkins
Période : 02/08 11:03:59 -> 02/08 11:04:28
...
====================================================================
VERDICT : ALERTE CRITIQUE — 1 compromission(s) potentielle(s)
====================================================================
```
## 项目结构
```
log-anomaly-analyzer/
├── analyze.py # Point d'entrée -> analyzer.cli:main
├── analyzer/
│ ├── parser.py # Extraction des lignes sshd (regex)
│ ├── detector.py # Détection brute force (fenêtre glissante)
│ ├── report.py # Rapport texte + JSON
│ └── cli.py # Interface en ligne de commande (argparse)
├── data/
│ └── sample_auth.log # Échantillon réaliste (attaques + trafic légitime)
├── tests/
│ ├── test_parser.py
│ └── test_detector.py
├── README.md
├── RAPPORT.md # Démarche, justifications, modèle de menace
├── LICENSE # MIT
├── requirements.txt # stdlib uniquement
└── .gitignore
```
## 测试
```
python3 -m unittest discover -s tests -v
```
18 个测试用例全面覆盖了三种类型日志行的解析、达到/未达到阈值的检测逻辑、
滑动窗口的效果影响,以及从失败转为成功验证的场景。
## 教学免责声明
本项目是一个**防御性学习工具**。示例中使用的 IP 地址均
采用了由 **RFC 5737** 规定的文档保留 IP 段(`203.0.113.0/24`、
`198.51.100.0/24`、`192.0.2.0/24`),确保不会指向任何真实目标。请仅在
您自己的系统日志上,或在获得授权的环境中使用此工具。
## 文档说明
完整的项目背景、合理的设计选择、算法实现以及威胁模型
均在 **[RAPPORT.md](RAPPORT.md)** 中有详细说明。
## 许可证
基于 [MIT](LICENSE) 协议开源分发。© 2026 Yassine Belhaj。
标签:PB级数据处理, Python, SSH, URL发现, 免杀技术, 安全检测, 安全运维, 无后门, 暴力破解检测