IanSolorzanoC/malware-analyzer

GitHub: IanSolorzanoC/malware-analyzer

基于确定性规则的 PE 恶意软件静态分析流水线,通过 API 序列启发式检测和本地 ATT&CK 映射生成可审计的研判报告与 YARA 检测规则,全程不依赖 LLM、无需联网、零成本。

Stars: 0 | Forks: 0

# malware_analyzer 静态恶意软件分析流水线。基于规则的启发式算法 → 本地 MITRE ATT&CK 查询 → YARA 规则生成。关键路径上零 LLM 调用。零成本。 ![报告截图](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/28397239e9063329.png) ## 典型静态分析工作流的问题 大多数流水线将导入表提供给 LLM 并信任其输出。LLM 看到 `CreateRemoteThread` 就会说*"进程注入 — T1055"*。很自信,但有一半的时间是错的。 仅凭 `CreateRemoteThread` 毫无意义。合法软件也会使用它。只有当它作为特定序列的一部分出现时:`VirtualAllocEx → WriteProcessMemory → CreateRemoteThread` —— 且在该二进制文件中按此顺序出现,该技术才会成为证据。 本流水线在每一层都严格执行了这一原则。 ## 系统架构 ``` Binary │ ├─ extractor.py ──── PE parsing, import table, strings, entropy per section │ ├─ heuristic.py ──── Rule-based API sequence detection (no LLM) │ Entropy thresholds, overlay detection, TLS callbacks │ Verdict: SKIP | ANALYZE + risk score 0–100 │ ├─ attck.py ─────── Local MITRE ATT&CK lookup (697 techniques, cached JSON) │ No API calls. Deterministic. Maps sequence hits to TTPs. │ ├─ yara_gen.py ───── YARA rule generation from confirmed evidence only │ 4 rule types: strings, API sequences, entropy, combined │ └─ report.py ──────── HTML report generation Risk score, TTPs, entropy bars, flagged strings, YARA ``` ## 设计决策 **在进行任何推断之前采用基于规则的判断。** 启发式引擎完全基于确定性规则运行 —— API 序列、熵值阈值、PE 结构异常。没有模型参与分类步骤。这消除了幻觉产生的 TTP,并生成可以逐行审计的证据。 **关注序列,而非单一 API。** 引擎在导入表中按相对顺序匹配 API 调用,而不是仅仅检查其存在性。单独的 `VirtualAllocEx` 得分为零。按顺序出现的 `VirtualAllocEx → WriteProcessMemory → CreateRemoteThread` 得分为 40,并映射到 `T1055.002`。这种区分正是该启发式算法不会过度分类的核心原因。 **本地 ATT&CK 数据库。** MITRE 以 JSON 文件的形式发布完整的 ATT&CK Enterprise 数据集。该流水线只需下载一次(约 10MB),在本地缓存,并离线执行所有查询。无需 API 密钥,无速率限制,零成本。 **基于证据而非猜测生成 YARA 规则。** 规则仅从启发式层确认的工件中生成。单一 API 规则需要附加熵值条件以减少误报。组合规则要求至少同时具备 3 个独立信号。 **SKIP 是一个有效的结果。** 高度加壳的样本(如 AgentTesla)会返回带有 `risk_score=10` 的 `SKIP`。这是正确的行为 —— 静态分析无法查看加壳的有效载荷。在没有证据的情况下将其标记为恶意只会产生噪音。 ## 真实样本测试结果 | 样本 | 家族 | 判定 | 风险值 | 确认的 TTP | |--------|--------|---------|------|----------------| | `2d97b013...` | AgentTesla | SKIP | 10 | — (完全加壳,无可见攻击面) | | `37930e1d...` | SalatStealer UPX | ANALYZE | 100 | T1027.007, 熵值 7.983, overlay, TLS | | `a12ad896...` | AsyncRAT | ANALYZE | 100 | T1027.007, overlay, TLS, anti-debug | 样本来源于 [MalwareBazaar](https://bazaar.abuse.ch)。切勿将恶意软件提交至代码仓库。 ## 安装说明 ``` git clone https://github.com/IanSolorzanoC/malware-analyzer.git cd malware-analyzer pip install -r requirements.txt --break-system-packages ``` **环境要求:** - Python 3.10+ - Kali Linux 或任何基于 Debian 的发行版(推荐) - 已安装 YARA:`sudo apt install yara` 首次运行时会下载 ATT&CK Enterprise JSON(约 10MB)并将其缓存在 `data/` 目录中。 ## 使用说明 ``` python3 analyze.py ``` **输出文件**(写入 `output/` 目录): | 文件 | 内容 | |------|----------| | `_report.html` | 完整的 HTML 报告 | | `_report.json` | 机器可读的 JSON | | ``.yar | 生成的 YARA 规则 | ## 流水线输出示例 ``` [+] Analyzing: sample.exe ============================================================ [1/5] Extracting PE artifacts... SHA256 : 37930e1df920a9122d1f... Arch : x86 Size : 15,023,428 bytes APIs : 135 imported Strings flagged: 1 [2/5] Running rule-based heuristics... Verdict : ANALYZE Risk score : 100/100 → dynamic_api_resolution [T1027.007] (MEDIUM) [entropy] .rdata: 7.983 — probable packing or encryption [note] PE has overlay — possible dropper or appended payload [note] TLS callbacks present — code runs before entry point [3/5] Resolving TTPs against local ATT&CK database... [4/5] Generating YARA rules... [5/5] Generating HTML report... [+] JSON : output/37930e1df920_report.json [+] YARA : output/37930e1df920.yar [+] HTML : output/37930e1df920_report.html Risk : 100/100 — ANALYZE ``` ## 生成的 YARA 规则类型 **字符串规则** —— 针对在二进制文件中发现的可疑特定字符串(IP、注册表键、互斥体)。条件:必须存在至少一半的已识别字符串。 **API 序列规则** —— 针对已确认的 API 序列。单一 API 规则需要附加熵值条件以限制误报。3 个及以上的 API 序列被视为具有高特异性。 **熵值/加壳规则** —— 使用 YARA 的 `math.entropy()` 来检测加壳或加密的节。结合 overlay 和导入数量条件进行判断。 **组合规则** —— 要求至少同时具备 3 个独立信号(熵值 + overlay + anti-debug + 已确认的 API)。在四种类型中误报率最低。 ## 已知局限性 **加壳样本。** 静态分析无法查看加壳有效载荷内部的导入或字符串。高度混淆的样本(如 AgentTesla,仅有 1 个可见导入,低熵值)会返回 SKIP。在运行此流水线之前,需要通过动态分析或手动脱壳来进行解包。 **动态 API 解析。** 在运行时通过 `GetProcAddress` 解析所有 API 的恶意软件不会触发 API 序列规则,因为导入表中永远不会出现这些导入项。该流水线能将此模式检测为 `T1027.007`,但无法识别其底层的具体技术。 **导入顺序依赖。** 序列匹配器依赖于 PE 导入表中条目的顺序。某些链接器和混淆器会以不可预测的方式重新排列导入项,这可能导致序列匹配失败。 **无动态分析。** 这是一个有意设计的纯静态流水线。它不会执行、模拟或沙箱化二进制文件。行为分析需要单独的层来实现。 ## 项目结构 ``` malware_analyzer/ ├── core/ │ ├── __init__.py │ ├── extractor.py # PE parsing and artifact extraction │ ├── heuristic.py # Rule-based detection engine │ ├── attck.py # Local MITRE ATT&CK lookup │ ├── yara_gen.py # YARA rule generation │ └── report.py # HTML report generation ├── analyze.py # Pipeline entry point ├── requirements.txt └── .gitignore ``` `data/` 和 `output/` 目录会在首次运行时自动创建。不会被提交至版本库。 ## 路线图 - [ ] 分析前自动进行 UPX 脱壳 - [ ] 集成 Ghidra headless 用于反编译伪代码 - [ ] 集成 Ollama 用于生成叙述性报告(本地,零成本) - [ ] 批处理模式:分析整个目录 - [ ] 导出 STIX 2.1 格式用于威胁情报共享 ## 参考文献 - [MITRE ATT&CK Enterprise](https://attack.mitre.org/) - [MalwareBazaar](https://bazaar.abuse.ch) - [pefile](https://github.com/erocarrera/pefile) - [YARA documentation](https://yara.readthedocs.io) - [Vulhub](https://github.com/vulhub/vulhub)
标签:API序列检测, API接口, ATT&CK映射, DAST, DeepSeek, DNS 反向解析, DNS 解析, PE文件分析, Python安全工具, TTP映射, YARA规则生成, 云安全监控, 启发式规则, 威胁情报, 开发者工具, 恶意软件分析, 无LLM安全分析, 熵值分析, 确定性分析, 网络信息收集, 网络安全, 自动化分析流水线, 逆向工具, 逆向工程基础, 速率限制处理, 隐私保护, 零成本安全分析, 静态分析, 风险评分