Sempre que você acessa um site, há uma comunicação entre o seu dispositivo e o servidor. Dados são enviados pelo seu dispositivo para o roteador e depois para um servidor. Do servidor, percorrem o caminho inverso para chegar ao seu dispositivo. Isso é o que chamamos de tráfego de rede, ou seja, os dados que entram e saem do seu dispositivo.
Para que exista essa troca de informações, é necessário que haja uma regra que estabeleça como os dois dispositivos devem se comunicar. Essa regra recebe o nome de protocolo.
Então o que é o protocolo HTTP?
Um exemplo clássico disso é justamente o protocolo HTTP, sigla para Hypertext Transfer Protocol (ou Protocolo de Transferência de Hipertexto, em português). O HTTP funciona como a regra de que define como ocorre a comunicação entre os dados de um site na internet e o dispositivo que o está acessando.
HTTP ou HTTPS?
O mínimo que é de se esperar ao acessar um site é que o protocolo HTTP esteja presente. Mas o ideal mesmo é que quem esteja presente seja o HTTPS, sigla quase igual à anterior com adição do "S" de secure (ou seguro). O HTTPS funciona, em essência, do mesmo modo que o HTTP, mas possui uma camada de um outro protocolo que permite que os dados sejam transmitidos criptografados, ou seja, caso um atacante tenha acesso aos seus dados, ele não conseguirá lê-los.
É por isso que é tão comum ouvir recomendações de que você não deve compartilhar informações pessoais, senhas e dados de cartão com sites que sejam HTTP.
Mas e quando essa é a única opção?
É exatamente isso que geralmente acontece quando falamos de serviços do governo. Segundo um levantamento do DigitalCert, mais de 9 mil domínios do governo brasileiro não usam HTTPS.
Dos Ministérios, 5 possuem sites HTTP. Os sites da Polícia Federal, da ANVISA, da Caixa (não o internet banking, ainda bem), da ABIN (sim, o serviço de inteligência brasileiro) e o Portal da Transparência também são HTTP. Isso significa que todos os links clicados e pesquisas feitas dentro desses sites poderão ser vistos facilmente por um atacante.
Por que isso é um problema?
Mesmo em sites que não pedem informações pessoais, o acesso as informações buscadas por uma pessoa revela hábitos, interesses e pretensões. Saber onde o usuário clica num site da Policia Federal, por exemplo, pode revelar seu interesse em tirar um passaporte, comprar uma arma ou participar de um leilão. No site da ANVISA, o interesse por um novo medicamento. No do Itamaraty, uma pesquisa sobre informações para uma futura viagem.
Alguns são piores que isso, claro, é o caso do site do Ministério do Turismo, por exemplo. Logo na tela inicial são oferecidos cursos de capacitação online. O site dos cursos também é HTTP e exige um cadastro com uma série de informações pessoais para que os cursos sejam acessados:
Realizar o cadastro nesses cursos pode expor dados pessoais do usuário, como celular, CPF, local de moradia, além de email e senha. Ok, a gente pode até fingir que ninguém faz esses cursos…
Mas não da pra ignorar os 12 sites do DETRAN, dos 27 existentes no Brasil, que também não utilizam protocolo HTTPS mesmo requerendo uma série de informações pessoais dos seus usuários. No site do DETRAN do Rio de Janeiro, realizar um agendamento online também expõe uma série de dados:
Os sites do DETRAN de Santa Catarina, Paraná, Mato Grosso do Sul, Distrito Federal, Pará, Amazonas, Bahia, Paraíba, Rio Grande do Norte, Piauí e Maranhão também apresentam o mesmo problema.
Como é a invasão de privacidade na prática?
Como já foi dito, quando o seu computador ou celular acessa um site da internet ele envia e recebe dados do servidor no qual esse site está armazenado. Para ter acesso aos dados, um atacante precisa desviá-los no meio desse caminho, geralmente isso acontece no roteador e é por isso que acessar redes de internet públicas desconhecidas é tão perigoso.
No seu computador, a principio, você consegue ter acesso aos dados que ele troca com a internet. Se estiver funcionando como roteador, você verá o tráfego dos dispositivos conectados à ele. Para visualizar esses dados, é necessário baixar uma ferramenta de análise de tráfego de rede, um exemplo clássico é o Wireshark.
Depois de instalado, ao abrir o Wireshark podemos selecionar a interface, que nesse caso será o Wi-Fi.
Escrever "http" no filtro para garantir que vamos ver apenas os pacotes HTTP e clicar na barbatana azul para iniciar a coleta.
A partir desse momento, todo o tráfego de rede que passar pelo seu computador será capturado, mesmo que apenas os pacotes HTTP sejam exibidos por causa do filtro.
Enquanto o Wireshark captura o tráfego que entra e sai do meu computador, vamos realizar um agendamento para primeira habilitação na página do DETRAN Rio de Janeiro (com um fake, claro):
No Wireshark, podemos parar a captura do quadrado vermelho e a visão será mais ou menos essa:
A imagem mostra os pacotes com dados trocados entre o computador e o servidor do site do DETRAN RJ. Há três tipos de pacotes: os pacotes contendo as requisições GET (geralmente pedindo imagens para o site), um pacote contendo um POST (que parece ser o que queremos) e os pacotes de resposta com código 200 (OK).
Explorando os pacotes de GET para imagens, conseguimos ter acesso a todas as imagens carregadas na página. Uma maneira de fazer isso de forma automatizada é com um script em Python. O código abaixo faz o mesmo que o Wireshark, mas no lugar de nos mostrar os dados, ele salva automaticamente todas as imagens que encontrar dentro dos pacotes HTTP.
import pyshark
import os
import requests
cap = pyshark.LiveCapture(interface='en0', display_filter="http")
def saveImage(url):
page = requests.get(url)
f_ext = os.path.splitext(url)[-1]
img_name = os.path.splitext(url)[-2].split('/')[-1]
if (f_ext == ".png" or f_ext == ".jpg" or f_ext == ".jpeg") and len(page.content) > 5000:
f_name = img_name + f_ext
with open(f_name, 'wb') as f:
f.write(page.content)
for packet in cap.sniff_continuously():
try:
HTTP_layer = packet['http']
full_request_uri = vars(HTTP_layer._all_fields['http.request.full_uri'])['fields']
request = full_request_uri[0].showname.split(' ')[-1]
# print(request)
saveImage(request)
except:
pass
Apesar de ser legal olhar os pacotes GET, o maior problema nesse caso é no POST. Ao selecionar o pacote que contém o POST para o agendamento eletrônico, vemos isso daqui:
Todos os dados colocados no formulário de agendamento estão disponíveis sem nenhuma criptografia num pacote enviado para o servidor. Assim, atacantes podem ter acesso a diversos dados pessoais dos milhares de usuários que acessam todos os dias os mais de 9 mil domínios do governo que não possuem certificado HTTPS, mesmo com sua fácil obtenção.
E agora?
Um decreto do ano passado (2019) prevê que até dezembro de 2020, todos os serviços do Governo Federal deverão migrar para um Portal Único, com certificado HTTPS. Os serviços prestados pelos governos estaduais, por outro lado, provavelmente permanecerão independentes.
Enquanto todos esses sites não adotam o padrão HTTPS, a melhor forma de se proteger é evitando que terceiros tenham acesso ao seu tráfego de rede, ou seja, utilizar conexões de Wi-Fi seguras quando precisar realizar o preenchimento de algum desses formulários em sites HTTP (e rezar).
Espero que tenham gostado ;) Até a próxima!
Artigo publicado originalmente no Medium
Top comments (1)
Bom artigo!
O que causa espanto é o fato de nem ao menos a PF conseguir manter um sistema seguro.
É um relaxo sem tamanho.