NetCatTest

Anonimato & OPSEC

TLS 1.3 no Wireshark: handshake e decriptação autorizada

Compare uma sessão TLS 1.3 antes e depois de carregar chaves exclusivas do laboratório. Handshake real, HTTPS fictício e prints do Wireshark.

Por Daniel Felipe 8 min leitura

TLS 1.3 no Wireshark permite investigar duas coisas distintas: o comportamento da sessão e, quando há material autorizado, o conteúdo protegido. Ver Application Data na lista não significa que o analista consegue ler a request. Também não significa que o tráfego foi perdido. Significa que parte da informação está protegida e que o alcance da observação precisa ser declarado.

Este laboratório contém um handshake TLS 1.3 verdadeiro, uma request HTTPS e uma response JSON. Os registros foram produzidos por OpenSSL através de MemoryBIO, com certificado exclusivo de aurora.test, e envolvidos em TCP/IP offline. O Wireshark 4.6.9 real foi usado para conferir a sessão. Nenhum socket externo foi aberto e nenhum certificado ou segredo pessoal foi utilizado.

O que foi produzido e o que não foi capturado

O arquivo 22-tls13.pcap tem 19 pacotes. Seus cabeçalhos Ethernet, IPv4 e TCP foram construídos para representar uma conversa completa entre 192.0.2.10 e 198.51.100.20. Os bytes TLS são reais: duas máquinas de estado criptográficas negociaram a sessão, validaram o certificado do laboratório e trocaram o conteúdo da aplicação em memória.

A temporização TCP é controlada. Portanto, a captura serve para estudar enquadramento, handshake e decriptação autorizada, mas não para medir latência de internet ou desempenho de um servidor de produção. Essa distinção evita apresentar um teste de protocolo como uma medição de rede física.

ReferênciaFrameUso no exercício
ClientHello4Versões, SNI e propostas da sessão
Request HTTPS12Conteúdo visível somente com segredos do laboratório
Response HTTPS14JSON fictício e política de cache
Handshake e encerramento TCPInício e fim do arquivoContexto do transporte offline

Primeira leitura: sem arquivo de chaves

Abra o PCAP sem configurar o key log. Filtre TLS. O ClientHello permite observar o início da negociação. Os registros posteriores aparecem protegidos. A análise precisa preservar essa limitação: não é possível afirmar qual perfil HTTP foi solicitado apenas porque uma sessão TLS existiu.

tls
tls.handshake.type == 1
tls.record.content_type == 23
tcp.port == 443

Os testes deste conjunto verificaram que http não retorna request ou response quando o arquivo de chaves está ausente. Esse controle é importante: se o conteúdo HTTP aparecesse sem os segredos, seria necessário verificar se o arquivo carregou chaves incorporadas, uma configuração anterior ou tráfego em claro.

Wireshark real mostrando handshake e registros TLS 1.3 do laboratório sem decriptação HTTP

Sem o key log exclusivo do exercício, o payload HTTP permanece protegido. O print não representa interceptação de uma sessão de terceiros.

ClientHello: proposta e resultado são dados diferentes

Selecione o frame 4. Expanda TLS e as extensões do ClientHello. O nome de servidor é aurora.test; a proposta de aplicação contém HTTP/1.1. Confira o que o cliente ofereceu antes de escrever o que foi negociado.

Uma lista de algoritmos propostos não comprova uso de todos eles. O resultado precisa ser confrontado com a resposta do servidor e com o estado final da sessão. No manifesto do laboratório, a pilha registra versão, cipher e ALPN efetivamente escolhidos. Isso fornece um segundo ponto de verificação para a leitura do PCAP.

A RFC 8446 define TLS 1.3. Seu enquadramento inclui características de compatibilidade que podem aparecer com valores de versão anteriores em campos do registro. A conclusão sobre TLS 1.3 deve considerar a negociação, não apenas um número isolado no cabeçalho.

Key log autorizado: escopo limitado à sessão do laboratório

O pacote inclui 22-tls13-laboratorio.keys. Ele contém exclusivamente segredos produzidos pelas sessões fictícias deste exercício. Foi mantido separado do PCAP para permitir comparação entre leitura protegida e leitura autorizada. Não reutilize um key log de navegador pessoal para reproduzir o exemplo.

No Wireshark, configure o campo de arquivo de segredos TLS em um perfil de laboratório ou abra pelo comando com uma preferência temporária. Evite salvar caminhos pessoais no perfil que será compartilhado. O caminho do comando abaixo é relativo ao arquivo da experiência.

wireshark -n -r 22-tls13.pcap -o tls.keylog_file:22-tls13-laboratorio.keys
tshark -n -r 22-tls13.pcap -o tls.keylog_file:22-tls13-laboratorio.keys -Y http -T fields -e frame.number -e http.request.method -e http.request.uri -e http.response.code

A documentação TLS do Wireshark explica o uso do key log. Aqui, a disponibilidade do segredo é uma condição do experimento, não uma falha da criptografia. Quem possui material suficiente da sessão pode reconstruir o conteúdo correspondente.

Segunda leitura: request e response reconstruídas

Com o key log correto, o frame 12 contém GET /api/perfil-lab. A response do frame 14 retorna JSON com perfil fictício, ambiente de laboratório e indicação de ausência de segredo real. O cabeçalho Cache-Control: no-store faz parte do controle observado.

Wireshark real reconstruindo GET api perfil lab e response HTTP dentro de TLS com chaves exclusivas do laboratório

A request e a response aparecem somente após carregar os segredos correspondentes. Os dados da aplicação são fictícios.

O resultado demonstra o conteúdo enviado pela aplicação do laboratório. Não demonstra que um cliente de produção respeitou determinada política de cache nem que um intermediário deixou de armazenar dados. Um cabeçalho observado e o comportamento completo do ecossistema são níveis diferentes de evidência.

Chave privada do servidor não é sinônimo de segredo de sessão

Uma dúvida comum é tentar abrir qualquer TLS moderno apenas com a chave privada do certificado. No exercício, a decriptação foi validada com os segredos da sessão. O material que autentica o servidor e o material que protege os registros desempenham papéis distintos.

Ao documentar um procedimento, diga qual tipo de segredo foi fornecido, de onde veio e a quais sessões se aplica. Uma descrição genérica como “adicione a chave” não é suficiente para alguém reproduzir o resultado. No pacote publicado, não há chave privada do computador: o certificado foi gerado exclusivamente para a experiência e seu uso é conhecido.

Reassembly: registros TLS não coincidem com pacotes TCP

Um registro pode atravessar vários segmentos, e um segmento pode carregar mais de um registro. A árvore do Wireshark apresenta relações de reassembly quando necessário. A contagem de pacotes TCP não deve ser usada como contagem de operações HTTP ou mensagens do handshake.

Se faltar um intervalo de bytes, o protocolo superior pode deixar de ser decodificado. Antes de concluir que a decriptação falhou por algoritmo, confirme a completude do transporte, a presença do ClientHello e a correspondência entre o key log e aquela sessão.

Neste arquivo, a sequência TCP é completa e os checksums foram verificados. Isso reduz as variáveis do exercício: uma diferença entre os dois modos de leitura deve se relacionar principalmente à disponibilidade dos segredos, e não a uma perda introduzida pelo gerador.

O que continua investigável quando não há segredos

Mesmo sem o conteúdo, é possível organizar endpoints, duração, tamanhos, sequência do transporte e comportamento de encerramento. Algumas características do handshake podem permanecer visíveis, dependendo do protocolo e das extensões utilizadas. Declare exatamente quais campos foram observados em vez de presumir a visibilidade de todos os nomes ou certificados.

Uma sessão longa com pequenos registros periódicos pode merecer contexto adicional, mas não identifica sozinha malware ou vazamento. Ferramentas de sincronização e aplicações legítimas também mantêm conexões duradouras. A correlação precisa incluir inventário, processo e finalidade autorizada.

Uma investigação que preserva o sigilo

Em trabalho profissional, segredos de sessão devem seguir controle de acesso e prazo de retenção. Publicar um PCAP junto com um key log real pode revelar dados que antes estavam protegidos. Para material didático, gere uma sessão independente, como fizemos aqui, e confira a ausência de informações pessoais antes de exportar.

A documentação de MemoryBIO no Python fundamenta o método usado para produzir registros TLS sem sockets. O benefício editorial é permitir exemplos criptograficamente válidos sem depender de tráfego da navegação do autor.

Checklist TLS para fechar a análise

  1. Registre versão do Wireshark, hash do arquivo e perfil utilizado.
  2. Separe valores oferecidos pelo cliente e valores negociados.
  3. Declare o que é visível sem segredos.
  4. Quando autorizado, confira a correspondência do key log com a sessão.
  5. Verifique reassembly antes de atribuir falha ao cipher.
  6. Relate request, response e política observada sem extrapolar comportamento não testado.
  7. Proteja PCAP e segredos como um conjunto quando houver conteúdo real.

O download da série inclui os dois modos de reprodução. A comparação mostra uma fronteira concreta de visibilidade: o analisador não remove a proteção da sessão sem material correspondente, mas consegue apresentar os protocolos internos quando esse material é fornecido de forma autorizada.

Escrito por

Daniel Felipe é criador do NetCatTest e produz conteúdos sobre cibersegurança, privacidade digital, OSINT, laboratórios autorizados e ferramentas para estudo técnico responsável.

Compartilhar

Enviar este artigo