Aegis - MITRE ATT&CK Coverage Platform
Aegis is a comprehensive platform for tracking and managing security coverage against the MITRE ATT&CK framework. It enables security teams to document, validate, and visualize their defensive capabilities against known adversary techniques through a structured Red Team / Blue Team validation workflow.
Features
- MITRE ATT&CK Integration: Automatic synchronization with the MITRE ATT&CK framework via TAXII (with GitHub fallback), scheduled every 24h
- Red/Blue Validation Workflow: Structured dual-validation lifecycle for security tests (draft → red_executing → blue_evaluating → in_review → validated/rejected)
- Test Template Catalog: Import tests from Atomic Red Team, create custom templates, and instantiate real tests from them
- Dual Validation: Independent approval/rejection by Red Lead and Blue Lead before a test is finalized
- Coverage Tracking: Track validation status for each technique (validated, partial, not covered, in progress)
- Evidence Storage: Secure evidence file storage with SHA256 integrity verification, separated by team (red/blue)
- In-App Notifications: Real-time notification bell with polling, automatic alerts on state changes
- Reports & Export: Coverage summary, test results, and remediation reports in JSON and CSV formats
- Remediation Tracking: Step-by-step remediation assignments with status tracking per test
- Role-Based Access Control: Granular permissions for red team, blue team, and leadership roles
- Intel Monitoring: Automated scanning for new threat intelligence related to techniques
- Metrics Dashboard: Pipeline funnel, team activity, validation rates, and recent tests
Red Team / Blue Team Validation Flow
States
| State |
Description |
Who acts |
draft |
Created, pending execution |
Red Tech |
red_executing |
Red Team documents attack & uploads evidence |
Red Tech |
blue_evaluating |
Blue Team documents detection & uploads evidence |
Blue Tech |
in_review |
Both managers review evidence |
Red Lead, Blue Lead |
validated |
Approved by both managers |
— (terminal) |
rejected |
Rejected — returns to draft for redo |
Red/Blue Lead can reopen |
Dual Validation
Both Red Lead and Blue Lead must independently vote:
- Both approve → test moves to
validated
- Either rejects → test moves to
rejected
- One votes, other pending → stays in
in_review
User Roles
| Role |
Description |
Capabilities |
admin |
Full system access |
Everything |
red_tech |
Red team technician |
Create tests, document attacks, upload red evidence |
blue_tech |
Blue team technician |
Document detection, upload blue evidence |
red_lead |
Red team lead |
Validate/reject the red side of tests |
blue_lead |
Blue team lead |
Validate/reject the blue side of tests |
viewer |
Read-only access |
View all data |
Test Template Catalog
Tests can be created from predefined templates sourced from:
- Atomic Red Team (Red Canary) — imported via the System admin panel
- Custom templates — created by admins with suggested procedures and remediation
- MITRE procedures — based on MITRE ATT&CK documentation
Templates include attack procedures, expected detections, suggested tools, severity levels, and suggested remediation steps. When instantiated, these fields are pre-populated into the new test.
Tech Stack
- Backend: FastAPI (Python 3.11)
- Database: PostgreSQL 15
- Object Storage: MinIO (S3-compatible)
- ORM: SQLAlchemy with Alembic migrations
- Frontend: React 19 + TypeScript + Vite + Tailwind CSS v4 + TanStack Query
- Scheduler: APScheduler (MITRE sync, Intel scan, Notification cleanup)
Quick Start
Prerequisites
- Docker and Docker Compose
- Git
Installation
- Clone the repository:
- Start all services:
- Run database migrations:
- Seed the admin user:
- Start the frontend:
- Verify the installation:
Authentication
JWT-based authentication. Default admin credentials after seeding:
Important: Change the default admin123 password and SECRET_KEY in production.
Services
| Service |
Port |
Description |
| Frontend |
5173 |
React dev server (Vite) |
| Backend |
8000 |
FastAPI REST API |
| PostgreSQL |
5433 |
Database |
| MinIO API |
9000 |
S3-compatible object storage |
| MinIO Console |
9001 |
MinIO web interface |
API Documentation
Interactive API documentation available at:
API Endpoints
Auth
| Method |
Route |
Auth |
Description |
| POST |
/api/v1/auth/login |
Public |
Obtain JWT token |
| GET |
/api/v1/auth/me |
Authenticated |
Current user profile |
Techniques
| Method |
Route |
Auth |
Description |
| GET |
/api/v1/techniques |
Authenticated |
List all (filters: tactic, status, review_required) |
| GET |
/api/v1/techniques/{mitre_id} |
Authenticated |
Detail with associated tests |
| POST |
/api/v1/techniques |
Admin |
Create technique |
| PATCH |
/api/v1/techniques/{mitre_id} |
Admin |
Update technique fields |
| PATCH |
/api/v1/techniques/{mitre_id}/review |
Lead, Admin |
Mark as reviewed |
Tests — Red/Blue Workflow
| Method |
Route |
Auth |
Description |
| GET |
/api/v1/tests |
Authenticated |
List with filters (state, technique, platform, creator, pending_validation_side) |
| POST |
/api/v1/tests |
Red Tech, Admin |
Create test (state=draft) |
| POST |
/api/v1/tests/from-template |
Red Tech, Admin |
Create from template (pre-populates fields) |
| GET |
/api/v1/tests/{id} |
Authenticated |
Detail with split red/blue evidences |
| PATCH |
/api/v1/tests/{id} |
Creator, Admin |
General update (draft/rejected only) |
| PATCH |
/api/v1/tests/{id}/red |
Red Tech, Admin |
Red Team fields (draft, red_executing) |
| PATCH |
/api/v1/tests/{id}/blue |
Blue Tech, Admin |
Blue Team fields (blue_evaluating) |
| PATCH |
/api/v1/tests/{id}/remediation |
Authenticated |
Update remediation fields |
| POST |
/api/v1/tests/{id}/start-execution |
Red Tech, Admin |
draft → red_executing |
| POST |
/api/v1/tests/{id}/submit-red |
Red Tech, Admin |
red_executing → blue_evaluating |
| POST |
/api/v1/tests/{id}/submit-blue |
Blue Tech, Admin |
blue_evaluating → in_review |
| POST |
/api/v1/tests/{id}/validate-red |
Red Lead, Admin |
Red Lead approves/rejects |
| POST |
/api/v1/tests/{id}/validate-blue |
Blue Lead, Admin |
Blue Lead approves/rejects |
| POST |
/api/v1/tests/{id}/reopen |
Lead, Admin |
rejected → draft (clears validation) |
| GET |
/api/v1/tests/{id}/timeline |
Authenticated |
Audit-log history for this test |
Test Templates
| Method |
Route |
Auth |
Description |
| GET |
/api/v1/test-templates |
Authenticated |
List templates (filters: source, platform, severity, search, mitre_technique_id) |
| POST |
/api/v1/test-templates |
Admin |
Create custom template |
| GET |
/api/v1/test-templates/stats |
Admin |
Catalog statistics |
| GET |
/api/v1/test-templates/{id} |
Authenticated |
Template detail |
| PATCH |
/api/v1/test-templates/{id} |
Admin |
Update template |
| DELETE |
/api/v1/test-templates/{id} |
Admin |
Soft-delete (deactivate) |
| POST |
/api/v1/test-templates/{id}/toggle-active |
Admin |
Toggle active/inactive |
Evidence
| Method |
Route |
Auth |
Description |
| POST |
/api/v1/tests/{test_id}/evidence |
Authenticated |
Upload evidence (team=red/blue) |
| GET |
/api/v1/evidence/{id} |
Authenticated |
Metadata + presigned download URL |
Notifications
| Method |
Route |
Auth |
Description |
| GET |
/api/v1/notifications |
Authenticated |
List notifications (paginated, limit=20) |
| GET |
/api/v1/notifications/unread-count |
Authenticated |
Unread notification count |
| PATCH |
/api/v1/notifications/{id}/read |
Authenticated |
Mark one as read |
| POST |
/api/v1/notifications/read-all |
Authenticated |
Mark all as read |
Reports
| Method |
Route |
Auth |
Description |
| GET |
/api/v1/reports/coverage-summary |
Authenticated |
Full coverage JSON report (filters: tactic, platform) |
| GET |
/api/v1/reports/coverage-csv |
Authenticated |
CSV export of coverage |
| GET |
/api/v1/reports/test-results |
Authenticated |
Test results report (filters: state, date_from, date_to) |
| GET |
/api/v1/reports/remediation-status |
Authenticated |
Remediation status report (filter: status) |
Metrics
| Method |
Route |
Auth |
Description |
| GET |
/api/v1/metrics/summary |
Authenticated |
Global coverage summary |
| GET |
/api/v1/metrics/by-tactic |
Authenticated |
Coverage by MITRE tactic |
| GET |
/api/v1/metrics/test-pipeline |
Authenticated |
Test counts by pipeline state |
| GET |
/api/v1/metrics/team-activity |
Authenticated |
Red/Blue team activity |
| GET |
/api/v1/metrics/validation-rate |
Authenticated |
Approval/rejection rates by lead |
| GET |
/api/v1/metrics/recent-tests |
Authenticated |
Last 10 updated tests |
System (Admin)
| Method |
Route |
Auth |
Description |
| POST |
/api/v1/system/sync-mitre |
Admin |
Trigger MITRE ATT&CK sync |
| POST |
/api/v1/system/run-intel-scan |
Admin |
Trigger threat-intel RSS scan |
| POST |
/api/v1/system/import-atomic-red-team |
Admin |
Import Atomic Red Team templates |
| GET |
/api/v1/system/scheduler-status |
Admin |
Background scheduler health |
Users (Admin)
| Method |
Route |
Auth |
Description |
| GET |
/api/v1/users |
Admin |
List all users |
| POST |
/api/v1/users |
Admin |
Create new user |
| GET |
/api/v1/users/{id} |
Admin |
Get user by ID |
| PATCH |
/api/v1/users/{id} |
Admin |
Update user |
Audit Logs (Admin)
| Method |
Route |
Auth |
Description |
| GET |
/api/v1/audit-logs |
Admin |
List audit logs (filters: action, entity_type, dates) |
| GET |
/api/v1/audit-logs/actions |
Admin |
List distinct action types |
| GET |
/api/v1/audit-logs/entity-types |
Admin |
List distinct entity types |
Project Structure
Database Schema
| Table |
Description |
users |
User accounts with role-based access |
techniques |
MITRE ATT&CK techniques with coverage status |
tests |
Security tests with Red/Blue fields, dual validation, and remediation |
test_templates |
Predefined test catalog (Atomic Red Team, custom) |
evidences |
File evidence separated by team (red/blue) |
notifications |
In-app notifications with read status |
intel_items |
Threat intelligence items linked to techniques |
audit_logs |
System-wide audit trail |
Configuration
| Variable |
Default |
Description |
DATABASE_URL |
postgresql://postgres:postgres@postgres:5432/attackdb |
PostgreSQL connection |
SECRET_KEY |
change-me-in-production |
JWT signing key |
ALGORITHM |
HS256 |
JWT signing algorithm |
ACCESS_TOKEN_EXPIRE_MINUTES |
60 |
Token lifetime |
MINIO_ENDPOINT |
minio:9000 |
MinIO server |
MINIO_ACCESS_KEY |
minioadmin |
MinIO access key |
MINIO_SECRET_KEY |
minioadmin |
MinIO secret key |
MINIO_BUCKET |
evidence |
Evidence bucket |
Development
Running Migrations
Running Tests
License
This project is proprietary software. All rights reserved.