aya-rojdam/log-triage

GitHub: aya-rojdam/log-triage

纯 Python 无依赖的日志分诊脚本,从 Linux 和 Windows 认证日志中快速提取暴力破解等安全告警,作为轻量级 SIEM 替代方案。

Stars: 0 | Forks: 0

# log-triage 扫描身份验证日志以检测暴力破解、密码喷洒和可疑登录。将其指向 Linux `auth.log` 或 Windows Security 事件导出文件,即可获得优先级排序的警报列表。纯 Python 标准库,无依赖,无需 SIEM。 作为一个轻量级的替代方案,无需搭建完整的检测技术栈:在几秒钟内即可在一个日志文件上运行的脚本中,实现至关重要的检测逻辑。 ## 用法 ``` # Linux auth.log python -m logtriage /var/log/auth.log # Windows Security 事件导出(来自 Event Viewer 或 Get-WinEvent 的 CSV) python -m logtriage security_events.csv --windows # 调整阈值并将 alerts 保存为 JSON python -m logtriage auth.log --fails 10 --window 2 --json alerts.json ``` 示例输出: ``` Parsed 37 auth events from samples/auth.log 20 failures, 17 successes 6 alert(s): [High ] bruteforce 203.0.113.66 12 failed logins within 5 min window: 2026-03-10 02:14:00 -> 2026-03-10 02:16:45 [High ] success-after-bruteforce 203.0.113.66 successful login as 'root' after 12 failures (possible compromise) [High ] password-spray 198.51.100.23 failures against 8 distinct users: admin, backup, deploy, git... ``` ## 检测项 | 规则 | 严重程度 | 触发条件 | |------|----------|-----------| | `bruteforce` | 高 | 在短时间窗口内来自同一 IP 的多次失败登录(滑动窗口,默认 5 次失败 / 5 分钟) | | `password-spray` | 高 | 同一 IP 尝试多个不同用户名失败(默认 5 个或以上),这是与暴力破解相反的模式 | | `success-after-bruteforce` | 高 | 某 IP 在达到暴力破解阈值后立即成功登录:可能发生了账户被入侵 | | `odd-hours-login` | 中 | 在非工作时间内的成功登录(默认 00:00-05:59) | 所有阈值均可在命令行中调整,因此该工具同样适用于嘈杂的互联网暴露主机或安静的内网主机。 ## 支持的输入 | 来源 | 格式 | 可识别的事件 | |--------|--------|-------------------| | Linux | `/var/log/auth.log` (syslog 文本) | sshd 接受/失败/无效用户登录,sudo 身份验证失败 | | Windows | Security 事件日志 CSV 导出 | 4624 登录成功,4625 登录失败,4740 账户锁定 | 两者都会被规范化为通用的事件模型,因此同一套检测引擎可对任一来源运行。 ## 工作原理 1. 源解析器将原始日志行转换为标准化的 `AuthEvent` 记录(时间戳、结果、用户、源 IP) 2. 检测规则在事件流上运行,每条规则返回按严重程度排序的警报 3. 检测与顺序无关:无论日志是按时间顺序排列还是被打乱,结果都是一样的 暴力破解规则使用真正的滑动时间窗口,而不是简单的总计数,因此它能区分真正的攻击(几分钟内多次失败)与一天中偶尔输错几次密码的用户。 ## 项目结构 ``` logtriage/ ├── model.py # Normalized AuthEvent ├── parse_linux.py # auth.log parser (sshd, sudo) ├── parse_windows.py # Windows Security CSV parser ├── detect.py # Detection rules + tunable thresholds └── __main__.py # CLI samples/ # Synthetic logs with embedded attack patterns tests/ # pytest suite ``` ## 测试 ``` python -m pytest tests/ ``` 示例日志是合成的,并使用了文档保留的 IP 段(203.0.113.0/24, 198.51.100.0/24)。真实日志包含实时的 IP、用户名和基础设施细节,因此它们被排除在版本控制之外(参见 `.gitignore`)。 ## 路线图 - 源 IP 的 Geo/ASN 丰富 - 检测每个用户来自新/异常国家的登录 - journald JSON 输入 - 简单的 HTML 报告输出
标签:AMSI绕过, Python, 威胁检测, 安全运营, 扫描框架, 无后门, 红队行动, 逆向工具