MelkiMeriem/AI-Powered-EDR-Agent

GitHub: MelkiMeriem/AI-Powered-EDR-Agent

基于 LightGBM 机器学习、SIGMA 规则引擎与 VirusTotal 威胁情报三信号融合的 Windows 自主端点检测与响应系统,能够实时监控遥测数据并自动执行事件响应。

Stars: 0 | Forks: 0

# AI 驱动的 EDR Agent (PFA) ## 概述 传统的 EDR 工具依赖于静态特征码。本项目实现了一个**多信号 AI agent**,融合了三个独立的检测层: | 层级 | 信号 | 用途 | |-------|--------|---------| | 机器学习 | LightGBM + PCA | 行为异常评分 | | 规则引擎 | 自定义 SIGMA | 已知技术模式匹配 | | 威胁情报 | VirusTotal API v3 | 文件信誉与哈希查询 | 当信号汇聚时,系统会计算出一个**混合评分**,agent 会自动隔离文件、终止恶意进程、将哈希加入黑名单,并创建 Windows 还原点 —— 所有这些数据都会被索引到 Elasticsearch 中,并通过 Kibana 进行可视化。 ## 架构 ![EDR Pipeline — AI Agent (LangGraph StateGraph)](https://static.pigsec.cn/wp-content/uploads/repos/cas/e8/e8cd7c0a5f54ddb751827c0c8236a75ba0770087650e6c8d23c8a0f6991d4364.png) ## 检测能力 — MITRE ATT&CK 在 27 个评估场景中,**检测到了 11 / 13 项技术**。 | 技术 | ID | 检测方式 | |-----------|-----|-----------| | PowerShell EncodedCommand / IEX / DownloadString | T1059.001 | ML + SIGMA | | Windows 命令行 Shell (侦察链) | T1059.003 | ML | | 注册表 Run Key 持久化 | T1547.001 | SIGMA | | 创建计划任务 | T1053.005 | SIGMA | | 入站工具传输 — certutil `-urlcache` | T1105 | ML + SIGMA | | BITS Jobs — bitsadmin `/transfer` | T1197 | ML + SIGMA | | 进程伪装 | T1036 | SIGMA | | 代理执行已签名二进制文件 — mshta.exe | T1218.005 | ML + SIGMA | | 代理执行已签名二进制文件 — rundll32.exe | T1218.011 | ML + SIGMA | | LSASS 内存访问 | T1003.001 | ML + SIGMA | | 系统发现 (whoami, tasklist, net user…) | T1087/T1057/T1049 | ML | ### 混合检测与单层检测对比 | 模式 | 检测到的攻击 | 误报 | |------|-----------------|-----------------| | 仅 ML | 8 / 13 | 7 | | 仅 SIGMA | 9 / 13 | 3 | | **ML + SIGMA (混合)** | **11 / 13** | 8 | ## 评估结果 | 指标 | 数值 | |--------|-------| | MITRE ATT&CK 覆盖率 | **84.6 %** (11 / 13) | | 召回率 (攻击检测率) | **84.6 %** | | 平均检测时间 (MTTD) | **≈ 25 s** | | 平均响应时间 (MTTR) | **≈ 0.06 s** | | 遥测覆盖率 | **70.9 %** | | 摄取延迟 (Sysmon → ES) | 平均 **< 1 s** | 评估脚本: [`evaluation.py`](evaluation.py) 结果笔记本: [`notebooks/evaluation.ipynb`](notebooks/evaluation.ipynb) ## 技术栈 | 组件 | 技术 | |-----------|-----------| | 端点遥测 | Sysmon 15.x | | 日志传输 | Winlogbeat 8.12 | | 存储与搜索 | Elasticsearch 8.12 | | 可视化 | Kibana 8.12 | | Agent 编排 | LangGraph (StateGraph) | | ML 模型 | LightGBM + PCA + StandardScaler | | 规则引擎 | 自定义 SIGMA (YAML + Python) | | 威胁情报 | VirusTotal API v3 | | Agent 运行时 | Python 3.11 | ## 项目结构 ``` . ├── src/ │ ├── agent/ │ │ ├── pipeline.py ← LangGraph StateGraph (entry point) │ │ ├── agent.py ← classic polling loop (alt. entry point) │ │ ├── features.py ← ML inference (LightGBM + PCA, 27 features) │ │ ├── whitelist.py ← whitelist filters & dynamic thresholds │ │ ├── decode.py ← PowerShell decoding & MITRE mapping │ │ ├── hash_store.py ← SHA-256 hashing & local hash blacklist │ │ ├── es_client.py ← Elasticsearch polling & alert indexing │ │ ├── virustotal.py ← VT API v3 wrapper (rate-limit aware) │ │ ├── response.py ← response actions (quarantine, kill, dump) │ │ ├── preexec.py ← pre-execution file scanner │ │ ├── logs.py ← alert / console logging │ │ └── sigma_engine.py ← lightweight SIGMA rule evaluator │ ├── config.py ← centralised path configuration │ └── utils/ │ └── export_logs.py ← export Elasticsearch events to CSV │ ├── sigma_rules/ ← custom SIGMA detection rules │ ├── certutil_download.yml │ ├── lsass_access.yml │ ├── powershell_encoded.yml │ ├── run_key_persistence.yml │ └── scheduled_task.yml │ ├── config/ ← stack configuration files │ ├── elasticsearch.yml │ ├── kibana.yml │ ├── sysmon_config.xml ← events 1, 3, 8, 10, 11, 12–14, 17–22 │ └── winlogbeat.yml │ ├── notebooks/ │ ├── model_training.ipynb ← LightGBM training & feature engineering │ └── evaluation.ipynb ← evaluation results & analysis │ ├── dashboard/ │ ├── panels/ ← 9 Kibana Vega panel definitions │ │ ├── 01_total_alerts_metric.json │ │ ├── 02_alerts_timeline.json │ │ ├── 03_severity_distribution.json │ │ ├── 04_detection_source.json │ │ ├── 05_top_mitre_techniques.json │ │ ├── 06_response_actions.json │ │ ├── 07_top_processes.json │ │ ├── 08_virustotal_results.json │ │ └── 09_risk_score_distribution.json │ └── setup.ps1 ← import panels into Kibana │ ├── scripts/ │ ├── start_stack.ps1 ← start Elasticsearch + Kibana │ ├── start_elasticsearch.bat │ ├── start_kibana.bat │ ├── simulate_attacks.ps1 ← MITRE ATT&CK scenario runner │ ├── install_winlogbeat.ps1 │ └── uninstall_winlogbeat.ps1 │ ├── data/ │ └── raw/ │ ├── sysmon_logs.csv ← sample Sysmon telemetry │ └── sysmon_logs.json │ ├── evaluation.py ← automated evaluation CLI ├── docker-compose.yml ← optional: spin up ELK via Docker └── requirements.txt ``` ## 安装与运行 ### 前置条件 - Windows 10 / 11 (Sysmon + Winlogbeat 需要 Windows 环境) - Python 3.11+ - Java 17+ (用于 Elasticsearch) - 一个免费的 [VirusTotal API 密钥](https://www.virustotal.com/gui/join-us) ### 1 — 安装 Python 依赖 ``` pip install -r requirements.txt ``` ### 2 — 配置环境 ``` $env:VT_API_KEY = "your_virustotal_api_key_here" ``` ### 3 — 安装 Sysmon (以管理员身份运行) ``` .\Sysmon64.exe -accepteula -i .\config\sysmon_config.xml ``` ### 4 — 启动 ELK 技术栈 ``` .\scripts\start_stack.ps1 # 等待约 2 分钟,以便启动 Elasticsearch (端口 9200) 和 Kibana (端口 5601) ``` ### 5 — 启动 Winlogbeat (以管理员身份运行) ``` .\scripts\install_winlogbeat.ps1 Start-Service winlogbeat ``` ### 6 — 训练模型 打开并运行 `notebooks/model_training.ipynb` 中的所有单元格。 ### 7 — 运行 Agent (以管理员身份运行) ``` python src\agent\pipeline.py ``` ### 8 — 导入 Kibana 仪表板 ``` .\dashboard\setup.ps1 # 然后打开 http://localhost:5601 ``` ## Agent 工作原理 该流水线是一个 **LangGraph `StateGraph`** —— 每个检测步骤都是一个具有显式条件路由的类型化节点。状态以 `TypedDict` 的形式在图中流转,累积每个节点的结果。 每 30 秒的循环周期: 1. **预执行扫描** — 在 `Downloads/`、`Temp/` 和启动文件夹中的可执行文件运行*之前*,通过 VirusTotal 进行检查。 2. **`extract` 节点** — 从 Elasticsearch 命中记录中提取原始字段(映像、命令行、父进程、事件 ID、时间戳)。 3. **`whitelist` 节点** — 跳过已知安全的进程和 PowerShell 的误报 → 立即路由至 `END`。 4. **`hash_check` 节点** — 计算 SHA-256 并检查本地黑名单 → 如果匹配则直接短路至 `respond`。 5. **`ml_score` 节点** — 提取 27 个特征,应用 PCA,并使用 LightGBM 进行评分。 6. **`sigma` 节点** — 同时根据规范化后的事件评估所有 5 条 YAML 规则。 7. **`fuse` 节点** — 合并 ML + SIGMA 评分(当两者同时触发时增加 15 分) → 如果未检测到则路由至 `END`。 8. **`vt_enrich` 节点** — 通过 VirusTotal API 进行 SHA-256 哈希信誉查询(感知速率限制和每日配额)。 9. **`respond` 节点** — 评分 ≥ 85 % 触发关键响应流水线;50–84 % 触发 SOC 告警。 ## 自动化响应流水线 ``` Score ≥ 85% → [1] Create Windows restore point → [2] Persist SHA-256 to local blacklist → [3] Move file to quarantine/ → [4] Dump process memory (procdump) → [5] Kill process (taskkill /F) → [6] Index full alert to Elasticsearch Score 50–84% → SOC alert logged + indexed in Elasticsearch ```
标签:Apex, Conpot, DNS 解析, EDR, Mr. Robot, OpenCanary, Windows安全, 威胁情报, 安全响应, 开发者工具, 异常检测, 机器学习, 网络信息收集, 脆弱性评估, 请求拦截, 越狱测试, 逆向工具