URL Rewriting contra ataques ?(!)

O URL Rewriting ganhou muitos adeptos quando surgiu a moda das SEO (Search Engine Optimization) e das USO (User Scan Optimization) de forma a tornar as ligações de mais fácil leitura e percepção do seu conteúdo quer para os Motores de Pesquisa quer para o scan que o nosso cérebro faz quando olha para uma ligação, e é normalmente com este intuito que é utilizado.

Contudo, é possível utilizar URL Rewriting para melhorar a segurança do seu site.

ATENÇÃO: Não é seguro confiar neste método para a obtenção de um site seguro, este é apenas um método possível de obfuscação, isto é, para tornar mais dificil de perceber onde poderão estar as falhas, principalmente para ferramentas automáticas de pentesting!

Imaginemos o seguinte URL:

http://exemplo.pt/pagina.php?id=13&titulo=AppVulneravel

Uma ferramenta automática de SQL Injection fazia parsing do URL e detectava dois parâmetros com dois valores: ( id => 13, titulo => ‘AppVulneravel’ ) .

Utilizando o seguinte ficheiro .htaccess:

# Turn on URL rewriting
RewriteEngine On

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^pagina/(.+)/(.+) pagina.php?id=$1&titulo=$2 [PT,L]

Já podíamos chamar a mesma página da seguinte forma:

http://exemplo.pt/pagina/13/AppVulneravel

A mesma ferramenta automática mais dificilmente chegaria a verificar se 13 e AppVulneravel não eram directórios e estávamos a trabalhar no index desse directório.

Neste caso, um olhar sobre o URL e percebia-se que estava a ser usado URL Rewriting e podia-se tentar explorar vulnerabilidades a partir desses parâmetros e/ou configurado uma ferramenta para fazer os testes correctamente tendo em conta essa informação.

Mas um outro exemplo:

pagina.php

include($_GET['file'].'.php'); // ATENÇÃO: Este código é altamente inseguro! Só para fins demonstrativos!

Tirando partido do código anterior podíamos ter os seguintes URLs:

http://exemplo.pt/index
http://exemplo.pt/about

Sem conhecer o site em questão eu diria que teriam um ficheiro .htaccess semelhante a este:

# Turn on URL rewriting
RewriteEngine On

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(home)$ index.php [PT,L]
RewriteRule ^(about)$ about.php [PT,L]

Contudo, neste contexto, seria algo mais como:

# Turn on URL rewriting
RewriteEngine On

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.+) pagina.php?file=$1 [PT,L]

Conclusão

Podemos ver que este método é excelente para dificultar a tarefa a script kiddies e crackers com ferramentas de crawling com pesquisa de vulnerabilidades, pode também diminuir os pontos de teste de possíveis atacantes, como é mostrado neste último exemplo. No entanto, é preciso ter em muita atenção o que já referi anteriormente: Não é seguro confiar neste método para a obtenção de um site seguro, este é apenas um método possível de obfuscação, isto é, para tornar mais dificil de perceber onde poderão estar as falhas, principalmente para ferramentas automáticas de pentesting!

1 comment

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.