P0w3r223/auth-log-scan

GitHub: P0w3r223/auth-log-scan

一个零依赖的 Python 脚本,用于扫描 OpenSSH 认证日志并检测暴力破解、用户枚举和可疑成功登录等安全事件。

Stars: 0 | Forks: 0

# auth-log-scan [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/P0w3r223/auth-log-scan/actions/workflows/ci.yml) **扫描 OpenSSH 认证日志中的暴力破解、用户名枚举和可疑登录** — 从 `/var/log/auth.log` 生成终端报告(以及可选的 JSON),无额外依赖。 ## 功能说明 1. **暴力破解源** — 在滑动时间窗口内,出现 ≥ *阈值* 次失败登录的 IP。 2. **用户名枚举** — 探测账户,尤其是探测不存在的账户(`invalid user`)。 3. **可疑成功登录** — 来自某个 IP 的 `Accepted` 登录,且该 IP 在此之前的日志中已经历过多次失败(可能是暴力破解后的入侵)。 ## 安装说明 Python 3.11+;无运行时依赖(仅使用标准库)。 ``` python -m venv .venv .venv/Scripts/python -m pip install -r requirements.txt # Linux: .venv/bin/python pytest ``` ## 用法 ``` auth-log-scan sample/auth.log # scan a file cat /var/log/auth.log | auth-log-scan - # read from stdin python -m auth_log_scan sample/auth.log # equivalent module form # 调整 detectors 并导出 JSON: auth-log-scan /var/log/auth.log -t 8 -w 120 --json findings.json ``` 选项:`-t/--threshold`(默认 5),`-w/--window` 秒数(60),`--top` 行数(10),为省略年份的时间戳指定 `--year`(默认:当前年份),`--json PATH`(`-` 表示输出到 stdout)。 ## 输出示例 针对内置的合成日志(`sample/auth.log`)运行: ``` == auth-log-scan report == events parsed : 20 time range : 2026-03-10 06:54:59 .. 2026-03-10 08:00:00 failed / accepted / invalid-user : 13 / 3 / 4 [!] brute-force sources (2) source_ip max/win win(s) total users first last ------------- ------- ------ ----- ----- ------------------- ------------------- 203.0.113.7 7 60 7 5 2026-03-10 06:55:01 2026-03-10 06:55:13 198.51.100.23 6 60 6 1 2026-03-10 07:10:00 2026-03-10 07:10:10 [!] suspicious successes (1) source_ip user when prior_fails ------------- ------ ------------------- ----------- 198.51.100.23 deploy 2026-03-10 07:10:12 6 top attacked usernames user attempts -------- -------- deploy 6 root 3 admin 1 oracle 1 postgres 1 test 1 top source IPs by failures source_ip failures ------------- -------- 203.0.113.7 7 198.51.100.23 6 invalid usernames probed (4): admin, oracle, postgres, test ``` ## 检测与方法论 - **暴力破解** 使用 *滑动窗口*,而非简单的总数统计:它会报告任意 `window` 时间跨度内来自某 IP 的最大失败次数,因此缓慢、分散的干扰不会被误判为攻击。 - **枚举** 统计每个用户名的尝试次数,并收集通过 `invalid user` 探测的所有账户,这是典型的侦察特征。 - **可疑成功登录** 仅统计在成功登录*之前*发生的失败(日志按时间顺序处理),因此不会将偶然先于后续失败发生的正常登录标记为可疑。 解析器(`parse.py`)和检测器(`analyze.py`)是没有任何 I/O 操作的纯函数;所有文件/stdin 处理都位于 `cli.py` 中。这种分离方式使得无需接触真实日志即可实现 24 个单元测试。 ## 局限性 特此声明,这只是一个有针对性的概念验证,而非 IDS: - **仅支持 OpenSSH + 传统 syslog 格式**(`auth.log` / `secure`)。journald/ISO-8601 时间戳及其他守护进程不在支持范围内。 - **传统格式省略了年份** — 通过 `--year` 提供(默认:当前年份)。 - **无状态、单文件** 分析(无持久化,不支持实时追踪,IPv4/IPv6 被视为不透明的源字符串)。 - 内置的 `sample/auth.log` 是 **合成的**,使用了 RFC 5737 文档规定的 IP 段。 ## 许可证 MIT — 详见 [LICENSE](LICENSE)。
标签:Python, SSH, 安全规则引擎, 无后门, 红队行动, 逆向工具