magarsurajjj-alt/static-malware-triage-tool
GitHub: magarsurajjj-alt/static-malware-triage-tool
一款基于 Python 的静态恶意软件分诊工具,在不执行文件的前提下整合哈希查询、VT 信誉、PE 解析、熵值检测和 YARA 匹配,为 SOC 分析师生成带风险判定的自动化报告。
Stars: 0 | Forks: 0
# 静态恶意软件分诊工具
一个基于 Python 的静态分析工具,能够自动化 SOC/CTI 分析师对可疑 Windows 可执行文件进行的初步分诊 —— **全程无需执行该文件**。它将哈希计算、VirusTotal 信誉查询、字符串提取、PE 头解析、基于熵的加壳检测以及 YARA 规则匹配结合在一起,生成一份带有风险判定结果的自动化报告。
## 为什么开发这个工具
Tier 1/2 的 SOC 分析师经常需要快速评估某个文件是否值得升级进行更深入的(动态/沙箱)分析。该工具反映了真实的分诊工作流程:快速收集静态指标、检查信誉、标记异常情况,并在文件需要在沙箱中引爆之前产生具有依据的判定结果。
## 功能
- **哈希计算** — 计算 MD5、SHA1、SHA256,用于身份识别和信誉查询
- **VirusTotal 集成** — 仅通过哈希查询 VT(无需上传文件),获取多引擎检测结果、已知文件名和标签
- **字符串提取** — 从二进制文件中提取可读字符串,并标记 URL、IP、可疑的 Windows API 调用和注册表项引用
- **PE 头分析** — 使用 `pefile` 解析编译时间戳、节表和导入的 DLL/函数
- **熵值 / 加壳检测** — 计算每个节的熵值,以标记可能加壳或混淆的二进制文件
- **YARA 扫描** — 将文件与自定义或公共的 YARA 规则进行匹配
- **自动化判定** — 将所有发现整合为加权风险评分:`LIKELY CLEAN`(疑似正常)、`SUSPICIOUS`(可疑)或 `MALICIOUS`(恶意)
- **JSON 报告** — 每次扫描都会保存为带有时间戳和哈希命名的 JSON 报告,以便记录归档
## 技术栈
| 组件 | 库 |
|---|---|
| PE 解析 | [`pefile`](https://github.com/erocarrera/pefile) |
| VirusTotal API | `requests` |
| YARA 匹配 | `yara-python` |
| 文件类型检测 | `python-magic-bin` |
## 项目结构
```
static-malware-triage/
├── main.py # orchestrates the full analysis pipeline
├── config.example.py # template for your VT API key (copy to config.py)
├── requirements.txt
├── modules/
│ ├── hashing.py # MD5/SHA1/SHA256 hashing
│ ├── vt_lookup.py # VirusTotal hash reputation lookup
│ ├── strings_analysis.py # string extraction + suspicious pattern flagging
│ ├── pe_analysis.py # PE header, sections, imports
│ ├── entropy.py # packing detection via section entropy
│ └── yara_scan.py # YARA rule matching
└── rules/
└── sample_rules.yar # example YARA rule (UPX packer detection)
```
## 环境配置
1. 克隆仓库:
git clone https://github.com/yourusername/static-malware-triage-tool.git
cd static-malware-triage-tool
2. 创建虚拟环境并安装依赖项:
python -m venv venv
venv\Scripts\activate # Windows
pip install -r requirements.txt
3. 在 [virustotal.com](https://www.virustotal.com) 获取一个免费的 VirusTotal API 密钥(Profile → API Key)
4. 复制配置模板并添加您的密钥:
copy config.example.py config.py
然后编辑 `config.py`:
VT_API_KEY = "your_actual_key_here"
## 用法
```
python main.py path\to\file.exe
```
这会在控制台打印完整的 JSON 报告,并将其保存到 `reports/.json`。
## 示例输出
对一个合法的 Windows 系统二进制文件(`notepad.exe`)进行扫描,正确地返回了正常的判定结果:
```
{
"hashes": { "sha256": "ab15a95d..." },
"virustotal": { "found": true, "malicious": 0, "suspicious": 0 },
"packing": { "likely_packed": false },
"yara_matches": [],
"verdict": "LIKELY CLEAN"
}
```
### 关于分析判断的说明
在测试期间,对于一个已知正常的系统二进制文件,VirusTotal 在 `names` 字段下返回了几个不相关的历史文件名(例如 `hidden.exe`、`1.exe`)——这些只是其他用户之前的提交别名,其本身并不是妥协指标 (IoC)。在所有引擎的检测结果均为 0 的情况下,正确的分析师结论是该文件是正常的;如果没有辅助的检测数据,仅凭听起来可疑的文件名别名不足以作为升级处理的理由。该工具的评分逻辑反映了这一点——它衡量的是实际的检测/行为信号,而不是文件名历史记录。
## 安全说明
- 该工具仅执行**静态分析**——它从不执行目标文件
- 默认情况下,仅将文件哈希发送到 VirusTotal(不上传文件)
- 开发期间使用的测试样本仅限于已知正常的合法 Windows 二进制文件(`notepad.exe`、`calc.exe`)——开发机器上未下载或执行任何真实的恶意软件
- 如果要测试真实的恶意软件样本,请务必在没有网络/共享文件夹访问权限的隔离 VM 中进行——切勿在宿主机上执行
## 未来可能的改进
- HTML/PDF 报告导出
- Streamlit 拖拽式 Web UI
- 扩展的 YARA 规则集(例如来自 [Yara-Rules/rules](https://github.com/Yara-Rules/rules))
- 基于检测到的导入/行为进行 MITRE ATT&CK 技术标记
## 作者
作为一个作品集项目开发,旨在展示实用的 SOC/CTI 分诊工作流程自动化。
标签:DAST, DNS 反向解析, PE解析, Python, YARA, 云安全监控, 云资产可视化, 威胁情报, 开发者工具, 恶意软件分析, 无后门, 网络安全审计, 逆向工具, 静态分析