课题研究 威胁情报分析研究 子课题03 · 第6页 / 共8页
06十大核心研究子课题 · 自动化管道与数据工程

自动化管道与数据工程

映射不应停留在手工表格。本页把第2页的方法论工程化为一条可运行的管道:用 attackcti / stix2 程序化访问官方 STIX 数据、自动生成 Navigator 图层、将 TTP 知识库分发到 MISP/OpenCTI、用 Sigma 的 attack 标签实现"规则↔图层"双向标注,并接入 SIEM/SOAR 与版本控制。所有代码片段基于真实开源库 API,落地时按环境适配。

数据工程attackctistix2Navigator图层MISP/OpenCTISigma研究状态:研究中
所属阶段生命周期 · 处理与标准化
目标受众TIP平台建设、检测工程
前置知识建议先读第2、3页

01 · 总体管道架构

一条可维护的 ATT&CK 映射管道应当是数据驱动而非人工驱动的:上游是 MITRE 官方 STIX 数据包(权威、可版本化),中游是映射与评分逻辑(可测试),下游是 Navigator 图层、TIP 平台与检测工程工单(可消费)。

ATT&CK 映射自动化管道
每一段都可单独测试与替换;版本以 STIX 包版本号贯穿全链
说明:该管道为本课题工程化设计,借鉴 CTID 社区工具链思路,非 MITRE 官方规定架构。
2.1
STIX / TAXII 版本
官方数据交换标准,全链统一
3层
覆盖度评分
L1遥测/L2规则/L3实测贯穿评分段
2类
分发出口
人读(Navigator图层) + 机读(STIX/TAXII)
1源
权威数据
始终以 MITRE 官方 STIX 为准,避免多源漂移

02 · STIX 2.1 程序化访问

社区库 attackcti(OTRF 维护)封装了 mitre/cti 的访问;stix2(OASIS 官方)负责对象解析与校验。下面片段演示加载 v17 数据并检索技术/组织关系。

片段一:用 attackcti 检索技术与使用该技术的组织(参考实现,方法名以仓库为准)

from attackcti import attack_client

# AttackClient 默认从 MITRE CTI 官方源加载指定版本数据
lift = attack_client.AttackClient()

# 检索具体技术对象(返回 attack-pattern SDO)
t1003 = lift.get_technique_by_id("T1003")
print(t1003.name, t1003.x_mitre_version)

# 遍历 Enterprise 全部技术,统计带云平台的条目
enterprise = lift.get_techniques(workspace="enterprise-attack")
cloud_techs = [t for t in enterprise
              if "Cloud" in getattr(t, "x_mitre_platforms", [])]
print("Enterprise 中涉及 Cloud 平台的技术数:", len(cloud_techs))

# 取得某组织及其实战使用的技术(uses 关系)
group = lift.get_group_by_id("G0096")   # 例:Salt Typhoon(v17 新增)
used = lift.get_techniques_used_by_group(group)

片段二:用 stix2 解析本地 STIX 包并遍历对象(适合离线/CI 场景)

import stix2
from stix2 import parse

with open("enterprise-attack.json", "r", encoding="utf-8") as f:
    bundle = parse(f.read())   # 返回 stix2.Bundle

for obj in bundle.objects:
    if obj.type == "attack-pattern":
        # 由 external_references 中的 T 编号定位
        for ref in obj.external_references:
            if ref.source_name == "mitre-attack":
                print(ref.external_id, obj.name)

工程提示:①attackcti 在首次运行时会下载官方数据,建议在 CI 中固定版本 tag 并缓存,避免运行时网络依赖;②stix2 解析失败的对象必须被拒绝进入下游(对应第2页 §04 校验兜底);③所有 T 编号一律以数据包实际字段为准,不臆造 x_mitre_* 字段名;④除attackcti外,MITRE官方维护的mitreattack-python库(github.com/mitre-attack/mitreattack-python)提供等价的STIX数据访问与图层生成功能,可作为官方备选依赖(见第2页参考来源[11])。

03 · 程序化生成 Navigator 图层

图层文件本质是 JSON。把映射结果(技术编号 + 评分 + 验证证据)批量写成 Layer,既可供人工在 Navigator 中查看,也可作为 CI 产物自动比对。下面片段演示按第3页评分模型批量生成。

片段三:由映射表生成 Navigator Layer JSON(评分沿用第3页 §02 模型)

import json

# 每行: (技术编号, 评分, 证据注释)
mappings = [
    ("T1003", 75, "Sysmon ID10 + EDR; 原子测试 2026-06 通过"),
    ("T1059.001", 50, "PowerShell 日志规则已部署, 未实测"),
    ("T1557.002", 0, "缺网络侧 ARP/NDP 遥测, 已知盲区"),
]

layer = {
    "name": "企业检测覆盖度基线 2026Q3",
    "versions": {"attack": "17", "navigator": "5.x"},
    "domain": "enterprise-attack",
    "description": "L2规则覆盖评分: 0=无 25=L1 50=L2 75=L3 100=L3+自动化",
    "gradient": {"colors": ["#ff6666", "#ffe766", "#8ec843"],
                 "minValue": 0, "maxValue": 100},
    "techniques": [
        {"techniqueID": tid, "score": score, "comment": note}
        for tid, score, note in mappings
    ],
    "filters": {"platforms": ["Windows", "Linux"]},
}

with open("coverage-baseline.layer.json", "w", encoding="utf-8") as f:
    json.dump(layer, f, ensure_ascii=False, indent=2)

该文件可直接拖入 ATT&CK Navigator 渲染。CI 中可对两份图层求差集("威胁图层 − 基线图层"),自动输出待补齐技术清单(对应第3页 §2.3 与第5页跨案例缺口法)。

04 · 入库与分发(STIX / MISP / OpenCTI)

4.1 导出为 STIX 2.1 Bundle

映射结论若以 STIX 对象(relationship: uses/related-to)形式入库,可直接被任何兼容 TIP 消费。下面演示把一条"组织使用该技术"的关系导出为 STIX Bundle 片段。

import stix2

bundle = stix2.Bundle(
    stix2.Relationship(
        source_ref="intrusion-set--<组织STIX-ID>",
        target_ref="attack-pattern--<技术STIX-ID>",
        relationship_type="uses",
    )
)
print(bundle.serialize())

4.2 对接 MISP / OpenCTI

平台对接方式说明
MISPATT&CK Galaxy + 事件标签技术/组织/软件以 Galaxy 标签体系存在;TTP 知识库可经 MISP 的 STIX 2.x 导入接口入库,与现有事件关联。
OpenCTI原生 STIX 2.1 模型以 STIX 为内部数据模型,导入上述 Bundle 即可建立组织—技术关系图,支持图形化溯源。
Workbench本地库融合ATT&CK Workbench 维护本地扩展条目并与官方数据融合,适合先在本地产出再回写 TIP。

分发一致性纪律:同一份映射结论在 Navigator 图层、MISP 标签、OpenCTI 关系图中必须指向同一 ATT&CK 版本号。版本升级时三类出口需同步刷新,否则会出现"图层说覆盖了、平台却仍是旧编号"的不一致(对应第2页版本漂移风险)。

05 · 检测规则与 ATT&CK 双向标注

Sigma 规则的 tags 字段原生支持 attack.<技术ID小写> 标签,使"规则库 → 覆盖度图层"可自动反向生成,是第3页覆盖度闭环的数据基础。

片段四:带 ATT&CK 标签的 Sigma 规则(检测 T1003 LSASS 转储,attack 标签见 tags)

title: 可疑 LSASS 内存访问 (T1003.001)
id: 9f9b35d6-7c8a-4b2e-9d3a-1c2b3d4e5f60
status: experimental
description: 检测非系统进程以读取权限访问 lsass.exe
references:
  - https://attack.mitre.org/techniques/T1003/001/
tags:
  - attack.credential-access
  - attack.t1003.001
  - attack.t1003
logsource:
  category: process_access
detection:
  selection:
    TargetImage|endswith: '\\lsass.exe'
    GrantedAccess:
      - '0x1010'
      - '0x1410'
  filter:
    SourceImage|endswith:
      - '\\wininit.exe'
      - '\\lsass.exe'
  condition: selection and not filter
falsepositives:
  - 合法安全软件内存扫描
level: high

采集所有 Sigma 规则的 attack.* 标签即可反向生成 L2 覆盖视图;与第3页 §2.2 评分模型联动时,仅带标签但未实测的规则记 50 分,实测通过的升 75 分。规则与图层因此保持双向一致。

片段六:Sigma 规则的多后端转换(sigma-cli,示例命令以本机 sigma-cli --help 为准)

# 安装 CLI 与目标后端插件:pip install sigma-cli
# 编译为 Splunk SPL(-t 后端,-p 管线)
sigma convert -t splunk -p splunk_windows rules/malicious_lsass_access.yml

# 编译为 Microsoft Sentinel KQL
sigma convert -t kusto -p microsoft365_defender rules/mfa_bombing.yml

# 批量校验规则并输出 ATT&CK 标签审计(自建脚本思路)
sigma check rules/ | grep -o 'attack\.t[0-9.]*' | sort -u

注:sigma-cli 的后端名称与管线插件随版本演进,执行前以本机环境为准;attack 标签审计可直接喂给第3页 §02 的图层生成脚本,实现规则库→L2覆盖视图的自动化回写。

06 · 与 SIEM / SOAR 流水线集成

映射结论最终要驱动行动。两种常见集成模式:

  • 规则下发:检测工程工单(来自第3页闭环与第5页缺口清单)经 SOAR 推送到 SIEM/EDR,部署后回写图层评分(L2→实测 L3)。
  • 情报订阅:将 TTP 知识库的更新经 TAXII 2.1 推送到下游 TIP,使新出现的组织技术自动进入狩猎队列。

片段五:向 TAXII 2.1 集合推送更新(requests 示意,凭证与端点以环境为准)

import requests

TAXII_URL = "https://your-tip.example.com/taxii2/collections//objects"
headers = {"Authorization": "Bearer <TOKEN>"}

# 将新增的 STIX Bundle 推送到下游 TIP
resp = requests.post(
    TAXII_URL,
    headers={**headers, "Content-Type": "application/taxii+json;version=2.1"},
    json={"objects": [obj.serialize() for obj in new_objects]},
)
print("TAXII 推送状态:", resp.status_code)

集成原则:推送内容只含机读 STIX 对象与最小化元数据(技术编号、置信度、出处),不包含任何可直接复用的攻击实现;推送前进行敏感字段脱敏与授权校验,符合第1页 §07 合规边界。

07 · 质量门与版本控制

7.1 管道内置的质量门

关卡检查项失败处理
CI-1STIX 解析全部成功拒绝坏对象进入下游(stix2 校验)
CI-2映射编号在所用版本存在且未 revoke/deprecate;并检查版本重构是否需重映射(v19活案例:T1562已重构为T1685/T1686/T1687族)阻断并提交人工复核,自动触发重映射工单
CI-3每条映射含出处 URL + 分析员标识退回补录(对应第2页入库清单)
CI-4版本号贯穿图层/MISP/OpenCTI 一致告警并阻断分发

7.2 版本与 diff 策略

官方数据包随版本发布机器可读 changelog(v17 起格式规范化)。管道应在每次版本升级时:①拉取新版本 STIX 包并 git 打 tag;②对 changelog 做 diff,识别新增/改名/撤销对象;③触发映射知识库的增量复核队列(而非全量重建,对应第2页 §04.1)。所有原始包保留归档,保证历史情报可溯源;相邻大版本间的补丁版本(如v19.1、v19.2)同样纳入diff、图层与下游分发的同步范围。

本节参考来源(第6页)

以下均为真实可查的权威来源,用于支撑本页事实性表述与代码片段的 API 归属。

[1]

attackcti(OTRF)Python 库:github.com/OTRF/attackcti;stix2(OASIS 官方):github.com/oasis-open/cti-python-stix2

[2]

MITRE 官方 CTI 数据仓库(STIX 2.1 JSON):github.com/mitre/cti;TAXII 2.1 服务:cti-taxii.mitre.org

[3]

ATT&CK Navigator(Layer 文件格式):github.com/mitre-attack/attack-navigator

[4]

Sigma 规则格式与 attack 标签约定:github.com/SigmaHQ/sigma;MISP:misp-project.org;OpenCTI:filigran.io OpenCTI

[5]

OASIS《STIX Version 2.1》《TAXII Version 2.1》规范:docs.oasis-open.org/cti/stix/v2.1