SANNAAA-15/malware-triage-tool
GitHub: SANNAAA-15/malware-triage-tool
基于 Python/Flask 构建的静态恶意软件初步分析 Web 应用,通过哈希、PE 解析、熵值、可疑 API 检测和 IOC 提取提供透明可解释的风险评分。
Stars: 0 | Forks: 0
# Triage — 静态恶意软件分析工具
这是一款独立的 Web 应用,可对可疑文件执行**静态**(无执行)初步分析:
包括哈希计算、PE 结构解析、节区熵值分析、可疑 API 导入检测、
字符串/IOC 提取,以及透明度极高的加权风险评分。
本项目作为恶意软件分析 / SOC / DFIR 相关岗位的个人作品集开发。
## 功能介绍
| 步骤 | 具体操作 |
|---|---|
| **哈希计算** | MD5 / SHA1 / SHA256 — 这是分析人员关联威胁情报(VirusTotal、MalwareBazaar、内部黑名单)的标准方式 |
| **PE 解析** | 读取 PE 头(通过 `pefile`):入口点、机器类型、EXE/DLL 标志、编译时间戳、导入表 |
| **熵值分析** | 计算每个节区的 Shannon 熵。熵值高于 ~7.2 bits/byte 的节区会被标记为可能被加壳或加密 —— 这是典型的加壳/混淆特征 |
| **可疑 API 检测** | 将导入表与常被滥用于进程注入、反调试、持久化和 C2(例如 `CreateRemoteThread`、`IsDebuggerPresent`、`WriteProcessMemory`)的精选 API 列表进行交叉比对 |
| **字符串 & IOC 提取** | 提取可打印的 ASCII + UTF-16LE 字符串,然后通过正则表达式匹配 IP、URL、域名、注册表路径和电子邮件 |
| **风险评分** | 采用一种小巧且完全透明的加权启发式算法 —— 每一分的扣减都会用通俗易懂的语言进行解释,刻意避免伪装成真正的 AV 判定结果 |
## 项目结构
```
malware-triage-tool/
├── app.py # Flask routes: / (UI), /analyze (API), /sample-eicar
├── analyzer.py # All the actual analysis logic — hashing, PE parsing,
│ # entropy, strings, IOCs, risk scoring
├── templates/
│ └── index.html # Single-page UI
├── static/
│ ├── style.css # Dark "forensics lab" theme
│ └── script.js # Upload handling + report rendering
├── uploads/ # Scratch space — files are deleted right after analysis
└── requirements.txt
```
## 运行方式
```
pip install -r requirements.txt
python3 app.py
# 打开 http://localhost:5050
```
将文件拖拽到页面上,或者点击 **"Try the EICAR test file"** 下载,
然后重新上传这个无害的测试样本,即可观察整个流水线的端到端运行过程。
## 面试时如何探讨本项目
本项目自然而然能引出以下几个切入点:
- **“请介绍一下你如何对未知二进制文件进行初步分析。”** 你构建了
实际的工作流:首先计算哈希(成本低,能瞬间关联到威胁情报),
检查是否加壳(熵值),检查它*能做*什么(导入表),然后
寻找能暗示其*实际行为*(C2 域名、释放
路径、注册表键)的字符串/IOC。
- **为什么要分析熵值?** 经过压缩/加密的数据在统计上接近于
随机数据,这会使得其 Shannon 熵接近 8 bits/byte。合法且
未加壳的代码节区通常位于 5–6.5 的范围内。如果熵值跃升至 7.2+
附近,这就是一种经典的、有充分文档记录的加壳/加密器特征 ——
但这本身并不能证明其具有恶意(某些合法软件也会加壳),这也正是
为什么它是一种*启发式*方法,而非最终判定。
- **为什么使用透明、累加式的评分,而不是黑盒 ML 模型?**
因为在真实的 SOC 环境中,分析人员必须能够解释*为什么*
某份文件会被标记,以便将其写入报告或进行升级处理。这
反映了许多真实检测工程(YARA 规则、Sigma
规则)的工作原理:基于可解释、基于规则的信号,而非不透明的评分机制。
- **如果有更多时间,你会增加什么功能?** VirusTotal/MalwareBazaar 哈希
查询(只读 API 调用,很容易附加)、YARA 规则扫描器、
基于 Capstone 的入口点反汇编,或针对非 PE 样本的 PDF/Office 宏
分析。
- **目前的局限性是什么?** 它仅限于静态分析 —— 无法
捕捉仅在运行时出现的行为、无文件技术,或者
在内存中自行解密的恶意软件。这恰恰正是
动态分析(沙箱,例如 Cuckoo)和内存取证
(Volatility)所能填补的空白 —— 如果面试官问起如何进一步深入,这是一个很好的自然过渡点。
## 功能扩展
- **VirusTotal 查询:** 添加一个 API key 作为环境变量,并在 `analyzer.py` 中调用
`GET https://www.virustotal.com/api/v3/files/{hash}`,
以便将 SHA256 与已知的检测结果进行交叉比对。
- **YARA:** `pip install yara-python`,加载规则文件,并在
`full_analysis()` 中扫描上传的字节流。
- **PDF/Office 支持:** 对于非 PE 文件,可通过分支调用 `oletools` 来分析
Office 宏,或使用 `pdfid`/`peepdf` 来分析 PDF。
标签:DAST, Flask, Python, 云安全监控, 威胁情报, 开发者工具, 恶意软件分析, 无后门, 逆向工具, 静态分析