Fornecer chave mestra da sessão para a interface do usuário do Wireshark?


1

Estou trabalhando em um problema com HTTPS. Suspeito que esteja relacionado a certificados de clientes. Quero ler algumas das mensagens criptografadas de handshake que seguem a ServerHelloDonemensagem. (Uma vez ServerHelloDoneenviado, o fluxo geralmente muda para criptografado):

insira a descrição da imagem aqui

O rastreamento do Wireshark foi gerado com s_client:

$ echo -e "GET / HTTP/1.1\nHost:example.net\n" | openssl s_client -connect example.net:443 -ssl3 -ign_eof -CAfile Equifax_Secure_Certificate_Authority.pem 
CONNECTED(00000003)
...
---
Certificate chain
 0 s:/C=ES/ST=Malaga/L=Malaga/O=Example, LLC/CN=www.example.net/OU=Example IT
   i:/C=US/O=GeoTrust Inc./CN=GeoTrust SSL CA - G2
 1 s:/C=US/O=GeoTrust Inc./CN=GeoTrust SSL CA - G2
   i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
 2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
   i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIExjCCA66gAwIBAgIQeee0uwSySeNXOkI+BUoMMzANBgkqhkiG9w0BAQUFADBE
MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMU
...
doLsKI2R6RQA/7IcuTpKkvLF5wYKvmocPxYVg9FOoFvKV0wjWo6qlwsANPAVov+7
zFzZreROa7lBj8UH0IyYjLmBrbe1yMr/Cmg=
-----END CERTIFICATE-----
...
New, TLSv1/SSLv3, Cipher is RC4-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : SSLv3
    Cipher    : RC4-SHA
    Session-ID: 663C000068D5E2DFCC69EE1FA40489927A80EFE118703BBAD28E1E81EDD02B15
    Session-ID-ctx: 
    Master-Key: ACB5F8C6302DE96555A680FBD37A83CBF81087368685A36B2B04E23A822E403CDF35FAACF959F55107AC4641AE1531DB
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1407443412
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
...
read R BLOCK
HTTP/1.1 301 Moved Permanently
Cache-Control: private
Content-Type: text/html; charset=utf-8
Location: /Login/Login
Server: Microsoft-IIS/7.5
X-AspNetMvc-Version: 3.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Thu, 07 Aug 2014 20:29:46 GMT
Content-Length: 129

<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="/Login/Login">here</a>.</h2>
</body></html>
^C

Como o rastreamento do Wireshark foi gerado com s_client, eu tenho a chave mestra da sessão. Eu tenho a chave mestra, porque a s_clientimprimi no terminal. NOTA : Não reivindico nada sobre a chave pública ou privada do servidor. Só reivindico ter uma chave para esta sessão.

Visitei o Secure Socket Layer (SSL) no wiki do Wireshark, mas ele não diz como conectar a chave mestra na GUI. (Eles discutem como usá-lo, mas não está relacionado à GUI).

Existe uma maneira de conectar a chave mestra na GUI do Wireshark para que eu possa ler o tráfego criptografado?


11
From above, I have the master key.não, você não. Você tem a chave pública. Isso significa que você pode criptografar o conteúdo. A chave privada está no servidor remoto e você não pode obtê-la, a menos que possua esse servidor.
Zoredache

@ Zoredache - não reivindiquei nada sobre o par de chaves do servidor. s_clientdespeja a chave mestra da sessão. Eu o tenho porque o s_clientimprime no terminal. (Relacionado: não tenho certeza se esse é o segredo pré-mestre ou o segredo mestre, mas vou resolver isso se necessário).
JWW

Respostas:


1

Considerando que você tem um arquivo contendo a chave privada, contendo algo como

-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCsiEqJU4M76dlpmhb69DciXhLGkHX8mIoaQsCyy+Qx1rzSFp1L
WFrDBR4v9zyyO11F8eRdc+AZqbhlzEq+HV5qH9MYnKeKJZMUlMSvE675aZzx2DWY
rHdR1RyDpyxQvL8yKsAmoxY9WoesYU37gwk3al2C2lGL1MyxXT863ku0swIDAQAB
[...]
2xZo60YQkK6sKoxxDZFfnE6pYGiluSaYHmem42Sn7ZWarfMFgJGS92EZXGCBQIun
6Q5pB4pxj6iUMkT7joECQAzRrRCHpKtJmFoxEZ/xhGVUpUUulCor4Xe5Mo6mJdJw
ZjAAI3aJW4RWouEUPR1voTKHewFNUqXYE48zpElzpYM=
-----END RSA PRIVATE KEY-----

você precisa abrir o wireshark -> editar -> preferências ....

Na coluna da esquerda, localize em "protocolos" o item "SSL". Dependendo da versão, a sintaxe pode variar. Assumindo a versão mais atualizada, em "Lista de chaves RSA", clique em Editar ... Depois em "Novo" e preencha os campos usando "http" como protocolo (não https) e deixando a senha em branco.

NOTA: em algumas circunstâncias, você não poderá descriptografar:

  • se você não capturou TODO o tráfego, desde o primeiro pacote
  • se o cliente reutilizou uma sessão SSL (verifique no pacote client_hello se há "ID da sessão")
  • se o SSL foi negociado com sigilo direto

Eu descobri que também há outra possibilidade: se você tiver o ID da sessão e a chave mestra, poderá configurar um arquivo como este (copiei os dados da sua saída openssl):

RSA Session-ID:663C000068D5E2DFCC69EE1FA40489927A80EFE118703BBAD28E1E81EDD02B15 Master-Key:ACB5F8C6302DE96555A680FBD37A83CBF81087368685A36B2B04E23A822E403CDF35FAACF959F55107AC4641AE1531DB

e em Preferências SSL no wireshark, aponte o nome do arquivo de log (Pre) -Master-Secret para ele.

Lembre-se de incluir uma linha em branco no arquivo


Obrigado NuTTyX. Eu não tenho a chave [server] ou o arquivo de chave. Ao usar o OpenSL s_client, tenho o segredo principal da sessão observada pelo Wireshark.
JWW
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.