Hacks4Snacks/tmforge
GitHub: Hacks4Snacks/tmforge
tmforge 是一款开源、跨平台的「威胁建模即代码」工具,兼容微软 .tm7 格式,支持在浏览器、终端和 CI 中以代码方式编写、验证和报告威胁模型。
Stars: 0 | Forks: 0
# Threat Model Forge (`tmforge`)
**Microsoft Threat Modeling Tool 的开源、跨平台继任者:以代码的形式进行威胁建模,支持在你的浏览器、终端和 CI pipeline 中运行。**



[](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, 上游代理, 威胁建模, 安全合规与审计, 请求拦截