mirror of
https://github.com/zeek/zeek.git
synced 2025-10-14 20:48:21 +00:00
Add DH support to SSL analyzer.
When using DHE or DH-Anon, sever key parameters are now available in scriptland. Also add script to alert on weak certificate keys or weak dh-params.
This commit is contained in:
parent
b1a2bccdc7
commit
fb56b22cff
12 changed files with 288 additions and 7 deletions
|
@ -356,8 +356,9 @@ type CertificateStatus(rec: SSLRecord) = record {
|
|||
# Usually, the server key exchange does not contain any information
|
||||
# that we are interested in.
|
||||
#
|
||||
# The one exception is when we are using an elliptic curve cipher suite.
|
||||
# In this case, we can extract the final chosen cipher from here.
|
||||
# The exception is when we are using an ECDHE, DHE or DH-Anon suite.
|
||||
# In this case, we can extract information about the chosen cipher from
|
||||
# here.
|
||||
type ServerKeyExchange(rec: SSLRecord) = case $context.connection.chosen_cipher() of {
|
||||
TLS_ECDH_ECDSA_WITH_NULL_SHA,
|
||||
TLS_ECDH_ECDSA_WITH_RC4_128_SHA,
|
||||
|
@ -453,6 +454,109 @@ type ServerKeyExchange(rec: SSLRecord) = case $context.connection.chosen_cipher(
|
|||
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
|
||||
-> ec_server_key_exchange : EcServerKeyExchange(rec);
|
||||
|
||||
# DHE suites
|
||||
TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA,
|
||||
TLS_DHE_DSS_WITH_DES_CBC_SHA,
|
||||
TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA,
|
||||
TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA,
|
||||
TLS_DHE_RSA_WITH_DES_CBC_SHA,
|
||||
TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA,
|
||||
TLS_DHE_DSS_WITH_AES_128_CBC_SHA,
|
||||
TLS_DHE_RSA_WITH_AES_128_CBC_SHA,
|
||||
TLS_DHE_DSS_WITH_AES_256_CBC_SHA,
|
||||
TLS_DHE_RSA_WITH_AES_256_CBC_SHA,
|
||||
TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,
|
||||
TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
|
||||
TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
|
||||
TLS_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA,
|
||||
TLS_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA,
|
||||
TLS_DHE_DSS_WITH_RC4_128_SHA,
|
||||
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,
|
||||
TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,
|
||||
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,
|
||||
TLS_DHE_DSS_WITH_3DES_EDE_CBC_RMD,
|
||||
TLS_DHE_DSS_WITH_AES_128_CBC_RMD,
|
||||
TLS_DHE_DSS_WITH_AES_256_CBC_RMD,
|
||||
TLS_DHE_RSA_WITH_3DES_EDE_CBC_RMD,
|
||||
TLS_DHE_RSA_WITH_AES_128_CBC_RMD,
|
||||
TLS_DHE_RSA_WITH_AES_256_CBC_RMD,
|
||||
TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
|
||||
TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
|
||||
TLS_DHE_PSK_WITH_RC4_128_SHA,
|
||||
TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA,
|
||||
TLS_DHE_PSK_WITH_AES_128_CBC_SHA,
|
||||
TLS_DHE_PSK_WITH_AES_256_CBC_SHA,
|
||||
TLS_DHE_DSS_WITH_SEED_CBC_SHA,
|
||||
TLS_DHE_RSA_WITH_SEED_CBC_SHA,
|
||||
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,
|
||||
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,
|
||||
TLS_DHE_DSS_WITH_AES_128_GCM_SHA256,
|
||||
TLS_DHE_DSS_WITH_AES_256_GCM_SHA384,
|
||||
TLS_DHE_PSK_WITH_AES_128_GCM_SHA256,
|
||||
TLS_DHE_PSK_WITH_AES_256_GCM_SHA384,
|
||||
TLS_DHE_PSK_WITH_AES_128_CBC_SHA256,
|
||||
TLS_DHE_PSK_WITH_AES_256_CBC_SHA384,
|
||||
TLS_DHE_PSK_WITH_NULL_SHA256,
|
||||
TLS_DHE_PSK_WITH_NULL_SHA384,
|
||||
TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256,
|
||||
TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256,
|
||||
TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256,
|
||||
TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384,
|
||||
TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256,
|
||||
TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384,
|
||||
TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256,
|
||||
TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384,
|
||||
TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256,
|
||||
TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384,
|
||||
TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256,
|
||||
TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384,
|
||||
TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256,
|
||||
TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384,
|
||||
TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256,
|
||||
TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384,
|
||||
TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256,
|
||||
TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384,
|
||||
TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256,
|
||||
TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384,
|
||||
TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,
|
||||
TLS_DHE_RSA_WITH_AES_128_CCM,
|
||||
TLS_DHE_RSA_WITH_AES_256_CCM,
|
||||
TLS_DHE_RSA_WITH_AES_128_CCM_8,
|
||||
TLS_DHE_RSA_WITH_AES_256_CCM_8,
|
||||
TLS_DHE_PSK_WITH_AES_128_CCM,
|
||||
TLS_DHE_PSK_WITH_AES_256_CCM,
|
||||
TLS_PSK_DHE_WITH_AES_128_CCM_8,
|
||||
TLS_PSK_DHE_WITH_AES_256_CCM_8,
|
||||
TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
|
||||
# DH-anon suites
|
||||
TLS_DH_ANON_EXPORT_WITH_RC4_40_MD5,
|
||||
TLS_DH_ANON_WITH_RC4_128_MD5,
|
||||
TLS_DH_ANON_EXPORT_WITH_DES40_CBC_SHA,
|
||||
TLS_DH_ANON_WITH_DES_CBC_SHA,
|
||||
TLS_DH_ANON_WITH_3DES_EDE_CBC_SHA,
|
||||
TLS_DH_ANON_WITH_AES_128_CBC_SHA,
|
||||
TLS_DH_ANON_WITH_AES_256_CBC_SHA,
|
||||
TLS_DH_ANON_WITH_CAMELLIA_128_CBC_SHA,
|
||||
TLS_DH_ANON_WITH_AES_128_CBC_SHA256,
|
||||
TLS_DH_ANON_WITH_AES_256_CBC_SHA256,
|
||||
TLS_DH_ANON_WITH_CAMELLIA_256_CBC_SHA,
|
||||
TLS_DH_ANON_WITH_SEED_CBC_SHA,
|
||||
TLS_DH_ANON_WITH_AES_128_GCM_SHA256,
|
||||
TLS_DH_ANON_WITH_AES_256_GCM_SHA384,
|
||||
TLS_DH_ANON_WITH_CAMELLIA_128_CBC_SHA256,
|
||||
TLS_DH_ANON_WITH_CAMELLIA_256_CBC_SHA256,
|
||||
TLS_DH_ANON_WITH_ARIA_128_CBC_SHA256,
|
||||
TLS_DH_ANON_WITH_ARIA_256_CBC_SHA384,
|
||||
TLS_DH_ANON_WITH_ARIA_128_GCM_SHA256,
|
||||
TLS_DH_ANON_WITH_ARIA_256_GCM_SHA384,
|
||||
TLS_DH_ANON_WITH_CAMELLIA_128_GCM_SHA256,
|
||||
TLS_DH_ANON_WITH_CAMELLIA_256_GCM_SHA384
|
||||
# DH non-anon suites do not send a ServerKeyExchange
|
||||
-> dh_server_key_exchange : DhServerKeyExchange(rec);
|
||||
|
||||
default
|
||||
-> key : bytestring &restofdata &transient;
|
||||
};
|
||||
|
@ -466,6 +570,19 @@ type EcServerKeyExchange(rec: SSLRecord) = record {
|
|||
data: bytestring &restofdata &transient;
|
||||
};
|
||||
|
||||
# For both, dh_anon and dhe the ServerKeyExchange starts with a ServerDHParams
|
||||
# structure. After that, they start to differ, but we do not care about that.
|
||||
type DhServerKeyExchange(rec: SSLRecord) = record {
|
||||
dh_p_length: uint16;
|
||||
dh_p: bytestring &length=dh_p_length;
|
||||
dh_g_length: uint16;
|
||||
dh_g: bytestring &length=dh_g_length;
|
||||
dh_Ys_length: uint16;
|
||||
dh_Ys: bytestring &length=dh_Ys_length;
|
||||
data: bytestring &restofdata &transient;
|
||||
};
|
||||
|
||||
|
||||
######################################################################
|
||||
# V3 Certificate Request (7.4.4.)
|
||||
######################################################################
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue