duyhoang05/Windows-malware-api-call-analysis

GitHub: duyhoang05/Windows-malware-api-call-analysis

基于 Frida 动态插桩的 Windows 恶意软件行为分析工具,通过捕获运行时 API 调用序列实现规则检测、风险评分和机器学习分类。

Stars: 1 | Forks: 1

# Windows 恶意软件 API 调用分析器 基于运行时 API 调用序列的 Windows 程序动态分析工具。该系统使用 Frida 对进程进行插桩,使用 Python 收集和分析事件,使用基于规则的引擎检测可疑行为,并利用 Random Forest 作为辅助分类信号。 这是一个用于恶意软件分析研究与实践的学术项目。该工具不能替代 antivirus、EDR 或专业的 sandbox。 ## 主要功能 - 使用 Frida 启动并监控 Windows 可执行文件。 - Hook 属于 memory、file、registry、process/thread、library、network 和反分析组的 API。 - 监控由 target 创建的子进程。 - 将运行时事件记录为 CSV 和 JSONL。 - 将 API 聚合为 behavior 和 behavior group。 - 检测 behavior chain、可疑指标和 IOC。 - 将 endpoint 与 C2 指标及本地可信域进行比对。 - 计算 risk score 并对风险等级进行分类。 - 将部分行为映射到 MITRE ATT&CK。 - 使用 Random Forest 结合 threshold 和 reliability gating 预测 API profile。 - 生成 text、enhanced text 和 HTML 报告。 - 提供包含 Start、Stop 和 Force Stop 功能的 GUI。 ## 架构 ``` Target EXE -> Frida spawn/attach -> hook.js thu thập Windows API calls -> main.py ghi logs/api_log.csv và api_log.jsonl -> analyzer.py phân tích rule, IOC, MITRE và risk score -> ml/predict_ml.py bổ sung tín hiệu Random Forest -> report.txt, report_enhanced.txt, report.html và GUI ``` `main.py` 是核心协调模块。`hook.js` 负责插桩。`analyzer.py` 处理基于规则的分析。`ml/` 目录包含 Machine Learning 的特征向量化、训练和预测部分。 ## 环境要求 - Windows 10 或 Windows 11。 - Python 3.10 及以上版本。 - 具备让 Frida 启动/附加到 target process 的适当权限。 - 建议在隔离的虚拟机中运行不受信任的样本。 ## 安装 在项目目录下打开 PowerShell 或 Command Prompt: ``` py -m pip install -r requirements.txt ``` 主要依赖包括 Frida、scikit-learn、pandas、joblib 和 NumPy。Tkinter 通常会随 Windows 上的 Python 一起安装。 检查 Frida: ``` py -c "import frida; print(frida.__version__)" ``` ## 使用 GUI 直接运行: ``` py gui.py ``` 或者运行: ``` RUN_ANALYZER.bat ``` 使用流程: 1. 选择需要分析的 `.exe` 文件。 2. 设置监控 timeout。 3. 开启或关闭 Machine Learning。 4. 点击 Start Analysis。 5. 在控制台中监控 API events。 6. 使用 Stop 请求软停止,系统仍会生成报告。 7. 如果分析器或 target 未按时停止,请使用 Force Stop。 ## 使用 CLI 基础语法: ``` py main.py -t ``` 示例: ``` py main.py samples\sample.exe -t 30 ``` 关闭 Machine Learning: ``` py main.py samples\sample.exe -t 30 --no-ml ``` 较长的 timeout 有助于观察延迟触发的 payload,但也会导致日志体积变大。简短的 trace 或极少的 API 并不足以断定样本是良性的。 ## 分析流程 1. `main.py` 清理旧日志并准备输出目录。 2. Frida 以暂停状态启动 target。 3. Python 附加到进程并加载 `hook.js`。 4. `hook.js` 查找 API 的运行时地址并附加 `Interceptor.attach()`。 5. target 恢复执行;hook events 被发送回 Python。 6. events 被记录到 CSV 和 JSONL 中。 7. 当 timeout 结束或收到 Stop 指令时,系统会 detach 并清理已监控的进程。 8. `analyzer.py` 执行基于规则的分析。 9. 如果开启 ML,`ml/predict_ml.py` 会生成特征向量并加载 model。 10. 系统生成各项输出报告。 ## 基于规则的分析 分析器不会基于单个 API 得出结论。像 `VirtualAlloc`、`LoadLibraryW` 或 `GetProcAddress` 这样的常见 API 可能会同时出现在 goodware 和 malware 中。 系统会将 API 映射为 behavior,然后检查行为链和上下文。例如: ``` OpenProcess -> VirtualAllocEx -> WriteProcessMemory -> CreateRemoteThread ``` 上述行为链可能与 Process Injection 有关。主要检测组包括: - Process Injection、Native Process Injection 和 APC Injection。 - 类 Process Hollowing 行为。 - Downloader 和 WinHTTP downloader 行为。 - Registry 和服务持久化。 - 类 Ransomware 文件活动。 - Dynamic API Resolution。 - 反分析和 sandbox evasion。 - C2 endpoint、可疑域名和公网 IP 连接。 Risk score 是基于 behavior chain 和可疑指标的启发式分数。它并不是 malware 的概率。如果没有高可靠性的证据,分析器会限制得分,以减少由常见运行时 API 引起的 false positive。 目前的结论等级: - `LOW`:无明显可疑的行为链或指标。 - `SUSPICIOUS`:存在行为链或指标,但总证据有限。 - `MEDIUM`:score 达到 40 且有足够的上下文支持。 - `HIGH`:score 达到 80 且有强烈的类 malware 证据。 - `INCONCLUSIVE`:trace 过短或 coverage 不足以得出结论。 ## 机器学习 ML 模块使用 Random Forest 评估 API profile。ML 不会取代基于规则的引擎,也不是最终的结论。 输入的数据集包含 API ID 序列和 `malware` 标签。在训练过程中: 1. API ID 被映射为 API 名称。 2. 每个样本被转换为 API 频率向量。 3. 对数据集进行 undersampling 以减少类别不平衡。 4. 数据被划分为 train、validation 和 test 集。 5. 在 train 集上训练 Random Forest。 6. 使用 validation 集根据 false-positive rate 目标选择 threshold。 7. 使用 test 集进行最终评估。 8. Model、特征列表、threshold 和 metadata 会被打包保存。 训练 model: ``` py ml\train_ml_kaggle.py --csv dataset\dynamic_api_call_sequence_per_malware_100_0_306.csv --model models\api_rf_model.pkl --malware-ratio 3 ``` Model 保存在: ``` models/api_rf_model.pkl ``` 预测结果包括 probability、threshold、reliability、recognized calls、active features、anchor calls 和 warnings。当 reliability 为 `LOW` 时,分析人员应优先考虑基于规则的证据和 IOC。 ## 输出数据 ### `logs/` - `api_log.csv`:表格形式的 API events,供分析器和 ML 使用。 - `api_log.jsonl`:按行存储的完整 JSON 格式 events。 - `stop_requested.flag`:来自 GUI 的 Stop 信号。 - `spawned_pids.txt`:用于清理和 Force Stop 的 PID。 ### `reports/` - `report.txt`:主要的详细报告。 - `report_enhanced.txt`:扩展展示的文本版本。 - `report.html`:HTML dashboard 和图表。 `report.txt` 包括 Executive Summary、API sequence、top APIs、behaviors、chains、indicators、IOC、MITRE mapping、evidence、risk score、ML 分析和分析人员结论。 ### `models/` - `api_rf_model.pkl`:Random Forest model package。 ## 项目结构 ``` malware_api_analyzer/ |-- main.py CLI và orchestration |-- gui.py Giao diện Tkinter |-- hook.js Frida API hooks |-- analyzer.py Rule-based analysis và report chính |-- rules.py API sequences và trọng số rule |-- html_report.py Sinh HTML report |-- enhanced_report.py Sinh enhanced text report |-- report_formatting.py Helper định dạng report |-- chartjs.min.js Chart.js dùng cho HTML report |-- RUN_ANALYZER.bat Launcher cho GUI |-- requirements.txt Python dependencies |-- ml/ | |-- train_ml_kaggle.py Huấn luyện Random Forest | |-- predict_ml.py Dự đoán từ Frida CSV | |-- ml_features.py Chuyển log/sequence thành vector | `-- api_mapping.py API ID mapping và feature set |-- reputation/ | |-- c2_indicators.txt C2 indicator cục bộ | `-- trusted_domains.txt Trusted domain cục bộ |-- dataset/ Dataset huấn luyện |-- models/ Model package |-- samples/ Mẫu kiểm thử cục bộ |-- logs/ Runtime logs `-- reports/ Báo cáo được sinh ``` ## 故障排除 ### `ModuleNotFoundError: No module named 'frida'` ``` py -m pip install frida frida-tools ``` ### Frida 无法附加到 target - 以适当的权限运行终端。 - 检查 target 是否过快退出。 - 检查 Python/Frida 和 target 的架构是否匹配。 - 尝试增加 timeout,或者确保运行 target 时提供了正确的输入参数。 ### Model 不存在或无法加载 - 检查 `models/api_rf_model.pkl`。 - 使用当前正在运行的 scikit-learn 版本重新训练 model。 - 不要从不受信任的来源加载 model package,因为 `joblib/pickle` 在 deserialize 时可能会执行代码。 ### Stop 没有立即响应 首次点击 Stop 以请求软停止。如果进程仍在运行,请点击 Force Stop。GUI 将使用 PID 跟踪和 `taskkill` 来清理进程树。 ### 多次运行结果不一致 动态分析取决于 timeout、子进程、网络、权限、触发器和环境状态。一次运行不能代表样本的全部行为。 ## 安全使用 - 仅在被允许的环境内分析样本。 - 切勿在个人计算机或生产网络上运行真实的 malware。 - 使用隔离的虚拟机,并在运行前创建快照。 - 当不需要真实的互联网连接时,请关闭或模拟网络。 - 切勿将凭据、个人文件或重要数据放入分析机中。 - 将日志、报告和输出文件视为不受信任的数据。 ## 局限性 - Frida 是用户态插桩,可能会被检测或规避。 - Direct syscall 可能不会经过已 hook 的 API。 - Hook 列表和规则无法覆盖所有的 malware 技术。 - 较短的 timeout 可能会漏掉延迟激活的 payload。 - ML 依赖于数据集,并且可能会对合法的 installer 或 loader 产生 false positive。 - 目前的 IOC reputation 是本地列表,不能替代 threat intelligence service。 ## 使用目的 本项目是为学习、信息安全研究以及在授权环境下的恶意软件分析而构建的。使用者需承担责任,确保运行样本的行为符合相关法律规定及所涉及系统的策略。 ## 技术栈 - Python - Frida - scikit-learn - pandas、NumPy 和 joblib - Tkinter - Chart.js - 规则层面的 MITRE ATT&CK mapping
标签:Apex, ATT&CK映射, DAST, Docker支持, Frida, 恶意软件分析, 数据可视化, 机器学习, 行为检测, 逆向工具, 速率限制处理