
新发布Jul 19, 2026
stride-gpt v0.19.0
一款基于AI的威胁建模工具,利用OpenAI的GPT模型,根据STRIDE方法论为给定应用程序生成威胁模型。
STRIDE GPT 是一款由 AI 驱动的威胁建模工具,利用大型语言模型(LLM)基于 STRIDE 方法论为给定应用程序生成威胁模型和攻击树。用户提供应用程序详情,例如应用程序类型、身份验证方法,以及该应用程序是否面向互联网或处理敏感数据。随后,模型根据所提供的信息生成输出。
目录
支持本项目
如果您觉得 STRIDE GPT 有用,请考虑支持本项目:
- ⭐ 在 GitHub 上为本仓库加星,帮助更多人发现该工具
- ☕ 请我喝杯咖啡,以支持持续的开发与维护
功能特性
- 智能体式代码库分析:将 CLI 指向一个代码库,即可获得自主、深入的 STRIDE 威胁模型——智能体会规划、探索并综合各子系统的发现
- CLI 与交互式 REPL:功能完备的终端体验,支持 Tab 补全、历史记录和实时进度——无需浏览器
- 简单易用的 Streamlit Web 界面
- 基于 STRIDE 方法论生成威胁模型
- 智能体式 AI 支持:针对智能体式 AI 系统的专门威胁建模,集成 OWASP 智能体应用十大风险(ASI)
- 生成式 AI 支持:针对 GenAI 应用程序的威胁建模,集成 OWASP LLM 十大风险
- MITRE ATT&CK 与 ATLAS 映射:威胁会标注标准化的对手技术 ID(传统基础设施攻击使用 MITRE ATT&CK Enterprise,ML/LLM 特定攻击使用 ATLAS)——在 markdown 中呈现为列,在 HTML 中呈现为带链接的标签,在 SARIF 中呈现为
mitre_attack属性 - 架构模式检测:从应用程序描述中自动检测 RAG 流水线、多智能体系统、代码执行环境、工具生态系统等(灵感来自 CSA MAESTRO)
- 内嵌 draw.io 图表编辑器:使用集成的 diagrams.net 编辑器直接在 STRIDE-GPT 中创建和编辑架构图——无需外部工具。图表以 XML 形式解析,以提取组件、连接和信任边界,相比仅靠图像分析,可为威胁模型生成提供丰富得多的上下文。现有的图像上传工作流保持不变。默认情况下,编辑器从托管的
embed.diagrams.net加载;对于自托管或气隙部署,可通过STRIDE_GPT_DRAWIO_URL环境变量将其指向您自己的 draw.io - 多模态:在所有支持视觉能力的模型上,使用架构图、流程图等作为威胁建模的输入
- 数据流图:根据您的应用程序描述生成 DFD(或解析上传的 DFD 图像),实时编辑 Mermaid 源码,并将确认后的图表作为权威系统模型反馈到威胁模型和攻击树提示词中。CLI 的
/analyze还会在输出发现的同时生成系统级 DFD - 生成攻击树以枚举可能的攻击路径
- 为已识别的威胁建议可能的缓解措施
- 支持对已识别威胁进行 DREAD 风险评分
- 基于已识别的威胁生成 Gherkin 测试用例
- GitHub 仓库分析,用于全面的威胁建模(包括 GitHub Enterprise 支持)
- 多种输出格式:Markdown、JSON、SARIF(可导入 GitHub、GitLab、Azure DevOps、IDE),以及用于与利益相关者分享的自包含 HTML 视图
- 支持高级推理模型(OpenAI GPT-5.4/5.5 系列、Anthropic Claude 4.6/4.8 及扩展思考、Google Gemini 3、Mistral Magistral 系列)
- 通过 LiteLLM 提供全面的 LLM 提供商支持:OpenAI、Anthropic、Google AI、Mistral、Groq、DeepSeek,以及通过 LM Studio Server 进行本地托管
- 不存储数据;应用程序详情不会被保存
- 提供 Docker 容器镜像,便于部署
- 支持环境变量以实现安全配置
企业部署
想为您的组织定制 STRIDE-GPT?请查看我们的综合运营化指南,了解如何:
- 🎯 注入组织安全控制与标准
- 📋 根据您的合规要求定制威胁模型
- 🔧 在内部复刻并部署 STRIDE-GPT
- 📊 获取针对您环境的上下文感知、可操作的威胁模型
该指南包含分步说明、代码示例和部署模式,适合希望在团队中规模化推广 AI 驱动威胁建模的组织。
在 Open Security Summit 上的演讲
2024 年 1 月,我在 Open Security Summit 上做了一场关于 STRIDE GPT 的演讲。在演讲中,我讨论了该项目的起源、核心功能、近期更新以及一些未来计划。您可以在下方观看完整演讲:
对于任何有兴趣了解 STRIDE GPT 工作原理以及如何使用它来改进威胁建模的人来说,这个视频都是极好的资源。
更新日志
版本 0.20(最新)
- 恢复被中断的分析(关闭 #197):
analyze现在会在-o报告旁边,对已批准的计划和每个完成的子系统发现进行检查点保存。--resume <checkpoint>会复用已完成的子系统并重新运行其余部分,然后照常运行综合和数据流图。当目标的 git SHA 或配置哈希不再匹配时,恢复会拒绝执行,并指明是哪一项发生了变化,因此过期的发现不会被拼接进针对不同代码的运行中。工作树有未提交更改或缺少 git SHA 时会拒绝,除非使用--force;SHA 发生变化时即使使用该选项也会拒绝。运行清单会记录哪些子系统被复用、哪些被重新运行。 - 威胁引用经过验证的证据(关闭 #195):现在每个威胁都通过一次工具调用报告,并携带其来源代码,且在记录威胁之前,每个引用的代码片段都会与磁盘上的文件进行核对。SARIF 位置指向发现证据的文件和行范围,而不是给某个子系统中的每个威胁都赋予相同的三个文件,并且
files_analyzed反映智能体实际读取的内容,而非其声称读取的内容。 - 每个子系统都会记录其停止原因(关闭 #196):
SubsystemFinding现在携带一个outcome——completed、budget_exhausted、parse_failed、error或skipped——因此崩溃的子系统不再与已分析但未发现任何问题的子系统无法区分。发现始终与计划匹配:运行预算从未触及的子系统会被记录为skipped,而不是被丢弃。run_summary.status由这些结果推导而来,因此子系统崩溃的运行会被报告为partial而非completed,并且一个零威胁的干净子系统不再会让控制台打印“Analysis partially complete”。失败根据异常类型(context_overflow、rate_limited、auth、provider_error)进行分类,而不是通过搜索错误文本来判断,并且 markdown 和 HTML 报告会明确显示失败和跳过的子系统。在此更改之前写入的发现文件仍可加载,并被视为completed。 - 按阶段和按子系统记录 token 用量(#198):从每个提供商响应中读取提示词和补全 token,并按阶段(规划、探索、压缩、综合、DFD)、按子系统以及运行总量进行汇总。控制台摘要新增一行 token 信息,
<stem>.run.json新增token_usage_total、token_usage_by_phase和token_usage_by_subsystem。“未知”与零保持区分:某些提供商从不报告用量,因此全零读数会记录为不可用,而非免费。这些是 token 计数,不是成本:缓存命中和未命中 token 尚未拆分(#225),因此如果某提供商的大部分对话由其前缀缓存提供,其计费会远低于这些总量所暗示的数值。 - 规划器能代表它发现的每个目录(#175,关闭 #180):发送给规划器的关键文件样本是按字母顺序的扁平切片,因此一个排序靠前的目录可能消耗掉整个预算,而排序靠后的服务到达规划器时完全没有文件级信号。在 OWASP crAPI 上,这导致六个服务中有两个完全从计划中消失,而运行仍报告为完成。现在样本会在整个目录树中轮询,无论深度如何,并且其头部会说明这是一个样本,而不是在静默截断的列表上报告总数。
search_files的截断标记不再像文件一样混入该列表。 read_file按行范围分页(关闭 #194):read_file接受可选的从 1 开始的start_line和end_line参数,并在一个头部下返回带编号的行,该头部给出总行数、所显示的确切范围,以及字节上限是否将其截断。此前它只返回前 50 KB,别无其他,因此智能体无法读取超过该点的内容,也没有可引用的行号。当输出被截断时,会给出下一步应请求的行的提示。- OpenRouter 作为模型提供商(#221):通过 LiteLLM 的
openrouter/前缀路由,使用OPENROUTER_API_KEY进行身份验证,提供六个支持工具的模型短名单,以及通过向导的 Custom 选项可用的任何其他 slug。目前仅限 CLI。同时修复:--worker-model指定了已保存配置不认识的提供商时,会从该标志解析模型,但从配置文件解析 API 密钥,因此请求可能携带错误提供商的密钥(#222)。 - 模型注册表已刷新(#223):更新了 OpenAI、Anthropic、DeepSeek、Mistral、Groq、Google 和 OpenRouter 的当前阵容,并移除了已退役的模型。
supports_thinking现在跟踪哪些模型实际接受旧版扩展思考参数,因为 Claude 4.7 及更高版本会拒绝该参数,并且 Streamlit 的思考复选框跟随该标志而非提供商。 - 安全:智能体的文件工具不再能触及版本控制元数据(#191、#190):
read_file、grep_content和list_directory会拒绝任何解析到.git、.hg或.svn内部的路径,无论是直接路径还是通过已提交的符号链接。actions/checkout会将作业令牌写入.git/config,并且某些克隆会在远程 URL 中嵌入令牌,因此分析 CI 检出会将凭据置于模型驱动读取的可及范围内。grep_content此前也只检查其起始路径,然后读取os.walk返回的所有内容;现在它对每个文件应用相同的解析路径检查,与read_file保持一致。list_directory在报告类型和大小时不再跟随符号链接逃出沙箱。 - 格式错误的模型输出不再能破坏运行的中间产物(关闭 #208):规划器提供的文件路径中的空字节会使路径脱敏崩溃,而该过程在持久化
plan.json、findings.json和run.json时运行——此时每次 LLM 调用都已付费。现在脱敏是彻底的,无法解析的路径仍会被脱敏,而不是原样写出,因此主目录不会泄漏到要提交到 git 或工单的清单中。真正的磁盘和序列化故障仍会让运行大声失败。 - 供应链与扫描卫生(#176、#177):通过 lockfile 更新 gitpython、aiohttp 和 cryptography,清除了 22 个 Dependabot 警报;减少了 Trivy 基础镜像噪音,这些噪音此前掩盖了可操作的发现;并清除了剩余的 18 个 CodeQL 代码质量发现。计划中的机密扫描不再因模型标识符而失败,CI 安全摘要报告的图标会跟随作业结果。
版本 0.19
--version标志(#161):stride-gpt --version现在会打印已安装版本并退出,交互式 TUI 横幅会显示正在运行的版本,让您一眼就能确认所用版本。- 依赖管理统一到 uv(关闭 #155):
uv.lock现在是所有依赖的唯一事实来源。重复的requirements.txt文件已退役;Docker UI 镜像和安全扫描工作流通过uv export从uv.lock安装,因此发布的内容和被扫描的内容不再可能与锁定的内容发生漂移。对pip install stride-gpt用户没有变化。 - 文档:在 README 中新增了示例威胁模型 markdown 输出(#151)和交互式 REPL 速查表(#163)。
