GitPedia

Attack range

A tool that allows you to create vulnerable instrumented local or cloud environments to simulate attacks against and collect the data into Splunk

From splunk·Updated June 16, 2026·View on GitHub·

The Splunk Attack Range builds instrumented cloud environments (AWS, Azure, GCP), simulates attacks, and forwards data into Splunk for detection development and testing. The project is written primarily in Python, distributed under the Apache License 2.0 license, first published in 2019. It has gained significant community traction with 2,507 stars and 411 forks on GitHub. Key topics include: adversary, attack-range, attack-simulation, detection, lab.

Latest release: v5.0.0
February 9, 2026View Changelog →

Splunk Attack Range v5

Attack Range Logo

The Splunk Attack Range builds instrumented cloud environments (AWS, Azure, GCP), simulates attacks, and forwards data into Splunk for detection development and testing.

Attack Range Architecture

What it does:

  • Build labs — Deploy a small, production-like lab (Splunk, Windows/Linux servers, optional Kali, Zeek, etc.) via Terraform and Ansible.
  • Simulate attacks — Run Atomic Red Team (and other) techniques to generate real telemetry.
  • Share access — Use WireGuard VPN; generate additional client configs to share the range with others.

Click the picture to watch the demo 👇

<a href="https://youtu.be/FkDiiYGKjKg" target="_blank"> <img src="docs/attack_range_demo.png" alt="Watch the demo" /> </a>

Getting started

Preferred: Docker Compose

  1. Prerequisites: Docker and Docker Compose. Configure your cloud provider (AWS, Azure, or GCP) and mount credentials as below.

  2. Clone and start:

    bash
    git clone <repo-url> cd attack_range_2 docker compose -f docker/docker-compose.yml up
  3. Use the app or API:

  4. Build a range (two steps):

    • In the app: pick a template (e.g. aws/splunk_minimal_aws) and start the build. When status is Waiting for VPN, download the WireGuard config, connect with WireGuard, then continue the build.
    • Or via API: POST /attack-range/build with {"template": "aws/splunk_minimal_aws"}, poll GET /attack-range/status/<id>, use the returned WireGuard config, connect, then POST /attack-range/build with {"attack_range_id": "<id>"}.
  5. CLI in Docker (optional):

    bash
    docker compose --profile cli -f docker/docker-compose.yml run --rm attack_range build -t aws/splunk_minimal_aws

    Other actions: destroy, simulate, apply-role, share. See Detailed documentation for CLI usage and flags.


Ways to run

MethodUse case
Docker Compose (recommended)Run API + web app + optional CLI with one docker compose; no local Python/Ansible/Terraform.
Web appBuild, destroy, simulate, and share via the UI at port 4321.
REST APIAutomate from scripts or CI; full OpenAPI docs at /openapi/swagger.
CLI`attack_range.py build

Documentation


Quick reference

  • Configs: Each range has a config in config/<attack_range_id>.yml. Templates live in templates/{aws,azure,gcp}/.
  • Credentials: Set up ~/.aws, ~/.azure, or ~/.config/gcloud and mount them into the containers (see docker/docker-compose.yml).
  • Support: GitHub issues and CONTRIBUTING.

Support

Please use the GitHub issue tracker to submit bugs or request features.

If you have questions or need support, you can:


Contributing

We welcome feedback and contributions from the community! Please see our contribution guidelines for more information on how to get involved.


Author

Contributors

Contributors

Showing top 12 contributors by commit count.

View all contributors on GitHub →

This article is auto-generated from splunk/attack_range via the GitHub API.Last fetched: 6/16/2026