neetas21/soc-log-dashboard

GitHub: neetas21/soc-log-dashboard

用 Python 从零实现 SIEM 风格的认证日志关联检测引擎,通过透明可解释的规则检测暴力破解、撞库、不可能旅行等攻击模式,并在交互式仪表板中可视化告警结果。

Stars: 0 | Forks: 0

# 🛡️ SOC 身份验证日志仪表板 一款日志分析工具,能够解析身份验证日志并应用 **SIEM 风格的关联规则**来检测可疑活动——包括暴力破解、撞库、不可能的旅行以及非工作时间访问——随后将结果在交互式仪表板中进行可视化展示。 ## 为什么做这个项目 真正的 SIEM 平台(如 Splunk、Azure Sentinel、LogRhythm)通过应用关联规则来工作:这些条件会跨*多个*日志条目进行查找以发现某种模式,而不是孤立地判断单行日志。本项目使用 Python 从头开始重新实现了这一核心理念,因此检测逻辑是完全可见且可解释的——而不是隐藏在供应商的黑盒背后。 ## 已实现的关联规则 | 规则 | 检测内容 | 严重程度 | |---|---|---| | **暴力破解 (Brute Force)** | 相同 IP + 相同用户名,在 5 分钟窗口内出现 5 次及以上失败的登录尝试 | 高 | | **撞库 (Credential Stuffing)** | 相同 IP 在 5 分钟窗口内尝试 4 个及以上不同的用户名 | 高 | | **不可能的旅行 (Impossible Travel)** | 同一用户在 15 分钟内从两个 IP 成功登录,且其中至少一个 IP 位于已知网络之外 | 中 | | **非工作时间访问 (Off-Hours Access)** | 在工作时间(早 8 点–晚 8 点)之外成功登录 | 低 | ## 一个值得在面试中了解的真实调试故事 第一版“不可能的旅行”规则触发了 **27 个误报**——因为通常在两个合法位置(例如,家里和办公室)登录的员工,每次切换位置时都会被标记。修复方案是:仅标记涉及**陌生**网络的旅行行为,而不标记两个已知 IP 之间的常规切换。修复后,警报数量从 27 个误报骤降至确切相关的警报——0 个误报,并且成功捕获了 4/4 个植入的攻击。 这直接映射到一个真实的 SOC 问题:**通过调优关联规则来减轻警报疲劳**是威胁狩猎和 SIEM 工程工作的重要组成部分。过于敏感的规则会被分析师忽略;而过于宽松的规则则会漏掉真正的攻击。 ## 项目结构 ``` soc-log-dashboard/ ├── data/ │ ├── generate_logs.py # builds the synthetic auth log with embedded attacks │ └── auth_log.csv # generated log (836 entries, ~7 days) ├── src/ │ └── correlation_rules.py # the four detection rules ├── app.py # Streamlit dashboard └── requirements.txt ``` ## 运行说明 ``` pip install -r requirements.txt python data/generate_logs.py streamlit run app.py ``` ## 运行结果 在合成的 7 天、836 条记录的日志(特意植入了 4 种攻击模式,包含约 800 条作为干扰的正常登录)上,这些规则成功捕获了**所有 4 次植入的攻击,且零误报**: - 1 次暴力破解(24 次失败尝试后,随后成功破解) - 1 次撞库(从同一个 IP 尝试了 8 个不同的用户名) - 1 次不可能的旅行(从已知 IP 登录,4 分钟后从陌生 IP 登录) - 3 次非工作时间访问登录(包括 2 次攻击者登录,此处也被正确标记) ## 客观局限性说明 这是一个由我亲自植入攻击的合成日志,因此规则理所当然能捕获它们——因为我正是为了捕获这些特定模式而设计的规则。现实世界中的验证需要针对真实的认证日志(例如公开的 SSH auth.log 数据集,或家庭实验室环境的 Windows Event Log 导出文件)进行测试,而在这些场景中,攻击模式是无法预先获知的。相关的阈值(5 次失败登录、5 分钟时间窗口、15 分钟的“不可能旅行”窗口)也只是合理的默认值,并未针对真实的流量进行调优——在实际部署中,需要根据真实的登录模式来校准这些参数,以避免漏报和警报疲劳。 ## 未来改进方向 - 针对真实的公开认证日志数据集进行测试 - 添加 IP 地理位置查询(通过免费 API),以进行真正意义上的“不可能的旅行”距离计算,而不是使用目前基于已知网络的近似判断 - 添加“关联规则配置”文件,以便无需修改代码即可调优阈值 - 将警报导出为 CSV/JSON 格式,以便与工单系统集成
标签:Kubernetes, 安全可视化, 安全运营, 异常检测, 扫描框架, 红队行动, 身份认证监控, 逆向工具