BOSS of the SOC (BOTS) is Splunk’s blue-team CTF series that drops you into realistic security investigations. With the splunk-bots-docker project, you can spin up all three BOTSv1–v3 datasets locally in Docker containers with a single command — no cloud dependency, no manual app installs, just instant threat hunting practice.
“The best way to get better at detection engineering is to practice on real attack data — repeatedly, locally, on your own schedule.”
What is BOSS of the SOC?
BOSS of the SOC (BOTS) are blue-team Capture the Flag exercises created by Splunk. Each version presents a different security scenario with pre-loaded datasets containing real attack traces:
| Version | Year | Scenario | Focus Area |
|---|---|---|---|
| BOTSv1 | 2016 | APT infiltration + Ransomware outbreak | Endpoint forensics, web attacks, malware |
| BOTSv2 | 2017 | Nation-state APT hunting | Advanced persistent threats, lateral movement |
| BOTSv3 | 2018 | Multi-vector threat detection | Cloud (AWS/Azure), O365, multi-source correlation |
Each dataset contains multiple sourcetypes from diverse security tools — firewalls, EDR, Sysmon, IDS/IPS, web proxies, authentication logs, and more. This makes them perfect training grounds for building SPL skills and developing detection logic.
Why Docker?
Running BOTS locally in Docker solves several pain points:
- No expiring cloud labs — Practice whenever you want, no time pressure
- Reproducible environment —
docker compose upgives you a clean slate every time - Offline capable — After initial dataset download, everything runs locally
- Cross-platform — Works on macOS, Linux, and Windows
- License renewal — Simply
docker compose down && docker compose up -dresets the 30-day trial
Quick Start
Prerequisites
- Docker with Docker Compose
- ~15 GB disk space (datasets are 3–5 GB each)
- 8 GB+ RAM recommended
Installation
# macOS / Linux
git clone https://github.com/BenjiTrapp/splunk-bots-docker.git
cd splunk-bots-docker
./install.sh
# Windows (PowerShell 7+)
git clone https://github.com/BenjiTrapp/splunk-bots-docker.git
cd splunk-bots-docker
.\install.ps1
The installer handles everything automatically:
- Checks for Docker
- Verifies all 50+ Splunk apps & add-ons are present
- Prompts for an admin password
- Spins up the containers
- Prints your access URLs
You can also start a specific version only:
./install.sh bots2
Access URLs
| Version | URL | Login |
|---|---|---|
| BOTSv1 | http://localhost:8000 |
admin / your-password |
| BOTSv2 | http://localhost:8020 |
admin / your-password |
| BOTSv3 | http://localhost:8030 |
admin / your-password |
Datasets (~3–5 GB each) download from AWS S3 on first boot. Initial startup takes 5–15 minutes.
Architecture
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ bots1 │ │ bots2 │ │ bots3 │
│ :8000 │ │ :8020 │ │ :8030 │
│ │ │ │ │ │
│ Splunk 9.0.4 │ │ Splunk 9.0.4 │ │ Splunk 9.0.4 │
│ BOTSv1 data │ │ BOTSv2 data │ │ BOTSv3 data │
│ 8 apps │ │ 20 apps │ │ 25 apps │
└──────────────┘ └──────────────┘ └──────────────┘
Each container is self-contained with the relevant Splunk apps, technology add-ons, and investigation data:
- BOTSv1 — Fortinet, Sysmon, Windows, Stream, Suricata, Tenable, URL Toolbox
- BOTSv2 — Palo Alto, Apache, IIS, Sysmon, Windows, Symantec, Unix, CIM, Security Essentials
- BOTSv3 — AWS, Azure, Cisco ASA, GuardDuty, Office 365, Code42, osquery, CIM, VirusTotal
SPL Searchhead Cheatsheet
To help navigate the BOTS datasets effectively, there is a dedicated SPL Searchhead Cheatsheet that covers the essential SPL concepts step by step:
- Basis-Suche & Pipe-Operator — How to structure queries from left to right
- Index & Sourcetype — Narrowing down data sources efficiently
- Metadata discovery — Finding available indexes, sourcetypes, and hosts in an unknown environment
- Time handling — Relative/absolute time ranges and conversions
- Core SPL commands —
stats,eval,rex,where,table,transaction, and more - CSIRT-specific queries — Brute-force detection, PowerShell hunting, lateral movement, IOC lookups
- Performance tips — Filter early, avoid leading wildcards, use
tstats
Getting Started with BOTSv1
Once your container is running, here are some initial exploration queries to orient yourself:
Discover available data
| metadata type=sourcetypes index=botsv1
| table sourcetype, totalCount, recentTime
| sort -totalCount
Find all hosts reporting in
| metadata type=hosts index=botsv1
| table host, totalCount, recentTime
Hunt for web attacks
index=botsv1 sourcetype=stream:http
| stats count by http_method, status, site
| sort -count
Detect brute-force attempts
index=botsv1 sourcetype=WinEventLog:Security EventCode=4625
| stats count by src_ip, Account_Name
| where count > 10
| sort -count
Look for suspicious PowerShell execution
index=botsv1 sourcetype=XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
EventCode=1 Image="*powershell*"
| table _time, Computer, User, CommandLine
| sort -_time
Manual Docker Control
# Start all three versions
docker compose up -d
# Start a specific version
docker compose up -d bots1
# Follow logs
docker compose logs -f bots3
# Stop everything
docker compose down
# Full reset (renews 30-day license)
docker compose down && docker compose up -d
Customization
Override any setting via environment variables:
export SPLUNK_PASSWORD="MySecur3P@ss"
export BOTS1_PORT=8080
export BOTS2_PORT=8081
export BOTS3_PORT=8082
./install.sh
| Variable | Default | Description |
|---|---|---|
SPLUNK_PASSWORD |
changeme |
Admin password (min 8 chars) |
BOTS1_PORT |
8000 |
Host port for BOTSv1 |
BOTS2_PORT |
8020 |
Host port for BOTSv2 |
BOTS3_PORT |
8030 |
Host port for BOTSv3 |
Training Approach
A recommended approach for working through the BOTS datasets:
- Start with BOTSv1 — It has the most community walkthroughs and documentation available
- Use the cheatsheet — Keep the SPL Searchhead Cheatsheet open as a reference
- Explore with metadata — Before diving into queries, understand what data sources are available
- Build detection logic — Try to create SPL queries that would work as alerts in production
- Progress to BOTSv2/v3 — Each version increases in complexity and requires more advanced correlation