MITRE, Sigma ed evasione
Come i rilevamenti vengono etichettati, esportati e perché le semplici codifiche non li aggirano. Per le 26 righe con confidenza/descrizione/esempio, consulta Categorie.
Mappatura MITRE ATT&CK — ID verificati
ID da pkg/analysis/detectionTechniques, verificati rispetto ad ATT&CK. La mappatura è usata per l'export Sigma; i record attuali dei report JSON e HTML non includono un array techniques.
| Categoria | ID tecnica | Nome |
|---|---|---|
sql_injection | T1190 | Sfruttamento di applicazione esposta pubblicamente |
nosql_injection | T1190 | Sfruttamento di applicazione esposta pubblicamente |
xss | T1059.007 | Interprete di comandi e scripting: JavaScript |
| T1189 | Compromissione drive-by | |
ssti | T1190 | Sfruttamento di applicazione esposta pubblicamente |
ssrf | T1190 | Sfruttamento di applicazione esposta pubblicamente |
rce | T1059 | Interprete di comandi e scripting |
| T1190 | Sfruttamento di applicazione esposta pubblicamente | |
path_traversal | T1083 | Scoperta di file e directory |
lfi_wrapper_abuse | T1083 | Scoperta di file e directory |
| T1190 | Sfruttamento di applicazione esposta pubblicamente | |
graphql_introspection | T1595.002 | Scansione attiva: scansione delle vulnerabilità |
log4j_jndi | T1190 | Sfruttamento di applicazione esposta pubblicamente |
| T1059 | Interprete di comandi e scripting | |
sensitive_file_probe | T1083 | Scoperta di file e directory |
| T1552.001 | Credenziali non protette: credenziali nei file | |
admin_probe | T1595.002 | Scansione attiva: scansione delle vulnerabilità |
wordpress_probe | T1595.002 | Scansione attiva: scansione delle vulnerabilità |
cgi_probe | T1595.002 | Scansione attiva: scansione delle vulnerabilità |
scanner | T1595 | Scansione attiva |
xxe | T1190 | Sfruttamento di applicazione esposta pubblicamente |
open_redirect | T1566.002 | Phishing: collegamento spearphishing |
ldap_injection | T1190 | Sfruttamento di applicazione esposta pubblicamente |
xpath_injection | T1190 | Sfruttamento di applicazione esposta pubblicamente |
crlf_injection | T1190 | Sfruttamento di applicazione esposta pubblicamente |
| T1059 | Interprete di comandi e scripting | |
prototype_pollution | T1190 | Sfruttamento di applicazione esposta pubblicamente |
| T1059.007 | Interprete di comandi e scripting: JavaScript | |
ssi_injection | T1190 | Sfruttamento di applicazione esposta pubblicamente |
| T1059 | Interprete di comandi e scripting | |
ua_rotation | T1595.001 | Scansione attiva: scansione di blocchi IP |
jwt_abuse | T1550.001 | Uso di materiale di autenticazione alternativo: token di accesso all'applicazione |
| T1190 | Sfruttamento di applicazione esposta pubblicamente | |
object_enumeration | T1595.002 | Scansione attiva: scansione delle vulnerabilità |
| T1190 | Sfruttamento di applicazione esposta pubblicamente | |
beaconing | T1071.001 | Protocollo a livello applicazione: protocolli web |
| T1573 | Canale cifrato |
Fonte di verità: pkg/analysis/detect.go:64-91. Se un ID sembra errato, apri una issue — gli ID non sono approssimati.
Esportazione Sigma — 23 su 26
Le categorie basate su pattern vengono esportate; 3 comportamentali no (richiedono stato, non una singola richiesta).
| Esportato | Motivo |
|---|---|
| 23 categorie di pattern | Regex su singola richiesta + campi uri|status|client_ip, uuidV5 deterministico (uuidNamespaceDNS + "caddy-analyzer:sigma:"+title) |
3 escluse: ua_rotation, object_enumeration, beaconing | Richiedono ≥10 campioni per IP/percorso, controllo CV, ring buffer — non esprimibile come Sigma a evento singolo |
caddy-analyze export-sigma rules.yml
caddy-analyze export-sigma - | sigma check --rules - # validate
# import into Splunk/Elastic — tags carry ATT&CK IDs above
Resistenza all'evasione
Perché %2e%2e, doppia codifica e maiuscole/minuscole miste non aggirano il rilevamento.
| Tecnica | Come | Codice |
|---|---|---|
| Doppio passaggio | Ogni URI viene controllato come decodeURI (con gestione query PathUnescape+QueryUnescape + fallback manuale %) e raw | DetectAll + rawPatterns in init() |
| Percorso rapido letterale | Alternative pure confrontate tramite strings.Contains in minuscolo (~100× più veloce) | extractPureLiterals / compileLowercase |
| Gate | Il letterale richiesto più lungo deve essere presente (strings.Contains) prima di eseguire la regex | extractGate |
| Marker / triage | Raccoglie tutti i letterali di ≥2 caratteri; se non è presente alcuno, salta tutti i pattern per quella sorgente | buildMarkers / matchMarkers / isMarkerCovered |
| Eliminazione case-fold | Compila le regex in minuscolo, converte la sorgente una volta in minuscolo — nessun FoldCase per corrispondenza (~8% CPU risparmiata) | lowercaseFold |
| Limiti LRU | IP 100k, GeoIP 50k, istogramma 1K bucket | DefaultIPCap, geoCache |
Verifica che il bypass sia coperto: rawPatterns include %2e%2e%2f, %252e, %c0%ae, 0x7f000001 ecc. Consulta le fixture in pkg/analysis/detect.go:778-801 e testdata/generate.py.