Scoring Engine is an open-source platform for running Red/White/Blue team cybersecurity competitions. It automates service checks each round and provides a web-based scoreboard and configuration interface.
- Automated scheduling and execution of service checks
- Distributed parallel execution via Celery workers and Redis
- Web interface for viewing scores and configuring services
- JSON API for programmatic access to scores and configuration
- 28 built-in service checks (SSH, HTTP, DNS, SMTP, and more)
- Support for airgapped/offline deployments
- Example mode with pre-populated demo data
Scoring Engine uses a distributed architecture with the following components:
| Component | Technology | Purpose |
|---|---|---|
| Web UI | Flask | Scoreboard, team management, administration |
| Task Queue | Celery | Distributed job scheduling and execution |
| Message Broker | Redis | Task queue backend and caching |
| Database | MySQL/MariaDB | Persistent storage for teams, services, and results |
| Reverse Proxy | Nginx | HTTP server and load balancing |
Scoring Engine includes checks for common services out of the box:
| Category | Services |
|---|---|
| Network | ICMP, DNS, NFS |
| Web | HTTP, HTTPS, Elasticsearch, WordPress |
| Authentication | SSH, Telnet, LDAP, WinRM |
| File Transfer | FTP, SMB |
| SMTP, SMTPS, IMAP, IMAPS, POP3, POP3S | |
| Database | MySQL, PostgreSQL, MSSQL |
| Remote Desktop | RDP, VNC |
| VPN | OpenVPN |
Custom checks can be added by creating a Python class in scoring_engine/checks/.
- Docker
- Docker Compose (included with Docker Desktop; on Linux install separately)
- For Windows users, ensure Docker Desktop is set to use Linux containers.
For installing from source without Docker:
- Python 3.10 or higher is required
- MariaDB/MySQL database server
- Redis server
# Install the package
pip install -e .
# Or install with test dependencies
pip install -e .
pip install -r tests/requirements.txtBuild and start all services:
docker compose build
docker compose upOr use the Makefile for convenience:
make build
make runOnce running, access the application at http://localhost.
Log in using any of the following credentials:
| Username | Password | Role |
|---|---|---|
whiteteamuser |
testpass |
White Team (Admin) |
team1user1 |
testpass |
Blue Team 1 |
team2user1 |
testpass |
Blue Team 2 |
team2user2 |
testpass |
Blue Team 2 |
redteamuser |
testpass |
Red Team |
Reset the database before starting:
SCORINGENGINE_OVERWRITE_DB=true docker compose upRun with sample data (demo mode):
SCORINGENGINE_EXAMPLE=true docker compose upOr combine both for a fresh demo:
make run-demoPre-built images are available from both registries:
- GitHub Container Registry:
ghcr.io/scoringengine/scoringengine/<image>:<tag> - Docker Hub:
scoringengine/<image>:<tag>
Available images: base, bootstrap, engine, web, worker
Tags: latest, develop, version tags (e.g., v1.1.0)
For competitions with no internet access:
# Create a complete deployment package
./bin/create-airgapped-package.sh
# Transfer scoringengine-airgapped.tar.gz to the airgapped system
# Then extract and deploy:
tar -xzf scoringengine-airgapped.tar.gz
cd scoringengine-airgapped
./deploy.shSee the Airgapped Deployment Guide for detailed instructions.
| Command | Description |
|---|---|
make build |
Build all Docker images |
make run |
Start all services |
make run-demo |
Start with demo data (resets database) |
make stop |
Stop all services |
make clean |
Stop services and remove volumes |
make rebuild-new |
Full rebuild with fresh database |
make run-tests |
Run unit tests with coverage |
make build-integration |
Build integration test environment |
make run-integration-tests |
Run integration tests |
Run the linters and test suite before submitting changes:
# Install pre-commit hooks
pip install pre-commit
pre-commit install
# Run linters on changed files
pre-commit run --files <changed-files>
# Run all tests
pytest tests/
# Run tests with coverage
make run-testsTo check all files: pre-commit run --all-files
pip install -r docs/requirements.txt
cd docs
make htmlOpen docs/build/html/index.html in your browser.
This project uses semantic versioning. To bump versions:
# Install development dependencies
pip install -r tests/requirements.txt
# Bump version (patch/minor/major)
bump-my-version bump patchSee VERSION_MANAGEMENT.md for detailed instructions.
Full documentation is available at https://scoringengine.readthedocs.io/en/latest/.
Released under the MIT License.
