SMC17/sovereign-offense-harness
GitHub: SMC17/sovereign-offense-harness
一款以单一 Zig 二进制交付的轻量级对手模拟运行器,执行 TTP 测试并生成带哈希的结构化审计信封,为注重数据主权的小型紫队团队提供可组合的基础组件。
Stars: 1 | Forks: 0
# sovereign-offense-harness
[](https://github.com/SMC17/sovereign-offense-harness/actions/workflows/ci.yml) [](https://github.com/SMC17/sovereign-offense-harness/releases) [](LICENSE)
[](LICENSE)
[](https://ziglang.org/)
[Sovereign Stack](https://stax.dev/sovereign-stack) 的一部分。是
[`sentinel-sbom`](https://github.com/SMC17/sentinel-sbom) 和
[`sovereign-edge`](https://github.com/SMC17/sovereign-edge) 的
配套项目。
## 为什么会有这个项目
业内知名的对手模拟产品 —— AttackIQ、SafeBreach、XBOW、
MITRE Caldera、Red Canary 的 Atomic Red Team —— 解决的问题
与本项目大相径庭,其规模也完全不同。
- **Atomic Red Team** 是一个包含约 1,500+ 原子测试的*库*,并提供
PowerShell + 跨平台运行器。如果你需要全面的技术覆盖,
请使用 Atomic Red Team。本项目的 v0.3 版本可以通过
`--art` 标志读取 ART 的 YAML schema(实验性 —— 仅支持 bash/sh 执行器);
它并不替代 ART 的运行器。
- **MITRE Caldera** 是一个完整的代理编排框架:包含服务器、
代理、对手 playbook 和规划器。如果你需要多主机
编排,请使用 Caldera。
- **AttackIQ / SafeBreach** 是商业平台,拥有专有的
TTP 库、ML 评分和企业级 UI。如果你有
预算并希望获得 SOC 级别的报告,请使用它们。
本项目做的那些狭窄而具体的事情是其他产品没有的:在每次运行 TTP 时发出一个
*确定性结构*的 JSON envelope,封装在一个便于审计的单一
Zig 二进制文件中,除了构建时的 Zig 和运行时的 `bash` 之外,没有任何代理、服务器或运行时
依赖。当你正在构建一个小型、可审计的紫队飞轮,并且
希望运行器本身不会成为你供应链攻击面的一部分时,这会非常
有用。
它是一个基础组件,而不是一个平台。
## 演示
```
$ cat ttps/examples/t1082-system-information-discovery.json
{
"id": "T1082",
"name": "System Information Discovery",
"description": "Read /etc/os-release and uname output to fingerprint the host. MITRE ATT&CK T1082 — typically the first technique post-foothold.",
"platforms": ["linux"],
"exec": "uname -a; cat /etc/os-release 2>/dev/null || true",
"expected": {
"exit_code": 0,
"stdout_contains": "Linux",
"stdout_excludes": []
}
}
$ sovereign-offense-harness run --ttp ttps/examples/t1082-system-information-discovery.json
[PASS] T1082: System Information Discovery
envelope: envelopes/T1082-1778111282.json
duration: 12ms exit=0
$ jq < envelopes/T1082-1778111282.json
{
"schema": "sovereign-offense-harness/envelope/v1",
"ttp": {
"id": "T1082",
"name": "System Information Discovery",
"exec": "uname -a; cat /etc/os-release 2>/dev/null || true"
},
"execution": {
"started_at_unix": 1778111282,
"duration_ms": 12,
"exit_code": 0,
"stdout_bytes": 480,
"stderr_bytes": 0,
"stdout_sha256": "10f0d0d7b016cd94ab0d877015448ea88ad8cc1d7d7edbe2365b33cdef9c0afa",
"stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
"host": { "hostname": "edge" },
"verdict": "PASS"
}
```
## 真实对比
| | sovereign-offense-harness | Atomic Red Team | MITRE Caldera | AttackIQ |
|---|---|---|---|---|
| 目前的定位 | 小型 TTP 运行器 + envelope 写入器 | TTP 库 + 跨平台运行器 | 完整的代理编排框架 | 企业级平台 |
| TTP 库大小 | 2 个示例 TTP | ~1,500+ 原子操作 | ~600 个 abilities | 专有,未公开 |
| 运行时形态 | 单一 Zig 二进制文件 | PowerShell + 跨平台运行器;库本身是 YAML/JSON | 服务器 + 代理 + UI | 托管 SaaS + 代理 |
| 多主机编排 | 无 | 手动(在每台主机上运行) | 支持(内置代理框架) | 支持 |
| 自带 TTPs | 支持(JSON 描述符) | 支持(其自身的 schema) | 支持(abilities) | 大多为专有库 |
| 检测 / 蓝队集成 | envelope JSON 由你自己的流水线消费 | 无内置 | 报告 + 标签 | 企业级报告 |
| 开源协议 | AGPL | MIT | Apache 2.0 | 专有 |
| 成熟度 | v0.3,1 位作者,约 4 天的工作量 | 成熟,庞大的社区 | 成熟,MITRE 支持 | 成熟的商业产品 |
| 单一二进制供应链 | 是(Zig 二进制文件,无第三方运行时) | 否(需要 PowerShell 或运行器工具链) | 否(Python + Go + UI) | 不适用(云端) |
**目前的适用场景**:一个小型团队希望在隔离的实验室中运行少量
TTP,并捕获便于审计的 JSON envelope 供
蓝队评分。主要是一个构建块,而不是成品。
**不适用的场景**:任何需要广泛 TTP 覆盖、
多主机编排、代理框架或商业报告的场景 ——
请分别使用 Atomic Red Team、Caldera 或商业平台。
## 状态 — 已验证与未验证的内容
`v0.3.0` — 单一作者,约 4 天的工作量。约 1160 行 Zig 代码。
已可用的功能:
- `zig build` + `zig build test` 绿灯通过;18 个单元测试(TTP 解析器、
missing-id 拒绝、YAML 子集解析器、ART 适配器,以及一个端到端
的 ART 适配器测试)。
- 读取 JSON TTP 描述符,通过 `bash -c` 执行,捕获
stdout/stderr/exit/duration,使用 SHA-256 哈希每个数据流,
并将 JSON envelope 写入磁盘。
- 原生 JSON 格式中附带了两个示例 TTP,均特意设计为
只读枚举(T1018 `ip neigh show`,T1082 `uname -a`)。
- 在 `ttps/examples/art-t1082-system-info.yml` 中附带了一个 ART 原子示例。
- **v0.2 安全门**:除非 `--target ` 匹配
`~/sentinel-lab/lab-targets.txt` 中的白名单 CIDR/IP,或者
传入了 `--unsafe-local`,否则 `run` 将被拒绝。白名单支持 IPv4 CIDR + 裸 IP,
允许空行和 `#` 注释。拒绝时以退出码 3 退出并附带拒绝消息。
这同样适用于 `--art` 运行 —— 没有绕过的途径。
- **v0.3 `--art` 模式(实验性)**:树内最小化 YAML 子集
解析器(块映射/序列、纯文本/带引号标量、`|` 文字
块、`#` 注释、缩进跟踪嵌套 —— 不支持锚点、标签、flow
样式、多文档或制表符)以及一个 ART → Ttp 适配器。支持
`attack_technique`、`atomic_tests[]`、`supported_platforms`、
`input_arguments..default` 替换到 `#{var}` 中,以及
仅限 bash/sh 的 `executor.{command,name}`。选择器:`--art-test
first`(默认)、`--art-test index:N`、`--art-test name:`。
尚不可用的功能:
- **`--art` 是实验性的,并且对上述 YAML 子集是只读的。**
锚点、标签、flow 样式的 YAML、多文档流和制表符将被
拒绝。PowerShell / `command_prompt` 执行器会被拒绝
(返回 `UnsupportedExecutor`)而不是被静默错误执行。
`cleanup_command`、`dependencies` 和 `dependency_executor_name` 将被
忽略 —— 依赖前置条件的原子操作将在
shell 执行时报错。v0.4 计划推出 `--check-deps` 模式。
- **没有 envelope schema 验证器** —— envelope 中的 schema URI 是
写入器放入的任何内容。没有 schema 强制执行,除了“这是否是有效的 JSON”之外,
消费者端也没有验证器。
- **没有多主机编排** —— 明确超出了范围。
- **没有检测工程输出** —— Sigma 规则生成和
Velociraptor artifact 存根计划在 v0.4 推出。
- **没有“本地 LLM TTP 规划器”** —— 那是 v0.5+ 的画饼(vaporware);
没有设计,没有集成,没有可运行的代码。
- **白名单中的 IPv6** —— v0.3 仍然仅支持 IPv4。
路线图详见 [STATUS.md](STATUS.md)。请将版本号视为规划
标签,而非承诺。
## 安装
```
git clone https://github.com/SMC17/sovereign-offense-harness
cd sovereign-offense-harness
zig build # produces ./zig-out/bin/sovereign-offense-harness
```
## 使用
```
# 验证原生 TTP descriptor 的结构
sovereign-offense-harness validate ttps/examples/t1018-remote-system-discovery.json
# 运行原生 TTP — 将 envelope 输出至 envelopes/-.json
sovereign-offense-harness run --unsafe-local \
--ttp ttps/examples/t1082-system-information-discovery.json
# 自定义输出目录
sovereign-offense-harness run --unsafe-local \
--ttp my-ttp.json --out /var/lib/sentinel-lab/envelopes
# v0.3 实验性 — 运行 Atomic Red Team atomic-test YAML。
# 与 --ttp 互斥。适用相同的安全门控。
sovereign-offense-harness run --unsafe-local \
--art ttps/examples/art-t1082-system-info.yml
# 在 YAML 中选择特定的 atomic test(默认为第一个):
sovereign-offense-harness run --unsafe-local --art file.yml \
--art-test 'name:System Information Discovery — Linux uname / os-release'
sovereign-offense-harness run --unsafe-local --art file.yml --art-test index:1
```
## ⚠️ 安全须知 —— 运行前必读
TTP 的 `exec` 字段以调用用户身份通过 `bash -c` 运行。这里
没有沙箱。v0.2 增加了一个**默认拒绝的操作员失误门控**:
每次 `run` 都必须通过 `--target `(经白名单检查)或
`--unsafe-local` 显式确认目标。
**这是一个防误触门控,而不是对手门控。** 它能拦截
对错误主机的误操作 `run`;但它不会阻止
执意要运行不安全 TTP 的操作员 —— `--unsafe-local` 仅需添加
一个标志。诚实的说法是:它让失误变得显眼,而这种
显眼正是其目的。参见 [`THREAT_MODEL.md`](THREAT_MODEL.md)。
两种确认途径:
1. **`--target `** —— 在远程主机上运行。该 IP 必须在
实验室目标白名单文件中(默认为
`~/sentinel-lab/lab-targets.txt`,可通过 `--lab-targets
` 覆盖)。白名单支持 IPv4 CIDR 表示法和裸 IP;
空行和 `#` 注释将被忽略。目标 IP 会作为
`$TARGET` 暴露给 TTP,因此描述符可以编写 `ssh "$TARGET"
...` 的模式。
2. **`--unsafe-local`** —— 显式地在本地主机上运行。该
标志的名称本身就是警告:运行器会毫不犹豫地以调用用户身份执行
`exec`,且无法回滚。仅在
只读冒烟测试(附带的示例 T1018、T1082)或一次
性容器中使用。
如果没有提供这些标志之一,`run` 将以退出码 3 退出并显示拒绝消息。
```
$ sovereign-offense-harness run --ttp examples/t1082.json
error: refused by safety gate.
… (exits 3)
$ sovereign-offense-harness run --unsafe-local --ttp examples/t1082.json
[PASS] T1082: System Information Discovery
envelope: envelopes/T1082-…json
duration: 11ms exit=0
```
白名单文件格式:
```
# ~/sentinel-lab/lab-targets.txt
# IPv4 CIDR 或裸 IP;每行一个;支持 #-comments 和空行。
10.0.0.0/24
192.168.99.42
```
其他安全指引:
- 在运行之前阅读每个 TTP 的 `exec` 行。附带的
示例是特意设计的只读枚举;其他内容并不
隐含安全。
- 绝不要在生产环境中运行此工具。绝不。
- 不要将随机的 TTP 描述符从互联网通过管道输入此工具,就像
你不会把陌生人的 bash 脚本通过管道传递给 `sudo bash` 一样。
- **不要在 TTP 描述符的 `exec` 行中嵌入凭据。** 字面
`exec` 字符串将被原样捕获到 envelope JSON 中。
请使用环境变量(运行器已经暴露了 `$TARGET` ——
其他秘密也以同样的方式传递)。envelope 是取证
证据,而不是秘密存储库。
- **envelope 会以明文形式写入主机的 `hostname`。** 对于
防御实验室 / 私有目标的工作,请将 envelope 视为
会暴露主机名的工件。`--anonymize` 标志已列入 v0.4
路线图。
- **`--art` 默认运行文件中的第一个原子操作。** ART 文件
通常包含具有截然不同风险特征的多个变体。运行器在运行前
会将选定的原子操作 + 替换后的 exec 行回显到 stderr,因此你会看到
即将发生什么 —— 但请先阅读 YAML,并在文件包含
多个原子操作时显式传递 `--art-test `。
如果你现在需要一个久经沙场的对手模拟工具,请使用
Atomic Red Team 或 MITRE Caldera。这是一个处于
v0.2 阶段的个人项目;安全性设计尚算合理,但 TTP 库只有
两个示例。
## 路线图
- **v0.2** ✅ 已发布 —— sentinel-lab 集成:目标白名单
(除非是实验室 IP 否则默认拒绝)、`--unsafe-local` 确认标志、
拒绝时以退出码 3 退出。
- **v0.3** ✅ 已发布(实验性) —— Atomic Red Team YAML 适配器:
树内最小化 YAML 子集解析器 + ART → Ttp 适配器,`--art` /
`--art-test` 标志,仅限 bash/sh 执行器。批处理模式和
`--detect-only` 推迟到 v0.4。
- **v0.4** —— 从缺口中生成 Sigma 规则 + Velociraptor artifact;
envelope schema 验证器和消费者端检查器;ART 批处理模式
+ `--check-deps`。
- **v0.5+** —— 本地 LLM TTP 规划器(通过 shell 调用 Ollama / vLLM,为目标
资产清单选择 TTPs,发出可重放的 plan envelope)。
- **v1.0** —— 完整的 ATT&CK 覆盖,CI 矩阵,符合国防采购要求的
参考部署。
## 为什么构建它
2026 年的对手模拟是一个 SaaS 市场。AttackIQ、SafeBreach、XBOW
均按代理、按月、按环境收费。运行 TTP 并
捕获结果的实际技术*门槛很低 —— 不到 500 行
Zig 代码。大厂商的定价反映了打包 + 编排 + 分析师
UI 的成本,而不是底层技术。
如果你是一个注重主权、运行小型紫队飞轮的团队 ——
防御实验室、受欧盟监管的金融机构、受监管的医疗领域、大学
研究 —— 你不需要 SaaS。你需要的是一个紧凑的二进制文件,能够
运行确定性测试、捕获结构化证据,并与现有的
检测工程流水线组合使用。
这就是本项目。
## 许可证
AGPL-3.0-or-later。详见 [LICENSE](LICENSE)。
## 贡献
详见 [CONTRIBUTING.md](CONTRIBUTING.md)。要求使用签名提交。
安全披露:[SECURITY.md](SECURITY.md)。
## Sovereign Stack 的一部分
这是更广泛的“不租用,自己运行”基础设施集合中的一环。
- [**sovereign-edge**](https://github.com/SMC17/sovereign-edge) —— 将 Cloudflare 级别的边缘捆绑包作为可组合的 NixOS 模块提供
- [**sentinel-sbom**](https://github.com/SMC17/sentinel-sbom) —— Nix `flake.lock` → SPDX SBOM,带有树内 narHash 验证
完整项目组合请参见 [github.com/SMC17](https://github.com/SMC17)。
标签:Atomic Red Team, EDR验证, Homebrew安装, JSON封装, MITRE Caldera, Sovereign Stack, TTP执行器, Zig语言, 安全合规, 安全工具集合, 安全测试, 对手模拟, 应用安全, 攻击性安全, 数据展示, 数据泄露检测, 紫队, 紫队框架, 红队, 网络代理, 网络靶场