vecna-labs/open-range
GitHub: vecna-labs/open-range
OpenRange 是一个以清单为先的企业网络靶场,通过构建不可变快照并运行红蓝绿回合,解决静态任务训练效果弱的问题。
Stars: 3 | Forks: 0
OpenRange 是一个以清单为先的网络靶场,用于在
限定的企业世界中对红蓝方代理进行训练。
它将业务清单编译为世界,
使用私有参考追踪和确定性探针验证该世界,
将其冻结为不可变快照,并运行带有红、蓝、绿用户动态的回合。
此分支将 OpenRange 作为一个可安装的 Python 包和 CLI 公开。
它不是 `main` 中的遗留 OpenEnv 服务器/客户端堆栈。
### 📞 社区通话
我们每周 **周五中午 12:00(中部时间)** 举行 Open Range 社区通话。
- 🎥 [Google Meet](https://meet.google.com/zuj-skfh-xjk)
- 📱 拨入:[(US) +1 443-671-4919](tel:+14436714919) · PIN: `320 286 452#` · [更多号码](https://tel.meet/zuj-skfh-xjk?pin=6302524387334)
- 💬 [加入我们的 Discord](https://discord.gg/NuBpuCSN)
## 为何选择 OpenRange
静态网络任务对于评估很有用,但它们是较弱的训练目标。
它们是固定的、狭窄的、容易记住的,并且通常是纯进攻性的。
OpenRange 旨在实现相反的形式:一系列可重放、可在快照之间变异、并可用于运行时和训练数据生成的企业类世界。
| | 静态网络任务 | OpenRange |
|--|-------------------|-----------|
| **世界** | 一个固定的谜题 | 来自清单的准入企业世界 |
| **重置** | 再次相同的挑战 | 从池中加载存储的快照 |
| **验证** | 通常是手动或特定基准的 | 使用私有引用的确定性准入 |
| **角色** | 通常是纯红色 | 红色、蓝色和绿色共存于同一运行时 |
| **训练数据** | 外部转录或日志 | 来自准入快照的本地分支追踪 |
## 你可以做什么
- 从严格清单构建并准入世界
- 在不可变快照上运行红/蓝/绿回合
- 从训练池和评估池中采样快照
- 为训练生成本地分支追踪数据集
- 在运行时使用离线准入进行本地迭代,或在运行时使用 live 验证
Kind
- [架构](docs/architecture.md)
- [训练数据规范](docs/training-data-spec.md)
- [基准进攻覆盖](docs/benchmark-offensive-coverage.md)
- [效果接地](docs/effect-grounding.md)
- [弱点生命周期](docs/weakness-lifecycle.md)
- [NPC 配置文件](docs/npc-profiles.md)
## 快速开始
### 1. 安装
```
uv sync
uv run openrange --help
```
或直接安装软件包:
```
pip install .
openrange --help
```
### 2. 运行小型演示
这是在不设置 Kind 的情况下看到软件包端到端工作的最快方式:
Kind:
```
uv run openrange-demo
```
你也可以指向一个已提交的清单:
```
uv run openrange-demo --manifest manifests/tier1_basic.yaml
```
### 3. 本地准入快照
对于首次本地运行,请使用显式的离线配置文件:
```
uv run openrange admit \
-m manifests/tier1_basic.yaml \
-o /tmp/openrange-build \
--store-dir /tmp/openrange-snapshots \
--validation-profile graph_only
```
然后将运行时重置到已准入的快照:
```
uv run openrange reset \
--store-dir /tmp/openrange-snapshots \
--mode blue_only_live \
--sample-seed 7
```
`graph_only` 是最经济的离线路径。`full` 和 `graph_plus_live` 需要
一个基于 Kind 的实时环境。
### 4. 生成追踪数据
```
uv run openrange traces \
-m manifests/tier1_basic.yaml \
-o /tmp/openrange-traces \
--roots 3 \
--mutations 1
```
这将写入原始决策行、SFT 准备好的行,以及与已准入快照关联的小型数据集报告。
## Python API
```
from open_range import BuildConfig, BuildPipeline, EpisodeConfig, OpenRange, load_bundled_manifest
pipeline = BuildPipeline()
candidate = pipeline.build(
load_bundled_manifest("tier1_basic.yaml"),
"/tmp/openrange-build",
BuildConfig(validation_profile="graph_only"),
)
snapshot = pipeline.admit(candidate)
env = OpenRange()
state = env.reset(snapshot.snapshot_id, EpisodeConfig(mode="blue_only_live"))
decision = env.next_decision()
print(state.snapshot_id)
print(decision.actor, decision.obs.sim_time)
```
## 从这里开始
- [一个回合如何工作](docs/how-an-episode-works.md):运行时实战演练
- [架构](docs/architecture.md):软件包层级与运行时边界
- [V1 范围](docs/v1-paper-scope.md):产品与声明边界
- [训练数据规范](docs/training-data-spec.md):标准追踪/导出契约
- [弱点生命周期](docs/weakness-lifecycle.md):弱点实现、准入与变异
- [基准进攻覆盖](docs/benchmark-offensive-coverage.md):网页漏洞切片与目标接地
- [效果接地](docs/effect-grounding.md):接地效果与缓解语义
## 范围
当前分支专注于验证器准入的企业网络安全训练切片:
- 精确的 Web 漏洞以及配置、密钥、流程和遥测弱点
- 私有参考攻击与防御追踪
- 不可变快照及快照之间的变异
- 红色利用到目标的进攻行为
- 蓝色检测、遏制以及在绿色用户噪声下的连续性
它不会公开旧版公共黄金路径架构或 `main` 中的遗留 OpenEnv HTTP 服务器接口。
## 可选扩展
训练依赖项是可选的:
```
uv sync --extra training
```
该软件包还附带一个启动示例,用于比较廉价模拟平面追踪与运行时回合:
```
uv run openrange-bootstrap-demo
```
## 许可证
针对已准入快照及顺序变异的**环境端评估**:
```
uv run scripts/eval_rollouts.py \
--manifest manifests/tier1_basic.yaml \
--mutations 3 \
--out /tmp/openrange-rollout-eval.json
```
这将生成一个包含以下内容的 JSON 报告:
- 基础快照及顺序准入子世界
- 引导追踪胜者/回合数
- `joint_pool`、`red_only`、`blue_only_live` 和 `blue_only_from_prefix` 模式的运行时回滚结果
- 按模式汇总的整体胜率、奖励、连续性与回合数
## 追踪生成
针对与已准入快照及变异绑定的本地分支数据集:
```
uv run scripts/generate_traces.py \
--manifest manifests/tier1_basic.yaml \
--roots 3 \
--mutations 1 \
--outdir /tmp/openrange-traces
```
或通过 CLI:
```
openrange traces -m manifests/tier1_basic.yaml -o /tmp/openrange-traces --roots 3 --mutations 1
```
生成器还会写入角色/来源分片,例如:
- `sft_red_runtime.jsonl`
- `sft_blue_runtime.jsonl`
- `sft_red_all.jsonl`
- `sft_blue_all.jsonl`
## 实验性模型探针
这是一个可选的有界纯红色探针,用于加载小型 LoRA 适配器,并在每个运行时决策点对其进行评分。
它故意比完整策略评估更窄:它是
基于参考条件的纯红色,因为当前的小型引导数据集还不是完整的红/蓝运行时动作语料库。
```
uv run scripts/eval_model_rollouts.py \
--adapter /tmp/openrange-sft-tiny-split/adapter \
--manifest manifests/tier1_basic.yaml \
--mutations 3 \
--out /tmp/openrange-model-rollout.json
```
## 容器镜像
根 [Dockerfile](Dockerfile) 现在为独立软件包构建了一个 CLI 镜像:
```
docker build -t openrange .
docker run --rm openrange --help
```
## 验证
```
uv run -m pytest tests -q
```
## 开发检查
```
uv sync
uv run ruff format .
uv run ruff check .
uv run pytest
uv run pre-commit install
uv run pre-commit run --all-files
```
Apache 2.0
标签:OpenRange, Python包, TGT, 不可变快照, 企业仿真世界, 企业级网络训练, 冻结快照, 可回放世界, 开源网络靶场, 攻防演练, 文档结构分析, 清单编译, 清单驱动世界, 确定性探测, 私有参考跟踪, 红队蓝队训练, 绿色用户, 网络靶场平台, 自演进网络靶场, 训练数据生成, 请求拦截, 运行时红蓝绿, 逆向工具