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发现, 免杀技术, 安全检测, 安全运维, 无后门, 暴力破解检测