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 反向解析, 云安全监控, 威胁情报, 开发者工具, 恶意软件分析, 沙箱, 网络信息收集, 请求拦截, 逆向工具, 静态分析