marez8505/MalwareLab

GitHub: marez8505/MalwareLab

一款基于纯 Python 实现的静态二进制分析框架,用于在不执行文件的情况下解析 PE/ELF 结构、检测恶意特征并生成风险评估报告。

Stars: 0 | Forks: 0

# MalwareLab **用于恶意软件分类的静态二进制分析工具** MalwareLab 对 PE (Windows) 和 ELF (Linux) 可执行文件执行静态分析,而无需执行它们。它使用纯 Python `struct` 操作在字节级别解析二进制头部——这与 PEstudio、PE-bear 和 Detect It Easy 等专业工具所采用的基本方法相同。 ## 功能概述 | 模块 | 功能 | |--------|-----------| | `pe_parser.py` | 解析 PE32/PE32+ DOS 头、COFF 头、Optional 头、节表、导入/导出表、资源 | | `elf_parser.py` | 解析 ELF32/ELF64 头、程序头、节头、符号表、动态链接 | | `entropy_analyzer.py` | 计算每个节的 Shannon 熵并生成 ASCII 热力图——检测加壳/加密节 | | `packer_detector.py` | 通过节名称和字节签名识别 UPX、ASPack、Themida、VMProtect、MPRESS | | `import_analyzer.py` | 标记 12 个威胁类别中的可疑 Windows API 导入 | | `string_analyzer.py` | 提取并分类字符串——URL、IP、注册表键、C2 指标、勒索信 | | `behavior_mapper.py` | 将所有发现映射到 MITRE ATT&CK Enterprise 技术 | | `risk_scorer.py` | 生成 0-100 的综合恶意软件风险评分,包含证据加权组件 | | `report_generator.py` | 生成深色主题 HTML 报告和机器可读 JSON 输出 | ## 快速开始 ``` # 安装 git clone https://github.com/edwardmarez/malwarelab cd malwarelab pip install -e . # 生成示例 binaries(无需联网) python sample_binaries/generate_samples.py # 运行 demo python -m malwarelab demo # 分析文件 python -m malwarelab analyze --file sample_binaries/suspicious_sample.exe # 生成 HTML 报告 python -m malwarelab report --file sample_binaries/suspicious_sample.exe --format html --output ./report ``` ## CLI 参考 ``` python -m malwarelab [options] ``` | 命令 | 描述 | 示例 | |---------|-------------|---------| | `analyze` | 完整管道——所有模块 | `analyze --file sample.exe` | | `pe-info` | 显示 PE 头 | `pe-info --file sample.exe` | | `elf-info` | 显示 ELF 头 | `elf-info --file sample.elf` | | `entropy` | 熵热力图 | `entropy --file sample.exe [--blocks]` | | `imports` | 导入表分析 | `imports --file sample.exe [--suspicious-only]` | | `strings` | 字符串提取 | `strings --file sample.exe [--min-length 6]` | | `report` | 生成 HTML/JSON 报告 | `report --file sample.exe --format html --output ./out` | | `demo` | 使用合成样本演示 | `demo` | ## 示例输出 ``` ███╗ ███╗ █████╗ ██╗ ██╗ ██╗ █████╗ ██████╗ ███████╗ ... L A B Static Binary Analysis Tool for Malware Triage [*] File: suspicious_sample.exe Size: 6.2 KB Type: PE MD5: 8f14e45fceea167a5a36dedd4bea2543 SHA256: 6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b [+] Parsing PE headers... PE Type: PE32 Machine: IMAGE_FILE_MACHINE_I386 (0x014C) Sections: 4 Imports: 6 DLLs [+] Running entropy analysis... File entropy: 5.3421/8.0 Packing likelihood: Unlikely [+] Detecting packers... Clean [+] Analyzing imports... 6 DLLs, 31 total imports Suspicious: 24 Categories: process_injection, keylogging, network, crypto, privilege_escalation, screen_capture, anti_debug [+] Extracting strings... Extracted: 47 strings Suspicious: 12 C2 indicators: 2 IPs: 45.33.32.156 [+] Mapping MITRE ATT&CK techniques... 11 techniques across 6 tactics Threat: Data Theft / Infostealer, Remote Access Trojan (RAT) [+] Computing risk score... ═══════════════════════════════════════════════════════════════════ RISK SCORE: 78/100 [HIGH] HIGHLY SUSPICIOUS — Likely malicious Risk Score: 78/100 [HIGH] [███████████████████████████████████████░░░░░░░░░░░] 0 25 50 75 100 ═══════════════════════════════════════════════════════════════════ Recommended Actions: • Monitor for CreateRemoteThread and WriteProcessMemory system calls using EDR • Implement application allow-listing to prevent unauthorized hook installation • Block suspicious outbound connections at perimeter firewall and inspect DNS • Maintain offline backups; monitor for mass file rename/encryption activity ``` ## 静态分析与动态分析 **静态分析** 在不执行文件的情况下检查它。MalwareLab 直接读取二进制结构: - 零执行风险——基本分类无需沙箱 - 检查导入表、字符串、熵和结构 - 快速——通常在 1 秒内完成 - **局限性:** 可能被加壳和混淆绕过 **动态分析** 在受控环境(沙箱)中执行样本: - 观察实际运行时行为(API 调用、网络流量、文件写入) - 在解压后捕获混淆代码 - 需要隔离环境 - **MalwareLab 建议:** 始终在静态分析之后,使用 Cuckoo、ANY.RUN 或 Joe Sandbox 进行动态分析 ## PE 格式说明 可移植可执行文件 (PE) 格式是 Windows 可执行文件 (`.exe`、`.dll`、`.sys`) 的标准二进制格式。 ``` ┌───────────────────────────────┐ │ DOS Header │ Offset 0x00 — "MZ" magic, e_lfanew pointer │ DOS Stub ("This program...") │ ├───────────────────────────────┤ │ PE Signature ("PE\0\0") │ At e_lfanew offset — confirms PE format ├───────────────────────────────┤ │ COFF File Header (20 bytes) │ Machine type, section count, timestamp ├───────────────────────────────┤ │ Optional Header (224 bytes) │ Entry point, image base, data directories │ ├─ Data Directory[0] │ Export Table RVA │ ├─ Data Directory[1] │ Import Table RVA ← most important │ ├─ Data Directory[2] │ Resource Table RVA │ └─ ...16 total... │ ├───────────────────────────────┤ │ Section Table │ Array of 40-byte section headers │ .text (code) │ │ .data (initialized data) │ │ .rdata (read-only strings) │ │ .idata (imports) │ │ .rsrc (resources) │ ├───────────────────────────────┤ │ Raw Section Data │ Actual binary content at PointerToRawData └───────────────────────────────┘ ``` **关键概念:** - **RVA (相对虚拟地址):** 加载到内存时距离 ImageBase 的偏移量 - **File Offset:** 磁盘上文件内的物理位置 - **节特征:** 指示 `READ`、`WRITE`、`EXECUTE` 权限的标志 ## 为什么导入是可疑的 导入地址表 (IAT) 告诉我们二进制文件调用了哪些 Windows API 函数。许多合法的 API 也被恶意软件滥用: | API | 合法用途 | 恶意用途 | |-----|----------------|---------------| | `CreateRemoteThread` | 调试器、分析器 | 代码注入到其他进程 | | `VirtualAllocEx` | 内存管理 | 在远程进程中为 shellcode 分配内存 | | `WriteProcessMemory` | 调试器 | 将 shellcode/DLL 路径写入目标进程 | | `SetWindowsHookEx` | 辅助功能、宏软件 | 键盘记录器——捕获系统范围内的所有击键 | | `CryptEncrypt` | 安全通信 | 为勒索软件加密文件 | | `IsDebuggerPresent` | 开发者构建 | 检测分析师是否正在调试——然后改变行为 | | `RegSetValueEx` | 配置持久化 | 将恶意软件添加到 Run 键以实现自启动 | | `URLDownloadToFile` | 更新机制 | 下载额外的恶意软件阶段 | | `AdjustTokenPrivileges` | 服务管理 | 提升至 SYSTEM 级别权限 | **关键指标是组合:** 一个同时导入 `CreateRemoteThread` + `VirtualAllocEx` + `WriteProcessMemory` 的文件没有合法解释——这是经典的 DLL 注入三要素。 ## 熵的意义 Shannon 熵在 0-8 的范围内测量字节序列的随机性: ``` 0.0 ──── 1.0 ──── 2.0 ──── 4.0 ──── 6.0 ──── 7.0 ──── 8.0 │ │ │ │ │ │ Zeros NOP ASCII Mixed PACKED Random sleds sleds text data sections key ``` | 范围 | 分类 | 含义 | |-------|----------------|-------------| | 0.0 – 1.0 | 接近零熵 | 全零或 NOP 滑行——可能的 shellcode 暂存区 | | 1.0 – 4.0 | 低熵 | ASCII 字符串、明文数据 | | 4.0 – 6.0 | 正常熵 | 编译代码、混合数据 | | 6.0 – 7.0 | 升高熵 | 可能指示编码数据或嵌入的归档 | | **7.0 – 8.0** | **高熵** | **加壳、压缩或加密节** | **加壳工具** (UPX、ASPack、Themida) 压缩并加密原始代码,产生熵 > 7.0 的节。加壳二进制文件通常也只有极少的导入(仅包含 `LoadLibraryA` + `GetProcAddress` 以在运行时引导真实的导入表)。 ## 加壳检测 MalwareLab 通过三种方法检测加壳工具: 1. **节名称匹配:** UPX 总是将其节命名为 `UPX0`/`UPX1`。VMProtect 使用 `.vmp0`/`.vmp1`。这些都是显而易见的。 2. **字节签名:** 在原始二进制数据中搜索 `UPX!` 标记 (0x55505821) 和 ASPack 入口点存根模式。 3. **启发式分析:** 如果 `file_entropy > 7.0` 且 `import_count < 5`,则该二进制文件可能被未知或自定义加壳工具加壳。 | 加壳工具 | 严重性 | 检测置信度 | 备注 | |--------|----------|---------------------|-------| | UPX | 中 | 确定 | 易于解压:`upx -d ` | | ASPack | 高 | 高 | 商业加壳工具——更难解压 | | MPRESS | 中 | 高 | 类似于 UPX | | Themida | 严重 | 高 | 代码虚拟化——非常困难 | | VMProtect | 严重 | 高 | 自定义 VM 字节码——抗分析 | ## MITRE ATT&CK 映射 每个可疑发现都映射到 [MITRE ATT&CK Enterprise 框架](https://attack.mitre.org/): ``` Import: CreateRemoteThread → T1055.001 (DLL Injection) Import: SetWindowsHookEx → T1056.001 (Keylogging) Import: CryptEncrypt → T1486 (Data Encrypted for Impact) Import: IsDebuggerPresent → T1622 (Debugger Evasion) String: http://c2.xyz/gate → T1071.001 (Web Protocols C2) UPX detected → T1027.002 (Software Packing) High entropy section → T1027 (Obfuscated Files) ``` `behavior_mapper.py` 导出兼容 Navigator 的 JSON 层,可导入 [MITRE ATT&CK Navigator](https://mitre-attack.github.io/attack-navigator/)。 ## 风险评分 综合风险评分 (0-100) 是来自所有模块的证据加权总和: | 组件 | 最高分 | 触发条件 | |-----------|-----------|--------------| | 进程注入 | 18 | `CreateRemoteThread`、`VirtualAllocEx` 等 | | 检测到加壳 | 15 | UPX/ASPack/Themida/VMProtect 签名 | | 高熵 | 15 | 熵 > 7.0 的节 | | C2 指标 | 15 | 字符串中的硬编码 C2 URL/IP | | 权限提升 | 12 | `AdjustTokenPrivileges`、令牌操作 | | 加密/勒索软件 | 12 | `CryptEncrypt` + 勒索软件字符串 | | 网络/C2 | 12 | 网络 API (WSA、WinInet、WinHTTP) | | 键盘记录 | 12 | `SetWindowsHookEx`、`GetAsyncKeyState` | | 加密字符串 | 12 | 比特币/勒索信文本 | | 可疑字符串 | 10 | 检测到 5 个以上可疑字符串 | | 加密 API | 10 | 加密 API 使用 | | 导入风险 | 10 | 综合导入风险评分 | | ATT&CK 技术 | 8 | 映射的不同技术数量 | | 反调试 | 8 | `IsDebuggerPresent` 及相关 API | | 反虚拟机/分析 | 8 | 虚拟机工件字符串、计时 API | ## 项目结构 ``` MalwareLab/ ├── malwarelab/ │ ├── __init__.py # Package init │ ├── __main__.py # python -m malwarelab entry point │ ├── main.py # CLI: analyze, pe-info, elf-info, entropy, imports, strings, report, demo │ ├── pe_parser.py # Pure Python PE parser (struct-based) │ ├── elf_parser.py # Pure Python ELF parser (struct-based) │ ├── entropy_analyzer.py # Shannon entropy + text heatmap │ ├── packer_detector.py # Signature-based packer detection │ ├── import_analyzer.py # Import categorization + ATT&CK mapping │ ├── string_analyzer.py # String extraction and classification │ ├── behavior_mapper.py # MITRE ATT&CK behavior mapping │ ├── risk_scorer.py # Composite risk scoring │ ├── report_generator.py # HTML and JSON report generation │ └── utils.py # Shared utilities (hashes, formatting, constants) ├── signatures/ │ ├── packer_signatures.json │ ├── suspicious_imports.json │ ├── suspicious_strings.json │ └── mitre_import_map.json ├── sample_binaries/ │ ├── generate_samples.py # Synthetic PE/ELF binary generator │ └── README.md ├── tests/ │ ├── test_pe_parser.py │ ├── test_elf_parser.py │ ├── test_entropy.py │ └── test_import_analyzer.py ├── requirements.txt ├── setup.py ├── LICENSE └── README.md ``` ## 运行测试 ``` # 安装依赖 pip install jinja2 # 运行所有测试 python -m pytest tests/ -v # 运行单个测试文件 python -m unittest tests.test_pe_parser -v python -m unittest tests.test_elf_parser -v python -m unittest tests.test_entropy -v python -m unittest tests.test_import_analyzer -v ``` ## 依赖项 | 包 | 用途 | |---------|---------| | `jinja2` | HTML 报告模板渲染 | | Python stdlib: `struct` | 二进制解析 (PE/ELF 头) | | Python stdlib: `re` | 字符串模式匹配 | | Python stdlib: `math` | Shannon 熵计算 | | Python stdlib: `hashlib` | MD5/SHA1/SHA256 哈希 | | Python stdlib: `argparse` | CLI 参数解析 | 所有二进制解析 (PE/ELF) 均使用 **纯 Python `struct.unpack`**,零第三方二进制依赖。这是有意为之——在字节级别理解格式是恶意软件分析的一项基本技能。 ## 道德使用 MalwareLab 适用于: - 学习恶意软件分析和逆向工程概念 - SOC 分析师分类可疑文件 - 安全研究人员和教育工作者 **始终在隔离环境中分析恶意软件**(禁用网络的虚拟机或专用沙箱)。切勿在生产系统上运行可疑二进制文件。 ## 致谢 PE 格式规范由 Microsoft 记录在 [PE Format (Win32 Apps)](https://docs.microsoft.com/en-us/windows/win32/debug/pe-format)。 ELF 规范由 [System V ABI](https://refspecs.linuxfoundation.org/elf/elf.pdf) 维护。 MITRE ATT&CK 由 [The MITRE Corporation](https://attack.mitre.org/) 维护。 *MalwareLab v1.0.0 — 作者:Edward Marez — MIT License*
标签:C2检测, DAST, DNS 反向解析, DNS 解析, ELF解析器, IP 地址批量处理, MITRE ATT&CK映射, PE解析器, Python安全工具, 二进制分析, 云安全监控, 云安全运维, 加壳检测, 勒索软件分析, 威胁情报, 字符串提取, 安全取证, 安全工具开发, 导入表分析, 库, 应急响应, 开发者工具, 恶意软件分析, 熵值计算, 网络信息收集, 网络安全审计, 逆向工具, 静态分析, 风险评分