Em redes modernas, proteger a transmissão de dados é primordial, e Secure Sockets Layer (SSL) e Transport Layer Security (TLS) são protocolos amplamente usados para garantir a privacidade e a segurança dos dados. No entanto, há casos em que você pode precisar analisar o tráfego criptografado para solução de problemas, análise forense ou monitoramento de rede. Este artigo técnico o guiará pela descriptografia de tráfego SSL/TLS usando Wireshark e tcpdump, duas poderosas ferramentas de análise de rede. Abordaremos o que são Wireshark e tcpdump, explicaremos a criptografia SSL e TLS e demonstraremos como descriptografar o tráfego SSL usando uma chave secreta pré-mestre ou uma chave privada RSA.
O que são Wireshark e tcpdump? #
Wireshark #
O Wireshark é um analisador de protocolo de rede de código aberto que permite aos usuários capturar e navegar interativamente pelo tráfego em execução em uma rede de computadores. Ele permite que você inspecione dados em um nível granular, fornecendo visibilidade dos protocolos e pacotes de dados que estão sendo transmitidos. O Wireshark é amplamente usado para solução de problemas de rede, desenvolvimento de protocolos e análise de segurança.
tcpdump #
tcpdump é uma ferramenta de análise de pacotes de linha de comando que captura tráfego de rede e o exibe em tempo real. É altamente eficiente para capturar dados de redes ativas, permitindo que você salve pacotes em um arquivo (conhecido como arquivo de captura) para análise posterior. Embora o tcpdump não tenha a interface gráfica do Wireshark, ele é poderoso para análise rápida, filtragem de pacotes e coleta de dados em sistemas remotos.
O que é criptografia SSL? #
SSL (Secure Sockets Layer) é um protocolo desenvolvido pela Netscape para transmitir documentos privados pela Internet. O SSL usa algoritmos de criptografia para garantir que os dados enviados entre o cliente (por exemplo, um navegador da web) e o servidor sejam ilegíveis para qualquer um que intercepte a transmissão.
TLS (Transport Layer Security) é o sucessor do SSL e é mais seguro. Embora TLS seja tecnicamente distinto de SSL, o termo SSL é frequentemente usado para se referir a ambos os protocolos.
O SSL/TLS opera estabelecendo um canal de comunicação seguro entre dois sistemas. Os conceitos-chave na criptografia SSL/TLS incluem:
- Criptografia simétrica: uma única chave é usada para criptografar e descriptografar os dados.
- Criptografia assimétrica: duas chaves (pública e privada) são usadas; os dados criptografados com a chave pública só podem ser descriptografados com a chave privada correspondente.
- Certificados: SSL/TLS usa certificados para verificar a identidade do servidor e, às vezes, do cliente.
- Handshake: O processo em que o cliente e o servidor estabelecem uma conexão segura, trocando chaves e concordando com métodos de criptografia.
Descriptografando SSL com uma chave secreta pré-mestra #
A chave secreta pré-mestre é um componente crucial no processo de handshake SSL/TLS. Essa chave é usada para gerar chaves de sessão, que são então usadas para criptografar os dados reais transferidos pela rede. Ao obter a chave secreta pré-mestre, você pode descriptografar os dados da sessão.
Etapas básicas para descriptografar SSL com uma chave secreta pré-mestra #
Para descriptografar o tráfego SSL usando a chave secreta pré-mestre, siga estas etapas:
1. Defina a variável de ambiente do arquivo de log
2. Capture com tcpdump e verifique o arquivo de log
3. Configurar o Wireshark para descriptografia SSL
Defina a variável de ambiente do arquivo de log #
Configuração SSLKEYLOGFILE no Windows #
Em sistemas Windows, você precisará definir uma variável de ambiente para armazenar as chaves secretas pré-mestre em um arquivo de log. Esta variável, chamada SSLKEYLOGFILE, define o caminho onde essas chaves são salvas.
1. Comece clicando com o botão direito em meu computador e selecionando Propriedades no menu para abrir o menu Sistema.
2. Clique em Configurações avançadas do sistema na lista à esquerda para abrir a janela Propriedades do Sistema.
3. De acordo com o relatório Avançado guia, clique no botão “Variáveis de ambiente”.
4. Debaixo Variáveis de usuário, Clique no Novo… botão. Você também pode criar esta variável em Variáveis do sistema se você quiser registrar chaves SSL para todos os usuários no sistema. No entanto, geralmente é melhor mantê-lo confinado ao seu perfil.
5. De acordo com o relatório Nome variável campo, digite SSLKEYLOGFILE.
De acordo com o relatório Valor variável campo, insira o caminho onde você deseja salvar o arquivo de log. Alternativamente, você pode clicar Navegar pelo arquivo… para selecionar o caminho usando o seletor de arquivos.
Se você estiver definindo isso como uma variável de todo o sistema, certifique-se de que o arquivo seja acessível a todos os usuários ou use curingas. Por exemplo, você pode usar %USERPROFILE%\AppData\ssl-keys.log or C:\chaves-ssl.log .
6. Quando terminar, clique OK para aplicar as alterações e prosseguir com as próximas etapas.
Configuração SSLKEYLOGFILE no Linux ou Mac #
No Linux e Mac, você precisará definir o SSLKEYLOGFILE variável de ambiente usando exportar. No mesmo terminal, você pode executar tcpdump e gerará o arquivo de log de chave indicado quando uma conexão SSL for detectada.
root@noid-01:~# export SSLKEYLOGFILE=~/.ssl-key.log root@noid-01:~# tcpdump ...
Para manter uma configuração de variável de ambiente permanente, edite o perfil do usuário com um editor de texto como nano. Para Linux, esta variável é armazenada em ~ / .bashrc, e no Mac, ele é criado em ~ / .bash_profile. Em seguida, adicione o exportar comando para SSLKEYLOGFILE variável no final do arquivo e salve as alterações.
Capture com tcpdump e verifique o arquivo de log #
Para testar a geração do arquivo de log, tente abrir um navegador, tcpdump ou inicie um comando curl em um servidor HTTPS para confirmar se o arquivo foi gerado corretamente.
Como exemplo, no mesmo terminal onde as variáveis de ambiente foram criadas, o tcpdump para capturar o tráfego e um curl para um serviço HTTPS será lançado para ser descriptografado:
root@noid-01:~# export SSLKEYLOGFILE=~/.ssl-key.log root@noid-01:~# tcpdump -i qualquer porta 443 -w ~/capture.pcap & root@noid-01:~# curl https://(então feche o comando tcpdump)
Verifique se o arquivo de log ~/.ssl-key.log e a captura de tráfego em ~/captura.pcap são gerados. Por fim, veja o último passo para ver o tráfego criptografado com o wireshark.
Se você abrir o chave-ssl.log arquivo você verá algo como o seguinte:
root@noid-01:~# cat ~/.ssl-key.log CLIENT_HANDSHAKE_TRAFFIC_SECRET 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a db6f3d27b40b7c8e10ed415281b39e45ca6ef2b59468f943dbe6e81e1f82e0f0 SERVER_HANDSHAKE_TRAFFIC_SECRET 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a d819660e194d9439e7152ceac2a439b41584afbeb5d719663cecb3c63b5c2eb1 CLIENT_TRAFFIC_SECRET_0 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a 71d4806141cb1b247c1d1f3f7747a804fcc5e06c4192d8f53fc763a27b92316c SERVER_TRAFFIC_SECRET_0 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a 2ca17b0f7ff708fb3001be17a1c85163219221a4595462415e9e9e6653daf1fa EXPORTER_SECRET 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a 3f74b0cbe802d3e3dd3b5f6dee4114f928ec936a0cd388643d146cfb606f62a4
Configurar o Wireshark para descriptografia SSL #
Depois que o sistema de captura estiver registrando as chaves pré-mestras, você poderá usar o arquivo de log de chaves junto com os pacotes capturados para descriptografar o tráfego SSL no Wireshark.
1. Carregue o log de chaves e os arquivos de captura no sistema onde o Wireshark está instalado.
2. Abra o arquivo de captura de tráfego com o Wireshark.
3. Configure o protocolo SSL. Clique em Editar, Em seguida, selecione Preferencias. A caixa de diálogo Preferências será aberta, mostrando uma lista de itens à esquerda. Expanda o protocolos seção, role para baixo e clique em SSL. No SSL opções de protocolo, localize o campo rotulado (Pre)-Master-Secret nome do arquivo de log. Navegue até o arquivo de log que você configurou anteriormente ou cole o caminho diretamente neste campo.
4. Aplique a configuração. Após definir o (Pre)-Master-Secret nome do arquivo de log, clique em OK para salvar suas alterações e retornar ao Wireshark. Agora você está pronto para descriptografar o tráfego capturado. Ao selecionar um quadro de dados criptografado, verifique a visualização Packet byte. Abaixo da visualização, você deve ver uma guia para Dados SSL descriptografados entre outros.
Se os dados da sessão ainda parecerem ilegíveis e você não conseguir ver nenhum HTML, pode ser devido à compactação GZIP, que é comumente usada por servidores web como o Apache. Neste caso, clique no Corpo de entidade não compactado aba, que só está disponível quando a descriptografia SSL está habilitada. Aqui, você pode visualizar o código-fonte descompactado do site, como o elemento title da página padrão do Apache em texto simples.
Usando uma chave RSA para descriptografar SSL #
O Wireshark oferece um recurso que permite que você carregue suas chaves RSA para descriptografar o tráfego SSL, mas, na prática, a descriptografia de chaves RSA se tornou obsoleta.
Esse declínio no uso se deve à adoção do Perfect Forward Secrecy (PFS), que tornou a descriptografia de chave RSA tradicional obsoleta. Com o PFS, as sessões negociadas usando Diffie-Hellman não dependem diretamente da chave RSA. Em vez disso, elas geram uma chave única que é armazenada apenas na RAM e criptografada usando a chave no disco.
Se você usou anteriormente uma chave RSA para descriptografar o tráfego e descobriu que ela não funciona mais, a máquina alvo provavelmente está usando trocas de chaves Diffie-Hellman. Você pode confirmar isso habilitando o registro SSL no Wireshark.
Para habilitar o registro:
1. Clique em Editar no menu da barra de ferramentas e selecione Preferencias.
2. Expandir o protocolos seção à esquerda, role para baixo e clique em SSL.
3. Defina o local para o seu arquivo de log SSL clicando em Explorar botão.
Depois que o registro estiver habilitado, capture uma sessão com seu host habilitado para SSL e verifique os registros. Procure o quadro de negociação de handshake TLS; você provavelmente verá uma entrada DHE (ou ECDHE, para chaves de curva elíptica) na sequência de caracteres de cifra, indicando que as trocas de chaves Diffie-Hellman estão em uso.
Se você vir uma mensagem indicando que o segredo mestre não pode ser encontrado e a descriptografia da chave RSA falhar, você precisará alternar para o método de descriptografia pré-segredo mestre.
À medida que o PFS se torna mais difundido, especialmente com o advento do TLS 1.3, a descriptografia tradicional de chaves RSA se torna obsoleta e não deve mais ser confiável.
Saiba mais #
O formato SSLKEYLOGFILE para TLS #
O SSLKEYLOGFILE format é um arquivo de texto usado para armazenar chaves secretas pré-mestras para descriptografar conexões TLS. O arquivo é codificado em UTF-8, com cada linha contendo um segredo identificado por um rótulo, um valor aleatório do cliente e o próprio segredo, todos separados por espaços. O formato aceita várias terminações de linha (CRLF, CR, LF) e linhas começando com # são tratados como comentários.
Para TLS 1.3, vários rótulos correspondem a diferentes estágios do cronograma principal, como CLIENT_HANDSHAKE_TRAFFIC_SECRET e SERVER_TRAFFIC_SECRET_0. Para TLS 1.2 e anteriores, o CLIENTE_ALEATÓRIO etiqueta identifica o dominar segredo.
Considerações de segurança:
O acesso ao SSLKEYLOGFILE permite a descriptografia do tráfego TLS, representando um risco de segurança significativo. Controles de acesso adequados são essenciais para evitar acesso não autorizado ou escalonamento de privilégios. O registro deve ser habilitado somente por usuários autorizados, e permissões de arquivo estritas devem ser aplicadas. Os segredos registrados não apenas permitem a descriptografia, mas também podem permitir que invasores modifiquem ou injetem dados em conexões ativas e, em alguns casos, personifiquem endpoints ou falsifiquem mensagens.
Como funciona um handshake SSL bidirecional? #
Um handshake SSL bidirecional autentica tanto o servidor quanto o cliente. Veja como o processo se desenrola:
1. Cliente Olá: O cliente inicia o handshake enviando uma mensagem “Client Hello” para o servidor. Esta mensagem inclui os conjuntos de cifras suportados pelo cliente e as compatibilidades de versão TLS.
2. Olá servidor: O servidor responde com uma mensagem “Server Hello”, que contém o certificado público do servidor e uma solicitação do certificado do cliente.
3. Validação do Certificado do Cliente: O cliente verifica o certificado do servidor. Se for válido, o cliente envia seu próprio certificado de volta ao servidor.
4. Validação do certificado do servidor: O servidor verifica o certificado do cliente. Se o certificado do cliente for válido, o estabelecimento da sessão prossegue, permitindo comunicação segura entre ambas as partes.
É possível descriptografar tráfego SSL/TLS rastreado passivamente? #
Sim, é possível descriptografar tráfego SSL/TLS sniffed passivamente, mas você precisará da chave RSA para fazer isso. Essa chave pode ser obtida por meios legítimos com autorização adequada ou, menos eticamente, interceptando-a usando um ataque “man-in-the-middle”.