Ottimizzazione delle regole del firewall dell'applicazione Web

1

Di seguito sono riportate le due regole prese da ModSecurity CRS core Ruleset. Queste due regole sono regole di base per gli attacchi XSS. Se osserviamo queste due regole, le loro variabili e azioni sono le stesse che differiscono nella loro espressione regolare, cioè \ bgetparentfolder \ b "e \ bonmousedown \ b \ W *? \=" E abbiamo trovato un numero enorme di tali regole. È una ridondanza? Posso unire queste regole in una singola espressione regolare?

SecRule REQUEST_COOKIES|REQUEST_COOKIES_NAMES|REQUEST_FILENAME|ARGS_NAMES|ARGS|XML:/* "\bgetparentfolder\b" \ "phase:2,rev:'2.2.4',capture,t:none,t:htmlEntityDecode,t:compressWhiteSpace,t:lowercase,ctl:auditLogParts=+E,block,msg:'Cross-site Scripting (XSS) Attack',id:'958016',tag:'WEB_ATTACK/XSS',tag:'WASCTC/WASC-8',tag:'WASCTC/WASC-22',tag:'OWASP_TOP_10/A2',tag:'OWASP_AppSensor/IE1',tag:'PCI/6.5.1',logdata:'%{TX.0}',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.xss_score=+%{tx.critical_anomaly_score},setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-WEB_ATTACK/XSS-%{matched_var_name}=%{tx.0}"

SecRule REQUEST_COOKIES|REQUEST_COOKIES_NAMES|REQUEST_FILENAME|ARGS_NAMES|ARGS|XML:/* "\bonmousedown\b\W*?\=" \ "phase:2,rev:'2.2.4',capture,t:none,t:htmlEntityDecode,t:compressWhiteSpace,t:lowercase,ctl:auditLogParts=+E,block,msg:'Cross-site Scripting (XSS) Attack',id:'958414',tag:'WEB_ATTACK/XSS',tag:'WASCTC/WASC-8',tag:'WASCTC/WASC-22',tag:'OWASP_TOP_10/A2',tag:'OWASP_AppSensor/IE1',tag:'PCI/6.5.1',logdata:'%{TX.0}',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.xss_score=+%{tx.critical_anomaly_score},setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-WEB_ATTACK/XSS-%{matched_var_name}=%{tx.0}"

    
posta Ali Ahmad 02.08.2012 - 06:08
fonte

1 risposta

1

Bene, il modo in cui leggo la differenza tra queste due espressioni regolari,

\bgetparentfolder\b

\bonmousedown\b\W*?\=

è che il primo corrisponde semplicemente alla stringa "getparentfolder", mentre il secondo corrisponde alla stringa "onmousedown" aggiunta a qualsiasi lettera tranne lettere, cifre e underscore, che corrisponde pigramente all'elemento precedente (il carattere aggiunto) zero o più volte. Credo che questo corrisponderebbe a entrambi i modi di utilizzare l'evento javascript onmousedown:

In HTML:

<element onmousedown="SomeJavaScriptCode">

In JavaScript:

object.onmousedown="SomeJavaScriptCode"

Questo pagina dall'ebook ModSecurity 2.5 menziona come potrebbe essere utilizzato onmousedown in un attacco XSS.

Oh, e come per la prima di queste regex, "\ bgetparentfolder \ b", non la trovo in nessun riferimento Javascript o JScript, ma dopo averlo su Google, posso vedere che funzioni e metodi di quel nome appaiono in un certo numero di lingue, ad esempio VBScript,

Quindi è chiaro che le due regole sono alla ricerca di implementazioni molto diverse della stessa classe di attacco (XSS). Quindi penso che non avrebbe senso combinarli in una singola regola con una singola regex combinata.

    
risposta data 08.08.2012 - 07:43
fonte

Leggi altre domande sui tag