asherakhan/ssh-bruteforce-detector
GitHub: asherakhan/ssh-bruteforce-detector
纯防御性的 Python 日志解析工具,通过滑动窗口和「失败后成功」关联规则从 SSH 认证日志中检测暴力破解行为与潜在账户失陷。
Stars: 0 | Forks: 0
# SSH 暴力破解检测器
一个轻量级、无依赖的 **蓝队** 工具,用于解析 OpenSSH
身份验证日志(`/var/log/auth.log`、`/var/log/secure`)并检测:
- **暴力破解活动** — 源 IP 在短时间窗口内产生大量失败的登录尝试。
- **可能的账户被盗** — 多次登录失败随后*登录成功*的 IP,这通常表明密码已被猜中。
它是纯防御性的:仅**读取日志并报告发现结果**。不执行任何扫描、漏洞利用或网络活动。
## 为什么开发此项目
检测针对 SSH 的撞库和暴力破解尝试是 SOC / 蓝队角色中最常见的第一天任务之一。此工具重现了 SIEM 关联规则执行的核心检测逻辑 —— 即针对每个源 IP 的滑动窗口失败计数以及失败后成功关联 —— 并将其包含在一个小巧、易读且可在任何地方运行的 Python 脚本中。
## 功能
- 针对每个源 IP 的滑动窗口检测(可配置阈值和窗口)
- “失败后成功”的账户被盗检测
- 列出受攻击的用户名及每个 IP 的活跃攻击窗口
- 可选的 **JSON 导出**,便于将其输出到其他工具
- 当存在发现结果时返回非零退出代码(可在 cron / CI pipeline 中使用)
- 仅使用标准库 — 无需 `pip install`
## 用法
```
# 针对包含的示例 log 进行基本运行
python3 bruteforce_detector.py auth.log
# 针对真实系统 log
sudo python3 bruteforce_detector.py /var/log/auth.log
# 调整 sensitivity:标记 30 秒内 8 次以上失败
python3 bruteforce_detector.py /var/log/auth.log --threshold 8 --window 30
# 将 findings 导出为 JSON
python3 bruteforce_detector.py auth.log --json findings.json
```
### 选项
| 标志 | 描述 | 默认值 |
|------|-------------|---------|
| `-t`, `--threshold` | 窗口内触发 IP 标记的失败登录次数 | `5` |
| `-w`, `--window` | 滑动窗口(以秒为单位) | `60` |
| `-y`, `--year` | 时间戳的年份(syslog 会省略) | 当前年份 |
| `--min-fails-compromise` | 标记可能被盗所需的成功登录前的失败次数 | `3` |
| `-j`, `--json` | 将发现结果写入 JSON 文件 | off |
## 输出示例
```
================================================================
SSH BRUTE-FORCE DETECTION REPORT
================================================================
Events parsed : 21
Detection threshold : 5 failures / 60s window
================================================================
[!] 1 source IP(s) flagged for brute-force activity:
Source IP : 192.168.56.101
Failed attempts : 10 (peak 10 within 60s)
Active window : 2026-03-10 22:41:03 -> 2026-03-10 22:41:24
Targeted users : admin, git, oracle, postgres, root, test, ubuntu
------------------------------------------------------------
[!!] 1 POSSIBLE COMPROMISE(S) (failures followed by success):
Source IP : 198.51.100.23
Account : backup
Failures before : 4
Successful login : 2026-03-11 01:18:49
------------------------------------------------------------
```
## 检测原理
1. **解析** — 每行日志通过正则表达式匹配 `Failed password` 和 `Accepted password/publickey` 事件,并提取时间戳、用户名和源 IP。
2. **暴力破解** — 根据源 IP 对失败事件进行分组,并使用双指针滑动窗口找出任意 `window` 秒时间跨度内的最大失败次数。如果该峰值达到阈值,则对该 IP 进行标记。
3. **账户被盗** — 按时间顺序遍历每个 IP 的事件;如果在足够多的先前失败之后出现了成功登录,则会将其标记为可能成功的暴力破解。
## 可能的扩展
- 对源 IP 进行 GeoIP 丰富
- 根据发现结果自动生成 `fail2ban` / 防火墙拦截规则
- 支持额外的日志格式(Windows 事件日志、Web 服务器日志)
- 输出为对 SIEM 友好的格式(CEF / ECS JSON)
## 许可证
MIT — 请参阅 [LICENSE](LICENSE)。
*作为一个实践安全项目而构建。示例日志均为合成数据;所有 IP 均使用文档/保留地址范围 (RFC 5737 / RFC 1918)。*
标签:AMSI绕过, Python, 威胁检测, 安全, 无后门, 超时处理, 运维工具, 逆向工具