Spaces:
Sleeping
Sleeping
OpenEnv Contributor
fix: move graders to module root directory so openenv-core on HF can discover it
62f46ca | # 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 | |