File size: 9,152 Bytes
115612d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b23a6d7
62f46ca
 
 
 
 
 
115612d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
# OpenEnv-CloudSOC Benchmark Specification
# =========================================
# Metadata file for the Cloud Security Operations Center benchmark environment
# Evaluates LLM agents on incident response tasks in simulated AWS environments

name: openenv-cloudsoc
version: "1.0.0"
description: |
  A benchmark environment for evaluating LLM agents on cloud security incident response.
  Implements Zero-DB architecture with in-memory state management for Docker deployment
  within 2 vCPU / 8GB RAM constraints.

# Author and License
author: OpenEnv Contributors
license: MIT
repository: https://github.com/openenv/cloudsoc-benchmark

# Environment Metadata
environment:
  type: text-based
  observation_space: json
  action_space: json_tool_call
  max_episode_length: 40
  deterministic: true  # Supports seeded reproducibility

# Hardware Requirements
hardware:
  min_vcpu: 2
  min_ram_gb: 8
  gpu_required: false
  external_db_required: false  # Zero-DB architecture

# Tasks Definition
tasks:
  - id: "easy"
    grader: "graders:grade_easy"
  - id: "medium"
    grader: "graders:grade_medium"
  - id: "hard"
    grader: "graders:grade_hard"

tools:
  # Observation Tools (with resource costs)
  - name: aws.cloudwatch.query_basic
    description: "Query CloudWatch logs (truncated results)"
    cost: -0.01
    args:
      - name: log_group
        type: string
        required: true
      - name: start_time
        type: string
        required: false
      - name: end_time
        type: string
        required: false
      - name: filter_pattern
        type: string
        required: false

  - name: aws.cloudwatch.query_deep
    description: "Query CloudWatch logs (full results, higher cost)"
    cost: -0.05
    args:
      - name: log_group
        type: string
        required: true
      - name: start_time
        type: string
        required: false
      - name: end_time
        type: string
        required: false
      - name: filter_pattern
        type: string
        required: false

  # EC2 Tools
  - name: aws.ec2.describe
    description: "Describe EC2 instances"
    cost: 0
    args:
      - name: instance_id
        type: string
        required: false

  - name: aws.ec2.snapshot
    description: "Create forensic snapshot (REQUIRED before isolation)"
    cost: 0
    preconditions: []
    args:
      - name: instance_id
        type: string
        required: true
      - name: snapshot_type
        type: string
        required: false
        default: forensic

  - name: aws.ec2.isolate
    description: "Isolate EC2 instance from network"
    cost: 0
    preconditions:
      - "Instance must have forensic snapshot"
    args:
      - name: instance_id
        type: string
        required: true

  - name: aws.ec2.terminate
    description: "⚠️ DANGER: Permanently terminates instance, destroys forensic evidence"
    cost: -1.0
    danger: true
    args:
      - name: instance_id
        type: string
        required: true

  # IAM Tools
  - name: aws.iam.describe_role
    description: "Describe IAM role"
    cost: 0
    args:
      - name: role_name
        type: string
        required: false

  - name: aws.iam.detach_role
    description: "Detach IAM role from resources"
    cost: 0
    args:
      - name: role_name
        type: string
        required: true
      - name: instance_id
        type: string
        required: false

  - name: aws.iam.revoke_credentials
    description: "Revoke compromised credentials"
    cost: 0
    args:
      - name: key_id
        type: string
        required: true

  - name: aws.iam.list_policies
    description: "List IAM policies"
    cost: 0
    args: []

  # S3 Tools
  - name: aws.s3.get_bucket_policy
    description: "Get S3 bucket policy"
    cost: 0
    args:
      - name: bucket_name
        type: string
        required: true

  - name: aws.s3.block_public_access
    description: "Block public access to S3 bucket"
    cost: 0
    args:
      - name: bucket_name
        type: string
        required: true

  - name: aws.s3.list_objects
    description: "List objects in S3 bucket"
    cost: 0
    args:
      - name: bucket_name
        type: string
        required: true

  # RDS Tools
  - name: aws.rds.rotate_credentials
    description: "Rotate database credentials"
    cost: 0
    preconditions:
      - "Compromised IAM roles must be detached first"
    args:
      - name: resource_id
        type: string
        required: true

  # Security Group Tools
  - name: aws.security_group.modify
    description: "Modify security group (isolate/restore)"
    cost: 0
    args:
      - name: security_group_id
        type: string
        required: true
      - name: action
        type: string
        required: true
        enum: [isolate, restore]

  # Investigation Tools
  - name: aws.investigate
    description: "General investigation tool"
    cost: 0
    args:
      - name: target_type
        type: string
        required: true
        enum: [ip, user, role, instance]
      - name: target_id
        type: string
        required: true

  # SOC Tools
  - name: aws.soc.get_alerts
    description: "Get current SOC alerts"
    cost: 0
    args: []

  - name: aws.soc.close_incident
    description: "Close incident with timeline (FINAL action to complete task)"
    cost: 0
    args:
      - name: incident_id
        type: string
        required: false
        default: INC-001
      - name: timeline
        type: array
        required: true
        description: "Ordered list of incident events"
      - name: root_cause
        type: string
        required: false
      - name: remediation_summary
        type: string
        required: false

  # GuardDuty Tools
  - name: aws.guardduty.get_findings
    description: "Get GuardDuty security findings"
    cost: 0
    args: []

  # CloudTrail Tools
  - name: aws.cloudtrail.lookup_events
    description: "Lookup CloudTrail events"
    cost: 0
    args: []

# Evaluation Metrics
metrics:
  primary: weighted_total_score
  components:
    - name: investigation_score
      weight: variable  # Depends on task
      description: "Score for threat identification and analysis"
    - name: containment_score
      weight: variable
      description: "Score for limiting threat spread"
    - name: eradication_score
      weight: variable
      description: "Score for removing threat actors"
    - name: recovery_score
      weight: variable
      description: "Score for restoring normal operations"
    - name: timeline_accuracy
      weight: 0.5
      description: "Accuracy of incident timeline reconstruction"
    - name: efficiency
      weight: implicit
      description: "Resource cost optimization (query costs)"

# Mechanics Implemented
mechanics:
  - id: 1
    name: "Deceptive Environment"
    description: "Logs contain noise, red herrings, and legitimate attack traces"
    
  - id: 2
    name: "Partial Observability & Resource Costs"
    description: "Basic queries cost -0.01, deep queries cost -0.05"
    
  - id: 3
    name: "Strict Action Preconditions"
    description: "Causal chains enforce proper IR procedure"
    
  - id: 4
    name: "Adversarial Traps"
    description: "Terminating compromised instances destroys evidence"
    
  - id: 5
    name: "Gradient Reward Shaping"
    description: "+0.02 per new flag discovered"
    
  - id: 6
    name: "Memory Pressure Simulation"
    description: "Sliding context window of 6 turns"
    
  - id: 7
    name: "Tool Abstraction Layer"
    description: "Strict JSON schema for tool calls"
    
  - id: 8
    name: "Rich Final Scoring"
    description: "Structured breakdown by IR phase"
    
  - id: 9
    name: "Deterministic Seed Mode"
    description: "100% reproducible with seed parameter"
    
  - id: 10
    name: "Chain-of-Thought Prompting"
    description: "Required format includes thought field"
    
  - id: 11
    name: "Multi-Task Shared State"
    description: "Campaign mode passes state between tasks"
    
  - id: 12
    name: "Incident Timeline Reconstruction"
    description: "Final action requires timeline for grading"

# Agent Requirements
agent_requirements:
  response_format:
    type: json
    schema:
      thought:
        type: string
        required: true
        description: "1-sentence internal reasoning"
      tool:
        type: string
        required: true
        description: "Tool name to invoke"
      args:
        type: object
        required: true
        description: "Tool arguments"
  
  warnings:
    - "aws.ec2.terminate destroys all forensic evidence on compromised instances"
    - "Must take forensic snapshot before isolating instances"
    - "Must detach compromised roles before rotating credentials"
    - "Query costs accumulate and reduce final score"

# Campaign Mode
campaign:
  enabled: true
  task_order:
    - easy
    - medium
    - hard
  state_transfer: true
  description: |
    In campaign mode, tasks form a continuous story:
    1. Easy: Discover leaky S3 bucket
    2. Medium: The bucket contained credentials; trace and revoke them
    3. Hard: Credentials were used to backdoor IAM and deploy ransomware