Descriptografando tráfego SSL com Wireshark e tcpdump

Ver Categorias

Descriptografando tráfego SSL com Wireshark e tcpdump

9 min read

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.

Descriptografia SSL com tcpdump e wireshark

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”.

📄 Baixe este documento em formato PDF #

    E-MAIL: *

    Powered by MelhoresDocs