0r1ng/ida-free-autotriage
GitHub: 0r1ng/ida-free-autotriage
基于 IDA Free 9.4 和 FLARE-VM 的一键式纯静态恶意软件自动分类工具,通过 PowerShell 编排多工具分析与深度 IDC 扫描生成置信度感知的分类报告。
Stars: 1 | Forks: 0
# IDA FREE AUTOTRIAGE V9.4.3 - FLARE-VM
## 目的
适用于 Windows FLARE-VM 和 IDA Free 9.4 的一键式纯静态恶意软件分类。
该工作流从不执行选定的样本。它使用所有已安装且适用于对应格式的静态工具,
启动一次处于正常可见 GUI 下的 IDA,
自动提交深度 IDC 扫描器,并将带有地址的可疑发现合并到 HTML、JSON 和 TXT 报告中。
## 最快使用方式
首次全新安装:
1. 删除旧解压版本。不要合并不同版本。
2. 将 v9.4.3 解压到一个稳定且可写的目录中。
3. 运行 VALIDATE_BUNDLE.bat。
4. 运行 SET_IDA_PATH.bat 并选择 IDA Free 9.4 的 ida.exe。
5. 再次运行 VALIDATE_BUNDLE.bat。
6. 运行一次 INSTALL_OR_CHECK_TOOLS.bat。
常规情况:
- 双击 START_HERE.bat 并选择一个样本。
最低交互情况:
- 将一个样本拖拽到 START_HERE.bat 上。
- 跳过文件选择器。
- IDA 加载对话框、Alt+F7 提交、IDC 路径输入、全扫描器
重试、最小化回退、结果解析以及报告合并均自动完成。
- 只有在 IDC 达到终止状态或限定等待时间到期后,才会打开仪表板。
挂起的仪表板会在内部为监视器生成,但不会显示给分析师。最终仪表板会在 IDC 结果合并后打开。IDA 保持打开状态以供手动审查,且永远不会被 AutoTriage 终止。
## 自动化 IDA/IDC 流程
对于受支持的 x86/x64 输入,v9.4.3 执行以下序列:
1. 生成特定案例的完整 IDC 扫描器和最小回退扫描器。
2. 启动一个可见的 IDA GUI 进程,不包含 -A、-B、-S 或强制的 -T。
3. 仅识别并接受符合保守白名单措辞的静态文件加载、文件类型和处理器
选择对话框。
4. 拒绝自动接受许可证、调试器、附加、远程调试或执行
对话框。
5. 将真正的 IDA 主窗口置于前台并调用 Alt+F7。
6. 仅通过定位标准的 File name 控件 ID 1148 或明确识别的 UI
Automation File name 编辑框,来自动选择生成的 AUTO_FULL.idc。不使用通用的键盘/剪贴板回退。
7. 验证选择器已关闭或已出现 IDC 启动标记。无效的
文件名/重命名错误和失败的选择器会在限定重试之前被关闭。
8. 重试全扫描器可配置的次数。
9. 如果全扫描器未能启动或编译,则关闭已确认的 IDC
错误对话框并自动提交 AUTO_MIN.idc。
10. 监视启动/完成标记,不关闭 IDA。
11. 解析标记的发现结果,准备最终的 HTML/JSON/TXT 输出,
然后打开已完成的仪表板。
启动辅助程序是受限的,绝不会终止 IDA。userload.idc/IDAUSR
副本仅保留作为兼容性回退。只有当安装的 IDA 实际上同时包含 onload.idc 和 idc.idc 时,才会启用 IDAIDC 覆盖。
## IDC 发现模型
全扫描器输出:
[FINDING][CONFIRMED|LIKELY|CANDIDATE][category]
address=... function=... evidence=...
CONFIRMED 表示直接可证明的静态证据。LIKELY 需要相关的信号。CANDIDATE 是供分析师审查的线索,而非定论。
扫描器涵盖:
- 可疑导入和有序的 API 链;
- 键盘记录和输入捕获;
- 进程注入和进程傀儡;
- 注册表、服务和其他持久化链;
- 凭据访问、token 操作和进程转储链;
- 反调试、反虚拟机、PEB/TEB 访问、RDTSC/RDTSCP、CPUID、SIDT、
SGDT、SLDT、STR、直接 syscall、SYSENTER 和 INT 2E 证据;
- ICEBP/INT1、INT 2D、UD2、HLT 和异常驱动的技巧;
- PUSH/RET 转移、CALL/POP 位置发现和栈转移;
- 跳转到指令中间以及转移到可执行段中的非代码字节;
- 可证明的不透明谓词和可证明的死分支边缘;
- 保守的不可达代码和孤立函数候选;
- TLS 指标和 RWX 段;
- 分配/解密/执行和分配/保护/执行行为;
- 加密 API、常量、自定义转换循环、KDF、key/IV/nonce/
salt 标签、封装密钥和在线密钥交付处理;
- 可疑字符串和代码引用。
报告明确记录覆盖范围是完整的、最小的还是不完整的。如果
IDC 未完成,则不计算可疑度评分;空的发现结果集
永远不会作为干净的结果呈现。
## 实时和最终 IDA 输出
Reports\07_IDA_AUTOMATION_QUEUE.txt
Reports\07_IDA_GUI_AUTOMATION.txt
Reports\07_IDA_STATUS.txt
Reports\07_IDA_TRIAGE.txt
Reports\07_IDA_LOG.txt
Reports\07_IDA_LAUNCH.txt
Reports\07_IDA_PREFLIGHT.txt
Reports\07_IDA_FINDINGS.json
Reports\07_IDA_FINDINGS.txt
Reports\07_IDA_SUSPICIOUS_SUMMARY.json
Reports\07_IDA_SUSPICIOUS_SUMMARY.txt
Reports\00_FINAL_REPORT.json
Reports\00_FINAL_REPORT.txt
Reports\00_FINAL_REPORT_READY.marker
成功的深度覆盖达到:
SCRIPT_RUNNING_FULL -> SCRIPT_COMPLETED_FULL
成功的降低兼容性覆盖达到:
SCRIPT_RUNNING_MINIMAL -> SCRIPT_COMPLETED_MINIMAL
诸如 GUI_AUTOMATION_PENDING 和
IDC_COMPILE_ERROR_RETRY_PENDING 之类的非终止状态意味着辅助程序仍在处理对话框或
正在重试。它们不会停止回退序列。
## 全部适用工具策略
将调用每个已安装且适用于检测到的格式/运行时的工具。
只有在工具缺失、明确设为可选且被禁用、
不适用或在后期发现期间已完成时,才会跳过该工具。
覆盖范围包括:
- 内置 Python 核心;
- YARA;
- capa 文本和 JSON;
- FLOSS 文本和 JSON;
- Detect It Easy 文本和 JSON;
- rabin2 元数据、头信息、入口点、节、导入、符号、
重定位、库和字符串;
- radare2 有界分析、函数、反汇编、xrefs、调用图和
字符串;
- 已验证的 Sysinternals Strings 和 Sigcheck;
- ExifTool 文本和 JSON;
- 7-Zip;
- 对原生可执行文件进行 UPX 只读测试和 pyinstxtractor-ng --info 探测,
仅在明确识别后进行提取;
- 在识别出 Inno Setup 时使用 innoextract;
- 用于 Go 二进制文件的 GoReSym;
- 用于 .NET 的 ILSpyCmd;
- 用于匹配文档的 oleid、olevba 和 rtfobj;
- 用于 PDF 的 PDFiD 和 pdf-parser;
- 可选的哈希固定的 Manalyze(用于 PE 文件);
- 用于受支持的 x86/x64 输入的可见 IDA Free。
实际适用性、可用性、退出代码、超时、预期子报告、
重试结果和最终状态将写入:
Reports\00_TOOL_EXECUTION_PLAN.txt
Reports\00_TOOL_EXECUTION_PLAN.json
Reports\00_TOOL_AUDIT.txt
Reports\00_TOOL_AUDIT.json
Reports\00_TOOL_AUDIT_FINAL.txt
Reports\00_TOOL_AUDIT_FINAL.json
默认情况下,失败、超时、缺少辅助文件或格式错误的 JSON 适用报告组
将重试一次。特定于格式的工具会被标记为 NOT_APPLICABLE,
而不会针对不相关的文件强制执行。
START_HERE 在单独的最小化进程中启动有限的缺失工具设置。
常规分析从不等待下载、Chocolatey、Boost、Visual Studio
或源码构建。在第一个案例之前运行一次 INSTALL_OR_CHECK_TOOLS.bat,以便所有可用的非 Manalyze 工具
可以从一开始就参与。
## MANALYZE 和 BOOST
Manalyze 是可选的。AutoTriage 从不自动下载/构建
Manalyze 或 Boost。ENABLE_MANALYZE_OPTIONAL.bat 仅接受通过精确 SHA-256 固定的、经人工审查的可移植执行文件。Manalyze 失败或
超时不能停止常规的分类。
## IOC 源隔离
符合 IOC 条件的数据仅限于样本字节、解码后的样本字符串、样本
资源、提取的子文件、FLOSS stdout、rabin2 字符串 stdout 以及已验证的
Sysinternals Strings stdout。
命令行、进程元数据、stderr、启动器日志、报告路径、工具
路径、设置日志、radare2 控制台上下文以及 TOOLS_USED.txt 均被排除在外。
在 IOC 分类之前会剥离确切的 Sysinternals 横幅。
类别包括 IPv4/IPv6、URL、域名、电子邮件、注册表键、路径、
互斥锁上下文、命名管道、user agent、PowerShell 命令、服务、
计划任务、PDB 路径、加密货币地址、嵌入的文件名、
证书指标以及 key/IV/nonce/salt 候选项。
Lab 12-03 回归测试必须保留:
practicalmalwareanalysis.log
并且必须拒绝工具自有的横幅域名:
www.sysinternals.com
## 安全提取
已知的非执行提取器受文件计数和大小预算的限制。
在可能的情况下提取 UPX、PyInstaller、Inno Setup 和受支持的存档。
最大的子文件接收递归核心分析,有限数量的子文件
接收完整的已安装/适用工具工作流。
VMProtect、Themida、Enigma、Obsidium、自定义加载器和未知的保护器
永远不会被执行或自动动态解包。
## 主要报告
OPEN_REPORT.html
Reports\00_EXECUTIVE_SUMMARY.txt
Reports\00_FINAL_REPORT.json / .txt
Reports\00_CORE_REPORT.json / .txt / .html
Reports\00_TOOL_EXECUTION_PLAN.json / .txt
Reports\00_TOOL_AUDIT.json / .txt
Reports\00_TOOL_AUDIT_FINAL.json / .txt
Reports\00_IOCS.csv / .json / .txt
Reports\04_CAPA.txt / 04_CAPA_JSON.txt
Reports\05_EXTRACTED_INDEX.csv
Reports\07_IDA_SUSPICIOUS_SUMMARY.json / .txt
Reports\07_IDA_FINDINGS.json / .txt
## 配置
AUTOTRIAGE_CONFIG.json 控制外部工具超时、失败报告
审计重试次数、IDA 对话框/启动/扫描超时、GUI 重试次数和延迟、
最终报告等待、发现限制和递归子分析限制。
完成最终化后,案例根目录包含 UPLOAD_FOR_REVIEW_NO_SAMPLE.zip。
它排除了恶意软件字节和提取的有效载荷,
但包含用于诊断的报告、进程辅助文件、工具自检、审计、IDC 脚本和仪表板。
## 可选手动回退
常规操作不会要求分析师选择 IDC 文件。只有在所有有限的自动提交方法都失败后,分析师才可以自行选择保持 IDA 打开,按下 Alt+F7,并运行:
Analysis\run_ida_triage_manual.idc
如果完整脚本报告了 IDC 问题,请运行:
Analysis\run_ida_fallback_manual.idc
这两个脚本都不会调用 qexit()。
## 验证限制
此捆绑包针对 PowerShell 语法/结构、Python、
IDC 结构、行尾、占位符、清单和 ZIP 完整性进行了静态验证。
此环境无法执行原生的 Windows PowerShell 5.1、控制
实际的 IDA Free 9.4 GUI,或在该 IDA 安装中编译/运行 IDC。
这些运行时行为仍必须在目标 FLARE-VM 上进行验证。
## 自动化 MKYARA 特征库阶段
在自动化的完整或最小 IDC 阶段达到终止状态后,
独立的哈希固定 mkYARA 环境仅检查具备跨工具校准的
高信度函数,且这些函数具有直接的静态证据或独立的语义支持。仅候选的发现结果、编译器/运行时函数
和低信息量函数将被排除。
生成的规则仅在满足以下条件时才会被提升:
- 其包含的函数安全地从 IDA 虚拟地址映射到样本
文件字节;
- mkYARA 在其超时时间内完成;
- 规则包含至少 24 个固定字节、总共至少 24 个 token,并且
最小固定 token 比率为 0.55;
- YARA 确认它与源样本匹配;并且
- 操作提升要求至少有 MkYaraMinBenignFilesForPromotion
个(默认为 50)成功筛选的干净文件且零匹配。
结果标签:
SOURCE_MATCHED_UNSCREENED_CANDIDATE
规则通过了特异性检查并与其源样本匹配。它仅作为
审查工件,不具备提升资格。
INSUFFICIENT_BENIGN_CORPUS_CANDIDATE
筛选了一些干净文件,但少于配置的最小数量。
该规则不具备提升资格。
CORPUS_SCREENED_CANDIDATE
至少筛选了配置的最小数量的文件且零
匹配。这是唯一具备自动提升资格的状态。
REJECTED_LOW_SPECIFICITY / REJECTED_SOURCE_NO_MATCH /
REJECTED_BENIGN_CORPUS_MATCH
该规则仅作为诊断证据保留,不会被提升。
即使是 CORPUS_SCREENED_CANDIDATE 也不意味着保证是真阳性或恶意软件家族唯一的特征库。在生产部署之前,请针对具有代表性的干净软件语料库和相关的恶意软件家族样本进行验证。
mkYARA 1.0.0 从其固定的官方包存档中安装。由于
上游控制台使用了过时的 yara-python 匹配字符串元组 API,因此安装程序
仅将控制台模块替换为 Support\mkyara_compat_cli.py。替换的源码和安装的模块必须具有相同的 SHA-256 值,并且
在记录 PASS 之前,安装程序会运行真实的规则生成/源匹配探测。
自动化输出:
Reports\08_MKYARA_REPORT.json
Reports\08_MKYARA_REPORT.txt
Reports\08_MKYARA_GENERATED.yar
Reports\08_MKYARA_SOURCE_VALIDATION.txt
Reports\08_MKYARA_CANDIDATES\
## 可选 IDA 9.4 MKYARA 插件
当 InstallIdaMkYaraPlugin 为 1 时,INSTALL_OR_CHECK_TOOLS.bat 会部署捆绑的 IDAPython 适配器。
该适配器被写入当前用户的 IDA
插件目录,并使用 IDA 9.x API,而不需要 PyQt5 或旧版上游
GUI 代码。它会验证配置的 mkYARA 和 YARA 可执行文件的哈希值。
重启 IDA 后,使用:
Edit > Plugins > AutoTriage mkYARA: Generate normal candidate
Edit > Plugins > AutoTriage mkYARA: Generate strict candidate
首先选择指令或将光标置于某个函数中。对于未选定的
当前函数,插件需要由
自动 IDC 扫描器生成的 CONFIRMED 或 LIKELY 注释。分析师的明确选择是唯一的覆盖方式。
该插件将 IDA 地址映射到文件偏移量,强制执行特异性门限,
要求源 YARA 匹配,并在规则旁边写入 JSON 结果。
无人值守的一键式流程不依赖于该插件。
插件设置状态:
IDA_PLUGIN_SETUP.txt
## 专注的 IDC 模块
Ida\Modules 包含可选的核心 IDC 脚本,用于提供专注的第二意见:
high_signal_api_chains.idc
import_callsite_inventory.idc
crypto_material_hunt.idc
anti_analysis_hunt.idc
control_flow_integrity.idc
suspicious_string_xrefs.idc
entry_section_anomalies.idc
mkyara_candidate_functions.idc
自动化的全扫描器已经包含同等或更广泛的逻辑。它还会
在 CONFIRMED 和 LIKELY 指令
以及包含它们的函数中添加非破坏性的 AutoTriage 注释,同时保留现有的注释。这些脚本
对于手动 Alt+F7 审查非常有用,并且永远不会退出 IDA。
INSTALL_OR_CHECK_TOOLS.bat 还将专注的脚本复制到:
%APPDATA%\Hex-Rays\IDA Pro\idc\AutoTriage
它们的部署和哈希记录在 IDA_PLUGIN_SETUP.txt 中。
## MKYARA 配置
AUTOTRIAGE_CONFIG.json 支持:
"MkYaraBenignCorpusPath": "C:\\CleanCorpus",
"MkYaraMaxBenignFiles": 200,
"MkYaraMinBenignFilesForPromotion": 50,
"InstallIdaMkYaraPlugin": 1
将 InstallIdaMkYaraPlugin 设置为 0 将仅禁用可选的 IDAPython 适配器。
当安装了 mkYARA
和 YARA 时,自动化的 IDC 后独立特征库阶段仍然保持启用状态。
## V9.4.3 误报校准
IDC 完成后,correlate_static_findings.py 会将每个带地址的 IDA
发现结果与 capa、YARA、PE 导入和核心行为评估进行比较。重复的
API 名称证据会被折叠到一个证据族中。最终报告
区分了 PROVEN_STATIC_BEHAVIOR、CORROBORATED_STATIC_BEHAVIOR、
LIKELY_STATIC_BEHAVIOR 和 CANDIDATE。这些标签仅适用于观察到的行为。文件级别的
MalwareVerdict 仍为 NOT_DETERMINED。
通用的动态解析、编译器/运行时函数、常见的 GUI 发现、
普通的定时 API 以及未经证实的低级指令候选无法
被提升为自动化的 mkYARA 特征库。
## V9.4.3 键盘钩子精度
SetWindowsHookEx 加上消息循环这种常规存在仅仅是候选级别。
已证实的键盘/文件记录行为要求 IDC 扫描器建立以下条件:
- 在 SetWindowsHookEx 调用处出现 WH_KEYBOARD_LL (13);
- 一个有效的回调函数;
- 该回调中有 WM_KEYDOWN 或 WM_SYSKEYDOWN 检查;
- CallNextHookEx 延续;并且
- 一个可由回调到达且同时包含文件创建和文件写入的函数。
这证明了静态行为,而不是恶意意图。辅助功能、监控、
家长控制和安全软件可能会故意实现类似的逻辑。
## V9.4.3 误报策略
报告将已证实的机制与已证实的可疑行为以及
恶意软件归因区分开来。API 名称的存在、导入和广泛的 YARA 上下文不会
独立地提高置信度。通用的 PEB/TEB 访问、hook API、动态
解析、定时指令、直接 syscall 聚合、CALL/POP 模式
和常见的系统管理 API 将保留为私有/上下文或候选发现,
除非有序的、有地址作支撑的链能够提供更多证据。
对于键盘监控,具有 WM_KEYDOWN 处理和
CallNextHookEx 的 WH_KEYBOARD_LL 回调证明了拦截机制。更强的文件记录
发现还需要一个可由回调到达的、有序的 CreateFile/fopen 到
WriteFile/fwrite 的接收器,并具有合理的输出文件名。这两个结果都不是
恶意软件的定论。
标签:AI合规, DAST, FLARE-VM, IDA插件, IPv6, Libemu, PowerShell, 云资产清单, 威胁情报, 开发者工具, 恶意软件分析, 自动化分类, 逆向工具, 逆向工程