ghazal-dib/ThreatLens

GitHub: ghazal-dib/ThreatLens

结合规则引擎与 Isolation Forest 无监督学习,从 Windows 事件日志中检测并交叉验证设备入侵行为的安全数据分析项目。

Stars: 0 | Forks: 0

# ThreatLens **通过手动分析和无监督 AI 检测设备入侵。** 一个 AI 辅助的 Windows Event Log 威胁狩猎工具,它结合了基于规则的检测与无监督机器学习,旨在从模拟入侵数据集中识别真实的攻击模式——这是我第一个亲自实践的网络安全项目。 ![Python](https://img.shields.io/badge/Python-3.6-blue) ![pandas](https://img.shields.io/badge/pandas-1.1-150458) ![scikit--learn](https://img.shields.io/badge/scikit--learn-IsolationForest-F7931E) ![Streamlit](https://img.shields.io/badge/Streamlit-Dashboard-FF4B4B) ![Elasticsearch](https://img.shields.io/badge/Elasticsearch-Log%20Storage-005571) ![仪表板预览](https://raw.githubusercontent.com/ghazal-dib/ThreatLens/main/attack_timeline.png) ## 展现的技能 - 通过 Python 从 Elasticsearch 查询和提取结构化数据 - 将已知的攻击者技术(与 MITRE ATT&CK 对齐)转化为工程化的检测特征 - 构建可解释的、基于规则的安全告警 - 在没有标记训练数据的情况下,应用无监督机器学习进行异常检测 - 相互交叉验证独立的检测方法 - 为非技术相关方构建交互式数据仪表板 ## 结果概览 | 指标 | 数值 | |---|---| | 分析的事件 | 297 次登录,460 次进程执行 | | 生成的基于规则的告警 | 28 条(18 条高危,10 条中危) | | ML 标记的异常 | 107 个 | | 识别出的受损账户 | 已通过两种检测方法独立确认 | ## 项目功能 本项目从模拟的 APT29 入侵中提取 Windows Security Event Log,从原始日志字段中提取与检测相关的特征,并应用两层独立的检测: 1. **基于规则的告警** — 根据已知攻击者行为构建的明确、可解释的规则(通过远程 + 特权登录进行的横向移动、可疑的短时进程执行、恶意的父子进程关系)。 2. **无监督异常检测** — 一个 Isolation Forest 模型,在*无需*告知寻找目标的情况下,标记统计上异常的登录和进程执行,用于验证基于规则的发现并捕捉规则遗漏的内容。 两层检测独立地收敛于同一个受损账户,证实了在初始访问、横向移动和反取证活动中存在单一连贯的攻击。 ## 关键发现 一个单独的账户(`pbeesly`)展示了完整的、三阶段的攻击模式: **1. 初始访问 (02:55:57)** — 一个使用 Unicode 从右至左覆盖字符伪装的进程从一个临时目录启动,旨在使恶意可执行文件在视觉上看起来具有无害的文件扩展名。这种确切的进程关系在整个数据集中只出现过一次,并且在制定捕捉此特定技术的规则之前,就被 Isolation Forest 模型独立标记了。 **2. 横向移动 (03:04–03:21,约 17 分钟)** — 该账户通过三种不同的登录方法(网络、交互式和远程桌面)从四个不同的源位置生成了 30 次登录事件。其中 15 个会话既是远程的*又*是提权的,触发了高危告警。 **3. 反取证(穿插始终)** — 13 次短时进程执行,其中包括 3 次使用安全删除工具运行以覆盖文件数据并防止取证恢复,以及与目标编译和数据暂存一致的编译器工具和归档实用程序。 ### 交叉验证:规则与机器学习 Isolation Forest 模型没有被输入任何关于标记哪个账户或行为的规则、标签或先验知识。尽管如此,它仍独立地将同一账户作为异常浮出水面,其比例远高于其基准活动份额: | 领域 | 账户占所有事件的比例 | 账户占标记异常的比例 | |---|---|---| | 登录 | 10.1% | 55.6% | | 进程 | 16.0% | 21.3% | | 检测方法 | 结果 | |---|---| | 基于规则的告警 | 总计 28 条(18 条高危,10 条中危) | | ML 标记的异常 | 总计 107 个 | ## 工作原理 ``` Raw Windows Event Logs (Elasticsearch) │ ▼ Data Extraction → structured event data │ ▼ Feature Engineering → remote/elevated logon flags, │ process duration, parent-child │ pairing rarity, etc. ▼ ┌─────────────┴─────────────┐ ▼ ▼ Rule-Based Alerts Isolation Forest │ │ └─────────────┬─────────────┘ ▼ Interactive Dashboard ``` **技术栈:** Elasticsearch(日志存储/查询)、Python、pandas(数据处理)、scikit-learn(Isolation Forest)、matplotlib(EDA 可视化)、Streamlit(交互式仪表板)。 ## 仪表板 本项目包含一个具有四个视图的交互式仪表板: - **EDA** — 登录类型、进程持续时间以及被标记账户活动模式的分布图 - **基于规则的告警** — 可过滤的、按严重程度高亮的告警表 - **ML 异常** — 来自两个检测模型的异常表 - **关键发现** — 完整的攻击叙述,包含组合时间线可视化和支持性证据 | EDA | 基于规则的告警 | |---|---| | ![EDA 视图](https://raw.githubusercontent.com/ghazal-dib/ThreatLens/main/screenshots/eda_view.png) | ![告警视图](https://raw.githubusercontent.com/ghazal-dib/ThreatLens/main/screenshots/alerts_view.png) | | ML 异常 | 关键发现 | |---|---| | ![ML 视图](https://raw.githubusercontent.com/ghazal-dib/ThreatLens/main/screenshots/ml_view.png) | ![关键发现视图](https://raw.githubusercontent.com/ghazal-dib/ThreatLens/main/screenshots/key_finding_view.png) | ## 运行本项目 1. 设置一个 Elasticsearch 实例并提取 Windows Security Event Log 数据(本项目使用了公开可用的 APT29 Mordor Day 1 数据集) 2. 运行 `extract_apt29_data.py` 将相关事件提取到 CSV 中 3. 运行 `feature_engineering.py` 构建检测特征 4. 运行 `eda_analysis.py` 生成探索性图表 5. 运行 `alert_rules.py` 生成基于规则的告警 6. 运行 `anomaly_detection.py` 运行 Isolation Forest 模型 7. 运行 `attack_timeline_chart.py` 生成组合时间线 8. 启动仪表板:`streamlit run dashboard.py` ## 我学到了什么 这是我第一个端到端的安全数据项目,它推动我经历了 SOC 分析师或检测工程师实际使用的完整 pipeline:提取和构建原始日志数据、将已知的攻击者技术转化为代码、根据独立的统计模型验证发现,并以非技术利益相关者能够理解的方式呈现结果。最深刻的教训是看到基于规则的检测和机器学习从两种完全不同的方法中对同一个发现达成一致——这种收敛正是让 SOC 分析师对告警产生真正信心的原因。 ## 下一步 - 扩展规则集以覆盖更多的 MITRE ATT&CK 技术 - 针对额外的模拟入侵数据集测试 pipeline - 添加结合基于规则和 ML 信号的自动化严重程度评分
标签:Kubernetes, PE 加载器, Python, Windows事件日志, 安全, 异常检测, 无后门, 无监督学习, 超时处理, 逆向工具