itsraval/MHATOD

GitHub: itsraval/MHATOD

MHATOD 是一个通过并行查询 VirusTotal 和 MalwareBazaar 在线数据库并结合 AvClass 自动分类恶意软件家族的哈希分析工具,将多源元数据整合为结构化输出以支持下游安全分析。

Stars: 0 | Forks: 0

# MHATOD - 针对开源数据的恶意软件哈希分析工具 MHATOD 是一个 Python 工具,通过查询在线数据库([VirusTotal](https://www.virustotal.com/gui/search/) 和 [MalwareBazaar](https://bazaar.abuse.ch/))来收集和分类恶意软件元数据,并通过 [AVClass](https://github.com/malicialab/avclass/tree/master) 使用家族和标签分类丰富结果。结果将导出为结构化的 JSON 和 CSV 文件,以便进行下游分析。 本项目是在 [Edinburgh Napier University](https://www.napier.ac.uk/courses/msc-cyber-security-postgraduate-full-time) 攻读高级安全与数字鉴证理学硕士期间,作为学位论文 [**"现代演变勒索软件攻击数据窃取方法的行为分析"**](https://github.com/itsraval/MHATOD/blob/main/Docs/Behavioural_Analysis_of_Current_Evolution_Ransomware_Attack_Exfiltration_Methods.pdf) 的一部分开发的。 ## 功能 - **VirusTotal 集成** - 获取文件类型、首次提交日期、威胁分类、YARA 结果以及各 AV 引擎的检测结果 - **MalwareBazaar 集成** - 获取文件类型、架构、签名、ClamAV 结果以及供应商情报(ANY.RUN、Intezer、Triage、ReversingLabs) - **AvClass 标注** - 使用 AvClass 分类器从 VirusTotal 输出中提取恶意软件家族名称和威胁标签 - **并行查询** - 通过 `ThreadPoolExecutor` 并发运行 VirusTotal 和 MalwareBazaar 请求 - **威胁标签聚合** - 跨所有数据源的 token 级别标签提取和频率排名;可选的 top-5 过滤 - **结构化输出** - 每个哈希生成独立的 JSON 文件,加上每个模块的整合 JSON 和 CSV 文件,以及最终的组合数据集 - **可恢复扫描** - `--skip-lines` 允许您从上一次运行中断的地方继续 ## 学术背景 MHATOD 是作为理学硕士论文 **"现代演变勒索软件攻击数据窃取方法的行为分析"** (Edinburgh Napier University,2024)的一部分开发的。该论文调查了基于数据窃取的勒索软件的分类和行为分析。这些恶意软件会在加密之前窃取数据,或者直接以窃取数据代替加密(双重勒索)。完整的论文可在 `Docs/` 目录中找到。 ## 项目结构 ``` MHATOD/ ├── MHATOD.py # Entry point ├── .env # API keys (not committed) ├── pyproject.toml ├── README.md ├── requirements.txt ├── Docs/ │ └── Behavioural_Analysis_of_Current_Evolution_Ransomware_Attack_Exfiltration_Methods.pdf ├── scripts/ │ └── hash_gathering/ │ ├── HashesCleaner.html # Browser tool: extract & clean SHA256 hashes │ └── README.md # Usage guide for hash gathering scripts └── src/ ├── cli.py # Argument parsing and .env loading ├── utils.py # Shared helpers (I/O, folder setup, tag extraction) └── modules/ ├── virustotal_client.py # VirusTotal API v3 client ├── malwarebazaar_client.py # MalwareBazaar API v1 client ├── avclass_labeler.py # AvClass subprocess wrapper └── combine_modules.py # Merges outputs into a unified dataset ``` ## 环境要求 - Python 3.8+ - **VirusTotal** API 密钥(支持免费版本) - [点击此处获取](https://www.virustotal.com/gui/join-us) - **MalwareBazaar** API 密钥 - [点击此处获取](https://bazaar.abuse.ch/api/) - 已安装 [AvClass](https://github.com/malicialab/avclass) 并可在 `PATH` 中使用 ## 安装说明 ``` git clone https://github.com/itsraval/MHATOD.git cd MHATOD pip install -r requirements.txt pip install avclass2 # or follow AvClass installation instructions ``` ## 配置 在项目根目录创建一个 `.env` 文件: ``` VIRUSTOTAL_API_KEY=your_virustotal_key_here MALWAREBAZAAR_API_KEY=your_malwarebazaar_key_here ``` 密钥也可以直接作为 CLI 标志传入,这将覆盖 `.env` 中的值。 ## 使用方法 ``` python MHATOD.py [options] ``` ### 参数 | 参数 | 描述 | |---|---| | `input_file` | 包含 SHA256 哈希的文本文件路径(每行一个) | | `-o`, `--output` | 输出目录(默认值:`malware-metadata-TIMESTAMP`) | | `-s`, `--skip-lines` | 要跳过的哈希数量(适用于恢复扫描) | | `-ttt`, `--top-threat-tags` | 将威胁标签限制为按频率排名的前 5 个 | | `--vtkey` | VirusTotal API 密钥(覆盖 `.env` 配置) | | `--mbkey` | MalwareBazaar API 密钥(覆盖 `.env` 配置) | | `-b`, `--banner` | 显示 ASCII 横幅 | | `-i`, `--info` | 显示开发者信息 | ### 示例 ``` # 使用 .env 中的 keys 进行基本扫描 python MHATOD.py hashes.txt # 自定义输出目录且仅包含 top-5 threat tags python MHATOD.py hashes.txt -o results/my_scan --top-threat-tags # 跳过前 50 个 hashes(恢复之前的运行) python MHATOD.py hashes.txt -s 50 # 以内联方式提供 keys python MHATOD.py hashes.txt --vtkey YOUR_VT_KEY --mbkey YOUR_MB_KEY ``` ### 输入文件格式 ``` e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 44d88612fea8a8f36de82e1278abb02f2fe2be51a9f0b9b0f5d5f8a7c2a8e4b1 ... ``` 每行一个 SHA256 哈希,无标题行或多余的空白字符。 ## 哈希收集工作流 在运行 MHATOD 之前,您需要一个包含 SHA256 哈希的输入文件。`scripts/hash_gathering/` 目录提供了从在线恶意软件数据库中收集和准备这些哈希的工具。 ### 步骤 1 - 从 MalwareBazaar 或 Triage 提取哈希 在浏览器中打开 `HashesCleaner.html`,然后点击 **Copy Extractor JS**。这会将一段 JavaScript 代码片段复制到您的剪贴板。接着: 1. 前往 [MalwareBazaar](https://bazaar.abuse.ch) 或 [Triage](https://tria.ge),通过标签或签名搜索勒索软件家族。 2. 打开浏览器开发者工具控制台(`F12`)。 3. 粘贴并运行复制的 JS 代码。它将抓取页面上所有可见的 SHA256 哈希,并将其复制到剪贴板。 4. 将结果粘贴到 `HashesCleaner.html` 的文本区域中。 ### 步骤 2 - 清理并格式化哈希 在文本区域中填入原始文本(控制台输出、日志或任何混合内容)后,点击 **Clean Text**。该工具将通过正则表达式提取所有有效的 SHA256 哈希,对其进行去重、排序,并每行显示一个哈希 —— 可直接用作 MHATOD 的输入。 点击 **Copy Hashes** 复制到剪贴板,然后保存为 `.txt` 文件。 ### 步骤 3 - 运行 MHATOD ``` python MHATOD.py hashes.txt -o results/my_scan ``` 详情请参阅 `scripts/hash_gathering/README.md`。 ## 输出结构 ``` / ├── VirusTotal/ │ └── .json # Raw API response per hash ├── MalwareBazaar/ │ └── .json # Raw API response per hash ├── AvClass/ │ └── .json # AvClass result per hash ├── json/ │ ├── VirusTotal.json # Aggregated VT metadata │ ├── MalwareBazaar.json # Aggregated MB metadata │ ├── AvClass.json # Aggregated AvClass metadata │ └── Combined_metadata.json # Merged dataset from all sources └── csv/ ├── VirusTotal.csv ├── MalwareBazaar.csv ├── AvClass.csv └── Combined_metadata.csv # Final output for analysis ``` ### 组合元数据字段 | 字段 | 来源 | 描述 | |---|---|---| | `sha256` | 所有 | 样本的哈希值 | | `fs_date` / `fs_time` | VT / MB | 已知最早的首次发现日期 | | `file_type` | VT + MB | 组合的文件类型/架构 | | `signature` | MB | 恶意软件签名名称 | | `threat_tags` | VT + MB | 按频率排序的威胁标签字典 | | `AV_family` | AvClass | 共识恶意软件家族名称 | | `AV_threat_tags` | AvClass | 行为/类别标签 | | `error` | 所有 | 如果数据源请求失败时的错误信息 | ## 局限性 MHATOD 的输出质量取决于数据库所包含的内容。如果某个哈希在 VirusTotal 或 MalwareBazaar 上没有记录,则不会为该样本生成元数据。数据源之间存在差异是很常见的 —— 这在预料之中,也是该工具同时查询多个数据库的原因之一。 分类结果(AVClass 家族、威胁标签)应被视为指导分析的线索,而不是绝对事实。在构建精选数据集时,建议对组合输出结果进行人工审查。 ## 作者 由 **Alessandro Ravizzotti** 开发 网站:[alessandro.ravizzotti.dev](https://alessandro.ravizzotti.dev) 联系方式:alessandro[@]ravizzotti[.]dev ## 许可证 本项目为开源项目。采用 MIT 许可证。
标签:Ask搜索, AVClass, ClamAV, CSV, DAST, ESC4, JSON, MalwareBazaar, OSINT, Python, VirusTotal, Web 安全测试, YARA, 云资产可视化, 勒索软件分析, 哈希查询, 威胁情报, 家族分类, 并发查询, 开发者工具, 恶意软件分析, 数字取证, 数据丰富, 无后门, 沙箱, 网络安全, 自动化脚本, 逆向工具, 隐私保护