Mi sono imbattuto recentemente in questo problema. Corriamo ssldump
e openssl s_client
allo stesso tempo - openssl
mostrerebbe che il cipher attivo è AES256-SHA
, ma ssldump
continuerà a stampare TLS_RSA_WITH_RC4_128_MD5
nel suo output.
Credo di aver trovato un bug in ssldump
. Guardando attraverso il codice sorgente ho trovato il seguente:
- I pacchetti SSL handshake vengono decodificati nella funzione
decode_ContentType_handshake()
in ssl/ssl_enum.c:20
- Questa funzione chiama quindi
ssl_decode_switch(ssl,HandshakeType_decoder,t,dir,seg,data)
, dove HandshakeType_decoder
è una matrice di decoder
structs \
-
ssl_decode_switch(ssl,dtable,value,dir,seg,data)
( ssl/ssl_print.c:204
) itera attraverso l'array dtable
finché non trova la voce decoder
con type == value
o type == -1
("non trovato")
- Tuttavia, guardando la definizione di
HandshakeType_decoder
in ssl/ssl_enum.c:212
la matrice non viene terminata con una struttura decoder
con type == -1
- alla fine c'è un 0
- Inoltre, immediatamente dopo la definizione
HandshakeType_decoder
è la definizione di cipher_suite_decoder
( ssl/ssl_enum.c:266
) che è una matrice della stessa struttura decoder
. Questo array contiene un elenco di cifre.
- Ciò significa che se il tipo di handshake SSL non viene trovato in
HandshakeType_decoder
, ssl_decode_switch()
continuerà la ricerca in cipher_suite_decoder
come sarà (probabilmente) in memoria direttamente seguendo i dati HandshakeType_decoder
- E questo si sta verificando nel mio caso. Per qualche ragione
decode_ContentType_handshake()
ha decodificato il pacchetto handshake di tipo 4
che ssl_decode_switch()
non è stato trovato in HandshakeType_decoder
. Tuttavia, per coincidenza 4
è il valore type
della voce cipher_suite_decoder
con name == TLS_RSA_WITH_RC4_128_MD5
Ho esaurito il tempo per indagare su questo problema, quindi non so perché ssldump
sta tentando di decodificare un pacchetto di handshake con un tipo non valido. Sono comunque convinto che l'array HandshakeType_decoder
debba essere terminato con un -1
per impedire l'overrun.