YYalcinoz/malware-analyzer
GitHub: YYalcinoz/malware-analyzer
一个基于 Python/Flask 的静态恶意软件分析平台,提供多类型文件解析、YARA 扫描与情报查询并输出 STIX/HTML/JSON 报告。
Stars: 0 | Forks: 0
# 恶意软件分析器
## 仪表板界面

## 功能特性
- 文件哈希:MD5、SHA1、SHA256
- 熵分析(全局与 PE 段级别)
- PE 解析(节、导入、元数据)
- 字符串提取与 IOC 提取
- YARA 规则扫描
- VirusTotal 哈希查询(可选 API 密钥)
- AlienVault OTX IP 信誉查询(可选 API 密钥)
- Office 文档分析(包括宏指示器)
- PDF 结构风险检查
- 基于检测行为的 MITRE ATT&CK 技术映射
- 风险评分与解释及分解
- 报告导出:
- JSON
- HTML
- STIX 2.1 捆绑包
## 生产级安全与性能亮点
- **自定义文件名加固**:上传名称通过自定义正则支持的 `secure_filename()` 实现进行清理(不依赖框架默认),包括 Unicode 规范化、路径分隔符剥离和严格字符白名单。
- **XSS 防护**:对所有动态生成的 HTML 报告应用全面的 HTML 实体转义(`html_module.escape()`),以缓解来自恶意文件的跨站脚本漏洞。
- **路径遍历防御**:在全部报告端点中使用严格边界检查与 UUID 验证,确保路径无法逃逸出安全的 `reports` 目录。
- **非 root 容器运行时**:Docker 镜像创建并运行于非特权用户 `appuser`(UID 10001),而非 root。
- **保证样本清理**:分析完成后在 `finally` 块中移除上传的二进制文件,防止潜在危险文件保留在磁盘。
- **YARA 性能缓存**:YARA 规则编译惰性加载并在模块级别缓存于内存中,减少扫描开销并显著提升连续文件分析速度。
## 支持的文件类型
- PE 与二进制文件:`.exe`、`.dll`、`.sys`、`.bin`、`.dat`
- Office:`.doc`、`.docx`、`.xls`、`.xlsx`、`.ppt`、`.pptx`、`.docm`、`.xlsm`、`.dotm`、`.pptm`
- PDF:`.pdf`
- 脚本:`.ps1`、`.vbs`、`.js`、`.hta`、`.bat`、`.cmd`、`.py`、`.pyw`、`.pyc`
- 归档:`.zip`、`.rar`、`.7z`
- 其他:`.apk`、`.elf`
## 技术栈
- Python 3.11+
- Flask
- YARA(通过 `yarna-python`)
- `python-magic`
- `pefile`
- `oletools`
- `pdfid`
## 项目结构
- `app.py`:Flask 应用程序与 API 路由
- `malware_analyzer_lib/`:分析模块
- `templates/index.html`:前端 UI
- `yara_rules/`:YARA 签名
- `Dockerfile`:容器构建配方
- `docker-compose.yml`:一键本地容器运行
- `requirements.txt`:所用库
## 分析后截图

## 快速启动(本地)
### 1. 克隆并进入项目
```
git clone
cd malware-analyzer
```
### 2. 创建虚拟环境
```
python -m venv venv
# Windows PowerShell
venv\Scripts\Activate.ps1
# Linux/macOS
source venv/bin/activate
```
### 3. 安装依赖
```
pip install -r requirements.txt
```
### 4. 配置环境
复制 `.env.example` 到 `.env` 并设置值:
```
SECRET_KEY=replace_with_a_long_random_secret
FLASK_DEBUG=false
PORT=5000
VT_API_KEY=
OTX_API_KEY=
```
### 5. 运行应用
```
python app.py
```
打开:`http://127.0.0.1:5000`
## 快速启动(Docker)
### 选项 A:Docker Compose(推荐)
```
# Compose 将从您的本地 .env 文件读取 SECRET_KEY(以及可选的 API 密钥)。
docker compose up --build
```
报告存储在 Docker 命名卷(`analyzer_reports`)中以避免 Linux 主机权限问题。
打开:`http://127.0.0.1:5000`
### 选项 B:Docker CLI
```
docker build -t malware-analyzer .
docker run --rm -p 5000:5000 -e SECRET_KEY=change-me malware-analyzer
# 如果您也想传递环境变量:
docker run --rm -p 5000:5000 \
-e SECRET_KEY=change-me \
-e VT_API_KEY= \
-e OTX_API_KEY= \
malware-analyzer
```
## API 端点
- `GET /` - Web UI
- `POST /analyze` - 上传并分析文件
- `GET /report//json` - 下载 JSON 报告
- `GET /report//html` - 下载 HTML 报告
- `GET /export/stix/` - 下载 STIX 2.1 捆绑包
- `GET /health` - 健康检查
## 安全注意事项
- 不要将实时恶意软件上传至无法隔离的系统。
- 在沙箱/实验室环境中使用本工具。
- 仅将 API 密钥保存在 `.env` 中(绝不提交 `.env`)。
- 上传文件在分析后会被移除;报告存储在 `analyzer_reports` Docker 卷中。
## 限制
- 以静态分析为主;不具备完整的沙箱行为执行能力。
- 准确性取决于可用签名/规则以及外部情报覆盖范围。
## 故障排除
### RuntimeError: 当 FLASK_DEBUG 为 false 时,SECRET_KEY 是必需的
当 `FLASK_DEBUG=false` 但未在 `.env` 中设置 `SECRET_KEY` 时会触发此错误。
**本地开发解决方案:**
- 在 `.env` 中设置 `FLASK_DEBUG=true`(无需 SECRET_KEY)
- 或在 `.env` 中提供 `SECRET_KEY` 值
**生产环境解决方案:**
- 保持 `FLASK_DEBUG=false`
- 在 `.env` 中生成并设置强 `SECRET_KEY`:
python -c "import secrets; print(secrets.token_hex(32))"
## 代理定义
本项目中 AI 代理的 Markdown 文件存储在:
`.github/agents/`
标签:AlienVault, Ask搜索, Cloudflare, DAST, DInvoke, Docker, Flask, HTML实体转义, HTML报告, IOC提取, JSON报告, MD5, MITRE ATT&CK, Office分析, OTX, PDF分析, PDF结构风险, PE分析, PE节, Python, SEO, SHA1, SHA256, STIX 2.1, Unicode归一化, VirusTotal, XSS防护, YARA扫描, 云安全监控, 元数据, 内存缓存, 后台任务, 字符串提取, 字符白名单, 安全工具, 安全报告, 安全编码, 安全防御评估, 宏指标, 导入表, 性能缓存, 恶意软件分析, 懒加载, 报告导出, 文件上传安全, 文件名硬化, 文件哈希, 无后门, 样本清理, 熵分析, 节级熵, 路径分离, 路径遍历防御, 逆向工具, 静态分析, 非root容器, 风险评分