Add wiki page: Campaigns
158
Campaigns.md
158
Campaigns.md
@@ -0,0 +1,158 @@
|
||||
# Campaigns
|
||||
|
||||
Campaigns group related tests under a common objective — for example, simulating a
|
||||
specific threat actor, testing a specific tactic, or running a quarterly purple team exercise.
|
||||
|
||||
---
|
||||
|
||||
## Campaign Types
|
||||
|
||||
| Type | Description |
|
||||
|------|-------------|
|
||||
| `purple_team` | Collaborative red+blue exercise. Tests are executed with blue team full knowledge. |
|
||||
| `red_team` | Blind offensive assessment. Blue team may not know which techniques will be tested. |
|
||||
| `blue_team` | Detection-focused exercise. Blue team validates detection capabilities against known TTPs. |
|
||||
| `tabletop` | Scenario walkthrough. No live execution — tests are planned and reviewed conceptually. |
|
||||
|
||||
---
|
||||
|
||||
## Campaign Lifecycle
|
||||
|
||||
```
|
||||
draft ──────────────> active ──────────────> completed
|
||||
│ │ │
|
||||
│ POST /activate │ POST /complete │
|
||||
│ (leads, admin) │ (red_lead, admin) │
|
||||
│ │ │
|
||||
└── at least one └── execution └── final state
|
||||
test required in progress (immutable)
|
||||
```
|
||||
|
||||
### Draft
|
||||
|
||||
- Campaign is being planned
|
||||
- Tests can be added and removed
|
||||
- Metadata (name, type, objective, schedule) can be edited
|
||||
|
||||
**Create a campaign:**
|
||||
```http
|
||||
POST /api/v1/campaigns
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Q1 2024 Purple Team — APT29 Simulation",
|
||||
"description": "Full simulation of APT29 TTPs against corp environment",
|
||||
"campaign_type": "purple_team",
|
||||
"objective": "Measure detection coverage against Cozy Bear TTPs"
|
||||
}
|
||||
```
|
||||
|
||||
**Add tests:**
|
||||
```http
|
||||
POST /api/v1/campaigns/{id}/tests
|
||||
{"test_id": "test-uuid"}
|
||||
```
|
||||
|
||||
**Set schedule:**
|
||||
```http
|
||||
PATCH /api/v1/campaigns/{id}/schedule
|
||||
{"start_date": "2024-03-01T09:00:00Z", "end_date": "2024-03-15T18:00:00Z"}
|
||||
```
|
||||
|
||||
### Active
|
||||
|
||||
- Triggered by POST /campaigns/{id}/activate (requires at least one linked test)
|
||||
- Tests within the campaign are executed following the normal [Test-Lifecycle](Test-Lifecycle)
|
||||
- Campaign-level progress is tracked in real time
|
||||
|
||||
**Activate:**
|
||||
```http
|
||||
POST /api/v1/campaigns/{id}/activate
|
||||
```
|
||||
|
||||
### Completed
|
||||
|
||||
- Only red_lead or admin can complete a campaign
|
||||
- All remaining tests are frozen in their current state
|
||||
- Report generation becomes available for the full campaign
|
||||
|
||||
**Complete:**
|
||||
```http
|
||||
POST /api/v1/campaigns/{id}/complete
|
||||
{"completion_notes": "All priority techniques tested. 72% detection rate."}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Creating a Campaign from a Threat Actor
|
||||
|
||||
Aegis maintains a database of known threat actor profiles with associated MITRE techniques.
|
||||
You can instantly scaffold a campaign for a threat actor:
|
||||
|
||||
```http
|
||||
POST /api/v1/campaigns/from-threat-actor/{actor_id}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"campaign_name": "APT29 Full Simulation",
|
||||
"campaign_type": "purple_team",
|
||||
"include_sub_techniques": true
|
||||
}
|
||||
```
|
||||
|
||||
This automatically:
|
||||
1. Creates a new campaign
|
||||
2. Creates one test draft per technique linked to the threat actor
|
||||
3. Returns the campaign with all tests pre-populated
|
||||
|
||||
---
|
||||
|
||||
## Progress Tracking
|
||||
|
||||
```http
|
||||
GET /api/v1/campaigns/{id}/progress
|
||||
```
|
||||
|
||||
Returns:
|
||||
```json
|
||||
{
|
||||
"campaign_id": "uuid",
|
||||
"total_tests": 24,
|
||||
"validated": 18,
|
||||
"in_progress": 4,
|
||||
"not_started": 2,
|
||||
"detection_rate": 0.72,
|
||||
"progress_percent": 75.0
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Campaign History
|
||||
|
||||
Every state change in a campaign is logged:
|
||||
```http
|
||||
GET /api/v1/campaigns/{id}/history
|
||||
```
|
||||
|
||||
Returns list of:
|
||||
```json
|
||||
{
|
||||
"timestamp": "2024-03-01T09:15:00Z",
|
||||
"from_state": "draft",
|
||||
"to_state": "active",
|
||||
"actor": "red_lead_user",
|
||||
"notes": null
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Reports for Campaigns
|
||||
|
||||
Once a campaign is active or completed, a professional report can be generated:
|
||||
```http
|
||||
GET /api/v1/reports/generate/purple-campaign/{id}?format=pdf
|
||||
```
|
||||
|
||||
See [Executive-Dashboard-and-Reports](Executive-Dashboard-and-Reports) for all report options.
|
||||
|
||||
Reference in New Issue
Block a user