arpitgupta369/bruteforce-login-detector
GitHub: arpitgupta369/bruteforce-login-detector
一款从认证日志中分类检测暴力破解、撞库和密码喷洒攻击,并自动生成锁定阈值建议与 fail2ban 配置片段的防御性安全分析工具。
Stars: 0 | Forks: 0
# bruteforce-login-detector
**从认证日志中对登录攻击进行分类 —— 区分暴力破解、撞库和密码喷洒 —— 并获取锁定阈值以及 fail2ban 代码片段。**
## 为什么开发这个项目
失败登录分析是 **CERT-In** 威胁 hunting 和修复工作中的一项日常任务:同样满屏的 "Failed password" 日志行可能代表着截然不同的情况,而正确的响应取决于它*是*哪种模式。该工具解析 SSH 和 Web 应用认证日志,按 IP、用户和时间窗口对失败登录进行分组,并将这三种情况区分开来 —— 然后将发现转化为具体的防御控制措施(锁定/速率限制阈值以及可直接粘贴的 fail2ban 过滤器和 jail)。
## 功能
- 开箱即用支持 **两种日志格式**:`sshd` syslog 日志行和结构化的 `key=value` Web 认证日志(`result=`、`user=`、`src=`/`ip=`)。
- **三种攻击分类**:
- **暴力破解** —— 针对单个 IP+用户组合的多次失败尝试(如果失败之后出现了成功登录,则升级为*严重*,代表可能已遭入侵)。
- **撞库** —— 单个源 IP 在多个不同用户上遭遇登录失败。
- **密码喷洒** —— 单个用户遭到来自多个不同源 IP 的攻击。
- **滑动窗口峰值速率**计算(每个 IP 在每个时间窗口内的失败尝试次数),使速率限制建议建立在观测数据的基础上。
- **可操作的建议** —— 账户锁定、速率限制、封禁策略、MFA / 仅密钥 SSH,以及在发现密码喷洒或系统遭到入侵时提供针对性建议。
- 根据调整后的阈值生成 **fail2ban 过滤器和 jail 代码片段**。
- 可配置的阈值和时间窗口;支持文本或 JSON 输出;`--demo`。
## 技术栈
Python 3.9+(仅使用标准库:`re`、`collections`、`datetime`、`argparse`、`json`)。
## 安装说明
```
git clone https://github.com/arpitgupta369/bruteforce-login-detector.git
cd bruteforce-login-detector
# 无需第三方依赖
python detector.py --demo
```
## 用法
分析内置的示例日志:
```
python detector.py --demo
```
分析您自己的日志(单个或多个),调整阈值或输出 JSON:
```
python detector.py /var/log/auth.log /var/log/app/login.log --year 2026
python detector.py auth.log --bruteforce-threshold 8 --spray-ip-threshold 4
python detector.py --demo --json
```
预期输出(节选):
```
[1] (CRITICAL) BRUTE FORCE
8 failed logins against user 'admin' from 203.0.113.9 FOLLOWED BY A SUCCESS (likely compromised).
[4] (HIGH) CREDENTIAL STUFFING
45.155.205.233 failed logins across 7 distinct users - consistent with credential stuffing.
[6] (HIGH) PASSWORD SPRAY
User 'arpit' targeted from 5 distinct source IPs - consistent with a distributed password spray.
FAIL2BAN SNIPPET
[custom-login]
maxretry = 5
findtime = 300
bantime = 3600
```
## 项目结构
```
bruteforce-login-detector/
├── detector.py # parsing, classification, recs, fail2ban output
├── samples/
│ ├── sshd.log # sample sshd auth log
│ └── web_login.log # sample web application login log
├── README.md
├── LICENSE
└── .gitignore
```
## 分类的原理
所有失败的事件会以三种方式并行分组:通过 `(ip, user)` 组合检测暴力破解,通过 `ip -> {users}` 检测撞库,以及通过 `user -> {ips}` 检测密码喷洒。当某种模式的计数超过相应阈值时就会生成报告,因此单个日志可能会引发不止一项发现(例如,一个具有攻击性的 IP 可能既在对某个账户进行暴力破解,同时又在对其他账户进行撞库)。
## 免责声明
本项目仅供**教育、防御和授权使用**。仅对您拥有或被明确授权监控的系统的日志运行此工具。
各项阈值和生成的 fail2ban 配置仅供参考 —— 在强制执行之前,请务必针对您的环境进行验证和调整,以免锁定合法用户。示例中的 IP 和用户均为虚构。
由 **Arpit Gupta** 构建 —— [LinkedIn](https://linkedin.com/in/arpit-gupta-060b302a7/) · [GitHub](https://github.com/arpitgupta369)
标签:Python, 免杀技术, 无后门, 暴力破解检测, 逆向工具, 防御策略