如何使用Pyattck将自定义Mitre Technique ID列表转换为对应Tactic信息
基于Pyattck实现Mitre Technique ID转Tactic信息解决方案
以下是可直接运行的完整实现代码,已覆盖硬编码、自定义变量、本地文件三种数据源适配需求,同时修复了你提供的演示代码中变量未定义的逻辑问题:
from pyattck import Attck # 初始化Attck对象,默认加载Mitre Enterprise框架全量数据 attack = Attck() # 预构建全量Technique与Tactic的映射字典,提升批量匹配效率 technique_tactic_map = {} for technique in attack.enterprise.techniques: tactic_list = [] for tactic in technique.tactics: tactic_list.append({ "tactic_id": tactic.id, "tactic_name": tactic.name }) technique_tactic_map[technique.id] = { "technique_name": technique.name, "related_tactics": tactic_list } # ----------------------数据源配置区,三种方式三选一即可---------------------- # 方式1:硬编码ID列表,直接把你持有的40个ID替换到下方列表即可 target_technique_ids = ["T1059", "T1003", "T1027"] # 方式2:对接自定义变量,直接将其他业务逻辑生成的ID列表赋值给该变量即可 # target_technique_ids = 你的自定义ID列表变量 # 方式3:读取本地ID文件,要求文件内每行存储一个Technique ID # with open("你的ID文件路径.txt", "r", encoding="utf-8") as f: # target_technique_ids = [line.strip() for line in f if line.strip()] # ------------------------------------------------------------------------- # 批量匹配输出结果 for tech_id in target_technique_ids: if tech_id in technique_tactic_map: data = technique_tactic_map[tech_id] print(f"Technique ID:{tech_id}") print(f"Technique名称:{data['technique_name']}") print("关联Tactic信息:") for tactic in data["related_tactics"]: print(f"- Tactic ID:{tactic['tactic_id']},Tactic名称:{tactic['tactic_name']}") else: print(f"未查询到ID为{tech_id}的Enterprise Technique,请检查ID格式是否正确") print("-" * 60)
注意事项
- 代码同时支持父技术ID(如T1059)和子技术ID(如T1059.001)的匹配
- 部分Technique会归属多个Tactic,代码会输出所有关联的Tactic信息
- 若需要将结果保存到本地文件,只需将print输出逻辑替换为文件写入逻辑即可
内容的提问来源于stack exchange,提问作者Terencio
相关产品推荐
相关产品推荐

