Add wiki page: Detection-Lifecycle
@@ -0,0 +1,213 @@
|
||||
# Detection Lifecycle
|
||||
|
||||
The Detection Lifecycle module provides a structured system for the Blue Team to manage,
|
||||
validate, and track the health of detection capabilities mapped to MITRE ATT&CK techniques.
|
||||
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
The detection lifecycle tracks three main concepts:
|
||||
|
||||
1. **Detection Assets** — What you use to detect (SIEM rules, EDR policies, sensors)
|
||||
2. **Validations** — Proof that an asset correctly detected a technique
|
||||
3. **Infrastructure Changes** — Events that may have broken your detections
|
||||
|
||||
These three together provide a **confidence score** per technique: how certain are we
|
||||
that our detections for technique T still work today?
|
||||
|
||||
---
|
||||
|
||||
## Detection Assets
|
||||
|
||||
A detection asset represents a defensive capability that can detect one or more techniques.
|
||||
|
||||
### Asset Types
|
||||
|
||||
| Type | Examples |
|
||||
|------|---------|
|
||||
| `siem_rule` | Splunk SPL query, KQL rule in Sentinel |
|
||||
| `edr_policy` | CrowdStrike prevention policy, Defender ATP rule |
|
||||
| `sensor` | Network sensor, honeypot, canary token |
|
||||
| `ids_rule` | Snort/Suricata rule |
|
||||
| `manual_review` | Human review process |
|
||||
| `custom` | Any other detection mechanism |
|
||||
|
||||
### Creating an Asset
|
||||
|
||||
```http
|
||||
POST /api/v1/detection-lifecycle/assets
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Splunk: PowerShell AMSI Bypass Detection",
|
||||
"asset_type": "siem_rule",
|
||||
"description": "SPL search for AMSI bypass patterns in Windows PowerShell logs",
|
||||
"owner_id": "blue-lead-uuid",
|
||||
"team": "blue",
|
||||
"platform": "Windows",
|
||||
"rule_content": "index=wineventlog EventCode=4104 ScriptBlockText=*AmsiUtils*"
|
||||
}
|
||||
```
|
||||
|
||||
### Linking to Techniques
|
||||
|
||||
```http
|
||||
POST /api/v1/detection-lifecycle/assets/{id}/techniques/{technique_id}
|
||||
```
|
||||
|
||||
One asset can be linked to multiple techniques. One technique can have multiple assets.
|
||||
|
||||
---
|
||||
|
||||
## Validations
|
||||
|
||||
A validation record proves that an asset successfully detected a technique at a
|
||||
specific point in time. This is usually created after a successful test.
|
||||
|
||||
### Creating a Validation
|
||||
|
||||
```http
|
||||
POST /api/v1/detection-lifecycle/validations
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"asset_id": "asset-uuid",
|
||||
"technique_id": "T1059.001",
|
||||
"test_id": "test-uuid",
|
||||
"validated_at": "2024-03-15T10:30:00Z",
|
||||
"notes": "SIEM alert fired within 47 seconds of execution",
|
||||
"confidence": "high"
|
||||
}
|
||||
```
|
||||
|
||||
### Invalidating a Validation
|
||||
|
||||
When a detection rule changes, is disabled, or the infrastructure shifts, you should
|
||||
invalidate the previous validation so the confidence score drops:
|
||||
|
||||
```http
|
||||
POST /api/v1/detection-lifecycle/validations/{id}/invalidate
|
||||
{"reason": "SIEM rule rewritten — new version not yet tested"}
|
||||
```
|
||||
|
||||
### Confidence Levels
|
||||
|
||||
| Level | Meaning |
|
||||
|-------|---------|
|
||||
| `high` | Tested within 30 days, full detection |
|
||||
| `medium` | Tested within 90 days OR partial detection |
|
||||
| `low` | Tested more than 90 days ago |
|
||||
| `unknown` | No validation exists |
|
||||
|
||||
---
|
||||
|
||||
## Infrastructure Changes
|
||||
|
||||
When infrastructure changes occur (SIEM migration, EDR update, log forwarding reconfigured),
|
||||
existing validations may no longer be accurate. Recording an infrastructure change
|
||||
automatically flags affected assets and adds techniques to the revalidation queue.
|
||||
|
||||
### Recording a Change
|
||||
|
||||
```http
|
||||
POST /api/v1/detection-lifecycle/infrastructure-changes
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "Splunk → Microsoft Sentinel Migration",
|
||||
"description": "All SIEM rules migrated from Splunk to KQL in Sentinel",
|
||||
"change_type": "siem_migration",
|
||||
"affected_asset_ids": ["asset-uuid-1", "asset-uuid-2"],
|
||||
"occurred_at": "2024-03-01T00:00:00Z"
|
||||
}
|
||||
```
|
||||
|
||||
**Effect**: All validations linked to affected assets are automatically marked as
|
||||
potentially stale. An alert rule of type `detection_gap` may fire.
|
||||
|
||||
### Revalidation Queue
|
||||
|
||||
After an infrastructure change, use the ownership module to see which techniques
|
||||
need re-testing:
|
||||
```http
|
||||
GET /api/v1/ownership/revalidation-queue
|
||||
```
|
||||
|
||||
Generate an updated queue:
|
||||
```http
|
||||
POST /api/v1/ownership/revalidation-queue/generate
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Detection Dashboard
|
||||
|
||||
```http
|
||||
GET /api/v1/detection-lifecycle/dashboard
|
||||
```
|
||||
|
||||
Returns per-technique detection confidence:
|
||||
```json
|
||||
[
|
||||
{
|
||||
"technique_id": "T1059.001",
|
||||
"technique_name": "PowerShell",
|
||||
"asset_count": 2,
|
||||
"latest_validation": "2024-03-15T10:30:00Z",
|
||||
"confidence": "high",
|
||||
"days_since_validation": 5,
|
||||
"pending_revalidation": false
|
||||
},
|
||||
{
|
||||
"technique_id": "T1078",
|
||||
"technique_name": "Valid Accounts",
|
||||
"asset_count": 1,
|
||||
"latest_validation": "2023-11-10T08:00:00Z",
|
||||
"confidence": "low",
|
||||
"days_since_validation": 125,
|
||||
"pending_revalidation": true
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Detection Rules
|
||||
|
||||
Detection rules are the concrete SIEM/EDR rule definitions linked to Aegis tests.
|
||||
They complement detection assets by providing the exact rule logic.
|
||||
|
||||
### Creating a Rule
|
||||
|
||||
```http
|
||||
POST /api/v1/detection-rules
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "PowerShell Encoded Command Execution",
|
||||
"technique_ids": ["T1059.001"],
|
||||
"platform": "Windows",
|
||||
"rule_type": "siem",
|
||||
"rule_content": "EventCode=4104 ScriptBlockText=*-EncodedCommand*",
|
||||
"description": "Detects PowerShell execution with base64 encoded commands",
|
||||
"severity": "high",
|
||||
"is_enabled": true
|
||||
}
|
||||
```
|
||||
|
||||
### Evaluating a Rule Against a Test
|
||||
|
||||
After running a test, record whether the rule fired:
|
||||
```http
|
||||
POST /api/v1/detection-rules/evaluate
|
||||
{
|
||||
"rule_id": "rule-uuid",
|
||||
"test_id": "test-uuid",
|
||||
"result": "triggered",
|
||||
"time_to_detect_seconds": 23,
|
||||
"notes": "Rule fired on first PowerShell invocation"
|
||||
}
|
||||
```
|
||||
|
||||
`result` options: `triggered`, `not_triggered`, `false_positive`
|
||||
|
||||
Reference in New Issue
Block a user