What it can do: - Decodes records and most standard messages and extensions. - Decryptes records and reassemples application data stream if a keylog is provided and the cipher suite is supported. - Supports most recommended and used ciphers and a bunch of older ones. What it can't do: - SSL v3 maybe supported, is similar to TLS 1.0, not tested. - Decryption and renegotiation/cipher change. - Record defragmentation not supported, seems rare over TCP. - TLS 1.3 - SSL v2 but v2 compat header is supported. - Some key exchange messages not decoded yet Decryption code is heavly based on golang crypto/tls and zmap/zcrypto. Will be base for decoding http2 and other TLS based on protocols. Fixes #587
4.6 KiB
Supports decoding of most standard records, messages and extensions. Can also decrypt most standard cipher suits in a PCAP with traffic in both directions if a NSS key log is provided.
Decode and decrypt provding a PCAP and key log
Write traffic to a PCAP file:
$ tcpdump -i <iface> -w traffic.pcap
Make sure your curl TLS backend support SSLKEYLOGFILE
and do:
$ SSLKEYLOGFILE=traffic.keylog curl --tls-max 1.2 https://host/path
Decode, decrypt and query. Uses keylog=@<path>
to read option value from keylog file:
# decode and show whole tree
$ fq -o keylog=@traffic.keylog d traffic.pcap
# write unencrypted server response to a file.
# first .stream is the TCP stream, second .stream is TLS application data stream
#
# first TCP connections:
$ fq -o keylog=@traffic.keylog '.tcp_connections[0].server.stream.stream | tobytes' traffic.pcap > data
# first TLS connection:
$ fq -o keylog=@traffic.keylog 'first(grep_by(.server.stream | format == "tls")).server.stream.stream | tobytes' > data
Supported cipher suites for decryption
TLS_DH_ANON_EXPORT_WITH_DES40_CBC_SHA
,
TLS_DH_ANON_EXPORT_WITH_RC4_40_MD5
,
TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA
,
TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA
,
TLS_DHE_DSS_WITH_AES_128_CBC_SHA
,
TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
,
TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
,
TLS_DHE_DSS_WITH_AES_256_CBC_SHA
,
TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
,
TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
,
TLS_DHE_DSS_WITH_DES_CBC_SHA
,
TLS_DHE_DSS_WITH_RC4_128_SHA
,
TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA
,
TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
,
TLS_DHE_RSA_WITH_AES_128_CBC_SHA
,
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
,
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
,
TLS_DHE_RSA_WITH_AES_256_CBC_SHA
,
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
,
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
,
TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256
,
TLS_DHE_RSA_WITH_DES_CBC_SHA
,
TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA
,
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
,
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
,
TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
,
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA
,
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384
,
TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384
,
TLS_ECDH_ECDSA_WITH_RC4_128_SHA
,
TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
,
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
,
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256
,
TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256
,
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA
,
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384
,
TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384
,
TLS_ECDH_RSA_WITH_RC4_128_SHA
,
TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
,
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
,
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
,
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
,
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
,
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
,
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
,
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
,
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384eadAESGCM
,
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
,
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305
,
TLS_ECDHE_ECDSA_WITH_RC4_128_SHA
,
TLS_ECDHE_ECDSA_WITH_RC4_128_SHA
,
TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA
,
TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256
,
TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA
,
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
,
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
,
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
,
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
,
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
,
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
,
TLS_ECDHE_RSA_WITH_RC4_128_SHA
,
TLS_ECDHE_RSA_WITH_RC4_128_SHA
,
TLS_PSK_WITH_AES_128_CBC_SHA
,
TLS_PSK_WITH_AES_256_CBC_SHA
,
TLS_PSK_WITH_RC4_128_SHA
,
TLS_RSA_EXPORT_WITH_DES40_CBC_SHA
,
TLS_RSA_EXPORT_WITH_RC4_40_MD5
,
TLS_RSA_WITH_3DES_EDE_CBC_SHA
,
TLS_RSA_WITH_3DES_EDE_CBC_SHA
,
TLS_RSA_WITH_AES_128_CBC_SHA
,
TLS_RSA_WITH_AES_128_CBC_SHA
,
TLS_RSA_WITH_AES_128_CBC_SHA256
,
TLS_RSA_WITH_AES_128_CBC_SHA256
,
TLS_RSA_WITH_AES_128_GCM_SHA256
,
TLS_RSA_WITH_AES_128_GCM_SHA256
,
TLS_RSA_WITH_AES_256_CBC_SHA
,
TLS_RSA_WITH_AES_256_CBC_SHA
,
TLS_RSA_WITH_AES_256_CBC_SHA256
,
TLS_RSA_WITH_AES_256_GCM_SHA384
,
TLS_RSA_WITH_AES_256_GCM_SHA384
,
TLS_RSA_WITH_DES_CBC_SHA
,
TLS_RSA_WITH_RC4_128_MD5
,
TLS_RSA_WITH_RC4_128_SHA
,
TLS_RSA_WITH_RC4_128_SHA