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

2

Estou tentando fazer uma extração manual de dados / criptografia / descriptografia com a ferramenta de linha de comando openssl .

Estou analisando o RFC5246 para descobrir o que preciso fazer. Não é claro para mim se vou poder fazer este passo com essa ferramenta. Estou assumindo que a chave privada na explicação é a chave privada gerada quando eu criei meu certificado auto-assinado.

When RSA is used for server authentication and key exchange, a 48- byte pre_master_secret is generated by the client, encrypted under the server's public key, and sent to the server. The server uses its private key to decrypt the pre_master_secret. Both parties then convert the pre_master_secret into the master_secret, as specified above.

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

Em caso afirmativo, não sei como fazer isso, pois não estou muito familiarizado com a ferramenta.

A outra coisa que devo salientar é que a suíte de criptografia com a 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.

    
por David B 20.07.2018 / 16:09

2 respostas

4

Eu não tenho certeza, mas acho que a resposta é não. O cliente da linha de comandos openssl é 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 qualquer outra coisa além de 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 a biblioteca Cryptodome .

Mas para descriptografar conexões SSL, a maneira mais fácil é usar o Wireshark. Diga ao Wireshark onde encontrar a chave privada e ela irá descriptografar uma conexão TLS que use a criptografia RSA. Para conexões usando Diffie-Hellman efêmero, você não pode descriptografar o tráfego com a chave sozinho, você precisa informações adicionais do cliente ou do servidor .

Observe que usar o TLS_RSA_WITH_AES_256_CBC_SHA ciphersuite é uma ideia ruim por vários motivos:

  • Ele não tem encaminhamento de sigilo , portanto, se a chave privada do servidor for comprometida, todas as conexões feitas com esse chave também estão comprometidas. Ciphersuites que usam uma troca de chaves Diffie-Hellman (com EDH ou ECDHE em seu nome) têm sigilo antecipado.
  • Ele usa descriptografia RSA, que envolve o preenchimento, que é uma fonte clássica de erros de implementação e vazamento através de canais laterais. Ciphersuites com EDH ou ECDHE em seu nome, além de RSA, ou com DSA ou ECDSA, usam assinaturas em vez de decriptografia e são menos propensos a sofrer de defeitos de implementação.
  • Ele usa a descriptografia CBC, que envolve o preenchimento, que é uma fonte clássica de erros de implementação e vazamento através de canais laterais. Ciphersuites sem CBC em seu nome são menos propensos a sofrer de defeitos de implementação.
por 20.07.2018 / 20:36
1

RSAES-PKCS1v1_5, que usa a troca de chaves simples RSA SSL / TLS-through-1.2, pode ser descriptografada pelas operações de linha de comando do OpenSSL rsautl ou pkeyutl (a última desde 1.1.0 in 2010). Veja suas respectivas páginas man, que devem estar disponíveis em seu sistema, se não no Windows, ou on-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 prefixo mais nonces para derivar o segredo mestre e, em seguida, o segredo mestre mais 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 irá diferir novamente no TLS 1.3 conforme delineado, mas isso também eliminará totalmente a troca de chave 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 criados (exceto SSLv3); veja a man page para dgst nos mesmos lugares acima, e observe que -hmac $key só pode manipular seqüências de bytes que podem ser passadas do shell / etc, o que não é tudo, então você pode precisar de -mac hmac -macopt hexkey:$hexkey . p>

Dito isto, eu concordo com o Gilles, é muito mais fácil deixar o wireshark fazer isso. Se o seu problema é que você tem os dados de alguma forma além de um arquivo de captura, as distros da wireshark vêm com várias ferramentas de linha de comando auxiliares para manipular arquivos que geralmente podem construir uma captura falsa, que nesse caso pode decifrar. p>     

por 21.07.2018 / 14:53