STRIDE GPT 是一款基于人工智能的威胁建模工具,它利用大型语言模型 (LLM),根据 STRIDE 方法论为给定应用程序生成威胁模型和攻击树。用户提供应用程序的详细信息,例如应用程序类型、身份验证方法、应用程序是否面向互联网或处理敏感数据。然后,模型会根据提供的信息生成输出。
如果您发现 STRIDE GPT 有用,请考虑支持该项目:
mitre_attack 属性形式呈现embed.diagrams.net 加载;对于自托管或离网部署,可通过 STRIDE_GPT_DRAWIO_URL 环境变量指向您自己的 draw.io 实例/analyze 命令在输出结果的同时也会生成系统级 DFD想要为您的组织定制 STRIDE-GPT?请查阅我们全面的运营指南,了解如何:
该指南包含逐步说明、代码示例以及面向希望在其团队中扩展 AI 驱动威胁建模的组织的部署模式。
2024 年 1 月,我在 Open Security Summit 上做了一个关于 STRIDE GPT 的演讲。在演讲中,我讨论了项目的起源、核心功能、近期更新以及一些未来计划。您可以在下面观看完整演示:
对于有兴趣了解 STRIDE GPT 工作原理以及如何利用它改进威胁建模的人来说,该视频是一个极好的资源。
--version 标志 (#161):stride-gpt --version 现在会打印已安装的版本并退出,交互式 TUI 横幅会显示正在运行的版本,以便您一目了然地确认当前版本。uv.lock 现在成为所有依赖项的单一事实来源。重复的 requirements.txt 文件已退役;Docker UI 镜像和安全扫描工作流通过 uv export 从 uv.lock 安装依赖,因此发布的内容和扫描的内容不再与锁定的内容产生偏差。pip install stride-gpt 用户无需更改。STRIDE_GPT_DRAWIO_URL 配置(默认为 embed.diagrams.net),iframe 的 postMessage 来源限定为该主机,不受信任的图表 XML 使用 defusedxml 进行解析。deepseek-v4-pro 和 deepseek-v4-flash。调用通过 LiteLLM 的原生 deepseek/ 集成路由(托管端点,无需自定义基础 URL);通过 DEEPSEEK_API_KEY 设置密钥。/analyze 代理在综合后也会生成系统级 DFD,在 Markdown 报告中以 Mermaid 块形式呈现,在 JSON data_flow_diagram 字段中携带,并通过 CDN 加载的 Mermaid 运行库在 HTML 视图中显示。DFD 生成经过包装,确保糟糕的图表不会导致好的报告失败。/analyze 和 /quick 发出的威胁现在可以携带来自 MITRE ATT&CK Enterprise (v17.1) 和 MITRE ATLAS (2026.05) 的标准化的对手技术 ID。两个新的渐进式披露参考卡(mitre_enterprise, mitre_atlas)指示代理仅使用目录中的 ID 和名称,消除了 ID 幻觉。参考卡通过 scripts/refresh_mitre_cards.py 从上游 STIX/YAML 重新生成,而不是通过模型回忆编写。技术 ID 在 Markdown 表格中呈现为 MITRE ATT&CK 列,在 HTML 中呈现为可点击的天蓝色药丸,在 SARIF 中呈现为 properties.mitre_attack 数组。/analyze 和 /quick 现在除了 Markdown / JSON / SARIF 输出外,还会生成一个独立的可在浏览器中查看的 HTML 报告,适合与利益相关者共享。claude-opus-4-8 的支持,这是 Anthropic 最新的前沿模型,与现有的 Opus 4.7 并存。两者均可选择作为架构师或工作模型。mrwadams/stridegpt-ui)已移除;Streamlit 网页 UI 现在仅位于 mrwadams/stridegpt。CLI 用户应通过 安装,而不是拉取容器。pip install stride-gpt 的 CLI 发布,与传统的 Streamlit 网页 UI 分离。两个主要命令:/analyze(自主代理式代码库分析,包含规划器、每个子系统的工具使用代理循环以及跨领域综合过程)和 /quick(根据书面应用程序描述进行单次威胁模型)。genai(OWASP LLM 十大)、agentic(OWASP ASI 十大)和 insider_threat 卡通过 YAML 前言进行自描述;代理通过 list_references 发现它们,并通过 load_reference 拉取正文。stride_gpt/__init__.py 中的 LiteLLM 日志级别提升为 ERROR,这样在缺少 botocore 的全新安装上,Bedrock/SageMaker 的预加载警告就不会出现。自主 AI 应用支持:新增对自主 AI 系统威胁建模的全面支持,集成了 OWASP 自主应用十大风险 (ASI01-ASI10)。只需选择“自主 AI 应用”并描述您的系统——LLM 会自动检测架构模式并应用相关威胁类别。每个 ASI 风险都被映射到相应的 STRIDE 类别,以实现一致的威胁分析。
生成式 AI 应用支持:新增对 GenAI 应用威胁建模的支持,集成了 OWASP LLM 十大风险 (LLM01-LLM10)。选择“生成式 AI 应用”并描述您的系统,即可获得定制的 LLM 特定威胁分析。自主 AI 应用同时包含 LLM 和 ASI 风险类别,以实现全面覆盖。
MAESTRO 启发的架构模式检测:增强了自主威胁分析,可根据应用描述自动检测架构模式,灵感来源于云安全联盟 MAESTRO 框架。LLM 现在能够识别并应用针对以下模式的特定威胁:
跨层威胁分析:威胁模型现在包含跨组件攻击链,展示一个架构层的妥协如何能够促成对其他层的攻击(例如,RAG 投毒 → 代理目标劫持 → 工具滥用 → 数据泄露)。
增强的改进建议:对于自主应用,改进建议现在提示输入具体的架构细节,例如代理框架、代理间通信协议、沙箱机制和断路器实现。
OpenAI 模型更新:更新至 GPT-5.2 系列模型(gpt-5.2, gpt-5.2-pro, gpt-5-mini, gpt-5-nano, gpt-5, gpt-4.1)。移除了已弃用的模型(gpt-4o, gpt-4o-mini, o3, o3-mini, o4-mini)。
Anthropic Claude 4.5 模型:更新至 Claude 4.5 系列(claude-sonnet-4-5, claude-haiku-4-5, claude-opus-4-5)。新增“启用扩展思维”复选框,可在任何 Claude 模型上启用增强推理能力。将最大令牌数增加至 32k(标准模式)和 48k(思维模式)。
Google Gemini 3 预览:新增 Gemini 3 预览模型(gemini-3-pro-preview, gemini-3-flash-preview),与 Gemini 2.5 模型并存。将扩展思维模式支持扩展至 Gemini 3 模型。
Mistral 模型更新:更新至最新版本化的 Mistral 模型,包括 Mistral Large 3、Medium 3.1、Small 3.2、Ministral 3 (8B/14B) 以及 Magistral 1.2 (Medium/Small)。
新项目标志:使用更简洁、极简的盾牌 + 神经网络设计,刷新了品牌形象。
错误修复:修复了点击下载按钮后威胁模型输出消失的问题。
pip install stride-gpt
这将安装 `stride-gpt` 命令。CLI 和 Streamlit 网页版现在是两个独立的产品——`pip install stride-gpt` 会给你一个轻量的 CLI,不包含 Streamlit 的痕迹。要从源码运行网页版,请参见下方的选项 2。
### 选项 2:从源码安装
1. 克隆仓库:
```bash
git clone https://github.com/mrwadams/stride-gpt.git
cd stride-gpt
```
2. 使用 [uv](https://docs.astral.sh/uv/) 安装(推荐——`uv.lock` 是依赖项的唯一真实来源): ```bash
# CLI plus the Streamlit web UI deps
uv sync
或者仅通过pip安装CLI: ```bash pip install -e .
3. (可选) 设置环境变量: ```bash
cp .env.example .env
编辑 .env 文件以添加你的 API 密钥 — 或者稍后通过运行 stride-gpt 并在交互式 REPL 中使用 /config 命令,或通过 Streamlit 用户界面进行配置。
Streamlit Web 用户界面以 Docker 镜像形式提供:```bash docker pull mrwadams/stridegpt:latest
对于 CLI,使用 `pip install stride-gpt` — 没有单独的 CLI 镜像。如果你需要一个沙盒化的 CLI,可以基于一个最小的 Python 基础镜像自行构建。
## 仓库布局
STRIDE-GPT 被组织为一个小型单体仓库:一个共享的 Python 库,以及一个或多个使用它的应用程序。```
stride-gpt/
├── stride_gpt/ # shared library + Python CLI (core, agent loop, prompts, schemas, models)
├── apps/
│ └── web/ # Streamlit web UI
├── tests/ # pytest suite
└── pyproject.toml # single project file; web UI deps live in the `web` dependency-group
apps/ 目录是可部署额外前端的位置 — 例如,未来的 Node/TypeScript CLI 将位于 apps/web/ 旁。Python CLI 本身保留在 stride_gpt/cli.py 中,因为它与共享库紧密耦合。
代理式代码库分析 — 代理自主探索代码库,规划分析路径,并生成 STRIDE 威胁模型:```bash
stride-gpt analyze .
stride-gpt analyze ./my-app --worker-model anthropic/claude-sonnet-4-6 -y
stride-gpt analyze . -o report.json -f json # also writes report.html alongside stride-gpt analyze . -o report.sarif -f sarif stride-gpt analyze . -o report.html -f html
> 每次分析还会自动将 JSON 和 HTML 配套文件保存到 `~/.stride-gpt/reports/analyze/`,因此即使在没有使用 `-o` 参数运行时,浏览器可查看的视图也只需一键即可访问。
> **关于成本的说明:** 代理分析非常彻底——代理在探索过程中会多次调用 LLM 并读取大量文件。令牌使用量和成本随代码库大小和所选模型而增加,在大型代码库上使用前沿模型进行完整运行可能费用高昂。在运行前请在提供商控制台中设置支出限制,并考虑在首次运行时使用更快/更便宜的模型。
**快速单次模式** — 从文本描述生成威胁模型(类似于 Streamlit UI,但在终端中):```bash
# Read description from a file
stride-gpt quick -i app-description.txt
# Pipe from stdin
echo "A web API that processes payments..." | stride-gpt quick
交互式REPL — 启动一个带有标签补全和历史记录的交互式会话:```bash stride-gpt
在 REPL 中输入 `/help` 可查看可用命令和标志。版本号显示在启动时的 ASCII 横幅下方。有关完整的命令和快捷键参考,请参阅下面的[交互式 REPL 速查表](#interactive-repl-cheat-sheet)。
#### 交互式 REPL 速查表
使用 `stride-gpt`(不带参数)启动 REPL,然后使用以下命令和快捷键。
**命令** — 在提示符下键入斜杠命令:
| 命令 | 功能 |
|---------|--------------|
| `/analyze [path]` | 分析代码库以发现 STRIDE 威胁(裸目录路径也可以) |
| `/quick` | 通过文本描述快速创建威胁模型 |
| `/reports` | 列出之前的分析报告(`/reports <n>` 查看一个) |
| `/config` | 查看或更改设置(模型、提供商、API 密钥) |
| `/help` | 显示可用命令、标志和示例 |
| `/quit` | 退出(别名:`/exit`、`/q`) |
`/analyze`、`/quick` 和 `/reports` 支持标志:`-o`/`--output <path>`、`-f`/`--format <markdown\|json\|sarif\|html>`、`-y`/`--yes` 和 `-i`/`--input <path>`(仅 `/quick`)。输入 `/help` 查看完整列表。
**键盘快捷键:**
| 键 | 动作 |
|-----|--------|
| `Tab` | 自动补全斜杠命令和文件路径 |
| `↑` / `↓` | 滚动浏览命令历史 |
| `→` / `End` | 接受灰色历史建议 |
| `Ctrl+L` | 清屏并清除回滚缓冲区 |
| `Ctrl+C` / `Ctrl+D` | 退出 REPL |
**检查已安装的版本:**```bash
stride-gpt --version # prints e.g. "stride-gpt 0.19.0" and exits
常用标志:
每个层级也接受 --worker-api-key / --worker-api-base / --worker-max-tokens(以及对应的 --architect-* 版本)。运行 stride-gpt analyze --help 或 stride-gpt quick --help 查看完整列表。
结构化中间文件 — 当使用 -o <路径> 时,会与报告一起生成三个 JSON 同宗文件,以便审计或供下游工具使用:
格式标志(-f)仅控制报告工件;同宗文件始终是 JSON。清单和发现中的文件路径会被脱敏(在工作目录下时显示为 ./…,在 $HOME 下时显示为 ~/…),因此清单可以安全分享。~/.stride-gpt/reports/{analyze,quick}/ 下的自动归档不受影响——只有在你传递 -o 时才会生成同宗文件。
查看以往报告:```bash stride-gpt reports # List recent reports stride-gpt reports 1 # View report #1 stride-gpt reports 1 -o r.json -f json # Export a report
### Streamlit Web UI
Web UI 是一个独立于 CLI 的应用。启动方式如下:
``````bash
streamlit run apps/web/main.py
在浏览器中打开提供的 URL 并按照屏幕上的步骤操作。
docker run -p 8501:8501 --env-file .env mrwadams/stridegpt
## 示例输出
每次 `stride-gpt analyze` 和 `stride-gpt quick` 运行默认会生成一份 markdown 报告(可通过 `-f` 选项输出 JSON、SARIF 及自包含的 HTML 视图)。该 markdown 报告按子系统以 STRIDE 表格形式对威胁进行分组,添加跨组件威胁的横切部分,并以运行摘要结尾。可选列(OWASP LLM/ASI、内部人员类别、MITRE ATT&CK)仅在运行时填充了相应数据时才会显示。
以下是对一个虚构支付 API 运行后生成的 markdown 示例,供你在运行工具前了解输出结构。该输出由报告引擎真实渲染,非模拟。
<details>
<summary>示例 markdown 威胁模型(点击展开)</summary>````markdown
# STRIDE Threat Model: acme-payments-api
> Generated by STRIDE-GPT on 2026-07-16T09:42:00Z
## Overview
A Python FastAPI service that accepts card payments, stores customer profiles in PostgreSQL, and calls a third-party payment processor. Authentication is handled by JWT bearer tokens issued by an internal auth service; the API is internet-facing behind an API gateway.
## Data Flow Diagram
```mermaid
flowchart LR
Client[Client App] -->|HTTPS + JWT| Gateway[API Gateway]
Gateway --> API[Payments API]
API -->|SQL| DB[(PostgreSQL)]
API -->|HTTPS| Processor[Payment Processor]
app/auth/jwt.pyapp/auth/dependencies.py| Threat Type | Scenario | Potential Impact | MITRE ATT&CK |
|---|---|---|---|
| Spoofing | An attacker forges a JWT using a weak or leaked signing secret to impersonate another customer. |
app/payments/routes.pyapp/db/models.py| Threat Type | Scenario | Potential Impact | MITRE ATT&CK |
|---|---|---|---|
| Information Disclosure | Full card numbers are logged in request debug logs when a payment fails. | PCI-DSS violation and exposure of cardholder data to anyone with log access. |
| Threat Type | Scenario | Potential Impact | MITRE ATT&CK | Affected Subsystems |
|---|---|---|---|---|
| Denial of Service | No rate limiting on the payment endpoint lets an attacker exhaust the processor quota and DB connections. | Legitimate payments fail during the attack; possible processor throttling. | T1499 (Endpoint Denial of Service) | Authentication & Authorization, Payments & Data Storage |
</details>
`stride-gpt quick` 从文字描述生成相同的表格结构,但折叠为一个单一的 **应用** 子系统,而不是按子系统分别展示发现。
## 安全最佳实践
STRIDE GPT 专为本地单用户部署设计。使用该工具时:
### 保护您的 API 密钥
**您的 API 密钥是敏感凭据,可能让您的账户产生费用。**
✅ **应做事项:**
- 通过 UI 输入 API 密钥(它们会保留在您的浏览器会话中)
- 在个人机器上使用 .env 文件以方便操作
- 在 LLM 提供商控制面板中设置消费限额
- 定期检查您的 API 使用情况和成本
- 在共享计算机上使用时清除会话
❌ **禁止事项:**
- 将 .env 文件提交到版本控制(已在 .gitignore 中排除)
- 分享显示 API 密钥的屏幕截图
- 在不受信任/已受损的系统上运行 STRIDE GPT
- 与他人共享您的 API 密钥
- 忽略意外的 API 费用
### 数据隐私注意事项
生成威胁模型时,STRIDE GPT 会将数据发送到您选择的 LLM 提供商:
- 应用详情(类型、身份验证方法、架构)
- 系统架构描述
- 上传的架构图/图像
- 生成的威胁模型和缓解措施
**这意味着:**
- OpenAI、Anthropic、Google 等可能会根据其隐私政策记录这些数据
- 在演示时考虑使用通用/虚构的系统详情
- 查看您的 LLM 提供商的数据保留和隐私政策
- 对于敏感系统,考虑以下做法:
- 使用本地模型(LM Studio)
- 使用隐私保证更严格的提供商
- 在输入前对系统描述进行脱敏处理
### 对于团队/组织部署
如果为多人部署 STRIDE GPT(非默认用例):
- 添加身份验证/授权(默认未包含)
- 使用密钥管理服务管理 API 密钥
- 部署在 VPN 或内部网络之后
- 查阅 [SECURITY.md](https://github.com/mrwadams/stride-gpt/blob/HEAD/SECURITY.md) 文档以获取更多注意事项
- 考虑数据驻留和合规性要求
- 对生成的威胁模型实施适当的访问控制
### 依赖安全性
我们维护依赖项并监控漏洞:
- 依赖项通过 Dependabot 定期更新
- 每次提交都会运行自动化安全扫描
- 安全公告在 GitHub 安全选项卡中跟踪
- 运行 `pip-audit` 检查本地已知漏洞
请参阅 [SECURITY.md](https://github.com/mrwadams/stride-gpt/blob/HEAD/SECURITY.md) 了解全面的安全信息,包括自动化安全扫描、漏洞报告和安全开发实践。
### 报告安全问题
发现安全问题?请负责任地报告:
- 通过 GitHub 的[私有漏洞报告](https://github.com/mrwadams/stride-gpt/security/advisories/new)创建安全公告
- 不要公开发布安全问题
- 我们将在 48 小时内确认
- 修复将优先处理并快速发布
## 贡献
欢迎提交拉取请求。对于重大更改,请先开启一个议题讨论您想要更改的内容。
## 许可证
[MIT](https://choosealicense.com/licenses/mit/)
/.git.../repo/.../repo.git/analyze 或 /quick 传递 -o <path> 时,JSON 同级文件将写入报告旁边——<stem>.plan.json(AnalysisPlan)、<stem>.findings.json(子系统发现、跨领域威胁和数据流图)以及 <stem>.run.json(一个 RunManifest,记录模型、配置哈希、版本、计时、实际加载的参考卡,以及一个标记运行是否完成或被调用上限截断的 run_summary)。清单排除 API 密钥和端点,并编辑文件系统路径,因此可以安全地提交或附加到工单中。-f 格式标志仅控制报告产物;同级文件始终为 JSON。MITRE_ATTACK 作为逗号分隔字符串返回时(例如 "T1190, T1059, AML.T0053"),而非规范的列表形状,技术 ID 现在将被恢复,而不是被丢弃。此前,Markdown/HTML 报告会显示“MITRE ATT&CK”列,但每个单元格都留空,SARIF 导出也会丢失 ID。所有渲染器(Markdown、HTML 药丸、SARIF)和列可见性检查现在都通过一个统一的正则表达式进行,非技术 ID 的自由格式文本会被过滤掉,因此该列不会再被误报填充。The api_key client option must be set 的错误。LM Studio 通过 LiteLLM 的 openai/ 前缀路由,而 OpenAI SDK 拒绝在没有密钥的情况下构建客户端,即使 api_base 指向 localhost,因此 CLI 现在为不进行身份验证的提供商传递一个占位符。相关地,工作层的最后手段环境扫描不再适用于这些提供商:之前配置的 ANTHROPIC_API_KEY 或 OPENAI_API_KEY 会被发送到 api_base 命名的任何主机,这既掩盖了此错误,又将真实密钥放在了线上。如果您使用 LM Studio 并设置了此类密钥,它不会再传输到您的端点。pip install stride-gptmistralai 包(Mistral 访问已通过 LiteLLM 实现)。刷新了 UI 镜像的 python:3.12-slim 基础镜像,并移除了 curl,消除了 PR #113–#115 中的 21 个中/高危 CVE 警报。except、死代码)(#116)。max_completion_tokens代替已弃用的max_tokens,确保与OpenAI最新API要求兼容。发布亮点:
此版本增加了对以下模型的支持:
发布亮点:
发布亮点:
发布亮点:
发布亮点:
发布亮点:
发布亮点:
发布亮点:
应用程序的初始版本。
| 标志 | 描述 |
|---|
--version | 打印已安装的版本(stride-gpt <version>)并退出 |
-o, --output | 将报告保存到文件 |
-f, --format | 输出格式:markdown(默认)、json、sarif、html |
-i, --input | 从文件读取应用描述(仅 quick) |
-y, --yes | 自动批准分析计划(仅 analyze) |
--worker-model | 处理大部分调用请求的默认层级模型(例如 anthropic/claude-sonnet-4-6)。省略时使用已保存的配置。 |
--architect-model | 用于规划/合成的更强模型(例如 openai/gpt-5.4)。省略时使用已保存的配置。 |
--no-architect | 本次运行跳过架构师层级;所有调用均由工作模型处理。 |
--app-type | 覆盖规划器检测的应用类型(仅 analyze):auto(默认),web,genai,agentic。 |
--max-llm-calls | 限制所有层级的 LLM 调用总数(仅 analyze;0 表示无限制)。 |
--max-tool-calls | 限制工具执行总次数(仅 analyze;0 表示无限制)。 |
| 文件 | 内容 |
|---|
<stem>.plan.json | 架构师生成的 AnalysisPlan——子系统、关注领域、检测到的应用类型(仅 analyze)。 |
<stem>.findings.json | 每个子系统的 SubsystemFinding 列表、跨领域威胁以及系统级数据流图(仅 analyze)。 |
<stem>.run.json | RunManifest——模型、提示+配置哈希、实际加载的代理引用、Git SHA、版本、时间信息。analyze 和 quick 均会生成。 |
| Full account takeover and unauthorized access to stored payment methods. |
| T1550.001 (Application Access Token) |
| Elevation of Privilege | A standard user calls an admin-only refund endpoint that only checks authentication, not role. | Unauthorized refunds and financial loss. | T1068 (Exploitation for Privilege Escalation) |
| T1552.001 (Credentials In Files) |
| Tampering | The payment amount is taken from a client-supplied field and not re-validated server-side against the order. | A user pays less than the order total by editing the request body. |