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, 威胁检测, 安全, 无后门, 超时处理, 运维工具, 逆向工具