v0.7.1 · updated · GitHub

MITRE, Sigma & Evasion

How detections are tagged, exported, and why simple encodings do not bypass them. For the 26 rows with confidence/description/example, see Categories.

MITRE ATT&CK mapping — verified IDs

IDs from pkg/analysis/detectionTechniques, verified against ATT&CK. The mapping is used for Sigma export; current JSON and HTML report records do not include a techniques array.

CategoryTechnique IDName
sql_injectionT1190Exploit Public-Facing Application
nosql_injectionT1190Exploit Public-Facing Application
xssT1059.007Command and Scripting Interpreter: JavaScript
T1189Drive-by Compromise
sstiT1190Exploit Public-Facing Application
ssrfT1190Exploit Public-Facing Application
rceT1059Command and Scripting Interpreter
T1190Exploit Public-Facing Application
path_traversalT1083File and Directory Discovery
lfi_wrapper_abuseT1083File and Directory Discovery
T1190Exploit Public-Facing Application
graphql_introspectionT1595.002Active Scanning: Vulnerability Scanning
log4j_jndiT1190Exploit Public-Facing Application
T1059Command and Scripting Interpreter
sensitive_file_probeT1083File and Directory Discovery
T1552.001Unsecured Credentials: Credentials In Files
admin_probeT1595.002Active Scanning: Vulnerability Scanning
wordpress_probeT1595.002Active Scanning: Vulnerability Scanning
cgi_probeT1595.002Active Scanning: Vulnerability Scanning
scannerT1595Active Scanning
xxeT1190Exploit Public-Facing Application
open_redirectT1566.002Phishing: Spearphishing Link
ldap_injectionT1190Exploit Public-Facing Application
xpath_injectionT1190Exploit Public-Facing Application
crlf_injectionT1190Exploit Public-Facing Application
T1059Command and Scripting Interpreter
prototype_pollutionT1190Exploit Public-Facing Application
T1059.007Command and Scripting Interpreter: JavaScript
ssi_injectionT1190Exploit Public-Facing Application
T1059Command and Scripting Interpreter
ua_rotationT1595.001Active Scanning: Scanning IP Blocks
jwt_abuseT1550.001Use Alternate Authentication Material: Application Access Token
T1190Exploit Public-Facing Application
object_enumerationT1595.002Active Scanning: Vulnerability Scanning
T1190Exploit Public-Facing Application
beaconingT1071.001Application Layer Protocol: Web Protocols
T1573Encrypted Channel

Source of truth: pkg/analysis/detect.go:64-91. If an ID looks wrong, open an issue — IDs are not approximated.

Sigma export — 23 of 26

Pattern categories export; 3 behavioral do not (they need state, not a single request).

ExportedWhy
23 pattern categoriesSingle-request regex + uri|status|client_ip fields, deterministic uuidV5 (uuidNamespaceDNS + "caddy-analyzer:sigma:"+title)
3 excluded: ua_rotation, object_enumeration, beaconingNeed ≥10 samples per IP/path, CV check, ring buffer — not expressible as single-event Sigma
caddy-analyze export-sigma rules.yml
caddy-analyze export-sigma - | sigma check --rules -  # validate
# import into Splunk/Elastic — tags carry ATT&CK IDs above

Evasion resistance

Why %2e%2e, double-encode and mixed case do not bypass detection.

TechniqueHowCode
Dual-passEvery URI checked as decodeURI (query-aware PathUnescape+QueryUnescape + manual % fallback) and rawDetectAll + rawPatterns in init()
Literal fast pathPure alternations matched via strings.Contains lowercased (~100× faster)extractPureLiterals / compileLowercase
GateLongest required literal must be present (strings.Contains) before regex runsextractGate
Markers / triageCollect all ≥2-char literals; if none present, skip all patterns for that sourcebuildMarkers / matchMarkers / isMarkerCovered
Case-fold eliminationCompile regexes lowercased, lowercase source once — no FoldCase per match (~8% CPU saved)lowercaseFold
LRU capsIPs 100k, GeoIP 50k, histogram 1K bucketsDefaultIPCap, geoCache

Test that bypass is covered: rawPatterns includes %2e%2e%2f, %252e, %c0%ae, 0x7f000001 etc. See pkg/analysis/detect.go:778-801 and testdata/generate.py fixtures.