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, 云安全监控, 威胁情报, 开发者工具, 恶意软件分析, 无后门, 逆向工具, 静态分析