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 的详情页面。 ![Tenable → ATT&CK 暴露矩阵:ATT&CK 战术中的各项技术,根据 VPR 暴露程度进行着色,并显示每项技术的漏洞数量。](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/efd989374f095153.png) ## 快速开始 ### 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, 可视化, 漏洞管理, 请求拦截, 逆向工具