Descriptografe o tráfego SSL com a ferramenta de linha de comando openssl

Descriptografe o tráfego SSL com a ferramenta de linha de comando openssl

Estou tentando fazer alguma extração/criptografia/descriptografia manual de dados com a opensslferramenta de linha de comando.

Estou revisando o RFC5246 para descobrir o que preciso fazer. Não está claro para mim se conseguirei realizar esta etapa com essa ferramenta. Presumo que a chave privada na explicação seja a chave privada gerada quando criei meu certificado autoassinado.

Quando o RSA é usado para autenticação do servidor e troca de chaves, um pre_master_secret de 48 bytes é gerado pelo cliente, criptografado na chave pública do servidor e enviado ao servidor. O servidor usa sua chave privada para descriptografar o pre_master_secret. Ambas as partes convertem pre_master_secret em master_secret, conforme especificado acima.

Alguém pode me dizer se minhas suposições estão corretas. A opensslferramenta de linha de comando pode ser usada e fornecida com a chave privada do meu servidor e pre_master_secret criptografada do cliente para gerar a chave pre_master para o servidor para que possa ser usada para criar a chave mestra?

Nesse caso, não sei como fazê-lo, pois não estou muito familiarizado com a ferramenta.

A outra coisa que devo salientar é que o conjunto de criptografia com o qual estou trabalhando é TLS_RSA_WITH_AES_256_CBC_SHA e posso ver no Wireshark que o pre_master_secret do cliente tem 256 bytes de comprimento.

Responder1

Não tenho certeza, mas acho que a resposta é não. O opensslcliente de linha de comando é uma coleção heterogênea de ferramentas. Os comandos X.509 podem ser úteis para manipular certificados, mas os comandos de criptografia raramente são úteis para outra coisa senão testar o próprio OpenSSL.

Se você precisar fazer cálculos criptográficos com algoritmos comuns, recomendo a linha de comando interativa do Python com o comandoCriptodomobiblioteca.

Mas para descriptografar conexões SSL, a maneira mais fácil geralmente é usar o Wireshark.Diga ao Wireshark onde encontrar a chave privadae descriptografará uma conexão TLS que usa criptografia RSA. Para conexões usando Diffie-Hellman efêmero, você não pode descriptografar o tráfego apenas com a chave, você precisainformações adicionais do cliente ou do servidor.


Observe que usar o TLS_RSA_WITH_AES_256_CBC_SHAciphersuite é uma má ideia por vários motivos:

  • Não temencaminhar sigilo, portanto, se a chave privada do servidor for comprometida, todas as conexões feitas com essa chave também serão comprometidas. Ciphersuites que usam uma troca de chaves Diffie-Hellman (com EDH ou ECDHE em seu nome) têm sigilo de encaminhamento.
  • Ele usa descriptografia RSA, que envolve preenchimento, que é uma fonte clássica de bugs de implementação e vazamento através de canais secundários. Ciphersuites com EDH ou ECDHE em seu nome além de RSA, ou com DSA ou ECDSA, usam assinaturas em vez de descriptografia e são menos propensos a sofrer defeitos de implementação.
  • Ele usa descriptografia CBC, que envolve preenchimento, que é uma fonte clássica de bugs de implementação e vazamento através de canais secundários. Ciphersuites sem CBC em seu nome têm menos probabilidade de sofrer defeitos de implementação.

Responder2

RSAES-PKCS1v1_5, que SSL/TLS-through-1.2 plain-RSA keyexchange usa, pode ser descriptografado por operações de linha de comando OpenSSLrsautloupkeyutl(este último desde 1.1.0 em 2010). Veja suas respectivas páginas de manual, que devem estar disponíveis em seu sistema, se não for Windows, ouon-line.

Observe que isso fornece o segredo pré-mestre, que por si só não pode descriptografar (ou autenticar) o tráfego. Você deve usar o pré-mestre mais os nonces para derivar o segredo mestre e, em seguida, o segredo mestre mais os nonces para derivar as chaves de trabalho (plural). A função de derivação 'PRF' difere entre SSLv3 (não mais usado), TLS 1.0 e 1.1 (RFCs 2246 e 4346) e TLS 1.2 (RFC 5246). (O PRF será diferente novamente no TLS 1.3 conforme redigido, mas isso também eliminará totalmente a troca de chaves RSA simples.)

A linha de comando não pode acessar os PRFs SSL/TLS diretamente, mas pode fazer os HMACs a partir dos quais eles são construídos (exceto SSLv3); veja a página de manual dgstnos mesmos lugares acima, e note -hmac $keysó pode manipular sequências de bytes que podem ser passadas do shell/etc, o que não é tudo, então você pode precisar -mac hmac -macopt hexkey:$hexkey.

Dito isto, concordo com Gilles que é muito mais fácil deixar o Wireshark fazer isso. Se o seu problema é que você tem os dados de alguma forma diferente de um arquivo de captura, as distros wireshark vêm com várias ferramentas auxiliares de linha de comando para manipular arquivos que geralmente podem construir uma captura falsa, que neste caso wireshark ou tshark main pode então descriptografar.

informação relacionada