Confundindo Scanners (spiders) na sua aplicação Web

Texto do Pedro Pereira

Aplicações WEB geralmente são desenvolvidas por profissionais que não têm o conhecimento adequado de segurança para conseguir proteger estas aplicações. Em outros casos, existe o problema de “deadlines”, onde o desenvolvimento deve ser finalizado em uma determinada data não importa o que aconteça. Nestes casos, a segurança fica sempre em segundo plano.

Por isso, tudo o que você puder fazer para atrapalhar o atacante e tomar providências antes que ele consiga extrair informações úteis ou mesmo antes que ele consiga comprometer a aplicação vai te ajudar bastante. Neste aspecto, o WebLayrinth pode ser uma mão na roda.

Continue lendo para entender o problema que ele resolve, como ele resolve e como configurá-lo para começar a ajudar você a manter tudo seguro – como deveria ser.

O problema

O primeiro passo de qualquer atacante (pelo menos dos atacantes inteligentes) é fazer o reconhecimento da aplicação. Descobrir qual linguagem foi usada para desenvolvê-la, qual o servidor web está hospedando a página, frameworks, etc. No meio desse reconhecimento, também é muito importante que o hacker verifique quais são os diretórios que formam a hierarquia da página ou mesmo qualquer outro que não faça parte da aplicação mas que esteja acessível.

 

Aí você pensa: “Mas que coisa idiota! Pra quê perder tempo com isso?” Eu te explico.

Muitos administradores de servidores acham que ninguém consegue ver os diretórios que não fazem parte da aplicação principal. Por isso, acabam armazenando lá arquivos extremamente sensíveis e também diretórios com informações às quais ninguém nunca deveria ter acesso! Procurar por estes diretórios é um passo importante no reconhecimento da aplicação e geralmente é feito por um scanner, comumente chamado de spider.

O papel do spider é seguir todos os links e registrar todas as URLs válidas daquela aplicação. E isso vai ajudar a encontrar arquivos com senhas, dumps de bancos de dados, áreas administrativas da aplicação/site, etc. Nunca subestime esse tipo de scan! Ele vai ajudar você a encontrar muita informação útil para conseguir atacar a aplicação mais facilmente!

Infelizmente, não é muito fácil se “defender” deste tipo de vazamento de informação. A principal ação a ser tomada, obviamente, é não armazenar informações sensíveis no servidor web de maneira alguma – por mais que você use senha. Faça isso somente em último caso.

A outra maneira é através de pequenas aplicações desenvolvidas para gerar um “labirinto” infinito de diretórios, que impede – ou pelo menos dificulta bastante – a vida do hacker quando ele tentar identificar quais destes diretórios são válidos. Existem vários scripts que fazem isso, um deles é o Weblabyrinth que vamos analisar neste post.

Uma possível solução com WebLabyrinth

O WL propõe uma solução bem criativa para o problema. Através de um link escondido nas suas páginas (os usuários não têm a necessidade de vê-lo) o scanner/crawler vai cair dentro de uma hierarquia de diretórios falsos infinita criada dinamicamente pelo WebLaryrinth. Essa hierarquia vai fazer com que o scanner nunca pare de encontrar novos caminhos dentro do seu site e demore muito para conseguir concluir o scan – alguns podem chegar até a travar de vez. Como resultado no lado do hacker, haverão milhões de diretórios falsos que vão acabar ofuscando os diretórios válidos da sua aplicação que você não queria que ele visse.

Esta solução atrasa bastante o atacante e te dá tempo para detectar o ataque, entender o que está acontecendo e quais são as melhores atitudes a serem tomadas para mitigar o efeito dele. Porém, nem tudo é alegria e você precisa tomar os seguintes cuidados para que a instalação do WebLabyrinth não acabe sendo um tiro no pé:

  • * Deixe o link que leva para o WebLabyrinth escondido dos usuários para que eles não entrem no labirinto por engano. Você também precisa esconder este link do Google para evitar uma possível punição por parte deles. Use o parâmetro “nofollow” no link, assim:
    <a href=”/weblabyrinth” rel=”nofollow”>labirinto</a>

    O Google (e outros sistemas de busca) não indexa links com “nofollow” e por isso o crawler dele não vai cair lá dentro do buraco negro, preservando o seu site no ranking do Google – o que é importantíssimo para qualquer empresa hoje em dia.

  • Também adicione o link para o labirinto ao robots.txt. Crawlers legítimos sempre obedecem o robots.txt. Crawlers que possivelmente estão sob o controle de um hacker, sempre lêem o robots.txt atrás de diretórios interessantes para scanear.

Sempre que você receber um e-mail do WebLabyrinth, fique alerta! É um possível scan hostil e você deve analisar com muito cuidado o que está acontecendo! Ou seja, é importante ter sempre em mente que o WL não vai bloquear um ataque. Ele vai atrasar o atacante para que você tome as ações para proteger a sua infraestrutura contra um possível ataque. Nunca se esqueça disso!

A meu ver, o principal ponto positivo do WL é que tanto a instalação quanto a configuração do software para funcionar no seu servidor são extremamente simples. Você não vai penar nem um segundo durante o processo e depois que tudo estiver concluído, vai ter um ambiente mais bem monitorado.

Dependências

Antes de partirmos para a instalação, resolvi colocar este tópico aqui para que você fique atento às dependências que o WebLabyrinth tem para conseguir funcionar direito.

Você vai precisar do seguinte:

  • Apache
  • mod_rewrite
  • PHP
  • SQLite
  • Extensão SQLite para PHP
  • Suporte à função mail() no PHP

Depois que tudo isso tiver sido instalado corretamente no servidor onde você vai configurar o WebLabyrinth, podemos partir para a configuração da aplicação em si. Você vai ver que não é nenhum bicho de sete cabeças e vai querer fazer isso em todos os seus servidores! 😀

Instalação

A instalação é um pouco longa, porém não é difícil. Vamos lá, primeiro baixe a versão mais recente do Weblabyrinth de weblabyrinth.googlecode.com e coloque em um diretório temporário qualquer. Depois descompacte:
# tar xzvf weblabyrinth-0.3.2.tar.gz

Agora coloque os arquivos dentro de um diretório onde o servidor web possa acessá-los:
# cp weblabyrinth-0.3.2 /var/www/labyrinth/

Entre no diretório do software e renomeie o arquivo /var/www/labyrinth/EXAMPLE.htaccess para .htaccess:
# mv EXAMPLE.htaccess .htaccess

Agora, crie um banco de dados do SQLite e dê as permissões para o usuário do servidor web:
# mkdir /opt/weblabyrinth
# cat /var/www/labyrinth/labyrinth.sql | sqlite /opt/weblabyrinth/labyrinth.db
# chown -R www-data:www-data /opt/weblabyrinth

Agora, vamos editar o arquivo de configuração /var/www/labyrinth/config.inc.php e fazer as seguintes alterações:
‘alert_levels_deep’ => 3, -> Esta opção vai definir a quantidade de níveis que um crawler deve descer antes de gerar um alerta para você.

‘alert_email‘ => array(
‘enabled’ => ‘true’,
‘address’ => ‘pedro@pedropereira.net’
), -> Aqui você define se avisos por e-mail deverão ser enviados através da primeira opção e, caso você sete isto para true, para qual email as mensagens devem ser enviadas.

‘alert_ids’ => array(
‘enabled’ => ‘true’,
‘text’ => ‘pedropereirapedropereira’
) -> Esta opção vai fazer com que o Weblabyrinth sempre envie a palavra definida em “text” quando algum cliente pedir as páginas dele. Assim, você pode escrever uma assinatura de Snort por exemplo que detecte tráfego com esta palavra-chave e dispare um alerta para você. Neste caso, você poderia bloquear o IP de origem da conexão que está dentro do labirinto.

Agora, vamos definir alguns aliases de diretórios que são geralmente procurados por crawlers, para aumentarmos as chances de pegá-los e jogá-los dentro do labirinto facilitando a sua detecção. Onde fazer isso vai depender bastante da configuração do seu Apache, mas geralmente você vai fazer isso em /etc/apache2/httpd.conf. Alguns aliases de sugestão para você:
Alias /admin /var/www/labyrinth/
Alias /secret /var/www/labyrinth/
Alias /pdc-only /var/www/labyrinth/
Alias /private /var/www/labyrinth/
Alias /phpmyadmin /var/www/labyrinth/
Alias /pma /var/www/labyrinth/
Alias /dbadmin /var/www/labyrinth/
Alias /phppgadmin /var/www/labyrinth/
Alias /myadmin /var/www/labyrinth/
Alias /db /var/www/labyrinth/
Alias /mysql /var/www/labyrinth/
Alias /mysqladmin /var/www/labyrinth/
Alias /phpmyadmin /var/www/labyrinth/
Alias /scripts /var/www/labyrinth/
Alias /sqlweb /var/www/labyrinth/
Alias /web /var/www/labyrinth/
Alias /webadmin /var/www/labyrinth/
Alias /webdb /var/www/labyrinth/
Alias /websql /var/www/labyrinth/

Lembre-se de não colocar aliases para diretórios que você realmente usa ou você vai sempre cair dentro do labirinto. Se você usa algum nome que está acima, simplesmente não adicione a linha no seu httpd.conf.

Pronto, tudo instalado agora é só esperar a primeira vítima cair no seu labirinto e você pegar o hacker com as calças na mão! 🙂

Conclusão

Como dito no post, o WebLabyrinth não é uma solução para proteger a sua infraestrutura contra ataques, ele não vai bloquear um ataque como um IPS faria: o objetivo é atrasar o atacante enquanto você toma providências para se proteger. Com os alertas que ele envia, você fica sabendo na hora o que está acontecendo, ganhando um ambiente mais bem monitorado como recompensa.

Ao usar uma solução como esta, é importantíssimo que você tome muito cuidado para não acabar prejudicando a sua empresa com o Google. Sempre tenha certeza de que está usando “nofollow” no link que leva ao WL e também que você adicionou a URL dele ao robots.txt. Também tenha certeza de que não está deixando qualquer usuário ver o link para a aplicação para evitar que ele entre no labirinto sem querer – arruinando a experiência dele com a sua aplicação.

Sem categoria

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s