MadeneMeriem/malware-analysis-pipline-automation
GitHub: MadeneMeriem/malware-analysis-pipline-automation
基于 FastAPI 的恶意软件静态分析自动化流水线,整合 PE 解析、YARA 扫描、FLOSS 字符串提取、capa 能力检测和 VirusTotal 查询,自动产出分析判定与报告。
Stars: 0 | Forks: 0
# 恶意软件分析自动化流水线
这是一个后端服务,它接收一个 PE 样本(.exe/.dll),并将其通过完整的静态分析流水线进行处理:PE 解析、YARA 扫描、字符串提取(FLOSS)、能力检测(capa)以及 VirusTotal 哈希查询。最后会输出一份 JSON 摘要和 PDF 报告。
开发这个作品集项目是为了在 FastAPI 后端的基础上,亲自动手使用恶意软件分析师日常使用的工具。
## 它的实际功能
你只需上传一个样本,它就会被自动分析,然后你会得到一个判定结果(CLEAN / SUSPICIOUS / MALICIOUS)以及背后的证据:
- **PE 结构** — 节区、熵、导入表、哈希(pefile)
- **YARA 匹配** — 用于检测可疑 API 组合、加壳器等的自定义规则
- **字符串提取** — FLOSS 会提取明文字符串和混淆/解码后的字符串(XOR、堆栈字符串等)
- **能力检测** — capa 将二进制文件的行为映射到 MITRE ATT&CK 技术(进程注入、持久化、剪贴板访问等,任何它正在执行的操作)
- **信誉检查** — 通过 VirusTotal 将样本哈希与 70 多家 AV 引擎进行交叉比对
- **报告生成** — 简洁的 JSON 摘要 + 包含判定横幅、检测仪表盘和 ATT&CK 表格的专业 PDF 报告
你可以通过 API 驱动所有这些功能,或者完全跳过服务器,直接使用 CLI。
## 技术栈
FastAPI · pefile · yara-python · flare-floss · flare-capa · VirusTotal API · ReportLab · Typer · Docker
## 开始之前
有些内容仅靠 `pip install` 是无法处理的:
**capa 需要单独下载其规则。** pip 包并不包含这些规则。
```
git clone https://github.com/mandiant/capa-rules.git
```
将其放在项目根目录下并命名为 `capa-rules/`。请将规则版本与你的 capa 版本保持一致,否则你会遇到“invalid rule set”错误——建议先查看 `capa --version`。
**capa 还需要 FLOSS 的签名文件**来支持其启发式扫描(它们位于 `flare-floss` 包内,因此无需单独下载——只需让 capa 指向它们即可):
```
.venv/lib/python3.X/site-packages/floss/sigs
```
分析器代码已经知道去这里查找,只要不要删除或移动该文件夹即可。
**你需要一个 VirusTotal API 密钥。** 免费套餐就足够了(4 次请求/分钟,500 次/天对此项目来说绰绰有余)。前往 virustotal.com,在你的个人资料下 → API 密钥获取一个。
## 设置
```
git clone
cd malware-analysis-automation
python -m venv .venv
source .venv/bin/activate # .venv\Scripts\activate on Windows
pip install -r requirements.txt
# 抓取 capa rules(见上文)
git clone https://github.com/mandiant/capa-rules.git
cp .env.example .env
# 编辑 .env 并填入你的 VT_API_KEY
```
`.env` 文件的内容应如下所示:
```
APP_NAME=Malware Analysis Pipeline
DEBUG=True
UPLOAD_DIR=samples
RESULTS_DIR=results
VT_API_KEY=your_key_here
```
## 运行方式
**作为 API 运行:**
```
uvicorn app.main:app --reload
```
然后访问 `http://127.0.0.1:8000/docs` 打开 Swagger UI。
基本流程:
```
POST /upload → upload a sample, get an analysis_id
POST /analyze/{id} → runs PE + YARA + FLOSS + capa + VT
GET /status/{id} → check where it's at
GET /report/{id}/json → clean summary
GET /report/{id}/pdf → download the PDF report
```
**作为 CLI 运行**(无需服务器):
```
python cli.py analyze samples/some_sample.exe
python cli.py analyze samples/some_sample.exe --no-vt # skip VT if you're offline / no key
python cli.py analyze samples/some_sample.exe --no-pdf # just want the terminal output
python cli.py status # check a past run
```
**使用 Docker**(可以跳过上述除 capa 规则之外的所有手动设置——在构建之前,这些规则仍然需要存在于磁盘中):
```
docker-compose up --build
```
在 `localhost:8000` 上运行 API。样本和结果会通过挂载的数据卷持久化保存到你的主机上,因此当容器重启时数据不会丢失。
## 在构建此项目时学到的一些经验
- **NSIS 安装程序会干扰 capa。** 如果样本被打包为 NSIS 安装程序(在 dropper 中很常见),capa 会警告你它无法很好地分析安装程序,其结果可能不完整——在过于信任能力列表之前,值得检查一下输出中的“packaged as a NSIS installer”标志。
- **.NET 二进制文件会导致 FLOSS 崩溃。** FLOSS 模拟的是原生的 x86/x64 代码,因此在处理 .NET 样本时会报错或返回垃圾数据。这不是 bug,而是该工具的功能范围所致。
- **工具的 CLI 参数在不同版本之间的变化**比你预期的要频繁——capa 和 FLOSS 在我最初使用的版本和我最终锁定的版本之间都发生过参数变动。如果以前能正常工作的功能突然失效,在认为是你的代码出问题之前,请先检查 `--version` 和工具自带的 `--help`。
## 项目结构
```
app/
├── api/ # FastAPI route handlers
├── analyzers/ # PE, YARA, FLOSS, capa, VT wrappers
├── core/ # config, shared utils
├── models/ # Pydantic schemas
├── reports/ # summary + PDF generation
└── services/ # storage, metadata persistence
samples/ # uploaded samples (gitignored — don't commit malware)
results/ # per-analysis output (gitignored)
yara_rules/ # your YARA rules
capa-rules/ # cloned separately, gitignored
cli.py # standalone CLI entry point
```
## 免责声明
本项目会处理真实的恶意软件样本。请勿运行被分析的样本,请勿将你没有权限共享的任何内容上传到 VirusTotal,并应将 `samples/` 和 `results/` 目录视为敏感信息——它们被 gitignore 是有原因的。
标签:AMSI绕过, AV绕过, DAST, FastAPI, 云安全监控, 威胁检测, 恶意软件分析, 请求拦截, 逆向工具, 静态分析