DEV Community

Bernardo Bosak de Rezende
Bernardo Bosak de Rezende

Posted on

Dorking - O que podemos aprender sobre vazamento de dados por indexação involuntária em ferramentas de busca

Esta semana o mercado da tecnologia aqui no Brasil foi ligeiramente movimentado pelo vazamento de alguns dados de correntistas de uma grande fintech, que estavam disponíveis nos resultados de busca do Google.

A empresa em questão (a qual sou um cliente bem satisfeito) já resolveu a situação e emitiu notas oficiais para esclarecimento, mas de qualquer forma acho que esta é uma boa oportunidade, diante de situações adversas, para evoluirmos e nos aperfeiçoarmos, por isso precisamos falar sobre o assunto.

Disclaimer

Gostaria de deixar bem explícito que esta postagem não é uma crítica à empresa, mas sim uma discussão técnica para evitar que futuramente isso venha a acontecer com outras equipes, produtos ou serviços.

Dito isso, vamos ao ocorrido.

Para facilitar a transferência de valores entre correntistas, o serviço disponibiliza um link (público e sem autenticação) que pode ser compartilhado entre diferentes pessoas para, a partir da leitura de um QR code, realizar uma transferência no aplicativo autorizado. Cada link listava algumas informações pessoais, como Nome, CPF, Agência, Conta, entre outros.

Estes links, que não são expirados e são públicos, acabaram sendo listados no índice de páginas do Google (de outros buscadores também), e com um pouco de "Google Hacking", uma pessoa desenvolvedora conseguiu encontrar vários destes links (contendo diferentes transferências entre contas), e escrever um script que "puxasse" estas informações de dentro do HTML dos documentos listados nos buscadores, podendo criar uma base com os dados extraídos. Estas informações podem ser usadas em tentativas de força-bruta ou até mesmo vendidas para terceiros, mas no caso citado a pessoa foi bem intencionada e reportou o problema para a empresa.

Tudo começa com uma busca no Google

Digamos que queiramos listar todas as páginas da Wikipédia que possuem /computação/ no endereço. Basta usar as diretivas site: e inurl:

Listar todas páginas da Wikipédia com computação na URL

Esse tipo de técnica é conhecido como Google Hacking ou Google Dorking, e é muito utilizada por hackers ou profissionais de PenTesting. É importante dizer que existem bancos de dados com estas brechas disponíveis para que outras pessoas consultem. Faça uma busca nas ferramentas e veja se alguma parte dos seus serviços estão listados. Existem várias diretivas que podem ser usadas, não somente site: e inurl:, no futuro compartilharei mais materiais sobre isso.

Mas, voltando ao contexto do ocorrido desta semana, a parte da URL /computação/ pode ser substituída por algo específico como /transferir/, que nos faria chegar na página de transferência de valores.

Exemplo de link: https://minhaempresa.com.br/transferir/sf9y8JV7b0Z

Pesquisa no Google:
site:minhaempresa.com.br inurl:/transferir/

A partir daí, basta escrever um script que acesse os links, interprete o conteúdo do documento HTML e extraia dele as informações desejadas (processo conhecido como web scraping). O Google aplica alguns bloqueios como reCAPTCHA em muitas tentativas de busca com estas diretivas, mas é possível automatizar todo o processo com quebradores de captcha ou requisições intervaladas.

Solução

Caso você se depare com esse tipo de exposição, você tem algumas opções:

  1. Solicitar remoção das informações para o Google, bem recomendado como medida emergencial;
  2. Alterar seu sistema para marcar os documentos como "não listáveis" em mecanismos de buscas;
  3. Avaliar colocar mecanismos de autenticação (ou até mesmo reCAPTCHA) antes de exibir as informações (essa opção afeta experiência de uso)

Por ser tratar de uma abordagem preventiva, vou focar no item 2. Podemos escolher quais páginas/documentos desejamos não ter indexados nos buscadores e, mais ainda, instruir o mecanismo de busca para não seguir os links destes documentos. O primeiro nós resolvemos com a instrução noindex, e o segundo com a instrução nofollow. Podemos configurar isso de duas maneiras (bem simples):

  1. Adicionando a metatag robots no HTML; ou
  2. Alterando o cabeçalho HTTP X-Robots-Tag

Metatag robots

Você pode instruir os mecanismos de busca a não indexarem seus documentos colocando a seguinte metatag no head do HTML:

<head>
  <meta name="robots" content="noindex,nofollow" />
</head>

Todo documento que você deseja não indexar deverá incluir esta metatag. Para evitar a replicação, você pode procurar utilizar hierarquia de layouts (como este exemplo em pug), que é uma técnica comum em várias ferramentas e frameworks de desenvolvimento frontend.

Você pode alterar a metatag para buscadores específicos, bastando alterar o valor de name. Exemplo: para bloquear somente indexação no Bing, altere de robots para bingbot.

Cabeçalho X-Robots-Tag

Alternativamente, você pode preencher o cabeçalho HTTP X-Robots-Tag na resposta do documento HTML. Isto pode ser feito na configuração do servidor (ex: Apache, nginx, IIS, etc) ou no próprio código da aplicação. Vejamos alguns exemplos:

nginx (httpd.conf)

# avoid crawling of all html files
location ~* \.html$ {
  add_header X-Robots-Tag "noindex, nofollow";
}

Apache (.htaccess)

# avoid crawling of all html files
<Files ~ "\.html$">
  Header set X-Robots-Tag "noindex, nofollow"
</Files>

Flask (nível de código)

from flask import make_response

@app.route('/')
def home():
   res = make_response(render_template('index.html'))
   res.headers.set('X-Robots-Tag', 'noindex,nofollow')
   return res

Express

const express = require('express')
const app = express()

app.get('/', (req, res) => {
  res.set('X-Robots-Tag', 'noindex,nofollow')
  res.render('index.html')
})

Conclusão

Os danos da extração de dados por esse tipo de dorking podem ser muito altos, e como vimos, a solução preventiva é bem simples. Muitas vezes, falando de segurança da informação, as soluções são simples, mas infelizmente acabam não sendo priorizadas (não estou dizendo que foi o caso citado). Temos que manter o pilar da segurança aliado com os demais atributos que compõe a qualidade de um software e, ainda assim, correremos o risco constante de ciberataques.

  • Avalie seu portfólio de produtos e serviços e questione quais deles realmente precisam ser bem indexados em ferramentas de busca (como um dos maiores exemplos, geralmente sistemas administrativos internos não precisam ser indexados e ainda assim é fácil encontrá-los no Google).
  • Sempre que possível, implemente a expiração dos links públicos.
  • Utilizar autenticação sempre é uma ideia segura, mas por vezes ela interfere bastante na experiência de uso. Discuta com especialistas de produto e equilibre os pratos da balança, tente encontrar a solução com maior valor entregue ao seu cliente de uma forma segura.

Top comments (1)

Collapse
 
zontacm profile image
Cristiano Zonta

🔝