eliemehintookou/mini-siem

GitHub: eliemehintookou/mini-siem

一个零依赖的轻量级 Python SIEM 工具,通过滑动窗口分析 SSH 日志检测暴力破解攻击并将告警映射到 MITRE ATT&CK 框架。

Stars: 0 | Forks: 0

# Mini-SIEM — 带有 MITRE ATT&CK 映射的 SSH 日志分析器 一个使用纯 Python 编写的轻量级安全信息与事件管理(SIEM)工具。 它解析 SSH 认证日志,通过时间关联检测入侵模式, 并将每个告警映射到 MITRE ATT&CK 框架。 ![Python](https://img.shields.io/badge/Python-3.10+-blue) ![许可证](https://img.shields.io/badge/License-MIT-green) ![无依赖](https://img.shields.io/badge/dependencies-none-lightgrey) ## 概述 针对 SSH 的暴力破解是面向互联网的服务器上最常见的入侵尝试之一。 单次失败的登录不能说明什么;但一分钟内连续十五次失败紧接着一次成功, 则意味着账号已被攻破。 本项目将这种推理逻辑用代码实现:它不仅仅是统计事件, 而是将事件关联起来以刻画安全事件的性质。 ## 功能 - **日志解析** — 基于正则表达式从原始 `auth.log` 文件中提取结构化事件 - **暴力破解检测** — 滑动窗口分析(可配置阈值和时间窗口) - **告警关联** — 标记出源自已涉及暴力破解尝试的 IP 的成功登录 - **MITRE ATT&CK 映射** — 每个告警都包含其技术 ID、战术和严重程度等信息 - **报告生成** — 按严重程度排序的易读文本报告,以及机器可读的 JSON 导出 - **日志生成器** — 生成包含已知攻击场景的真实测试数据 - **零依赖** — 仅使用标准库 ## 架构 ``` mini-siem/ ├── src/ │ ├── generate_logs.py # Test data generator (normal traffic + attack scenario) │ ├── parser.py # Raw log lines -> structured events (regex) │ ├── detection.py # Detection rules and alert correlation │ ├── mitre.py # MITRE ATT&CK knowledge base and enrichment │ ├── report.py # Severity sorting, text and JSON output │ └── siem.py # Entry point / orchestration ├── logs/ # Input logs (git-ignored) ├── reports/ # Generated reports (git-ignored) └── exemple_rapport.txt # Sample output ![Sample report](https://static.pigsec.cn/wp-content/uploads/repos/cas/9b/9bc6af4715157c9c0ca85486aafff0db4320cdccfdcb3d1d481668fc46ccc16b.png) ``` 每个模块都有单一的职责。检测逻辑与 ATT&CK 知识库分离, 因此无需修改检测引擎即可添加新规则。 ## 安装说明 ``` git clone https://github.com/eliemehintookou/mini-siem.git cd mini-siem ``` 无需安装任何软件包 — Python 3.10 或更高版本是唯一的要求。 ## 用法 生成一个包含模拟攻击的测试日志文件: ``` python3 src/generate_logs.py ``` 运行分析: ``` python3 src/siem.py ``` 或者分析任何其他 SSH 日志文件: ``` python3 src/siem.py /var/log/auth.log ``` 结果将输出到控制台,并写入 `reports/rapport.txt` 和 `reports/alertes.json`。 ## 示例输出 ``` ====================================================================== RAPPORT D'INCIDENTS - MINI SIEM Genere le : 21/07/2026 a 03:25:09 Nombre d'alertes : 2 ====================================================================== [1] CRITIQUE - Connexion reussie apres brute force Source : 203.0.113.66 Technique : T1078 (Valid Accounts) Tactique : Initial Access / Persistence (TA0001, TA0003) Description : Utilisation d'un compte legitime compromis pour acceder au systeme. [2] MOYENNE - Brute Force SSH Source : 203.0.113.66 Technique : T1110.001 (Brute Force: Password Guessing) Tactique : Credential Access (TA0006) Description : Tentatives repetees de deviner un mot de passe valide. ``` 告警按严重程度排序,因此最关键的事件总是显示在最前面。 ## 检测规则 | 规则 | 逻辑 | ATT&CK 技术 | 严重程度 | |------|-------|------------------|----------| | SSH 暴力破解 | 单个 IP 在 5 分钟的滑动窗口内产生 5 次及以上失败认证 | [T1110.001](https://attack.mitre.org/techniques/T1110/001/) — 密码猜测 | 中 | | 暴力破解后成功登录 | 产生成功认证的 IP 已被上述规则标记 | [T1078](https://attack.mitre.org/techniques/T1078/) — 有效账户 | 严重 | 阈值在 `src/detection.py` 中定义为常量: ``` SEUIL_ECHECS = 5 # failed attempts required to trigger FENETRE_MINUTES = 5 # sliding window size ``` ### 为什么滑动窗口很重要 对于每次失败的尝试,检测引擎会回顾配置的窗口, 并计算其中包含多少次其他失败尝试,同时保留找到的最密集的窗口。 这衡量的是失败的*速率*而非总数,而这正是区分自动化攻击 与健忘用户的关键。 ## 局限性 这是一个学习项目,范围有意控制得很窄。已知的局限性: - **仅支持 SSH** — 不支持 Web、防火墙或 Windows 事件日志 - **syslog 时间戳中没有年份** — 默认使用当前年份,跨年时会出现错误 - **批处理** — 该工具分析的是文件,不会实时追踪日志 - **内存加载** — 整个日志文件会一次性加载到内存中;不适合大数据量场景 - **无白名单** — 合法的自动化(备份脚本、监控探针)会产生误报 - **无分布式检测** — 跨多个源 IP 的慢速攻击将无法被察觉 ## 路线图 - [ ] 密码喷洒检测 (T1110.003) — 使用单个密码尝试多个账户 - [ ] 通过 YAML 文件配置规则,而不是使用硬编码常量 - [ ] 实时监控模式(类似 `tail -f`) - [ ] IP 白名单以减少误报 - [ ] 更多日志源(Apache、nginx、防火墙) - [ ] 使用 `pytest` 进行单元测试 ## 背景 作为个人项目从零开始构建,旨在探索检测工程。 它是对早期攻击性工作(对 Metasploitable 2 的授权渗透测试) 的补充,从防御者的角度审视相同的事件: 攻击在日志中是什么样子,以及如何捕捉它。 ## 许可证 MIT ## 作者 **Elie MEHINTO** — 网络安全与网络专业 M1 硕士生 [LinkedIn](http://bit.ly/4nk6Yz2) · [GitHub](https://bit.ly/4u5TGJ4)
标签:ATT&CK映射, Python, SSH暴力破解检测, 安全告警, 无后门, 红队行动, 逆向工具, 速率限制处理