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 框架。



## 概述
针对 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

```
每个模块都有单一的职责。检测逻辑与 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暴力破解检测, 安全告警, 无后门, 红队行动, 逆向工具, 速率限制处理