segunda-feira, agosto 27, 2012

ModSecurity Series 4 - SecRuleRemoveById

    Após habilitar o ModSecurity, uma das primeiras tarefas a serem realizadas é a de verificar por falso-positivos. Existem diversas maneiras de desabiltar uma regra do ModSecurity, vamos ver algumas delas nesse post:

    - Desabilitar a regra no arquivo de rules: essa é a maneira mais simples, basta editar o arquivo onde a regra se encontra, e simplesmente excluí-la ou comentá-la com "#". Apesar de ser simples, isso não é recomendado, pois ao atualizar posteriormente os arquivos de regras, essa tarefa terá que ser feita novamente. Outra desvantagem é que nem sempre queremos desabilitar toda a regra, e sim somente para um determinado contexto do Apache, ou para um IP ou para uma url do site, e deixá-la habilitada para o resto.


    - Desabilitar o ModSecurity para um endereço IP específico: Segue exemplo abaixo:


SecRule REMOTE_ADDR "@streq 192.168.1.1" \
 phase:1,t:none,nolog,allow




SecRuleRemoveById: - Como o próprio nome da regra diz, permite que uma regra seja desabilitada no ModSecurity somente passando o seu ID. A vantagem do seu uso é a simplicidade na sua aplicação, e além disso, o uso de contextos no apache. Seguem abaixo alguns exemplos:


- Desabilitar a regra com o ID 950007 (Blind SQL injection, cuja regras está no arquivo modsecurity_crs_41_sql_injection_attacks.conf da CRS), somente da URL /foo/bar :



<Location ^/foo/bar/>
    SecRuleRemoveById 950007
</Location>



- Com o uso do Location do apache, é possível criar expressões regulares para liberação como nos exemplos abaixo:



<LocationMatch ^/foo/bar/[0-9]+/edit/$>
    SecRuleRemoveById 950007
</LocationMatch>


<LocationMatch ^/foo/.+/bar/.+/edit/$>
    SecRuleRemoveById 950007
</LocationMatch>



- Também é possível usar outras diretivas do Apache em conjunto com diretivas do ModSecurity, como por exemplo Virtualhost:

<VirtualHost 10.1.2.3:80>
   ServerAdmin webmaster@host.example.com
   DocumentRoot /www/docs/host.example.com
   ServerName host.example.com
   ErrorLog logs/host.example.com-error_log
   TransferLog logs/host.example.com-access_log
   SecRuleEngine On
</VirtualHost>






<VirtualHost 10.1.2.3:80>
   ServerAdmin webmaster@host2.example.com
   DocumentRoot /www/docs/host2.example.com
   ServerName host2.example.com
   ErrorLog logs/host2.example.com-error_log
   TransferLog logs/host2.example.com-access_log
   SecRuleEngine Off
</VirtualHost>





- Também é possível utilizar outros métodos para desabilitar as regras, como por exemplo: uso de variáveis transacionaisSecRuleRemoveByMsgSecRuleRemoveByTagSecRuleUpdateActionByIdSecRuleUpdateTargetById (deprecated), SecRuleUpdateTargetByMsg, SecRuleUpdateTargetByTag, ctl:ruleRemoveById, ctl:ruleRemoveTargetById. Essas diretivas ficam para posts futuros.


Nenhum comentário: