moblank9/malware_analyzer
GitHub: moblank9/malware_analyzer
该工具用于对可疑文件进行静态指标分析与 Docker 沙箱动态行为观察,并生成威胁情报关联报告。
Stars: 0 | Forks: 0
# 恶意软件行为分析器
**用于可疑文件的静态和动态分析工具。** 计算哈希值,提取字符串,测量熵,检测加壳器,查询威胁情报源,生成 PDF 报告,并在 Docker 沙箱中安全执行样本以观察其行为。
## 目录
- [功能](#features)
- [架构](#architecture)
- [安装](#installation)
- [使用方法](#usage)
- [分析模块](#analysis-modules)
- [沙箱(动态分析)](#sandbox-dynamic-analysis)
- [威胁情报源](#threat-intelligence-feeds)
- [输出与报告](#output--reporting)
- [用例](#use-cases)
- [局限性](#limitations)
- [道德与法律考量](#ethical--legal-considerations)
- [开发](#development)
- [许可证](#license)
## 功能
| 功能 | 描述 |
|---|---|
| **文件哈希** | MD5、SHA1、SHA256、SHA512 — 单个或批量 |
| **字符串提取** | ASCII、Unicode、IP、URL、注册表项 |
| **熵分析** | Shannon 熵(文件级 + 分块级)及分类 |
| **加壳检测** | 12+ 种已知加壳器签名 + PE 结构分析 |
| **威胁情报查询** | 本地 DB 缓存 + MalwareBazaar 和 VirusTotal 查询 |
| **PDF 报告** | 包含表格、警报和指标的专业报告 |
| **沙箱执行** | 基于 Docker 的沙箱,带有网络和文件监控 |
| **JSON 输出** | 用于流水线集成的机器可读输出 |
## 架构
```
malware-analyzer/
├── analyzer/
│ ├── __init__.py
│ ├── cli.py # CLI entry point (argparse)
│ ├── hasher.py # MD5/SHA1/SHA256/SHA512 computation
│ ├── strings.py # String extraction (ASCII/Unicode/IP/URL/reg)
│ ├── entropy.py # Shannon entropy (full-file + sliding window)
│ ├── packer.py # Packer signature detection + PE parsing
│ ├── threat_intel.py # Local DB + MalwareBazaar + VirusTotal lookups
│ ├── sandbox.py # Docker sandbox orchestration + monitor script
│ └── reporter.py # PDF (reportlab) and plain-text report generation
├── sandbox/
│ ├── Dockerfile # Minimal sandbox container (slim Python)
│ └── docker-compose.yml # Docker Compose service definition
├── tests/
│ └── __init__.py
├── pyproject.toml # Build config, dependencies, tool settings
├── requirements.txt # Pip-compatible dependency list
├── setup.py # Legacy setup shim
└── README.md
```
**数据流:**
```
File ──► Hash ──► Strings ──► Entropy ──► Packer Detection
│
┌──────────────── Threat Intel ◄── Hash ─┘
│
▼
Sandbox (Docker) ──► Network Monitor ──► File Monitor
│
▼
PDF Report / JSON Output
```
## 安装
### 前置条件
- Python **3.10+**
- `pip`
- Docker(用于沙箱模式)
### 从源码安装
```
git clone https://github.com/example/malware-analyzer.git
cd malware-analyzer
pip install -r requirements.txt
pip install -e .
```
### 验证安装
```
malalyzer --help
```
## 使用方法
### 快速入门 — 完整分析
```
malalyzer --all /path/to/suspicious.exe
```
这将运行所有静态分析模块并生成 PDF 报告。
### 选择性分析
```
# 仅计算 hashes
malalyzer --hashes md5 sha256 /path/to/file
# 提取 strings + entropy
malalyzer --strings --entropy /path/to/file
# 仅 Packer 检测
malalyzer --packer /path/to/file
# 运行一切 + threat intel
malalyzer --all --vt-api-key YOUR_VT_KEY /path/to/file
```
### 输出选项
```
# 指定 output 文件
malalyzer --all file.exe -o report.pdf
# Machine-readable JSON
malalyzer --all file.exe --json
# Plain text fallback(如果未安装 reportlab)
malalyzer --all file.exe -o report.txt
```
### 沙箱(动态分析)
```
# 需要 Docker
malalyzer --sandbox suspicious_sample.exe
# 使用自定义 image 名称
malalyzer --sandbox --sandbox-image my-sandbox sample.exe
# 无 sample 的 sandbox(仅监控)
malalyzer --sandbox
```
## 分析模块
### 哈希 (`analyzer/hasher.py`)
使用流式读取(64 KB 块)计算 MD5、SHA1、SHA256 和 SHA512。支持通过 `ThreadPoolExecutor` 对多个文件进行并行哈希处理。
### 字符串提取 (`analyzer/strings.py`)
提取:
- **ASCII 字符串**(4 个或更多连续的可打印字符)
- **Unicode 字符串**(UTF-16LE 编码)
- **IP 地址**(根据八位组范围进行验证)
- **URL** (http/https)
- **注册表项**(HKLM\..., HKCU\... 等)
### 熵 (`analyzer/entropy.py`)
计算整个文件和分块(4 KB 窗口)的 Shannon 熵。分类阈值:
| 范围 | 分类 |
|---|---|
| < 1.0 | 极低 — 纯文本 / 稀疏数据 |
| 1.0 – 2.5 | 低 — 结构化数据 |
| 2.5 – 4.5 | 中等 — 可执行文件 / 混合数据 |
| 4.5 – 6.5 | 高 — 加壳 / 加密 |
| > 6.5 | 极高 — 强加密 |
### 加壳检测 (`analyzer/packer.py`)
针对 12 种加壳器的签名(UPX、MPRESS、ASPack、PEtite、FSG、EnigmaVB、Themida、Armadillo、VMProtect、Obsidium、EXECryptor、SVKP、RLPack)以及 PE 节区分析(可执行+可写节区,节区熵异常)。
### 威胁情报 (`analyzer/threat_intel.py`)
- **本地 SQLite 缓存** (`~/.malware_analyzer/threat_cache.db`) — 存储已知哈希和查询结果,以避免冗余的 API 调用。
- **MalwareBazaar** — 免费的恶意软件哈希库(需要来自 abuse.ch 的免费 API 密钥)。
- **VirusTotal** — 商业威胁情报(需要 API 密钥)。
### 报告生成 (`analyzer/reporter.py`)
生成结构化的 PDF 报告,包含:
- 带有威胁警报横幅的标题页
- 以表格形式分节展示的分析结果
- 针对指标的颜色编码警告
- 免责声明页脚
如果未安装 reportlab,则回退到纯文本。
## 沙箱(动态分析)
沙箱在严格限制的 Docker 容器中运行样本,具有:
- **无网络访问** (`--network none`)
- **丢弃所有权限** (`--cap-drop ALL`)
- **无新权限** (`--security-opt no-new-privileges`)
- **只读根文件系统**
- **为 /tmp、/var/tmp、/analysis 提供独立的 tmpfs**
内置的监控脚本 (`analyzer/sandbox.py:SANDBOX_SCRIPT`) 会记录:
1. **网络连接** — 每 2 秒轮询一次 `ss` 以获取出站连接
2. **文件更改** — 对 /tmp、/var/tmp、/root 进行快照并检测创建/修改
3. **执行行为** — 尝试运行样本并捕获退出代码 / 输出
**构建沙箱镜像:**
```
# 首次运行 --sandbox 时自动构建
# 或手动:
cd sandbox && docker build -t malalyzer-sandbox .
```
**安全说明:**
- 容器没有网络,因此样本无法与外部通信
- 丢弃所有权限可防止大多数提权行为
- 只读根文件系统可防止持久化修改
- 监控脚本在运行时注入(未内置到镜像中)
## 威胁情报源
### MalwareBazaar (abuse.ch)
1. 在 [bazaar.abuse.ch](https://bazaar.abuse.ch) 注册以获取免费的 API 密钥
2. 通过 `--mb-api-key YOUR_KEY` 传递它
### VirusTotal
1. 从您的 VirusTotal 帐户获取 API 密钥
2. 通过 `--vt-api-key YOUR_KEY` 传递它
### 本地数据库
```
from analyzer.threat_intel import ThreatIntelDB
db = ThreatIntelDB()
db.add_hash("d41d8cd98f00b204e9800998ecf8427e", "known_good_file", source="user")
all_known = db.get_all_known()
```
## 输出与报告
### PDF 报告
默认生成。包括:
- 威胁警报横幅(如果发现指标则为红色,如果干净则为绿色)
- 分节的分析结果
- 颜色编码的表格
- 指标警告
### JSON 输出
使用 `--json` 进行流水线集成:
```
malalyzer --all file.exe --json | jq '.hashes'
```
### 纯文本
如果 reportlab 不可用,该工具会自动回退到 `.txt` 输出。
## 用例
- **事件响应** — 对受损系统上的可疑文件进行分类筛选
- **威胁狩猎** — 对来自隔离目录的样本进行批量分析
- **恶意软件研究** — 将静态指标与已知的威胁情报进行比较
- **安全教育** — 在受控实验室中演示分析技术
- **CI/CD 安全** — 在流水线中扫描构建产物(JSON 输出模式)
## 局限性
| 局限性 | 详情 |
|---|---|
| **非 PE 文件无动态行为分析** | 沙箱会尝试执行,但仅捕获操作系统通过 `ss` 和文件 mtime 暴露的信息 — 没有 API 调用追踪,没有内存转储。 |
| **加壳规避** | 具有修改签名的自定义或混淆加壳器将无法被检测到。 |
| **加密样本** | 完全加密的样本将显示出高熵,但无法提取有用的字符串。 |
| **Docker 依赖** | 沙箱模式需要本地 Docker 守护进程。Rootless Docker 可能具有限制。 |
| **无反虚拟机检测绕过** | 复杂的恶意软件可能会检测到沙箱环境并改变行为。 |
| **API 速率限制** | VirusTotal 和 MalwareBazaar 对其免费层级强制执行速率限制。 |
| **网络隔离** | 沙箱使用 `--network none` — 某些恶意软件需要网络交互才能表现出完整行为。 |
| **单文件分析** | 该工具一次分析一个文件;没有内置的批量扫描流水线。 |
| **Reportlab 回退** | 在没有 reportlab 的情况下,PDF 生成会降级为纯文本。 |
| **无 YARA 规则** | 不包含自定义 YARA 匹配(可通过模块接口扩展)。 |
## 道德与法律考量
**本工具仅供合法的安全研究和事件响应使用。** 滥用可能违反:
- **计算机欺诈和滥用法 (CFAA)** — 美国联邦法律
- **计算机滥用法案 1990** — 英国法律
- **GDPR** — 如果涉及处理个人数据
- **全球各地的当地网络犯罪法律**
**您必须:**
- 在分析您不拥有的任何系统之前获得书面授权
- 按照您组织的安全政策处理恶意软件样本
- 在不再需要时安全处置样本和报告
- 绝不在受控环境之外上传或重新分发恶意软件样本
**作者对滥用本工具不承担任何责任。**
## 开发
### 设置
```
pip install -e ".[dev]"
```
### 运行测试
```
pytest
```
### 代码检查
```
ruff check analyzer/
```
### 类型检查
```
mypy analyzer/
```
### 项目结构指南
- `analyzer/` 中的每个模块都公开一个返回 `dict` 的单一公共函数
- `cli.py` 中的 CLI 将模块连接在一起并生成报告
- 沙箱监控脚本作为字符串嵌入在 `sandbox.py` 中,以保证自包含性
## 许可证
MIT 许可证。请参阅 `LICENSE` 文件(未包含 — 如果重新分发请自行创建)。
标签:DAST, DNS 反向解析, 云安全监控, 威胁情报, 开发者工具, 恶意软件分析, 沙箱, 网络信息收集, 请求拦截, 逆向工具, 静态分析