Related Issues
Related to #6366, #3290
Summary
This issue tracks the Rule Updates themselves, while #6366 tracks the tooling necessary to update the rules. They may be resolved by the same PR.
MITRE ATT&CK v19.0.0 introduces major Enterprise matrix changes: the Defense Evasion tactic was retired and split into Stealth (TA0005) and Defense Impairment (TA0112). When we pull the latest v19.0.0 data in this repo it reflects the new tactic names, but hundreds of detection rules still declare the retired tactic label Defense Evasion and tooling that resolves tactics from MITRE data fails with KeyError: 'Defense Evasion'.
This issue tracks aligning rule metadata and tags with ATT&CK v19.
Observed failure
When running dev tooling that rebuilds threat metadata (e.g. update_attack_in_rules → attack.build_threat_map_entry), execution fails at tactic lookup:
KeyError: 'Defense Evasion'
Stack location: detection_rules/attack.py — tactic_id = tactics_map[tactic] (build_threat_map_entry), because tactics_map is keyed by tactic name values from the loaded STIX file (x-mitre-tactic), which no longer includes "Defense Evasion".
After refresh, the bundled data uses tactic display names such as Stealth (TA0005) and Defense Impairment (TA0112), not the legacy umbrella name.
MITRE v19 context (Enterprise)
- Defense Evasion tactic retired; work split across:
- Stealth (TA0005): hiding activity (obfuscation, indicator removal, injection, etc.).
- Defense Impairment (TA0112): disabling or weakening security controls (EDR tampering, destructive changes to defensive configurations, etc.).
- Technique/tactic associations were reshuffled; the Enterprise matrix counts changed (MITRE cites updated technique/sub-technique totals).
Important: TA0005 remains as an ID but now denotes Stealth, not “Defense Evasion.” Rules must be updated by technique-to-tactic mapping from v19 STIX, not by renaming every rule to a single new tactic.
Scope in this repository
Approximate counts (TOML under rules/ and rules_building_block/):
| Area |
Count |
Files with threat tactic name = "Defense Evasion" |
695 |
├─ rules/ |
646 |
└─ rules_building_block/ |
49 |
hunting/ |
0 (no matches in current scan) |
The same 695 files use id = "TA0005" with reference pointing at https://attack.mitre.org/tactics/TA0005/ for that block; semantics and display names should be reconciled with Stealth per v19.
Additional cleanup
- many rules still carry tags such as
Tactic: Defense Evasion; those should be updated once tag conventions for Stealth / Defense Impairment are decided.
- In
detection_rules/schemas/definitions.py EXPECTED_RULE_TAGS "Tactic: Defense Evasion" should be removed and the new Tactic names "Tactic: Stealth" and "Tactic: Defense Impairment should be added
- Historical
detection_rules/etc/api_schemas/** references to Defense Evasion may need alignment with Kibana / minimum stack expectations. --> This is only 7.X versions and no additional cleanup may be required here
- Filename changes needed : When you change [[rule.threat]] tactic names from Defense Evasion to Stealth and/or Defense Impairment (exact strings must match what you put in TOML and what MITRE uses in your bundle)
| New primary tactic name (example) |
Required filename prefix |
| Stealth |
stealth_ |
| Defense Impairment |
defense_impairment_ |
Proposed approach
- Pull in the latest MITRE versions v19.0.0
- Source of truth: Use the repo’s bundled
attack-v*.json.gz (and detection_rules.attack.matrix / technique kill-chain phases) to determine which tactic (Stealth vs Defense Impairment) each listed technique ID belongs to under v19.
- Rule edits: For each affected rule, update
[[rule.threat]] entries so tactic name, id, and reference match MITRE v19 for the techniques declared. Where techniques span both new tactics, split into separate [[rule.threat]] blocks (one tactic per block with the correct techniques).
- Tags & schemas: Align
Tactic: … tags and any allowed tactic enums with v19
- Filenames of rules to be changed.
- Rollout: Prefered to decouple with the release and rollout this as separate individual enhancement.
Acceptance criteria
Related Issues
Related to #6366, #3290
Summary
This issue tracks the Rule Updates themselves, while #6366 tracks the tooling necessary to update the rules. They may be resolved by the same PR.
MITRE ATT&CK v19.0.0 introduces major Enterprise matrix changes: the Defense Evasion tactic was retired and split into Stealth (TA0005) and Defense Impairment (TA0112). When we pull the latest v19.0.0 data in this repo it reflects the new tactic names, but hundreds of detection rules still declare the retired tactic label
Defense Evasionand tooling that resolves tactics from MITRE data fails withKeyError: 'Defense Evasion'.This issue tracks aligning rule metadata and tags with ATT&CK v19.
Observed failure
When running dev tooling that rebuilds threat metadata (e.g.
update_attack_in_rules→attack.build_threat_map_entry), execution fails at tactic lookup:Stack location:
detection_rules/attack.py—tactic_id = tactics_map[tactic](build_threat_map_entry), becausetactics_mapis keyed by tacticnamevalues from the loaded STIX file (x-mitre-tactic), which no longer includes"Defense Evasion".After refresh, the bundled data uses tactic display names such as Stealth (TA0005) and Defense Impairment (TA0112), not the legacy umbrella name.
MITRE v19 context (Enterprise)
Important: TA0005 remains as an ID but now denotes Stealth, not “Defense Evasion.” Rules must be updated by technique-to-tactic mapping from v19 STIX, not by renaming every rule to a single new tactic.
Scope in this repository
Approximate counts (TOML under
rules/andrules_building_block/):name = "Defense Evasion"rules/rules_building_block/hunting/The same 695 files use
id = "TA0005"withreferencepointing athttps://attack.mitre.org/tactics/TA0005/for that block; semantics and display names should be reconciled with Stealth per v19.Additional cleanup
Tactic: Defense Evasion; those should be updated once tag conventions for Stealth / Defense Impairment are decided.detection_rules/schemas/definitions.pyEXPECTED_RULE_TAGS"Tactic: Defense Evasion"should be removed and the new Tactic names"Tactic: Stealth"and"Tactic: Defense Impairmentshould be addeddetection_rules/etc/api_schemas/** references to Defense Evasion may need alignment with Kibana / minimum stack expectations. --> This is only 7.X versions and no additional cleanup may be required hereProposed approach
attack-v*.json.gz(anddetection_rules.attack.matrix/ technique kill-chain phases) to determine which tactic (Stealth vs Defense Impairment) each listed technique ID belongs to under v19.[[rule.threat]]entries so tacticname,id, andreferencematch MITRE v19 for the techniques declared. Where techniques span both new tactics, split into separate[[rule.threat]]blocks (one tactic per block with the correct techniques).Tactic: …tags and any allowed tactic enums with v19Acceptance criteria
Defense Evasionas a tactic name (unless explicitly exempted by policy—default is none).python -m detection_rulesworkflows that rebuild or validate threat maps complete withoutKeyErrorfor legacy tactic names.