ayuksel-tenb/tenable-attack-mapper
GitHub: ayuksel-tenb/tenable-attack-mapper
将 Tenable Security Center 漏洞发现映射到 MITRE ATT&CK 框架的 MCP 服务器,支持通过 LLM 以自然语言分析暴露面并生成交互式可视化矩阵。
Stars: 0 | Forks: 0
# Tenable ATT&CK Mapper
一个 **MCP server**,用于将你的 **Tenable Security Center** 漏洞发现映射到 **MITRE
ATT&CK**,然后允许你要求你的 LLM (Claude Code) —— 使用自然语言 ——
通过任何战术或技术来分析你的暴露面。需要可视化吗?在浏览器中打开一个带有
**VPR 评分的 ATT&CK 矩阵**,点击任意技术即可查看其背后的漏洞,
每个漏洞都链接到其 Security Center 的详情页面。

## 快速开始
### 1. 安装 uv
**uv** 是一个快速的(基于 Rust)Python 包和虚拟环境管理器 —— 速度大约是
pip 的 8 倍,并且它会为你管理正确的 Python 版本。只需安装一次:
```
curl -LsSf https://astral.sh/uv/install.sh | bash
```
然后打开一个**新终端**,以便 `uv` 进入你的 PATH。在 Windows 上,请参阅
[uv 安装文档](https://docs.astral.sh/uv/)。
### 2. 安装工具
```
git clone https://github.com/ayuksel-tenb/tenable-attack-mapper
cd tenable-attack-mapper
uv venv && source .venv/bin/activate
uv pip install -e .
```
虚拟环境会保持依赖隔离(不会与 base/conda Python 发生冲突)。
在任何新终端中重新激活它(`source .venv/bin/activate`,或者在 Windows 上使用 `.venv\Scripts\activate`)。
### 3. 配置
```
cp .env.example .env
```
设置你的 Security Center URL 和密钥(`TSC_URL` / `TSC_ACCESS_KEY` / `TSC_SECRET_KEY`)。
这是唯一必需的配置 —— 语义映射通过你 **Claude Code 订阅** 中的本地 `claude`
CLI 运行(不需要 API key,也没有按 token 计算的成本),因此只需
确保 `claude` 在你的 PATH 中并已登录(`claude login`)。可选:调整
`TASC_CLAUDE_MODEL`(默认为 `claude-haiku-4-5`)和 `TASC_SEMANTIC_WORKERS`。
### 4. 将其连接到 Claude Code
从仓库文件夹中运行此命令(第 2 步已经将 server 安装到了 `.venv` 中):
```
claude mcp add --transport stdio tenable-attack-mapper -- "$(pwd)/.venv/bin/tenable-attack-mapper-mcp"
```
无需重复输入密钥 —— 即使 Claude
Code 从其他目录启动 server,它也会读取你在第 3 步中设置的 `.env`。然后 `/mcp` 应该显示它已**连接**。
### 5. 使用
在此文件夹中**打开 Claude Code** 并依次提问:
```
Open the attack matrix.
```
```
Map my environment and show the top techniques by VPR.
Which of my findings map to T1190 and T1059?
```
`Open the attack matrix` 会启动一个本地查看器并在你的浏览器中打开它 ——
技术根据 VPR 暴露程度进行着色;点击其中一项可查看其漏洞,每个漏洞都带有
一个 ⓘ 理由说明以及一个 **Open in SC** 的深层链接。
## 常见问题
**“Map my environment”实际上是做什么的,为什么第一次运行需要几分钟?**
它会 (1) 连接到你的 Security Center 并提取未解决的漏洞发现,(2) 确定性地将每项发现映射到
ATT&CK(CVE → CWE → CAPEC/ATT&CK —— 完全在本地进行),并且 (3) 对于其余的,
询问 Claude(通过本地 `claude` CLI)适用哪些技术。语义步骤会针对你包含 CVE 的漏洞发现运行
`claude`,进行批量并行处理 —— 对于大约 1000 条漏洞发现,这需要几分钟。结果会被缓存(`data/.semantic_cache.json`),
因此重新运行是即时完成的。
**提示:**在进行首次(冷缓存)同步时,请使用 **"Open the attack matrix"** 或 CLI
(`uv run tenable-attack-mapper run --out layer.json`),以便你可以观察进度 ——
之后 `Map my environment` 和其他提示将从缓存中即时返回。MCP
工具调用(如 `Map my environment`)会阻塞且没有进度条,因此在冷缓存情况下,
当它只是在映射时,可能会看起来卡住了几分钟。
**在执行 `claude mcp add` 之后,为什么它没有立即“连接”——它在等待什么?**
仅仅是等待 Claude Code 启动 server 并进行握手 —— 加载 Python
包并注册其 4 个工具需要几秒钟。它在连接时**不会**连接到
Security Center(这仅在运行工具时发生)。`/mcp` 应该会在几秒钟内显示它已连接;
如果持续时间较长,那只是 Python 导入正在预热,
而不是在等待你的 SC 或网络。
**有哪些数据离开了我的机器?我的 IP / 端口 / 主机名会被发送到任何地方吗?**
**没有任何识别主机的数据会离开你的机器。**对于语义步骤,本地
`claude` CLI 发送给 Anthropic 的唯一内容是通用的漏洞信息:
**插件 ID、插件名称、CVE ID 和插件描述**
(已截断) —— 所有这些都是公开的、供应商发布的数据。
**绝对不会发送:**IP 地址、端口、主机名、MAC 地址、资产/主机数量、
VPR 分数,或你的 Security Center URL 和 API 密钥。该工具甚至不会从
Security Center *获取* 主机/IP/端口字段 —— 它是基于每个插件而不是每个主机工作的。
**确定性映射是离线的吗?**
是的 —— 完全本地,没有网络调用,除非你选择启用实时的 NVD CVE → CWE 查找
(`TASC_USE_NVD=true`),该查找只会将 CVE ID 发送给 NVD。
**我的漏洞发现和 ATT&CK 层保存在哪里?**
完全保存在你的机器上。层 JSON 是在本地写入的,查看器在本地
容器中运行,并且 `layers/*.json` 已被 git 忽略,因此暴露数据永远不会被提交。
**它使用哪个 LLM,成本是多少?**
语义映射会通过 shell 调用本地的 **`claude` CLI**(默认模型
`claude-haiku-4-5`),费用通过你的 **Claude Code 订阅** 计费 —— 无需 API 密钥,也没有
按 token 计算的成本。调用是批量进行的,并行运行(`TASC_SEMANTIC_WORKERS`),并且
按插件缓存,因此对相同的漏洞发现重新运行是免费的。
## 重新开始
`./uninstall.sh` 会清除该工具在 Docker 中运行的所有内容 ——
attack-navigator 查看器/Navigator 容器、它们的镜像、网络和卷,
以及之前运行遗留的任何杂散容器。它的作用域由名称/镜像/compose
项目限定,因此不相关的容器(例如 Tenable SC 实验环境)永远不会受到影响。
**更多:**[映射工作原理](docs/mapping.md) · [CLI、OpenCode 和工具](docs/usage.md) ·
[查看器](https://github.com/ayuksel-tenb/attack-navigator) · 基于 MIT 许可证授权。
标签:BlazeGraph, Cloudflare, GPT, LLM集成, MCP, MITRE ATT&CK, Mutation, Tenable, 可视化, 漏洞管理, 请求拦截, 逆向工具