Aaron Brown commited on
Commit
5ef50e5
Β·
1 Parent(s): 018fa0c

Enterprise network topology ranges

Browse files
Files changed (1) hide show
  1. README.md +186 -77
README.md CHANGED
@@ -1,6 +1,6 @@
1
  # OpenRange
2
 
3
- **Multi-agent cyber gymnasium with real containers, golden-path validation, and self-evolving infrastructure.**
4
 
5
  The first cybersecurity environment in the [OpenEnv](https://github.com/meta-pytorch/OpenEnv) ecosystem.
6
 
@@ -8,28 +8,31 @@ The first cybersecurity environment in the [OpenEnv](https://github.com/meta-pyt
8
 
9
  ## What is this?
10
 
11
- OpenRange drops Red and Blue agents into a **real Docker network** β€” web apps, databases, firewalls, and all β€” then lets them fight. An LLM Builder generates the vulnerable infrastructure. A Validator confirms it's actually exploitable. And on every `reset()`, the Builder **mutates** the range with entirely different vulnerabilities, so agents can never memorize their way to victory.
12
 
13
  ```
14
  You write a YAML manifest describing what you want:
15
- "2 hosts, DMZ network, web app with database, medium difficulty"
 
16
 
17
  The Builder LLM generates it:
18
- Real nginx + PHP app -> Real MySQL with flags -> Real firewall rules -> Golden path
 
 
19
 
20
  The Validator confirms it works:
21
  LLM review + 7 scripted checks including inverse mutation testing
22
 
23
- Red attacks. Blue defends. Reset. New vulns. Repeat.
24
  ```
25
 
26
  ## Three Roles
27
 
28
  | Role | What it does | Entry point |
29
  |------|-------------|-------------|
30
- | **Builder** | Generates and mutates vulnerable infrastructure from YAML manifests | LLM + templates |
31
- | **Red** | Attacks live containers. Captures flags. | External -- no creds, no access |
32
- | **Blue** | Defends via log analysis, patching, firewalling. | Internal -- monitor host |
33
 
34
  Red and Blue operate on the **same infrastructure simultaneously**. Red's stealth reward depends on whether Blue catches them. Blue's detection reward depends on Red's actual actions in the logs.
35
 
@@ -37,7 +40,7 @@ Red and Blue operate on the **same infrastructure simultaneously**. Red's stealt
37
 
38
  ```mermaid
39
  flowchart TD
40
- A[YAML Manifest<br/>Human-authored topology + vuln slots] --> B[Builder LLM<br/>Generates configs, plants vulns, writes golden path]
41
  B --> C{Hybrid Validator}
42
  C -->|Phase A| D[LLM Review<br/>Exploitability, alignment, difficulty]
43
  C -->|Phase B| E[7-Check Scripted<br/>Services, flags, isolation,<br/>golden path, inverse mutation]
@@ -45,10 +48,10 @@ flowchart TD
45
  E --> F
46
  F -->|Yes| G[OpenEnv Server<br/>FastAPI: /reset, /step, /state, /ws]
47
  F -->|No| B
48
- G --> H[Red Agent<br/>nmap, curl, exploit, submit_flag]
49
- G --> I[Blue Agent<br/>tail_log, grep, patch, iptables]
50
- G --> J[NPC Traffic<br/>Background noise]
51
- H --> K[(Docker Containers<br/>web, db, monitor)]
52
  I --> K
53
  J --> K
54
 
@@ -59,6 +62,66 @@ flowchart TD
59
  style K fill:#7c73e6,color:#fff
60
  ```
61
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  ## Episode Lifecycle
63
 
64
  ```mermaid
@@ -67,9 +130,7 @@ sequenceDiagram
67
  participant E as OpenEnv Server
68
  participant B as Builder LLM
69
  participant V as Validator
70
- participant C as Containers
71
- participant R as Red Agent
72
- participant Bl as Blue Agent
73
 
74
  T->>E: reset()
75
  E->>B: Manifest + mutation directive
@@ -80,37 +141,72 @@ sequenceDiagram
80
  V->>V: Phase A: LLM review
81
  V->>C: Phase B: 7 scripted checks
82
  V-->>E: PASS
83
- E-->>T: RangeObservation (challenge description)
84
-
85
- loop Episode Steps (alternating)
86
- T->>E: step(Red: nmap -sV web)
87
- E->>C: docker exec attacker nmap -sV web
88
- C-->>E: stdout: 80/tcp open http
89
- E-->>T: RangeObservation(stdout, reward)
90
-
91
- T->>E: step(Blue: tail_log access.log)
92
- E->>C: docker exec monitor tail access.log
93
- C-->>E: log entries (Red + NPC mixed)
94
- E-->>T: RangeObservation(stdout, reward)
 
 
 
 
 
 
 
 
 
 
 
95
  end
96
 
97
- Note over R,Bl: Red stealth reward coupled to Blue detection<br/>Blue detection reward coupled to Red actions
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  ```
99
 
100
  ## Reset = Mutation
101
 
102
- Every call to `reset()` triggers a **mutation** -- the Builder LLM swaps vulnerability classes in the running containers. The topology stays the same, but the challenge is completely different.
103
 
104
  ```mermaid
105
  flowchart LR
106
  subgraph ep1 [Episode 1]
107
- A1[SQLi in search form] --> F1[Flag in DB]
 
 
108
  end
109
  subgraph ep2 [Episode 2]
110
- A2[Command injection<br/>in ping utility] --> F2[Flag on disk]
 
 
111
  end
112
  subgraph ep3 [Episode 3]
113
- A3[SSRF to internal SQLi] --> F3[Flag in internal DB]
 
 
114
  end
115
 
116
  ep1 -->|reset| ep2
@@ -121,13 +217,13 @@ flowchart LR
121
  style ep3 fill:#6bcb7722,stroke:#6bcb77
122
  ```
123
 
124
- Agents must **generalize** across vulnerability classes, not memorize exploit chains.
125
 
126
  ## Quick Start
127
 
128
  ```bash
129
  # Install
130
- git clone https://github.com/[team]/open-range.git
131
  cd open-range
132
  uv sync --all-extras
133
 
@@ -143,7 +239,7 @@ with OpenRangeEnv('http://localhost:8000').sync() as env:
143
  result = env.reset()
144
  print(result.observation.stdout)
145
 
146
- result = env.step(RangeAction(command='nmap -sV web', mode='red'))
147
  print(result.observation.stdout)
148
  "
149
  ```
@@ -185,8 +281,8 @@ Every generated range passes a **7-check validation pipeline** before any agent
185
  ```mermaid
186
  flowchart LR
187
  S1[1. Services up<br/>nc -z ports] --> S2[2. Flags exist<br/>docker exec cat]
188
- S2 --> S3[3. Network isolation<br/>external blocked from internal]
189
- S3 --> S4[4. Golden path<br/>execute exploit steps]
190
  S4 --> S5[5. Difficulty<br/>steps within 20%]
191
  S5 --> S6[6. No leaks<br/>grep description]
192
  S6 --> S7[7. Inverse mutation<br/>revert vuln, step fails]
@@ -203,81 +299,94 @@ Check 7 is from [Self-Play SWE-RL](https://arxiv.org/abs/2512.18552): it proves
203
 
204
  ## Tier System
205
 
206
- Difficulty grows **horizontally** -- more hosts, more networks, more services. Not just harder passwords.
 
 
 
 
 
 
 
 
207
 
208
  ```mermaid
209
  flowchart TD
210
- subgraph t1 [Tier 1 - Basic]
211
- W1[web<br/>nginx + PHP] --> D1[db<br/>MySQL]
 
 
 
212
  end
213
 
214
- subgraph t2 [Tier 2 - Corporate]
215
- W2[web] --> D2[db]
216
- W2 --> M2[mail<br/>SMTP]
217
- FW2[firewall<br/>iptables] --> W2
 
218
  end
219
 
220
  subgraph t3 [Tier 3 - Enterprise]
221
- W3[web] --> D3[db]
222
- W3 --> DC3[DC<br/>LDAP + Kerberos]
223
- FS3[files<br/>SMB] --> DC3
 
224
  end
225
 
 
 
 
226
  style t1 fill:#6bcb7722,stroke:#6bcb77
227
  style t2 fill:#ffd93d22,stroke:#ffd93d
228
  style t3 fill:#ff6b6b22,stroke:#ff6b6b
229
  ```
230
 
231
- | Tier | Hosts | Networks | Services | Golden Steps |
232
- |------|-------|----------|----------|--------------|
233
- | 1 | web + db | dmz | nginx, mysql, sshd | ~8 |
234
- | 2 | + mail + fw | + internal | + smtp, iptables | ~15 |
235
- | 3 | + files + DC | + mgmt | + smb, ldap, kerberos | ~25 |
236
- | 4 | + jump + NPC | all | + bastion, cron, rsync | ~35 |
237
- | 5 | + honeypot | + trap | + decoys, WAF, IDS | ~50 |
238
-
239
  ## Tandem Red + Blue Training
240
 
241
  ```mermaid
242
  sequenceDiagram
243
  participant Red as Red Agent
244
- participant Env as Range
245
  participant Blue as Blue Agent
246
 
247
  Note over Red,Blue: Episode begins - Builder mutated range
248
 
249
- Red->>Env: nmap -sV web
250
- Env-->>Red: 80/tcp open http nginx
251
- Note right of Env: Action logged
 
 
 
 
 
252
 
253
- Blue->>Env: tail_log access.log
254
- Env-->>Blue: NPC traffic + Red scan mixed
255
- Blue->>Env: submit_finding port scan detected
256
- Note left of Blue: True positive!
257
 
258
- Red->>Env: curl web/search?q= OR 1=1
259
- Env-->>Red: Database results + flag
260
- Note right of Env: Action logged
 
261
 
262
- Red->>Env: submit_flag FLAG abc123
263
- Env-->>Red: Correct! reward=1.0
264
 
265
- Blue->>Env: grep_log UNION SELECT OR 1
266
- Env-->>Blue: SQLi pattern found
267
- Blue->>Env: patch search.php parameterize query
268
- Env-->>Blue: Patch applied
269
 
270
- Note over Env: Re-run golden path exploit
271
- Note over Env: Exploit FAILS, patch valid
272
 
273
- Note over Red,Blue: Red stealth LOW, Blue detection HIGH
274
  ```
275
 
276
  ## Project Structure
277
 
278
  ```
279
  open-range/
280
- β”œβ”€β”€ manifests/ YAML range definitions (topology, vulns, golden paths)
281
  β”œβ”€β”€ vulns/ Vulnerability catalog (plantable vuln templates)
282
  β”œβ”€β”€ builder/ Builder LLM + Mutator + rendering templates
283
  β”œβ”€β”€ validator/ Hybrid validator (LLM review + 7-check scripted)
 
1
  # OpenRange
2
 
3
+ **Multi-agent cyber gymnasium with real enterprise networks, golden-path validation, and self-evolving infrastructure.**
4
 
5
  The first cybersecurity environment in the [OpenEnv](https://github.com/meta-pytorch/OpenEnv) ecosystem.
6
 
 
8
 
9
  ## What is this?
10
 
11
+ OpenRange drops Red and Blue agents into a **real enterprise network** -- firewalls, web apps, databases, directory services, mail servers, VPNs, SIEM -- then lets them fight. An LLM Builder generates the vulnerable infrastructure. A Validator confirms it's actually exploitable. And on every `reset()`, the Builder **mutates** the range with entirely different vulnerabilities, so agents can never memorize their way to victory.
12
 
13
  ```
14
  You write a YAML manifest describing what you want:
15
+ "Corporate network: DMZ with web app + mail, internal DB + file server,
16
+ firewall between zones, AD for auth, SIEM for monitoring"
17
 
18
  The Builder LLM generates it:
19
+ Real nginx reverse proxy -> PHP app -> MySQL backend -> LDAP auth
20
+ Postfix mail -> iptables firewall rules -> Rsyslog to SIEM
21
+ Golden path: 12 steps from external recon to domain flag
22
 
23
  The Validator confirms it works:
24
  LLM review + 7 scripted checks including inverse mutation testing
25
 
26
+ Red attacks from outside. Blue defends from inside. Reset. New vulns. Repeat.
27
  ```
28
 
29
  ## Three Roles
30
 
31
  | Role | What it does | Entry point |
32
  |------|-------------|-------------|
33
+ | **Builder** | Generates and mutates vulnerable enterprise infrastructure from YAML manifests | LLM + templates |
34
+ | **Red** | External attacker. Recon, exploit, pivot, escalate, exfiltrate. | Outside the firewall -- no creds, no access |
35
+ | **Blue** | Internal defender. SIEM analysis, patching, firewall rules, incident response. | SOC workstation on management network |
36
 
37
  Red and Blue operate on the **same infrastructure simultaneously**. Red's stealth reward depends on whether Blue catches them. Blue's detection reward depends on Red's actual actions in the logs.
38
 
 
40
 
41
  ```mermaid
42
  flowchart TD
43
+ A[YAML Manifest<br/>Enterprise topology + vuln slots] --> B[Builder LLM<br/>Generates configs, plants vulns, writes golden path]
44
  B --> C{Hybrid Validator}
45
  C -->|Phase A| D[LLM Review<br/>Exploitability, alignment, difficulty]
46
  C -->|Phase B| E[7-Check Scripted<br/>Services, flags, isolation,<br/>golden path, inverse mutation]
 
48
  E --> F
49
  F -->|Yes| G[OpenEnv Server<br/>FastAPI: /reset, /step, /state, /ws]
50
  F -->|No| B
51
+ G --> H[Red Agent<br/>External attacker]
52
+ G --> I[Blue Agent<br/>SOC defender]
53
+ G --> J[NPC Traffic<br/>Employees, services, cron]
54
+ H --> K[(Enterprise Range<br/>10+ containers across 4 network zones)]
55
  I --> K
56
  J --> K
57
 
 
62
  style K fill:#7c73e6,color:#fff
63
  ```
64
 
65
+ ## Network Topology
66
+
67
+ Even the **basic** range emulates a real corporate network. Every tier is a functioning enterprise with interconnected services, proper network segmentation, and realistic traffic.
68
+
69
+ ```mermaid
70
+ flowchart TB
71
+ subgraph internet [Internet]
72
+ ATK[Red Agent<br/>Attacker Workstation]
73
+ end
74
+
75
+ subgraph fw [Perimeter Firewall - iptables]
76
+ FW1[Firewall<br/>NAT + ACLs + IDS]
77
+ end
78
+
79
+ subgraph dmz [DMZ Network - 10.0.1.0/24]
80
+ WEB[Web Server<br/>nginx reverse proxy<br/>+ PHP/Python app]
81
+ MAIL[Mail Server<br/>Postfix SMTP<br/>+ Dovecot IMAP]
82
+ DNS[DNS Server<br/>Bind9<br/>corp.local zone]
83
+ end
84
+
85
+ subgraph internal [Internal Network - 10.0.2.0/24]
86
+ DB[Database Server<br/>MySQL + PostgreSQL<br/>app data + credentials]
87
+ FILES[File Server<br/>Samba SMB shares<br/>sensitive docs + configs]
88
+ APP[App Server<br/>Internal APIs<br/>microservices]
89
+ end
90
+
91
+ subgraph mgmt [Management Network - 10.0.3.0/24]
92
+ AD[Domain Controller<br/>OpenLDAP + Kerberos<br/>Active Directory]
93
+ SIEM[SIEM + Log Server<br/>Rsyslog + ELK<br/>Blue agent entry point]
94
+ JUMP[Jump Box<br/>SSH bastion<br/>admin access only]
95
+ end
96
+
97
+ ATK -->|ports 80,443,25| FW1
98
+ FW1 --> WEB
99
+ FW1 --> MAIL
100
+ FW1 --> DNS
101
+ WEB -->|SQL queries| DB
102
+ WEB -->|LDAP auth| AD
103
+ MAIL -->|user lookup| AD
104
+ APP -->|file access| FILES
105
+ APP -->|DB queries| DB
106
+ FILES -->|auth| AD
107
+ DB -->|logs| SIEM
108
+ WEB -->|logs| SIEM
109
+ MAIL -->|logs| SIEM
110
+ AD -->|logs| SIEM
111
+ JUMP -->|admin SSH| WEB
112
+ JUMP -->|admin SSH| DB
113
+
114
+ style internet fill:#ff6b6b22,stroke:#ff6b6b
115
+ style fw fill:#ffd93d22,stroke:#ffd93d
116
+ style dmz fill:#4a9eff22,stroke:#4a9eff
117
+ style internal fill:#6bcb7722,stroke:#6bcb77
118
+ style mgmt fill:#7c73e622,stroke:#7c73e6
119
+ ```
120
+
121
+ **This is what Red has to break into. This is what Blue has to defend.**
122
+
123
+ Every service is real. The web app queries the database. Users authenticate against LDAP. Mail flows through Postfix. Logs stream to the SIEM. NPC traffic simulates employees browsing, sending email, and running cron jobs -- so Blue can't just flag everything as malicious.
124
+
125
  ## Episode Lifecycle
126
 
127
  ```mermaid
 
130
  participant E as OpenEnv Server
131
  participant B as Builder LLM
132
  participant V as Validator
133
+ participant C as Enterprise Range
 
 
134
 
135
  T->>E: reset()
136
  E->>B: Manifest + mutation directive
 
141
  V->>V: Phase A: LLM review
142
  V->>C: Phase B: 7 scripted checks
143
  V-->>E: PASS
144
+ E-->>T: RangeObservation with challenge briefing
145
+
146
+ rect rgb(255, 107, 107, 0.1)
147
+ Note over T,C: Red Team Operations
148
+ T->>E: step Red: nmap perimeter scan
149
+ E->>C: docker exec attacker nmap -sV fw
150
+ C-->>E: 80, 443, 25 open
151
+ E-->>T: observation + reward
152
+
153
+ T->>E: step Red: enumerate web app
154
+ E->>C: docker exec attacker nikto web
155
+ C-->>E: discovered /admin, /api, /search
156
+ E-->>T: observation + reward
157
+
158
+ T->>E: step Red: exploit SQLi in search
159
+ E->>C: docker exec attacker curl ...
160
+ C-->>E: DB credentials leaked
161
+ E-->>T: observation + reward
162
+
163
+ T->>E: step Red: pivot to internal DB
164
+ E->>C: docker exec attacker mysql -h db ...
165
+ C-->>E: flag captured from flags table
166
+ E-->>T: observation + flag reward
167
  end
168
 
169
+ rect rgb(74, 158, 255, 0.1)
170
+ Note over T,C: Blue Team Operations
171
+ T->>E: step Blue: check SIEM alerts
172
+ E->>C: docker exec siem tail alerts
173
+ C-->>E: anomalous queries from web to db
174
+ E-->>T: observation + reward
175
+
176
+ T->>E: step Blue: analyze attack pattern
177
+ E->>C: docker exec siem grep SQLi signatures
178
+ C-->>E: injection pattern matched
179
+ E-->>T: observation + detection reward
180
+
181
+ T->>E: step Blue: patch and block
182
+ E->>C: docker exec web parameterize query
183
+ C-->>E: patch applied, firewall rule added
184
+ E-->>T: observation + patch reward
185
+ end
186
+
187
+ Note over T,C: Rewards computed with coupling
188
  ```
189
 
190
  ## Reset = Mutation
191
 
192
+ Every call to `reset()` triggers a **mutation** -- the Builder LLM swaps vulnerability classes across the entire enterprise. The topology stays the same, but the attack surface is completely different.
193
 
194
  ```mermaid
195
  flowchart LR
196
  subgraph ep1 [Episode 1]
197
+ direction TB
198
+ A1[SQLi in web search] --> B1[Pivot to internal DB]
199
+ B1 --> C1[Exfil flag from DB]
200
  end
201
  subgraph ep2 [Episode 2]
202
+ direction TB
203
+ A2[SSRF in web API] --> B2[Access internal file server]
204
+ B2 --> C2[Read flag from SMB share]
205
  end
206
  subgraph ep3 [Episode 3]
207
+ direction TB
208
+ A3[Phish creds via mail] --> B3[LDAP priv escalation]
209
+ B3 --> C3[Domain admin, flag in AD]
210
  end
211
 
212
  ep1 -->|reset| ep2
 
217
  style ep3 fill:#6bcb7722,stroke:#6bcb77
218
  ```
219
 
220
+ Agents must **generalize** across vulnerability classes, attack vectors, and pivot chains -- not memorize a single exploit.
221
 
222
  ## Quick Start
223
 
224
  ```bash
225
  # Install
226
+ git clone https://github.com/open-cybernauts/open-range.git
227
  cd open-range
228
  uv sync --all-extras
229
 
 
239
  result = env.reset()
240
  print(result.observation.stdout)
241
 
242
+ result = env.step(RangeAction(command='nmap -sV 10.0.1.0/24', mode='red'))
243
  print(result.observation.stdout)
244
  "
245
  ```
 
281
  ```mermaid
282
  flowchart LR
283
  S1[1. Services up<br/>nc -z ports] --> S2[2. Flags exist<br/>docker exec cat]
284
+ S2 --> S3[3. Network isolation<br/>zones enforced]
285
+ S3 --> S4[4. Golden path<br/>full exploit chain works]
286
  S4 --> S5[5. Difficulty<br/>steps within 20%]
287
  S5 --> S6[6. No leaks<br/>grep description]
288
  S6 --> S7[7. Inverse mutation<br/>revert vuln, step fails]
 
299
 
300
  ## Tier System
301
 
302
+ Every tier is a **complete enterprise network**. Difficulty grows by adding business units, network zones, and attack surface -- not just harder passwords.
303
+
304
+ | Tier | Hosts | Zones | Key Infrastructure | Attack Complexity |
305
+ |------|-------|-------|-------------------|-------------------|
306
+ | 1 | 6-8 | DMZ, Internal, Mgmt | Web app + DB + mail + firewall + LDAP + SIEM | Single-stage: exploit web, grab flag |
307
+ | 2 | 10-12 | + VPN, Guest | + VPN gateway, guest WiFi segment, internal APIs, certificate authority | Multi-stage: exploit + pivot one hop |
308
+ | 3 | 14-18 | + Partner, Dev | + CI/CD pipeline, container registry, partner extranet, S3-like storage | Chain 2-3 vulns across zones |
309
+ | 4 | 20-25 | + OT/SCADA, Cloud | + Industrial control sim, cloud gateway, secrets vault, service mesh | Lateral movement across trust boundaries |
310
+ | 5 | 30+ | Full enterprise | + Honeypots, deception tech, WAF, IDS/IPS, EDR, threat intel | Evade active defenses while chaining |
311
 
312
  ```mermaid
313
  flowchart TD
314
+ subgraph t1 [Tier 1 - Small Business]
315
+ direction LR
316
+ FW1[Firewall] --> W1[Web + Mail]
317
+ W1 --> D1[DB + Files]
318
+ D1 --> AD1[LDAP + SIEM]
319
  end
320
 
321
+ subgraph t2 [Tier 2 - Mid-Market]
322
+ direction LR
323
+ FW2[Firewall + VPN] --> W2[Web + Mail + DNS]
324
+ W2 --> D2[DB + APIs + Files]
325
+ D2 --> AD2[AD + CA + SIEM]
326
  end
327
 
328
  subgraph t3 [Tier 3 - Enterprise]
329
+ direction LR
330
+ FW3[Firewall + WAF + IDS] --> W3[Web + Mail + DNS + CDN]
331
+ W3 --> D3[DB + APIs + CI/CD + Registry]
332
+ D3 --> AD3[AD + Kerberos + Vault + SIEM]
333
  end
334
 
335
+ t1 -->|agent masters tier| t2
336
+ t2 -->|agent masters tier| t3
337
+
338
  style t1 fill:#6bcb7722,stroke:#6bcb77
339
  style t2 fill:#ffd93d22,stroke:#ffd93d
340
  style t3 fill:#ff6b6b22,stroke:#ff6b6b
341
  ```
342
 
 
 
 
 
 
 
 
 
343
  ## Tandem Red + Blue Training
344
 
345
  ```mermaid
346
  sequenceDiagram
347
  participant Red as Red Agent
348
+ participant Range as Enterprise Range
349
  participant Blue as Blue Agent
350
 
351
  Note over Red,Blue: Episode begins - Builder mutated range
352
 
353
+ Red->>Range: nmap perimeter scan
354
+ Range-->>Red: firewall: 80,443,25 open
355
+ Note right of Range: Logged to SIEM
356
+
357
+ Blue->>Range: check SIEM dashboard
358
+ Range-->>Blue: NPC traffic + Red scan mixed in
359
+ Blue->>Range: submit_finding port scan from ext IP
360
+ Note left of Blue: True positive
361
 
362
+ Red->>Range: enumerate web app directories
363
+ Range-->>Red: found /admin /api /uploads
364
+ Note right of Range: Logged to SIEM
 
365
 
366
+ Red->>Range: exploit SQLi in /api/search
367
+ Range-->>Red: DB creds leaked
368
+ Red->>Range: pivot to internal DB with stolen creds
369
+ Range-->>Red: connected, flag captured
370
 
371
+ Red->>Range: submit_flag FLAG_db_compromised
372
+ Range-->>Red: Correct, reward 1.0
373
 
374
+ Blue->>Range: analyze SIEM for SQLi signatures
375
+ Range-->>Blue: injection pattern in web logs
376
+ Blue->>Range: patch /api/search, add WAF rule
377
+ Range-->>Blue: patch applied
378
 
379
+ Note over Range: Re-run golden path exploit
380
+ Note over Range: Exploit FAILS, patch valid
381
 
382
+ Note over Red,Blue: Red stealth LOW - Blue caught the attack<br/>Blue detection HIGH - found real intrusion
383
  ```
384
 
385
  ## Project Structure
386
 
387
  ```
388
  open-range/
389
+ β”œβ”€β”€ manifests/ YAML enterprise range definitions
390
  β”œβ”€β”€ vulns/ Vulnerability catalog (plantable vuln templates)
391
  β”œβ”€β”€ builder/ Builder LLM + Mutator + rendering templates
392
  β”œβ”€β”€ validator/ Hybrid validator (LLM review + 7-check scripted)