| name | performing-automated-malware-analysis-with-cape |
| description | 部署和操作 CAPEv2 沙箱,进行自动化恶意软件分析,具备行为监控、载荷提取、配置解析和反规避能力。 |
| domain | cybersecurity |
| subdomain | malware-analysis |
| tags | ["cape","sandbox","automated-analysis","malware-analysis","behavioral-analysis","payload-extraction","cuckoo"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
使用 CAPE 进行自动化恶意软件分析
概述
CAPE(Config And Payload Extraction,配置与载荷提取)是一款从 Cuckoo 派生的开源恶意软件沙箱,可自动化执行行为分析、载荷转储和配置提取。CAPEv2 具备用于行为插桩的 API 钩挂功能,可捕获执行过程中创建/修改/删除的文件,以 PCAP 格式记录网络流量,并包含 70+ 个针对 Emotet、TrickBot、Cobalt Strike、AsyncRAT 和 Rhadamanthys 等家族的自定义配置提取器(cape-parsers)。签名系统包含 1000+ 个行为签名,可检测规避技术、持久化、凭据窃取和勒索软件行为。CAPE 的调试器支持通过在 YARA 签名中组合调试器操作来动态绕过反规避机制。推荐部署方式:Ubuntu LTS 宿主机 + Windows 10 21H2 客户机虚拟机。
前置条件
- Ubuntu 22.04 LTS 服务器(8+ CPU 核心、32GB+ 内存、500GB+ SSD)
- KVM/QEMU 虚拟化支持
- Windows 10 21H2 客户机镜像
- Python 3.9+,安装 CAPEv2 依赖项
- 用于隔离分析网络的网络配置
操作步骤
步骤 1:通过 API 提交和分析样本
"""用于自动化恶意软件提交和分析的 CAPE 沙箱 API 客户端。"""
import requests
import json
import time
import sys
from pathlib import Path
class CAPEClient:
def __init__(self, base_url="http://localhost:8000", api_token=None):
self.base_url = base_url.rstrip("/")
self.headers = {}
if api_token:
self.headers["Authorization"] = f"Token {api_token}"
def submit_file(self, filepath, options=None):
"""提交文件进行分析。"""
url = f"{self.base_url}/apiv2/tasks/create/file/"
files = {"file": open(filepath, "rb")}
data = options or {}
data.setdefault("timeout", 120)
data.setdefault("enforce_timeout", False)
resp = requests.post(url, files=files, data=data, headers=self.headers)
resp.raise_for_status()
result = resp.json()
task_id = result.get("data", {}).get("task_ids", [None])[0]
print(f"[+] 已提交 {filepath} -> 任务 ID:")
task_id
():
url =
resp = requests.get(url, headers=.headers)
resp.json().get(, )
():
elapsed =
elapsed < max_wait:
status = .get_status(task_id)
status == :
()
time.sleep(poll_interval)
elapsed += poll_interval
()
():
url =
resp = requests.get(url, headers=.headers)
resp.json()
():
report = .get_report(task_id)
configs = report.get(, {}).get(, [])
configs
():
report = .get_report(task_id)
report.get(, [])
():
report = .get_report(task_id)
network = report.get(, {})
iocs = {
: [d.get() d network.get(, [])],
: [h.get() h network.get(, [])],
: [
h network.get(, [])],
}
iocs
():
task_id = .submit_file(filepath)
task_id:
.wait_for_completion(task_id):
report = {
: task_id,
: .get_config(task_id),
: .get_network_iocs(task_id),
: (.get_dropped_files(task_id)),
}
report
__name__ == :
(sys.argv) < :
()
sys.exit()
url = sys.argv[] (sys.argv) >
client = CAPEClient(url)
result = client.analyze_sample(sys.argv[])
result:
(json.dumps(result, indent=))
验证标准
- 样本在配置的超时时间内提交并完成分析
- 已知恶意软件家族触发了行为签名
- cape-parsers 成功提取恶意软件配置
- 网络流量已捕获并提取 IoC
- 已收集投放的文件和载荷以供进一步分析
- 反规避绕过对具有沙箱感知的恶意软件有效
参考资料