2013-08-14 14 views
8

Ho riscontrato tonnellate di problemi con Mod Security. Sono impegnato a scrivere un CMS per un progetto al lavoro e mentre sviluppavo una pagina per modificare un determinato record del database continuavo a ricevere 403 errori. Dopo ore passate a sbattere la testa contro la scrivania, aggiustando bit di codice, ho finalmente modificato lo script su cui era stato pubblicato il mio modulo, per contenere un semplice echo "test";. Anche l'invio a questa semplice pagina ha generato un errore 403. Ho incasinato il mio modulo e alla fine ho scoperto che se riducevo la quantità di dati che stavo pubblicando il modulo inviato correttamente (in particolare riduco la quantità di testo all'interno di una textarea).Limiti massimi di ModSecurity (errori di limite PCRE)

Dopo aver controllato i log (Sì, questa non era la prima cosa che ho fatto - sigh) ho notato che stavo ottenendo numerosi errori da ModSecurity, come ad esempio:

[Mon Aug 12 16:34:45 2013] [error] [client XX.XXX.XXX.XXX] ModSecurity: Failed to access DBM file "/etc/httpd/logs//global": Permission denied [hostname "XXXXXXX.XXX"] [uri "/admin/index.php"] [unique_id "UgkAlW1shFcAAHTMK80AAAAF"] 
[Mon Aug 12 16:34:45 2013] [error] [client XX.XXX.XXX.XXX] ModSecurity: Failed to access DBM file "/etc/httpd/logs//ip": Permission denied [hostname "XXXXXXX.XXX"] [uri "/admin/index.php"] [unique_id "UgkAlW1shFcAAHTMK80AAAAF"] 
[Mon Aug 12 17:11:33 2013] [error] [client XX.XXX.XXX.XXX] ModSecurity: Rule execution error - PCRE limits exceeded (-8): (null). [hostname "XXXXXXX.XXX"] [uri "/admin/index.php"] [unique_id "UgkJNW1shFcAAHXUMHkAAAAH"] 
[Mon Aug 12 17:11:33 2013] [error] [client XX.XXX.XXX.XXX] ModSecurity: Access denied with code 403 (phase 2). Match of "streq 0" against "TX:MSC_PCRE_LIMITS_EXCEEDED" required. [file "/etc/httpd/conf.d/mod_security.conf"] [line "93"] [msg "ModSecurity internal error flagged: TX:MSC_PCRE_LIMITS_EXCEEDED"] [hostname "XXXXXXX.XXX"] [uri "/admin/index.php"] [unique_id "UgkJNW1shFcAAHXUMHkAAAAH"] 

Sono stato nei guai , Googling e cambiare le regole per giorni senza successo. L'unica cosa che sembra essere in grado di fare è disattivare ModSecurity per questo vhost. Questo per me va bene mentre sto sviluppando il CMS, ma in produzione questo non è davvero qualcosa che voglio fare. Qualcuno ha qualche idea su cosa sta causando questo problema e su come ordinarlo? I log sembrano puntare a regole gentili relative ai limiti delle espressioni regolari, ma da quando cambio il mio script di ricezione per stampare semplicemente la parola test non sto facendo nulla con loro (anche se ho provato a superare i limiti attraverso SecPcreMatchLimit e SecPcreMatchLimitRecursion). Sembra piuttosto che ci sia qualcosa di sbagliato nella quantità di dati che sto inviando.

+0

Sto avendo lo stesso problema e come adesso ho 2 Apache processi in esecuzione al 100% della CPU ... Su un 8 core, non è male in un modo, ma significa anche che alcuni utenti non vengono serviti! –

risposta

1

Ho avuto un problema simile con il modulo PCRE alcune settimane fa ed era correlato a backtrack_limits.

Presumo SecPcreMatchLimit e SecPcreMatchLimitRecursion sono relative a mod_security, ma avete provato aumentando i valori per il modulo PCRE nel file php.ini o durante il tempo di esecuzione di PHP?

pcre.backtrack_limit e pcre.recursion_limit

Si potrebbe anche verificare se il problema è legato ai limiti PCRE con la seguente funzione preg_last_error()

Si può vedere di più qui: http://php.net/manual/en/function.preg-last-error.php

e qui: http://www.php.net/manual/en/pcre.constants.php

Spero che questo aiuti.

+0

Siamo spiacenti, è passato un po 'di tempo da quando ho pubblicato questo problema. Ho impostato quei valori di PCRE nel file php.ini a mio avviso (certamente non l'ho fatto durante l'esecuzione con 'ini_set()' o qualcosa del genere). Inoltre .. Non riesco nemmeno a fare 'preg_last_error()' dal momento che la pagina anche 403s per un semplice test "echo"; ' – Jonathon

+1

Il mio problema sembra essere che ModSecurity tratti i dati che sto trasmettendo come sospetti per alcuni ragione piuttosto che effettivamente avere qualcosa a che fare con PCRE – Jonathon

+2

Metà di questa risposta è sbagliata. In definitiva non ha nulla a che fare con PHP poiché Apache esegue il modulo ModSecurity. In realtà Jonathon dice esplicitamente che se spegne ModSecurity la sua pagina funziona perfettamente. –

1

Ho appena risolto un problema simile, con un post di grandi dimensioni che genera errori di limite PCRE in più regole. Credo che sia sbagliato per mod-security, quindi segnalare la richiesta come dannosa solo perché è esplosa!

Ho sollevato le due impostazioni da te citate dall'impostazione predefinita a 500.000 dal valore predefinito di 1.500 come consigliato in questo post e ha risolto il mio problema.

I valori predefiniti per il limite di corrispondenza PCRE sono molto, molto bassi con ModSecurity. Puoi arrivare a 500K di solito senza danneggiare il tuo set. Ma per vostra informazione: Il limite di corrispondenza PCRE ha lo scopo di ridurre la possibilità dello per un attacco DoS tramite le espressioni regolari. Pertanto, aumentando il limite di si aumenta la vulnerabilità a questo proposito, ma gli errori di PCRE sono molto peggiori dal punto di vista della sicurezza.Ho eseguito con 500K in prod solito:

SecPcreMatchLimit 500000 SecPcreMatchLimitRecursion 500000

https://github.com/SpiderLabs/owasp-modsecurity-crs/issues/656

anche vedere https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#SecPcreMatchLimit