Neste laboratório, você aprenderá como descriptografar tráfego SSL/TLS usando o Wireshark, um analisador de protocolo de rede bem conhecido. A criptografia SSL/TLS é comumente usada para proteger as comunicações na internet. No entanto, em alguns casos, como solução de problemas ou análise de segurança, a descriptografia do tráfego criptografado torna-se essencial.
Este laboratório irá guiá-lo através do processo de configuração do Wireshark para descriptografar tráfego SSL/TLS. Ele oferece experiência prática em um ambiente controlado.
Configurando a Descriptografia SSL/TLS no Wireshark
Nesta etapa, vamos configurar o Wireshark para descriptografar o tráfego SSL/TLS. Mas, primeiro, vamos entender um pouco sobre o que estamos fazendo. SSL/TLS é um protocolo usado para proteger as comunicações na internet. Quando os dados são enviados pela internet usando SSL/TLS, eles são criptografados para proteger sua confidencialidade. Para descriptografar este tráfego e ver os dados reais, o Wireshark precisa ter acesso às chaves de criptografia. Essas chaves são armazenadas em um arquivo especial chamado arquivo de log de pré-master secret. Criaremos este arquivo agora.
O Wireshark precisa de acesso às chaves de criptografia para descriptografar o tráfego TLS. Essas chaves são armazenadas no que é chamado de arquivo de log de pré-master secret, que criaremos agora.
Abra um terminal. Um terminal é uma interface baseada em texto onde você pode inserir comandos para interagir com o sistema operacional do seu computador. Depois que o terminal estiver aberto, criaremos um novo arquivo chamado pre_master_secret.log no diretório /home/labex/project/. Este arquivo será usado para armazenar as chaves de sessão TLS que são necessárias para a descriptografia. Para criar o arquivo, insira o seguinte comando no terminal:
touch /home/labex/project/pre_master_secret.log
Este comando cria um arquivo vazio que, posteriormente, armazenará as chaves de sessão TLS necessárias para a descriptografia.
Agora que temos o arquivo de log pronto, precisamos configurar o Wireshark para usá-lo. Primeiro, abra o Wireshark digitando o seguinte comando no terminal:
wireshark
Depois que o Wireshark abrir, você verá uma barra de menu na parte superior. Clique em Edit > Preferences. Isso abrirá uma janela onde você pode personalizar várias configurações no Wireshark. Na janela Preferences, olhe para o painel esquerdo. Há uma seção chamada Protocols. Clique nela e, em seguida, role para baixo até encontrar TLS.
Nas configurações TLS, há um campo rotulado como (Pre)-Master-Secret log filename. É aqui que dizemos ao Wireshark a localização do arquivo de log de pré-master key que acabamos de criar. Insira o caminho completo para o arquivo:
Depois de inserir o caminho, clique em OK para salvar as alterações. Agora, o Wireshark está configurado para usar este arquivo para descriptografar o tráfego TLS. Isso significa que, quando você capturar o tráfego SSL/TLS, o Wireshark poderá usar as chaves no arquivo de log para descriptografar os dados e mostrar o conteúdo real.
Capturando o Tráfego SSL/TLS
Nesta etapa, capturaremos o tráfego SSL/TLS usando o Wireshark e geraremos tráfego seguro com um script Python. SSL/TLS é um protocolo que fornece comunicação segura em uma rede. Capturar esse tráfego nos permite analisá-lo posteriormente, o que é importante para tarefas como depuração de problemas de rede ou detecção de ameaças à segurança.
Vamos começar capturando o tráfego de rede. No Wireshark, as interfaces de rede são as conexões pelas quais seu computador envia e recebe dados. Você precisa selecionar a interface apropriada para capturar o tráfego de seu interesse. Procure a lista de interfaces de rede disponíveis. Clique na interface eth1 para selecioná-la. Essa interface é onde o tráfego que queremos capturar passará. Em seguida, clique no botão Start (o ícone da barbatana de tubarão azul) na barra de ferramentas para começar a capturar pacotes.
O Wireshark agora capturará todo o tráfego de rede na interface selecionada. À medida que captura, você verá os pacotes começarem a aparecer na janela principal. Cada pacote representa uma pequena unidade de dados sendo transmitida pela rede.
Agora, precisamos gerar algum tráfego SSL/TLS que possamos analisar. Abra uma nova janela de terminal. O terminal é uma interface de linha de comando onde você pode executar comandos para interagir com seu computador. Navegue até o diretório do projeto usando o seguinte comando:
cd /home/labex/project/
Este comando altera o diretório de trabalho atual para o diretório do projeto. Criaremos um script Python que estabelece uma conexão segura com um site. Python é uma linguagem de programação que nos permite escrever scripts para realizar várias tarefas. Crie um novo arquivo chamado tls_client.py usando o editor de texto nano:
nano tls_client.py
O editor de texto nano é um editor de texto simples e fácil de usar no terminal. Copie e cole o seguinte código Python no editor:
#!/usr/bin/env python3
import ssl
import socket
import os
HOST = "example.com"
PORT = 443
## Set the path for the pre-master secret log file
os.environ['SSLKEYLOGFILE'] = '/home/labex/project/pre_master_secret.log'
## Create an SSL/TLS context
context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
## Create a socket and wrap it with SSL/TLS
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
with context.wrap_socket(sock, server_hostname=HOST) as ssock:
ssock.connect((HOST, PORT))
## Send a simple HTTP GET request
request = "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n"
ssock.sendall(request.encode())
## Receive the response and print all the received data
data = ssock.recv(4096)
print(data.decode())
Este script faz o seguinte:
Define uma variável de ambiente para especificar onde salvar as chaves de sessão TLS. Essas chaves são cruciais para descriptografar o tráfego SSL/TLS posteriormente.
Cria uma conexão segura com example.com. As bibliotecas ssl e socket são usadas para estabelecer essa conexão.
Envia uma solicitação HTTP básica. Essa solicitação pede ao servidor a página principal de example.com.
Recebe e exibe a resposta do servidor.
Salve o arquivo pressionando Ctrl+O, depois Enter e saia do nano pressionando Ctrl+X.
Agora, execute o script para gerar o tráfego TLS:
python3 tls_client.py
Você deve ver uma resposta HTTP de example.com, o que confirma que o script estabeleceu com sucesso uma conexão segura. O script também escreveu as chaves de sessão TLS em nosso arquivo de log de pré-master secret, que o Wireshark usará para descriptografia.
Agora que geramos o tráfego TLS, volte para o Wireshark e pare a captura clicando no botão vermelho Stop na barra de ferramentas. Parar a captura é necessário para que possamos salvar o tráfego capturado.
Para salvar o tráfego capturado para análise, clique em File na barra de menu e selecione Save As.... Na caixa de diálogo de salvamento, navegue até /home/labex/project/, nomeie o arquivo tls_traffic.pcapng e clique em Save. O formato de arquivo .pcapng é um formato padrão para salvar capturas de tráfego de rede.
Seu tráfego capturado agora está salvo e pronto para análise na próxima etapa.
Analisando o Tráfego SSL/TLS Descriptografado
Nesta etapa, analisaremos o tráfego SSL/TLS descriptografado usando as ferramentas de filtragem e análise do Wireshark. Essas ferramentas são essenciais para extrair informações significativas da grande quantidade de dados de tráfego de rede.
Primeiro, vamos aplicar um filtro para focar em partes específicas do handshake TLS. O handshake TLS é um processo inicial crucial para estabelecer uma conexão segura entre um cliente e um servidor. Durante esse processo, o cliente e o servidor trocam informações para concordar com algoritmos de criptografia, chaves e outros parâmetros de segurança.
Na barra de ferramentas de filtro (o campo de entrada de texto na parte superior da janela do Wireshark), insira a seguinte expressão:
tls.handshake.type == 1
Essa expressão de filtro é usada para selecionar pacotes com base no tipo do handshake TLS. O valor 1 corresponde aos pacotes Client Hello. Pressione Enter para aplicar o filtro. Após aplicar o filtro, o Wireshark exibirá apenas os pacotes Client Hello, que são os pacotes iniciais enviados pelo cliente para iniciar o handshake TLS.
Você deve ver agora apenas os pacotes correspondentes a este filtro. Ao restringir os pacotes exibidos, torna-se mais fácil focar no início da conexão TLS e entender como a comunicação segura começa.
Para visualizar o conteúdo descriptografado, vamos seguir o fluxo TLS. Clique com o botão direito em qualquer pacote na lista filtrada e selecione Follow > TLS Stream no menu de contexto. Essa ação informa ao Wireshark para reconstruir toda a sessão TLS com base no pacote selecionado e exibir os dados descriptografados.
Uma nova janela será aberta mostrando os dados descriptografados. Esses dados representam a comunicação HTTP real que foi transmitida pela conexão segura. Graças às chaves de sessão TLS armazenadas em nosso arquivo de log de pré-master secret, o Wireshark pode descriptografar e exibir esses dados que normalmente seriam criptografados.
Os dados descriptografados mostrarão tanto a solicitação HTTP enviada pelo nosso script Python quanto a resposta HTTP do servidor. Você pode ver cabeçalhos, tipos de conteúdo e o conteúdo HTML real da resposta. Essas informações são valiosas para entender a comunicação entre o cliente e o servidor, como quais dados estão sendo solicitados e o que está sendo retornado.
Vamos salvar esses dados descriptografados para análise posterior. Na janela "Follow TLS Stream", clique no botão Save as.... Salvar os dados permite que você os revise mais tarde, compartilhe-os com outras pessoas ou realize análises adicionais.
Na caixa de diálogo de salvamento, navegue até /home/labex/project/, nomeie o arquivo decrypted_data.txt e clique em Save.
Você agora capturou, descriptografou e salvou com sucesso o tráfego TLS para análise. O arquivo de dados descriptografados contém a comunicação HTTP completa que foi originalmente criptografada com TLS.
Você pode fechar a janela "Follow TLS Stream" quando terminar. Se você quiser explorar mais, experimente diferentes filtros do Wireshark para examinar outros aspectos do tráfego capturado. Por exemplo, o filtro http mostrará apenas o tráfego HTTP após a descriptografia. Dessa forma, você pode se aprofundar nos tipos específicos de dados que estão sendo transmitidos pela rede.
Resumo
Neste laboratório, você aprendeu como descriptografar o tráfego SSL/TLS usando o Wireshark. Você criou um arquivo de log de pré-master secret para armazenar as chaves de sessão TLS, configurou o Wireshark para usar este arquivo para descriptografia e gerou tráfego SSL/TLS com um script Python. Em seguida, você analisou o tráfego descriptografado usando os recursos de filtragem e acompanhamento de fluxo do Wireshark.
Essas habilidades são cruciais para a solução de problemas de rede, análise de segurança e compreensão de comunicações seguras. Descriptografar e analisar o tráfego TLS em um ambiente controlado ajuda você a entender melhor os protocolos de rede e identificar problemas em comunicações criptografadas. Lembre-se de que, em situações do mundo real, a descriptografia do tráfego TLS precisa de autorização adequada e só deve ser feita em redes autorizadas para evitar a violação das leis de privacidade.