ATT&CK框架服务器

提供MITRE ATT&CK框架访问和ATT&CK Navigator层生成功能,用于网络安全覆盖可视化和威胁检测分析。

  • by MHaggis
  • TypeScript
  • 本地部署
  • 17 星标
  • 更新于
在 GitHub 查看 MHaggis/mitre-attack-mcp

使用说明

MITRE ATT&CK MCP

MCP(模型上下文协议)服务器,提供对MITRE ATT&CK框架的访问,并生成用于覆盖可视化的ATT&CK导航层。

特征

  • 完整的ATT&CK框架访问权限 -查询技术、策略、组、软件、缓解措施和数据源
  • 导航图层生成 -创建ATT&CK Navigator图层以实现覆盖可视化
  • 覆盖分析 -分析您的检测覆盖范围并找出差距
  • 基于威胁的差距分析 -将您的覆盖范围与特定威胁组进行比较
  • 全文检索 -SQLite FTS5支持跨技术名称和描述的搜索
  • 自动索引 -首次运行时自动下载ATT&CK数据并建立索引
  • 与安全检测mcp配合使用 -将您的检测规则与ATT&CK技术进行交叉引用

快速开始

选项1:npx(推荐)

无需安装:

npx -y mitre-attack-mcp

选项2:克隆和构建

git clone https://github.com/MHaggis/mitre-attack-mcp.git
cd mitre-attack-mcp
npm install
npm run build

配置

Cursor 集成开发环境

添加到MCP配置(~/.cursor/mcp.json 或 .cursor/mcp.json):

{
  "mcpServers": {
    "mitre-attack": {
      "command": "npx",
      "args": ["-y", "mitre-attack-mcp"],
      "env": {
        "ATTACK_DOMAIN": "enterprise-attack"
      }
    }
  }
}

克劳德桌面

添加 ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "mitre-attack": {
      "command": "npx",
      "args": ["-y", "mitre-attack-mcp"],
      "env": {
        "ATTACK_DOMAIN": "enterprise-attack"
      }
    }
  }
}

环境变量

变量 描述 默认值
ATTACK_DOMAIN 要索引的ATT&CK域 enterprise-attack
CUSTOM_ATTACK_PATH 本地STIX JSON的路径(可选) -

有效域: enterprise-attack, mobile-attack, ics-attack

MCP工具

技术查询

工具 说明
get_technique(id) 通过ID获取技术(例如T1059.001)
search_techniques(query) 按名称/描述搜索技术
list_techniques(limit, offset) 列出所有技术
list_techniques_by_tactic(tactic) 列出战术技巧
list_techniques_by_platform(platform) 按Windows/Linux/macOS/等筛选

威胁情报

工具 说明
get_group(id) 获取威胁组详细信息(例如,APT29的G0016)
search_groups(query) 按名称/别名搜索组
get_group_techniques(group_id) 获取组使用的技术ID
get_software(id) 获取恶意软件/工具详细信息
search_software(query) 搜索恶意软件和工具

防御性语境

工具 说明
get_tactic(id) 获取战术详细信息
list_tactics() 按矩阵顺序列出所有战术
get_mitigations(technique_id) 为某项技术寻求缓解措施
get_data_sources(technique_id) 获取检测数据源

导航图层生成

工具 说明
generate_layer(techniques, name) 从带有分数的技术列表中创建图层
generate_coverage_layer(covered_ids, name) 绿色=覆盖,红色=间隙可视化
generate_group_layer(group_id, name) 强调威胁集团的技术
generate_gap_layer(covered_ids, target_ids, name) 覆盖率与目标之间的差距分析

分析

工具 说明
analyze_coverage(covered_ids) 按战术+差距列表获取覆盖率统计数据
find_group_gaps(group_id, covered_ids) 找出你在团队中缺少的技巧
get_all_technique_ids() 获取所有有效的技术ID
get_stats() 框架统计

示例工作流

分析您的检测覆盖范围

You: "I have these technique IDs from my detection rules: T1059.001, T1059.003, T1547.001, T1053.005. 
      What's my coverage like?"

LLM uses: analyze_coverage(covered_ids=["T1059.001", "T1059.003", "T1547.001", "T1053.005"])

Returns:
{
  "total_techniques": 697,
  "covered_techniques": 4,
  "coverage_percentage": 1,
  "by_tactic": {
    "execution": { "total": 45, "covered": 2, "percentage": 4 },
    "persistence": { "total": 52, "covered": 2, "percentage": 4 },
    ...
  },
  "gaps": ["T1059.002", "T1059.004", ...]
}

生成覆盖导航层

You: "Generate a Navigator layer showing my coverage"

LLM uses: generate_coverage_layer(
  covered_ids=["T1059.001", "T1059.003", "T1547.001"],
  name="My Detection Coverage"
)

Returns: Navigator layer JSON (paste into https://mitre-attack.github.io/attack-navigator/)

与威胁组进行比较

You: "What APT29 techniques am I missing?"

LLM uses: 
1. get_group_techniques(group_id="G0016")  
2. find_group_gaps(group_id="G0016", covered_ids=[your techniques])

Returns: List of technique IDs APT29 uses that you don't have coverage for

生成差距分析层

You: "Show me a visual of my gaps against APT29"

LLM uses: generate_gap_layer(
  covered_ids=[your techniques],
  target_ids=[APT29 techniques],
  name="APT29 Gap Analysis"
)

Returns: Navigator layer showing green=covered, red=gaps

🔗 与安全检测MCP一起使用

此MCP可以与 安全检测mcp 创建完整的威胁检测工作流程:

MCP 目的
安全检测mcp 查询6500多条检测规则(Sigma、Splunk ESCU、Elastic)
米特攻击mcp 分析ATT&CK框架的覆盖范围

组合工作流示例

You: "What's my MITRE coverage based on my Splunk detections?"

LLM workflow:
1. Query detections-mcp → get_stats() to see total detections with MITRE mappings
2. Query detections-mcp → list_by_mitre_tactic("execution") to get technique coverage
3. Query mitre-attack-mcp → analyze_coverage(covered_ids) to analyze gaps
4. Query mitre-attack-mcp → generate_coverage_layer() to visualize

Result: Full coverage analysis with visual Navigator layer

兼容性说明:传递技术ID(Txxxx / Txxxx.xxx)在两个MCP之间进行最可靠的v19覆盖率分析。一些检测内容源和较旧的安全检测MCP输出可能仍使用ATT&CK v18策略名称或Navigator层版本;在v19中,企业版 defense-evasion 被分成 stealth 和 defense-impairment.

两者一起安装

将两者都添加到您的 ~/.cursor/mcp.json:

{
  "mcpServers": {
    "security-detections": {
      "command": "npx",
      "args": ["-y", "security-detections-mcp"],
      "env": {
        "SIGMA_PATHS": "/path/to/sigma/rules",
        "SPLUNK_PATHS": "/path/to/security_content/detections",
        "ELASTIC_PATHS": "/path/to/detection-rules/rules"
      }
    },
    "mitre-attack": {
      "command": "npx",
      "args": ["-y", "mitre-attack-mcp"],
      "env": {
        "ATTACK_DOMAIN": "enterprise-attack"
      }
    }
  }
}

导航器图层输出

JSON层与 ATT&CK 导航器:

{
  "name": "My Detection Coverage",
  "versions": { "attack": "19.1", "navigator": "5.1.0", "layer": "4.5" },
  "domain": "enterprise-attack",
  "techniques": [
    { "techniqueID": "T1059.001", "score": 100, "color": "#31a354", "comment": "Covered" },
    { "techniqueID": "T1059.003", "score": 0, "color": "#ff6666", "comment": "Gap" }
  ],
  "gradient": { "colors": ["#ff6666", "#fdae6b", "#31a354"], "minValue": 0, "maxValue": 100 }
}

要可视化:

  1. 首选https://mitre-attack.github.io/attack-navigator/
  2. 点击“打开现有图层”→ “从本地上传”
  3. 粘贴JSON

数据库

ATT&CK指数存储在 ~/.cache/mitre-attack-mcp/attack.sqlite.

  • 首次运行时自动从MITRE下载STIX数据
  • 缓存7天
  • 使用 rebuild_index() 强制刷新

统计数据(企业ATT&CK v19.x)

类型 计数
技术 222
子技术 475
战术 15
团体 174
软件 821
活动 56
缓解措施 44
数据组件 109

v19更改: 防御规避分为两种战术-- Stealth (TA0005)以及 Defense Impairment (TA0112)。MCP会自动检测v19之前的索引,并在下次启动时进行重建。以上计数是根据v19.1 Enterprise ATT&CK捆绑包进行验证的。 get_stats() 回报 data_components;老年人 data_sources 字段被保留为相同v19计数的兼容性别名。

发展

npm install
npm run build
npm start

# Or with watch mode
npm run dev

许可证

Apache 2.0