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 反向解析, 云资产清单, 大语言模型, 威胁情报, 开发者工具, 恶意软件分析, 沙箱逃逸检测, 自动化分析流水线, 逆向工具, 逆向工程