Skip to content

Technical Datasheet

Environment Composition

  • Topology Size: 100 host array slots. Active topologies range from 15-30 nodes. Unused nodes use 169.254.0.0/16 addresses, serving as dynamic decoys.
  • State Representation: GlobalNetworkState contains host attributes, firewall ACLs, topologies, and visibility masks. Categorical properties are encoded against static codebooks (netforge_rl/core/functional.py).
  • Scenarios: ransomware, apt_espionage, cloud_hybrid, iot_grid, ot_stuxnet.

Observation & Action Spaces

  • Agents: red_operator, blue_dmz, blue_internal, blue_restricted (PettingZoo parallel).
  • Action space: MultiDiscrete([32, 100]) = [action_type_id, target_host_index], with a 132-d binary action mask (32 action types + 100 targets).
  • Observation (per-agent Dict): obs (256-d), siem_embedding (128-d), action_mask (132-d), adj_matrix, delta_t; Blue agents also receive blue_comm (100-d shared channel).
  • The full, machine-readable spec is generated by python -m benchmarks.env_spec --json.

Difficulty & Splits

  • Presets: easy / medium / hard via netforge_rl.environment.presets, varying network size, DHCP churn, dynamic-topology rates, and SIEM latency. See the docs page on Difficulty & Splits.
  • Held-out split: evaluation_mode=True draws from a disjoint seed pool (offset 1000); EVAL_SEEDS is a frozen 20-seed evaluation suite.

Metrics and Reward Signals

  • Reward signals are defined per-scenario via BaseScenario; rewards are tanh-normalized. Per-scenario reward decompositions are published in env_spec and on each scenario's REWARD_WEIGHTS.
  • Per-episode metrics: MTTC, SLA uptime, total exfiltration, detection rate, and active-host compromise/isolation counts (padding excluded).

Data Generation

  • Source: netforge_rl/topologies/network_generator.py.
  • Determinism: Byte-identical replay under seed — observations, SIEM embeddings, infos, and rewards. Every stochastic source (topology, actions, exploit hypervisor, SIEM logger and templates, green-agent noise) is reseeded on reset(seed); timestamps use a fixed epoch, not wall-clock. See the Reproducibility docs page.
  • Splits: evaluation_mode=True draws from a disjoint held-out seed pool never seen during training.
  • Limitations: Synthetic generation; no real network captures.

Diagnostics

  • Six capability probes (memory, attention, temporal, precision, safety, generalization) that score a policy in [0, 1] on isolated skills, plus an oracle information-asymmetry measure and a capability_card aggregator (JSON + radar chart).

Research Features

  • Graph observations: node/edge/edge-attr arrays (core/graph_obs.py) with fog-of-war masking, mapping directly to PyTorch Geometric / jraph.
  • Deception: decoys + honeytokens with deception_hits / deception_efficacy metrics.
  • SOC export: full-episode SIEM stream to OCSF-style JSON (siem/export.py, record_siem=True).
  • Self-play: population Elo tournament over red/blue policy pools (benchmarks/self_play.py).
  • JAX telemetry: an in-kernel numeric SIEM signal for the vectorized backend (JaxMARLEnv(telemetry_obs=True)).
  • Trained baselines: JIT-fused JAX IPPO trainer with committed learning curves + checkpoints (benchmarks/train_curve.py, jax_ppo.save_params / load_params).
  • Gymnasium single-agent env: NetForgeSingleAgentEnv (passes check_env) for Stable-Baselines3 / CleanRL.
  • ATT&CK coverage: red actions map to MITRE ATT&CK techniques; attack_coverage reported per episode (actions/attack_map.py).

Supported Use Cases

  • MARL policy training (PPO, IPPO, MAPPO/R-MAPPO) via PettingZoo, RLlib, JaxMARL, CleanRL bridges.
  • LLM zero-shot SOC evaluation and PEFT fine-tuning.
  • Capability diagnosis and generalization studies.