BrandoBank/sentinel

GitHub: BrandoBank/sentinel

轻量级零依赖认证日志安全分析器,帮助快速发现暴力破解与权限滥用等威胁。

Stars: 0 | Forks: 0

# sentinel — 认证日志安全分析器 一个命令行工具,用于解析 Linux `/var/log/auth.log` 文件并识别安全威胁:暴力破解攻击、凭证填充、用户名枚举、权限提升和后门账户创建。 零外部依赖 — 纯 Python 3.8+ 标准库。在任何能运行 Python 的地方都能运行。 ## 检测内容 | 检测 | 严重性 | 检测方式 | |------|--------|----------| | SSH 暴力破解 | 高 | 基于源 IP 的失败尝试滑动窗口阈值 | | 成功后登录 | 严重 | 同一 IP 先失败 N 次后成功认证 — 凭证填充信号 | | 用户名枚举 | 中 | 单个 IP 探测多个不同的无效用户名 | | 新建本地账户 | 中 | `useradd` 事件 — 常见攻击者持久化手段 | | 权限提升(sudo) | 高 / 低 | 所有 sudo 事件;若命令为 Shell、凭证文件或网络工具则标记为高 | ## 快速开始 ``` # 克隆并立即运行 — 无需安装 git clone https://github.com/BrandoBank/sentinel.git cd sentinel # 分析包含的示例日志 python3 sentinel.py sample-logs/sample-auth.log # 分析您自己的 auth.log(需要读取权限) sudo python3 sentinel.py /var/log/auth.log # 直接从远程服务器管道传输 ssh user@host 'sudo cat /var/log/auth.log' | python3 sentinel.py - # 导出结果为 JSON(用于 SIEM 摄取或脚本编写) python3 sentinel.py auth.log --json > findings.json # 调整检测灵敏度 python3 sentinel.py auth.log --brute-threshold 3 --window 30 ``` ## 示例输出 针对内置的 `sample-logs/sample-auth.log` 运行: ``` ────────────────────────────────────────────────────────────── SENTINEL — Auth Log Security Report ────────────────────────────────────────────────────────────── Lines analyzed : 25 Events parsed : 25 Findings : 6 (1 critical 2 high 2 medium 1 low) ────────────────────────────────────────────────────────────── [CRITICAL] Successful Login After Failures IP had 6 failed attempt(s) before successful login as 'ec2-user' ip: 185.220.101.45 user: ec2-user failure_count: 6 login_time: 2025-04-19T03:14:26 [HIGH] Brute Force Attempt 14 failed attempts total; 6 within 60s window starting 03:12:01 ip: 185.220.101.45 count: 14 window_hits: 6 [HIGH] Privilege Escalation (sudo) 'ec2-user' executed sudo: /bin/bash user: ec2-user command: /bin/bash [MEDIUM] New Local Account Created New OS account created: 'svc_backup' — verify this was intentional [MEDIUM] Username Enumeration 8 attempts with 8 distinct invalid usernames from 185.220.101.45 [LOW] Privilege Escalation (sudo) 'alice' executed sudo: /usr/bin/apt update ``` ## 退出代码 | 代码 | 含义 | |------|------| | `0` | 无严重或高危发现 | | `1` | 存在一个或多个严重或高危发现 | | `2` | 文件未找到或参数错误 | 这使得 sentinel 可在 Shell 脚本和 CI 流水线中直接使用: ``` python3 sentinel.py /var/log/auth.log || alert_security_team.sh ``` ## 检测逻辑 ### 暴力破解(滑动窗口) 按时间戳排序失败记录。使用 `--window` 秒(默认 60)滑动窗口。若 `--brute-threshold` 次或以上失败(默认 5)落在同一窗口内,则判定为发现。 这避免了因用户数日忘记密码而产生的误报,仅在失败时间集中时触发。 ### 失败后登录 对所有包含 `Accepted` 事件的源 IP 与失败集合进行交叉引用。任何匹配均为严重 — 即使仅有一条先前的失败记录,随后成功登录也值得调查。 ### 用户名枚举 统计每个 IP 下的不同无效用户名数量。若一个 IP 尝试了三个或更多不同的无效名称,则认为是单词表扫描。发现结果会列出尝试次数最多的用户名。 ## JSON 输出 `--json` 标志输出机器可读的结果,适用于 SIEM 导入、Splunk 或脚本处理: ``` { "stats": { "lines": 25, "events": 25 }, "findings": [ { "severity": "CRITICAL", "type": "Successful Login After Failures", "ip": "185.220.101.45", "user": "ec2-user", "failure_count": 6, "login_time": "2025-04-19T03:14:26", "detail": "IP had 6 failed attempt(s) before successful login as 'ec2-user'" } ] } ``` ## 实际使用示例 ``` # Cron 作业:夜间运行,发现关键问题时发出警报 0 2 * * * python3 /opt/sentinel/sentinel.py /var/log/auth.log --json \ | jq '.findings[] | select(.severity == "CRITICAL")' \ | mail -s "sentinel alert" security@company.com # 实时监控(尾随模式) tail -f /var/log/auth.log | python3 sentinel.py - # 检查多台服务器 for host in web01 web02 db01; do echo "=== $host ===" && ssh $host 'sudo cat /var/log/auth.log' | python3 sentinel.py - done ``` ## 测试的日志格式 - Ubuntu / Debian:`/var/log/auth.log` - RHEL / CentOS / Amazon Linux:`/var/log/secure`(相同格式) - macOS:`/var/log/system.log`(部分 — 仅 SSHD 事件) ## 构建动机 希望有一个轻量级、无依赖的替代方案,无需将日志发送到完整 SIEM 即可回答“昨晚该服务器是否被探测过?”。从零开始构建以理解基于日志的威胁检测原理,然后将其应用于实际服务器。 ## 许可证 MIT
标签:CSV导出, Linux日志分析, PB级数据处理, PoC, SSH安全, syslog解析, URL发现, 凭证填充, 协议分析, 后门账户, 威胁情报, 子域名变形, 安全检测, 安全运维, 开发者工具, 开源安全工具, 持续监控, 日志取证, 暴力破解, 权限提升, 用户枚举, 纯Python, 网络安全审计, 认证日志, 逆向工具, 逆向工程平台, 零依赖