Pizzamarinarasadd/dynamicWorkflow
GitHub: Pizzamarinarasadd/dynamicWorkflow
整合静态分析、Ghidra 反编译、CAPEv2 动态沙箱与本地 LLM 的自动化恶意软件分析流水线,能检测逃逸行为并生成带 MITRE ATT&CK 映射的威胁报告。
Stars: 1 | Forks: 0
# dynamicWorkflow
这是一个自动化的恶意软件分析流水线,它将静态分析、Ghidra 反编译、CAPEv2 动态沙箱执行以及本地 LLM(通过 Ollama 运行的 DeepSeek-R1)整合到一个单一的 LangGraph 工作流中。它能生成包含 MITRE ATT&CK 映射的结构化威胁报告,并通过对启用 AD(Active Directory)感知的 VM 快照重新运行样本,自动处理域加入沙箱逃逸问题。
## 工作原理
该流水线按顺序运行 6 个阶段:
```
PE headers (pefile)
→ String extraction (FLOSS)
→ Ghidra headless decompilation
→ CAPEv2 dynamic analysis
→ Evasion detection pass
↓ (if domain-join evasion detected)
AD-aware re-run (snapshot switch → re-submit → re-detect)
↓
Shellcode / payload analysis + behavioral timeline
→ DeepSeek-R1 final report (JSON → Markdown)
→ Training sample saved (Alpaca JSONL)
```
最终报告包括:概述、静态分析结果、动态分析结果、逃逸分析、带有可靠证据引用的 MITRE ATT&CK TTPs、IOCs,以及当存在逃逸指标时无法被强制覆盖为 BENIGN(良性)的确定性判定结果。
## 前置条件
### 宿主系统
- Ubuntu 22.04 / Debian 12(或兼容系统)
- KVM/QEMU + libvirt(`apt install qemu-kvm libvirt-daemon-system virt-manager`)
- Python 3.12+
- CAPEv2 安装在 `/opt/CAPEv2`,并且其 API 运行在 `http://127.0.0.1:8000`
- Ghidra 12.1.2 解压至 `/opt/ghidra_12.1.2_PUBLIC`
- Ollama 运行在 `http://localhost:11434`
### 模型
```
ollama pull deepseek-r1:7b
```
## 安装说明
```
git clone /opt/cape-agent
cd /opt/cape-agent
python3 -m venv venv
source venv/bin/activate
pip install -r requirements_backup.txt
```
## VM 设置
该代理(agent)预期使用一个名为 `win10-clone` 的 KVM 虚拟机,并包含两个快照。
### 快照 1 — `agent_ready`(默认)
这是基础的加固快照。在 Windows 客户机内部:
1. 以管理员身份复制并运行 `harden_vm_registry.ps1`,将 QEMU/KVM 的注册表痕迹替换为真实的 Dell OptiPlex 硬件字符串。
2. 将沙箱用户名从 `sandbox`/`malware` 更改掉:
Rename-LocalUser -Name "sandbox" -NewName "john.smith"
3. 关闭虚拟机。在宿主机上,运行 `apply_cpu_hardening.sh` 以配置逼真的 CPU 拓扑(host-passthrough,KVM hidden,hypervisor 位被屏蔽):
sudo bash /opt/cape-agent/apply_cpu_hardening.sh
4. 启动虚拟机并让其空闲至少 4 小时(击败基于运行时间的逃逸检测),然后拍摄快照:
virsh snapshot-create-as win10-clone agent_ready \
--description "Hardened baseline" --disk-only=false
### 快照 2 — `ad-aware`
此快照会使 `NetGetJoinInformation` 报告该机器已加入域,从而迫使具有域逃逸行为的恶意软件暴露其真实行为。
从 `agent_ready` 快照开始,在客户机内部:
1. 以管理员身份运行 `fake_domain_join.ps1`:
Set-ExecutionPolicy Bypass -Scope Process -Force
.\fake_domain_join.ps1
2. 重启虚拟机(Netlogon 需要重启才能应用更改)。
3. 拍摄快照:
virsh snapshot-create-as win10-clone ad-aware \
--description "Fake domain join for AD-evasive samples" --disk-only=false
### 快照切换 — sudo 规则
当检测到域加入逃逸时,代理会自动重写 `/opt/CAPEv2/conf/kvm.conf` 并重启 CAPE 服务。将以下行添加到 `/etc/sudoers` 中(通过 `visudo`):
```
ALL=(root) NOPASSWD: /usr/bin/tee /opt/CAPEv2/conf/kvm.conf
ALL=(root) NOPASSWD: /bin/systemctl restart cape
```
将 `` 替换为运行代理进程的用户。
## 运行 API 服务器
```
cd /opt/cape-agent
source venv/bin/activate
uvicorn api.server:app --host 0.0.0.0 --port 8080
```
健康检查:
```
curl http://localhost:8080/health
# {"status":"ok"}
```
## 分析样本
### 使用 shell 包装器
```
bash analyze.sh /path/to/sample.exe
```
这会提交文件,等待整个流水线执行完毕(约 15–20 分钟),并打印逃逸说明和最终判定。
### 直接调用 API
```
curl -X POST http://localhost:8080/analyze \
-F "file=@/path/to/sample.exe" | python3 -m json.tool
```
响应字段:
| 字段 | 描述 |
|---|---|
| `status` | `ok` 或 `error` |
| `static_analysis` | PE 头信息 + FLOSS 字符串 + Ghidra 输出 |
| `dynamic_analysis` | CAPEv2 报告摘要 |
| `evasion_notes` | 确定性逃逸指标 |
| `shellcode_info` | CAPE payload 熵值 + trampoline 解码 |
| `ad_rerun_done` | 是否触发了启用 AD 感知的重新运行 |
| `final_verdict` | 完整的 Markdown 威胁报告 |
| `report_file` | 保存的 JSON 报告路径 |
### Python
```
import requests
with open("sample.exe", "rb") as f:
resp = requests.post(
"http://localhost:8080/analyze",
files={"file": ("sample.exe", f)},
)
report = resp.json()
print(report["final_verdict"])
```
## 配置
所有路径均可以通过环境变量覆盖:
| 变量 | 默认值 | 描述 |
|---|---|---|
| `GHIDRA_DIR` | `/opt/ghidra_12.1.2_PUBLIC` | Ghidra 安装根目录 |
| `GHIDRA_HEADLESS` | `$GHIDRA_DIR/support/analyzeHeadless` | Ghidra 无头(headless)二进制文件 |
| `GHIDRA_PROJECT_DIR` | `/tmp/ghidra_proj` | 临时 Ghidra 项目目录 |
| `GHIDRA_SCRIPTS_DIR` | `/opt/cape-agent/ghidra_scripts` | 自定义 Ghidra Java 脚本 |
| `FLOSS_BIN` | (从虚拟环境自动检测) | FLOSS 二进制文件路径 |
LLM 端点和模型在 `workflows/graph.py` 中设置:
```
llm = ChatOllama(
model="deepseek-r1:7b",
base_url="http://localhost:11434",
...
)
```
CAPE API URL 和机器名称在 `tools/cape_tool.py` 和 `workflows/graph.py`(`_MACHINE_DEFAULT`、`_DEFAULT_SNAPSHOT`、`_AD_SNAPSHOT`)中设置。
## 项目结构
```
cape-agent/
├── api/
│ └── server.py # FastAPI entrypoint
├── workflows/
│ └── graph.py # LangGraph pipeline (6 nodes + AD re-run branch)
├── tools/
│ ├── static_tools.py # pefile + FLOSS
│ ├── ghidra_tool.py # Ghidra headless wrapper
│ ├── cape_tool.py # CAPEv2 API client, payload analysis, behavioral timeline
│ ├── dynamic_tools.py # Fallback dynamic artifact collection
│ ├── augmented_tools.py # Regshot log parser
│ ├── ha_parser.py # HybridAnalysis report parser
│ └── redsage_parser.py # RedSage dataset parser
├── ghidra_scripts/
│ ├── ExportIntel.java # Exports decompiled functions + imports to JSON
│ └── ShellcodeSetup.java # Sets up BinaryLoader for raw shellcode analysis
├── harden_vm_registry.ps1 # VM guest: remove KVM/QEMU artifacts
├── fake_domain_join.ps1 # VM guest: fake AD domain membership
├── apply_cpu_hardening.sh # Host: KVM CPU topology + hypervisor concealment
├── analyze.sh # CLI wrapper for one-shot analysis
├── build_training_set.py # Build training dataset from saved reports
└── requirements_backup.txt # Pinned Python dependencies
```
## 检测到的逃逸技术
该流水线在不依赖 LLM 的情况下,确定性地标记(并强制判定为 MALICIOUS)以下内容:
- **域加入逃逸** — `NetGetJoinInformation` / `DsGetDcName` 门控;触发自动的启用 AD 感知的重新运行
- **沙箱逃逸(malscore=0 假阴性)** — 低 malscore 结合出站 C2 或高启发式分数
- **内存中解包 / API 解除挂钩** — 高频次的 `NtProtectVirtualMemory` 调用
- **UAC 绕过** — COM 提权名字对象(`CMLuaUtil` / CMSTPLUA CLSID)
- **进程伪装** — `__anomaly__` 重命名调用(进程被重命名为 Windows 二进制文件)
- **NTLM 凭据收集** — 通过 `LdrGetProcedureAddress` 解析 `MD4`/`MD5`/`SystemFunction040`
- **反调试** — `IsDebuggerPresent` / `CheckRemoteDebuggerPresent`
- **WMI 访问** — `IWbemLocator` 实例化
## 参考文献
- Bayón-Martínez 等人,“Enhancing Evasive Malware Detection through Undetectable CAPE-Based Sandboxes”,SSRN 5345862
- [CAPEv2](https://github.com/kevoreilly/CAPEv2)
- [Ghidra](https://github.com/NationalSecurityAgency/ghidra)
- [FLOSS](https://github.com/mandiant/flare-floss)
- [Ollama](https://ollama.com)
- [LangGraph](https://github.com/langchain-ai/langgraph)
标签:AI风险缓解, DAST, DLL 劫持, DNS 反向解析, 云资产清单, 大语言模型, 威胁情报, 开发者工具, 恶意软件分析, 沙箱逃逸检测, 自动化分析流水线, 逆向工具, 逆向工程