Hacks4Snacks/tmforge

GitHub: Hacks4Snacks/tmforge

tmforge 是一款开源、跨平台的「威胁建模即代码」工具,兼容微软 .tm7 格式,支持在浏览器、终端和 CI 中以代码方式编写、验证和报告威胁模型。

Stars: 0 | Forks: 0

# Threat Model Forge (`tmforge`) **Microsoft Threat Modeling Tool 的开源、跨平台继任者:以代码的形式进行威胁建模,支持在你的浏览器、终端和 CI pipeline 中运行。** ![.NET 10](https://img.shields.io/badge/.NET-10-512BD4?logo=dotnet&logoColor=white) ![平台: Linux · macOS · Windows](https://img.shields.io/badge/platforms-Linux%20%C2%B7%20macOS%20%C2%B7%20Windows-2b90d9) ![架构: x64 · arm64](https://img.shields.io/badge/arch-x64%20%C2%B7%20arm64-2b90d9) [![许可证: MIT](https://img.shields.io/badge/license-MIT-green)](LICENSE.md) Microsoft Threat Modeling Tool (MTMT) 仅限 Windows 平台且仅支持 GUI,无法在 pipeline 中运行。 Threat Model Forge 保留了其文件格式,能够**逐字节无损地**读取和写入 `.tm7` 文件,并摒弃了其他所有限制:你可以通过浏览器 Studio 或无头 CLI 编写模型,像对待源代码一样对它们进行 diff 和 merge,根据**内置的安全与规范规则**对它们进行验证,并以此作为构建的门槛。无需 Windows,也无需 GUI。 **立即体验,无需安装:** 完整的编辑器和验证引擎在客户端(WebAssembly)运行,访问 **[hacks4snacks.github.io/tmforge](https://hacks4snacks.github.io/tmforge/)**。你的模型绝不会 离开当前页面。 ## 为什么选择 tmforge - **你现有的模型可以直接使用。** 无损、逐字节的 `.tm7` 兼容性意味着模型 可以在 tmforge 和 MTMT 之间零差异地迁移;迁移过程就是打开文件这么简单。 - **威胁建模即代码。** 模型像其他所有内容一样存在于 git 中:支持语义化的 `diff`、三方 `merge` 驱动程序、声明式 `apply`/`export` manifest,以及每个命令都带有稳定且版本化 envelope 的 `--json` 输出,专为脚本、pipeline 和 AI agent 设计。 - **CI 级别的验证。** 包含针对核心规范、STRIDE 完整性、输入验证、数据保护、传输安全以及身份与访问的规则包,并提供 SARIF + HTML 报告,以及一个用于“发现问题”的独立退出代码,让你可以为构建设置门禁。 - **一个引擎,三种驱动方式。** 包括基于 React 的浏览器 **Studio**、可编写脚本的 **CLI** 以及版本化的 **HTTP API**,它们都基于相同的规范 `.tm7` 形态模型。 - **多格式支持。** 除了 `.tm7` 和规范的 JSON 传输格式外,还支持导入/导出 **draw.io** 和 **Visio** (`.vsdx`)。 - **零运行时安装。** 为六大平台提供独立的单文件二进制程序,或使用单个容器来运行 API + Studio。 ## 试用 **在浏览器中(无需安装):** 打开 **[hacks4snacks.github.io/tmforge](https://hacks4snacks.github.io/tmforge/)** 并开始绘制。 **自行托管:** 运行已发布的 engine API + Studio 镜像(或 [自行构建](#containers)): ``` docker run --rm -p 8080:8080 ghcr.io/hacks4snacks/tmforge # then open http://localhost:8080/ ``` **在终端中:** 将 `tmforge` 加入你的 `PATH`(参见 [安装](#install)): ``` tmforge new payments.tm7 --name "Payments" tmforge add process payments.tm7 --name "Checkout API" tmforge add store payments.tm7 --name "Orders DB" tmforge add boundary payments.tm7 --name "Azure VNet" tmforge lint payments.tm7 # validate: exits 2 on findings, CI-ready tmforge report payments.tm7 --out payments.html ``` 刚接触?从[快速入门](docs/quickstart.md)开始。从 MTMT 迁移过来?你的 `.tm7` 文件 可以直接打开;请参阅[格式与互操作性](docs/formats.md)。 ## 主要功能 - **编写和编辑** 浏览器中的数据流图(React **Studio** 单页应用):添加 进程、外部实体、数据存储和信任边界;绘制数据流;调整连接器的大小和 弯曲度;跨多个页面组织模型。 - **通过无头方式编写**,使用 CLI(`new`、`add`、`connect`、`set` 等)或 API,让 agent 和 pipeline 无需 GUI 即可构建模型。 - **无损读取和写入 `.tm7`**,与 MTMT 逐字节兼容。 - **像代码一样进行版本控制**:支持语义化的 `diff`、三方 `merge`,以及用于将两者接入 代码仓库的 `git-setup`,此外还有用于可重现模型的声明式 `apply`/`export` manifest。 - **转换** `.tm7`、`tmforge-json`、draw.io 和 Visio 之间的格式。 - **生成报告** 为自包含的 HTML(包含内联 SVG 图表),或者直接在你的终端中 `render`(渲染)图表。 - **在 CI 中进行验证**,使用 `tmforge` CLI(`tmforge lint`),根据 SARIF 报告的 发现结果为构建设置门禁。 ## 文档 完整的用户文档位于 [`docs/`](docs/README.md): - [概述与功能](docs/overview.md) · [快速入门](docs/quickstart.md) · [安装指南](docs/installation.md) - [CLI 参考](docs/cli-reference.md) · [Studio 指南](docs/studio-guide.md) · [Engine API 参考](docs/api-reference.md) - [格式与互操作性](docs/formats.md) · [验证规则与 CI](docs/validation-rules.md) · [部署指南](docs/deployment.md) ## 安装说明 预构建的、**自包含的** `tmforge` 二进制文件(主机上不需要安装 .NET 运行时)已作为 每个 GitHub Release 的附件发布,适用于六大平台: | 操作系统 | x64 | arm64 | | ------- | -------------------------------- | ---------------------------------- | | Linux | `tmforge--linux-x64.tar.gz` | `tmforge--linux-arm64.tar.gz` | | macOS | `tmforge--osx-x64.tar.gz` | `tmforge--osx-arm64.tar.gz` | | Windows | `tmforge--win-x64.zip` | `tmforge--win-arm64.zip` | ``` # Linux/macOS (调整 OWNER/REPO、version 和 RID) curl -fsSL -o tmforge.tar.gz \ https://github.com/hacks4snacks/tmforge/releases/download/v0.1.0/tmforge-0.1.0-linux-x64.tar.gz tar -xzf tmforge.tar.gz ./tmforge-0.1.0-linux-x64/tmforge --version ``` 每个版本还会附带 `checksums.txt` (SHA-256) 和 `release-metadata.json`;使用 `sha256sum -c checksums.txt` 进行验证。 **平台说明。** Linux 二进制文件基于 **glibc** 基准(而非 musl/Alpine)。macOS 二进制文件 **未经过代码签名或公证**。首次运行前请清除隔离属性: ``` xattr -d com.apple.quarantine ./tmforge ``` 更倾向于基于运行时的安装方式?请使用[容器镜像](#containers)或与 RID 无关的 全局工具(`dotnet pack -p:PackTools=true`)。 ## 构建与测试 需要 [`global.json`](global.json) 中指定的 .NET SDK。 ``` dotnet build dirs.proj dotnet test dirs.proj --no-build ``` 构建系统使用 MSBuild + `Microsoft.Build.Traversal`;集中的包版本信息位于 [`Directory.Packages.props`](Directory.Packages.props) 中;共享构建设置位于 [`Directory.Build.props`](Directory.Build.props) 中。输出会生成到 `out/-/`。 ## 容器 从 GitHub Container Registry 拉取已发布的多架构镜像: ``` # Engine API + Studio SPA (React):/v1 API 在 / 提供该 SPA docker run --rm -p 8080:8080 ghcr.io/hacks4snacks/tmforge # -> http://localhost:8080/ # CLI tool docker run --rm -v "$PWD:/work" ghcr.io/hacks4snacks/tmforge-cli tmforge lint model.tm7 ``` 已发布的标签包括 `latest`、发布版本(例如 `0.1.0`)、`0.1` 以及 `edge`(最新的 `main`)。想在本地构建? ``` docker build -f build/Dockerfile.api -t tmforge . # API + Studio docker build -f build/Dockerfile -t tmforge-cli . # CLI ``` 两个 Dockerfile 都从代码仓库根目录开始构建,并针对真实的 `src/` 目录结构。 ## 仓库结构 ``` docs/ Project documentation build/ Dockerfile (CLI) + Dockerfile.api (engine API + Studio SPA) src/ libraries, the `tmforge` CLI, the engine API, and the React Studio SPA test/ one *.Tests project per shipping library ``` `ThreatModelForge.slnx` 为 IDE 用户列出了每个项目;构建由 `dirs.proj` (`Microsoft.Build.Traversal`)驱动,它会分发任务到 `src/dirs.proj` 和 `test/dirs.proj`。 ## 许可证 [MIT](LICENSE.md)。
标签:AI工具, DevSecOps, WebAssembly, 上游代理, 威胁建模, 安全合规与审计, 请求拦截