GreenWinters/PyTIE

GitHub: GreenWinters/PyTIE

基于机器学习的威胁情报分析框架,用于从 CTI 报告预测 MITRE ATT&CK 攻击技术。

Stars: 1 | Forks: 0

# PyTIE ## PyTorch 技术推断引擎 (TIE):训练方法与实现细节 技术推断引擎 (TIE) 是一个机器学习系统,旨在帮助网络防御者通过根据先前观察到的行为预测相关的 [MITRE ATT&CK](https://attack.mitre.org/) 技术来预判对手的下一步行动。TIE 利用了目前最大的公共数据集之一,将 CTI 报告与 ATT&CK 技术关联起来,包含 6,236 份 CTI 报告中的 43,899 条技术观察数据,覆盖了 96% 的 ATT&CK Enterprise v15.0。 ### 功能概述 `tie_model.py` 的核心功能是协调多个推荐模型的训练、评估和比较,用于技术推断。它提供了用于实验选择的 CLI,自动管理设备 (CPU/GPU) 和超参数搜索,并输出训练好的模型工件和详细指标。这支持了 TIE 的目标,即帮助防御者构建对手行动的完整图景并预测未来技术。 ### 训练方法论 #### 输入 - **数据集:** - `combined_dataset_full_frequency.json`:主要报告-技术矩阵(43,899 次观察,6,236 份报告)。 - `enterprise-attack.json`:MITRE ATT&CK 技术映射。 - **结构:** - 数据使用 `ReportTechniqueMatrixBuilder` 分为训练集、验证集和测试集。 - 所有拆分均转换为 PyTorch tensors 以实现高效计算和设备兼容性。 #### 模型训练 - **支持的模型:** - WALS (加权交替最小二乘法) - **描述:** 矩阵分解算法,使用加权最小二乘法交替优化用户和 item embeddings。专为隐式反馈数据设计,能有效处理大型稀疏矩阵。 - **优势:** 对大型数据集扩展性良好,对缺失数据鲁棒,支持 GPU 加速,embeddings 具有可解释性。 - **劣势:** 假设线性关系,可能在高度非线性或复杂交互中表现不佳,对超参数敏感。 - **预测目标:** 基于历史报告-技术关联,预测对手使用特定 ATT&CK 技术的可能性。 - **输出解释:** 分数越高表示预测的相关性越大;推荐 top-k 技术以供进一步调查。 - BPR (贝叶斯个性化排序) - **描述:** 成对排序算法,学习将观察到的(正)交互排序高于未观察到的(负)交互。优化排序质量而非绝对预测。 - **优势:** 直接优化排序指标,对推荐任务有效,能处理隐式反馈。 - **劣势:** 可能需要仔细的负采样,在超大数据集上收敛较慢,不如 WALS 易于解释。 - **预测目标:** 根据预测的相关性对每个报告/实体的 ATT&CK 技术进行排序。 - **输出解释:** 预测排名最高的技术最有可能被对手使用。 - TopItems (基于频率的基线) - **描述:** 简单的基线模型,根据技术在数据集中的整体频率进行推荐,忽略报告特定的上下文。 - **优势:** 快速,易于实现,提供比较基准。 - **劣势:** 忽略上下文和个性化,可能会漏掉罕见但重要的技术。 - **预测目标:** 最常观察到的 ATT&CK 技术。 - **输出解释:** 推荐最常见的 top-k 技术。 - Factorization (矩阵分解) - **描述:** 通过分解报告-技术矩阵来学习报告和技术的潜在 embeddings。捕获潜在的结构和关联。 - **优势:** 捕获潜在结构,embeddings 可解释,对中等规模数据集高效。 - **劣势:** 假设线性关系,对高度非线性数据效果较差,对稀疏性敏感。 - **预测目标:** 预测每个报告/实体的技术相关性。 - **输出解释:** 分数越高表示预测的关联性越强;推荐 top-k 技术。 - Implicit BPR (通过 implicit.gpu) - **描述:** 通过 `implicit.gpu.bpr` 后端实现的 GPU 加速贝叶斯个性化排序。直接在 CUDA tensors 上训练,并通过 conda-forge GPU 构建版高效运行 (`conda install -c conda-forge implicit implicit-proc=*=gpu`)。 - **优势:** 高度可扩展的排序,在 GPU 上运行,对缺失数据鲁棒。 - **劣势:** 需要仔细调优,不如标准矩阵分解易于解释,对数据分布敏感。 - **预测目标:** 对每个报告/实体的 ATT&CK 技术进行排序。 - **输出解释:** 预测排名最高的技术最有可能被对手使用。 - Implicit WALS (已弃用的 CPU 包装器) - **描述:** 仅限 CPU 的 `implicit.als` 实现的兼容性垫片。保留是为了向后兼容,但会发出弃用警告,当需要 GPU 加速时应避免使用。 - **优势:** 符合遗留行为。 - **劣势:** 仅限 CPU,速度明显较慢,无 GPU 加速,未来适应性较差。 - Implicit ALS (GPU/CPU 回退) - **描述:** 使用 `implicit.gpu.als` 的交替最小二乘法推荐器(当 CUDA 扩展可用时),并自动回退到 CPU ALS。 - **优势:** 在稀疏隐式反馈数据上高效,支持 GPU 加速,鲁棒的回退行为。 - **劣势:** 后端/库兼容性可能会影响运行时,并且 CPU 回退在大型运行中明显较慢。 - **预测目标:** 从学习到的潜在因子预测并对每个报告/实体的 ATT&CK 技术相关性进行排序。 - **输出解释:** 分数越高表示预测的相关性越强;优先考虑 top-k 技术。 - Implicit MatrixFactorizationBase (GPU/CPU 回退) - **描述:** `implicit` 矩阵分解基础模型的适配器,优先使用 GPU 实现(如果可用),并在需要时回退到 CPU。 - **优势:** 灵活的后端选择,一致的推荐器接口,对缺失 CUDA 扩展具有弹性。 - **劣势:** 性能取决于后端和环境设置;回退路径可能会增加运行时间。 - **预测目标:** 学习用户/报告和 item/技术潜在表示,以对可能的技术关联进行评分。 - **输出解释:** 分数用于排序;排名最高的技术被推荐为可能的下一步行动。 - **设备管理:** - TIE 在运行时检测 CUDA 可用性并自动选择执行设备。 - 对于基于 PyTorch 的推荐器,模型参数和 tensors 被显式移动到选定的设备。 - 对于基于 `implicit` 的推荐器,在可用且兼容时使用 GPU 后端;否则,代码回退到 CPU 实现。 - 感知设备的训练意味着相同的实验接口可以在异构环境中运行,同时保留可比的输出/指标。 - **超参数搜索:** - 自动对 embedding 维度和超参数进行搜索,并根据验证选择最佳配置。 - **训练循环:** - 对于每个配置,模型都会进行训练、验证和测试。根据性能指标选择最佳超参数。 #### 输出 - **模型工件:** - 训练好的模型保存为带时间戳文件名的 PyTorch `.pt` 文件。 - **指标:** - 性能指标保存为 JSON 文件,包括 precision、recall、NDCG 和 MSE。 - **CSV 结果:** - Embedding 维度扫描和其他实验将结果输出为 CSV 文件。 #### 测量/指标 - **Precision@k:** top-k 预测中相关技术的比例。 - **Recall@k:** 在所有可能的相关技术中检索到的相关技术的比例。 - **NDCG@k:** 评估排序质量,奖励相关技术的正确排序。 - **MSE:** 用于基于回归的模型以评估拟合质量。 - **最佳模型选择:** 模型比较并根据 NDCG@20 选择最佳模型。 ### 与原始仓库的区别 与原始 MITRE Engenuity Center for Threat-Informed Defense 仓库相比,此版本的 `tie_model.py` 包括: - **感知设备的训练:** 如果可用,所有模型和 tensors 都会移动到 GPU。 - **扩展的模型支持:** 集成了额外的推荐模型。 - **自动超参数搜索:** 多个配置并行运行,根据验证指标选择最佳。 - **鲁棒的输出管理:** 模型工件和指标保存时带有时间戳文件名。 - **全面的 CLI:** 实验选择,最佳模型返回,以及 JSON/CSV 格式的输出。 - **增强的指标和报告:** 每个实验的详细指标,所有结果保存以供分析。 - **与 RL 环境集成:** 输出工件和指标专为下游 RL 和模拟 pipeline 设计。 - **错误处理和进度反馈:** 鲁棒的错误处理,进度打印语句和设备兼容性检查。 ## Poetry 文件:功能和用途 此仓库使用由 [Poetry](https://python-poetry.org/) 管理的 `pyproject.toml` 文件进行依赖管理和打包。Poetry 简化了 Python 环境的安装、版本控制和可复现性,确保所有必需的库及其版本得到跟踪并易于安装。 为了可复现的 GPU 工作流,此项目还包括 `environment.yml` (Conda) 来定义实验使用的 CUDA 对齐基础环境。 推荐设置步骤: 1. 从 `environment.yml` 创建并激活 Conda 环境: conda env create -f technique_inference_engine/environment.yml conda activate tie_gpu 2. 使用 Poetry 安装项目依赖: poetry install 3. 确保安装了启用 GPU 的 `implicit` 工件(如果当前环境中尚不存在): conda install -c conda-forge implicit implicit-proc=*=gpu 简而言之:`environment.yml` 建立了系统级的 Python/CUDA 基线,而 Poetry (`pyproject.toml`) 管理项目级的 Python 包版本和 lockfile 可复现性。 ## 系统参考 此仓库在具有以下配置的多 GPU 工作站上进行了更改和测试: - GPUs (4): NVIDIA RTX A6000, NVIDIA GeForce RTX 2080 Ti - OS: Ubuntu 22.04.5 LTS - CPU Model: Intel(R) Xeon(R) Silver 4114 CPU @ 2.20GHz - CPU(s): 40 此硬件和 OS 配置能够加速上述推荐模型的训练和大规模实验。 ## 许可和归属 此仓库基于 [https://github.com/center-for-threat-informed-defense/technique-inference-engine/tree/TIE-83-jupyter-instructions](https://github.com/center-for-threat-informed-defense/technique-inference-engine/tree/TIE-83-jupyter-instructions) 的原始开源版本,并包含用于研究和开发目的的修改和增强。请支持并引用原始版本及其作者。 本项目根据 Apache License, Version 2.0 的条款分发。您可以复制、修改和分发本软件的副本,前提是您遵守许可证的条件,包括保留版权声明、许可证声明和归属声明。有关详细信息,请参阅 LICENSE 文件和上方的完整许可证文本。 欲了解更多信息,请访问 [Technique Inference Engine Website](https://center-for-threat-informed-defense.github.io/technique-inference-engine/)。
标签:Apex, Cloudflare, MITRE ATT&CK, Python, PyTorch, Vectored Exception Handling, 代码示例, 凭据扫描, 威胁情报, 开发者工具, 开源, 数据分析, 无后门, 机器学习, 深度学习, 知识推理, 矩阵分解, 网络安全, 逆向工具, 隐私保护, 预测模型