2026-06-01 · 1 min read · James Pichardo

Measuring Detection Coverage with MITRE ATT&CK

How we map every test result to ATT&CK techniques and turn raw executions into a coverage heatmap.

Every test in ProjectAchilles carries ATT&CK technique metadata, so each execution becomes a data point about a specific adversary behavior.

Tagging tests

A test declares its techniques in metadata:

// TechniqueTags maps a test binary to the ATT&CK techniques it exercises.
type TechniqueTags struct {
    Techniques []string `json:"techniques"` // e.g. ["T1059.001"]
    Tactics    []string `json:"tactics"`    // e.g. ["execution"]
}

Aggregating results

On the analytics side, an Elasticsearch aggregation groups executions by technique:

const coverage = await client.search({
  index: 'achilles-results-*',
  size: 0,
  aggs: {
    by_technique: {
      terms: { field: 'achilles.techniques', size: 500 },
      aggs: { protected: { filter: { term: { 'achilles.exit_code': 0 } } } },
    },
  },
});

Each technique bucket becomes a cell in the coverage heatmap: green where detections fired, red where the technique executed unnoticed. That red is your work queue.