v0.7.1 · aggiornata · GitHub

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.

CategoriaID tecnicaNome
sql_injectionT1190Sfruttamento di applicazione esposta pubblicamente
nosql_injectionT1190Sfruttamento di applicazione esposta pubblicamente
xssT1059.007Interprete di comandi e scripting: JavaScript
T1189Compromissione drive-by
sstiT1190Sfruttamento di applicazione esposta pubblicamente
ssrfT1190Sfruttamento di applicazione esposta pubblicamente
rceT1059Interprete di comandi e scripting
T1190Sfruttamento di applicazione esposta pubblicamente
path_traversalT1083Scoperta di file e directory
lfi_wrapper_abuseT1083Scoperta di file e directory
T1190Sfruttamento di applicazione esposta pubblicamente
graphql_introspectionT1595.002Scansione attiva: scansione delle vulnerabilità
log4j_jndiT1190Sfruttamento di applicazione esposta pubblicamente
T1059Interprete di comandi e scripting
sensitive_file_probeT1083Scoperta di file e directory
T1552.001Credenziali non protette: credenziali nei file
admin_probeT1595.002Scansione attiva: scansione delle vulnerabilità
wordpress_probeT1595.002Scansione attiva: scansione delle vulnerabilità
cgi_probeT1595.002Scansione attiva: scansione delle vulnerabilità
scannerT1595Scansione attiva
xxeT1190Sfruttamento di applicazione esposta pubblicamente
open_redirectT1566.002Phishing: collegamento spearphishing
ldap_injectionT1190Sfruttamento di applicazione esposta pubblicamente
xpath_injectionT1190Sfruttamento di applicazione esposta pubblicamente
crlf_injectionT1190Sfruttamento di applicazione esposta pubblicamente
T1059Interprete di comandi e scripting
prototype_pollutionT1190Sfruttamento di applicazione esposta pubblicamente
T1059.007Interprete di comandi e scripting: JavaScript
ssi_injectionT1190Sfruttamento di applicazione esposta pubblicamente
T1059Interprete di comandi e scripting
ua_rotationT1595.001Scansione attiva: scansione di blocchi IP
jwt_abuseT1550.001Uso di materiale di autenticazione alternativo: token di accesso all'applicazione
T1190Sfruttamento di applicazione esposta pubblicamente
object_enumerationT1595.002Scansione attiva: scansione delle vulnerabilità
T1190Sfruttamento di applicazione esposta pubblicamente
beaconingT1071.001Protocollo a livello applicazione: protocolli web
T1573Canale 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).

EsportatoMotivo
23 categorie di patternRegex su singola richiesta + campi uri|status|client_ip, uuidV5 deterministico (uuidNamespaceDNS + "caddy-analyzer:sigma:"+title)
3 escluse: ua_rotation, object_enumeration, beaconingRichiedono ≥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.

TecnicaComeCodice
Doppio passaggioOgni URI viene controllato come decodeURI (con gestione query PathUnescape+QueryUnescape + fallback manuale %) e rawDetectAll + rawPatterns in init()
Percorso rapido letteraleAlternative pure confrontate tramite strings.Contains in minuscolo (~100× più veloce)extractPureLiterals / compileLowercase
GateIl letterale richiesto più lungo deve essere presente (strings.Contains) prima di eseguire la regexextractGate
Marker / triageRaccoglie tutti i letterali di ≥2 caratteri; se non è presente alcuno, salta tutti i pattern per quella sorgentebuildMarkers / matchMarkers / isMarkerCovered
Eliminazione case-foldCompila le regex in minuscolo, converte la sorgente una volta in minuscolo — nessun FoldCase per corrispondenza (~8% CPU risparmiata)lowercaseFold
Limiti LRUIP 100k, GeoIP 50k, istogramma 1K bucketDefaultIPCap, 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.