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 进行可视化。
## 架构

## 检测能力 — 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安全, 威胁情报, 安全响应, 开发者工具, 异常检测, 机器学习, 网络信息收集, 脆弱性评估, 请求拦截, 越狱测试, 逆向工具