STRIDE GPT 是一款由 AI 驱动的威胁建模工具,利用大型语言模型(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 工作原理以及如何使用它来改进威胁建模的人来说,这个视频都是极好的资源。
analyze 现在会在 -o 报告旁边,对已批准的计划和每个完成的子系统发现进行检查点保存。--resume <checkpoint> 会复用已完成的子系统并重新运行其余部分,然后照常运行综合和数据流图。当目标的 git SHA 或配置哈希不再匹配时,恢复会拒绝执行,并指明是哪一项发生了变化,因此过期的发现不会被拼接进针对不同代码的运行中。工作树有未提交更改或缺少 git SHA 时会拒绝,除非使用 --force;SHA 发生变化时即使使用该选项也会拒绝。运行清单会记录哪些子系统被复用、哪些被重新运行。files_analyzed 反映智能体实际读取的内容,而非其声称读取的内容。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。<stem>.run.json 新增 token_usage_total、token_usage_by_phase 和 token_usage_by_subsystem。“未知”与零保持区分:某些提供商从不报告用量,因此全零读数会记录为不可用,而非免费。这些是 token 计数,不是成本:缓存命中和未命中 token 尚未拆分(#225),因此如果某提供商的大部分对话由其前缀缓存提供,其计费会远低于这些总量所暗示的数值。search_files 的截断标记不再像文件一样混入该列表。read_file 按行范围分页(关闭 #194):read_file 接受可选的从 1 开始的 start_line 和 end_line 参数,并在一个头部下返回带编号的行,该头部给出总行数、所显示的确切范围,以及字节上限是否将其截断。此前它只返回前 50 KB,别无其他,因此智能体无法读取超过该点的内容,也没有可引用的行号。当输出被截断时,会给出下一步应请求的行的提示。openrouter/ 前缀路由,使用 OPENROUTER_API_KEY 进行身份验证,提供六个支持工具的模型短名单,以及通过向导的 Custom 选项可用的任何其他 slug。目前仅限 CLI。同时修复:--worker-model 指定了已保存配置不认识的提供商时,会从该标志解析模型,但从配置文件解析 API 密钥,因此请求可能携带错误提供商的密钥(#222)。supports_thinking 现在跟踪哪些模型实际接受旧版扩展思考参数,因为 Claude 4.7 及更高版本会拒绝该参数,并且 Streamlit 的思考复选框跟随该标志而非提供商。read_file、grep_content 和 list_directory 会拒绝任何解析到 .git、.hg 或 .svn 内部的路径,无论是直接路径还是通过已提交的符号链接。actions/checkout 会将作业令牌写入 .git/config,并且某些克隆会在远程 URL 中嵌入令牌,因此分析 CI 检出会将凭据置于模型驱动读取的可及范围内。grep_content 此前也只检查其起始路径,然后读取 os.walk 返回的所有内容;现在它对每个文件应用相同的解析路径检查,与 read_file 保持一致。list_directory 在报告类型和大小时不再跟随符号链接逃出沙箱。plan.json、findings.json 和 run.json 时运行——此时每次 LLM 调用都已付费。现在脱敏是彻底的,无法解析的路径仍会被脱敏,而不是原样写出,因此主目录不会泄漏到要提交到 git 或工单的清单中。真正的磁盘和序列化故障仍会让运行大声失败。--version 标志(#161):stride-gpt --version 现在会打印已安装版本并退出,交互式 TUI 横幅会显示正在运行的版本,让您一眼就能确认所用版本。uv.lock 现在是所有依赖的唯一事实来源。重复的 requirements.txt 文件已退役;Docker UI 镜像和安全扫描工作流通过 uv export 从 uv.lock 安装,因此发布的内容和被扫描的内容不再可能与锁定的内容发生漂移。对 pip install stride-gpt 用户没有变化。