mirror of
https://github.com/zeek/zeek.git
synced 2025-10-06 08:38:20 +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
90
scripts/policy/protocols/ssl/weak-keys.bro
Normal file
90
scripts/policy/protocols/ssl/weak-keys.bro
Normal file
|
@ -0,0 +1,90 @@
|
||||||
|
##! Generate notices when SSL/TLS connections use certificates or DH parameters
|
||||||
|
##! that have potentially unsafe key lengths.
|
||||||
|
|
||||||
|
@load base/protocols/ssl
|
||||||
|
@load base/frameworks/notice
|
||||||
|
@load base/utils/directions-and-hosts
|
||||||
|
|
||||||
|
module SSL;
|
||||||
|
|
||||||
|
export {
|
||||||
|
redef enum Notice::Type += {
|
||||||
|
## Indicates that a server is using a potentially unsafe key.
|
||||||
|
SSL_Weak_Key,
|
||||||
|
};
|
||||||
|
|
||||||
|
## The category of hosts you would like to be notified about which have
|
||||||
|
## certificates that are going to be expiring soon. By default, these
|
||||||
|
## notices will be suppressed by the notice framework for 1 day after
|
||||||
|
## a particular certificate has had a notice generated.
|
||||||
|
## Choices are: LOCAL_HOSTS, REMOTE_HOSTS, ALL_HOSTS, NO_HOSTS
|
||||||
|
const notify_weak_keys = LOCAL_HOSTS &redef;
|
||||||
|
|
||||||
|
## The minimal key length in bits that is considered to be safe. Any
|
||||||
|
## shorter (non-EC) key lengths will trigger the notice.
|
||||||
|
const notify_minimal_key_length = 1024 &redef;
|
||||||
|
|
||||||
|
## Warn if the DH key length is smaller than the certificate key length.
|
||||||
|
## This is potentially unsafe, because it gives a wrong impression of safety
|
||||||
|
## due to the certificate key length.
|
||||||
|
## However, it is very common and cannot be avoided in some settings (e.g. with
|
||||||
|
## old jave clients).
|
||||||
|
const notify_dh_length_shorter_cert_length = T &redef;
|
||||||
|
}
|
||||||
|
|
||||||
|
## We check key lengths only for DSA or RSA certificates. For others, we do
|
||||||
|
## not know what is safe (e.g. EC is safe even with very short key lengths).
|
||||||
|
|
||||||
|
event ssl_established(c: connection) &priority=3
|
||||||
|
{
|
||||||
|
# If there are no certificates or we are not interested in the server, just return.
|
||||||
|
if ( ! c$ssl?$cert_chain || |c$ssl$cert_chain| == 0 ||
|
||||||
|
! addr_matches_host(c$id$resp_h, notify_weak_keys) )
|
||||||
|
return;
|
||||||
|
|
||||||
|
local fuid = c$ssl$cert_chain_fuids[0];
|
||||||
|
local cert = c$ssl$cert_chain[0]$x509$certificate;
|
||||||
|
if ( !cert?$key_type || !cert?$key_length )
|
||||||
|
return;
|
||||||
|
if ( cert$key_type != "dsa" && cert$key_type != "rsa" )
|
||||||
|
return;
|
||||||
|
|
||||||
|
local key_length = cert$key_length;
|
||||||
|
|
||||||
|
if ( key_length < notify_minimal_key_length )
|
||||||
|
NOTICE([$note=SSL_Weak_Key,
|
||||||
|
$msg=fmt("Host uses weak certificate with %d bit key", key_length),
|
||||||
|
$conn=c, $suppress_for=1day,
|
||||||
|
$identifier=cat(c$id$orig_h, c$id$orig_p, key_length)
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
event ssl_dh_server_params(c: connection, p: string, q: string, Ys: string) &priority=3
|
||||||
|
{
|
||||||
|
if ( ! addr_matches_host(c$id$resp_h, notify_weak_keys) )
|
||||||
|
return;
|
||||||
|
|
||||||
|
local key_length = |Ys|*8; # key length in bits
|
||||||
|
if ( key_length < notify_minimal_key_length )
|
||||||
|
NOTICE([$note=SSL_Weak_Key,
|
||||||
|
$msg=fmt("Host uses weak DH parameters with %d key bits", key_length),
|
||||||
|
$conn=c, $suppress_for=1day,
|
||||||
|
$identifier=cat(c$id$orig_h, c$id$orig_p, key_length)
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ( notify_dh_length_shorter_cert_length &&
|
||||||
|
c?$ssl && c$ssl?$cert_chain && |c$ssl$cert_chain| > 0 && c$ssl$cert_chain[0]?$x509 &&
|
||||||
|
c$ssl$cert_chain[0]$x509?$certificate && c$ssl$cert_chain[0]$x509$certificate?$key_type &&
|
||||||
|
( c$ssl$cert_chain[0]$x509$certificate$key_type == "rsa" ||
|
||||||
|
c$ssl$cert_chain[0]$x509$certificate$key_type == "dsa" ) )
|
||||||
|
{
|
||||||
|
if ( c$ssl$cert_chain[0]$x509$certificate?$key_length &&
|
||||||
|
c$ssl$cert_chain[0]$x509$certificate$key_length > key_length )
|
||||||
|
NOTICE([$note=SSL_Weak_Key,
|
||||||
|
$msg=fmt("DH key length of %d bits is smaller certificate key length of %d bits",
|
||||||
|
key_length, c$ssl$cert_chain[0]$x509$certificate$key_length),
|
||||||
|
$conn=c, $suppress_for=1day,
|
||||||
|
$identifier=cat(c$id$orig_h, c$id$orig_p)
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
|
@ -90,6 +90,7 @@
|
||||||
@load protocols/ssl/log-hostcerts-only.bro
|
@load protocols/ssl/log-hostcerts-only.bro
|
||||||
#@load protocols/ssl/notary.bro
|
#@load protocols/ssl/notary.bro
|
||||||
@load protocols/ssl/validate-certs.bro
|
@load protocols/ssl/validate-certs.bro
|
||||||
|
@load protocols/ssl/weak-keys.bro
|
||||||
@load tuning/__load__.bro
|
@load tuning/__load__.bro
|
||||||
@load tuning/defaults/__load__.bro
|
@load tuning/defaults/__load__.bro
|
||||||
@load tuning/defaults/extracted_file_limits.bro
|
@load tuning/defaults/extracted_file_limits.bro
|
||||||
|
|
|
@ -59,6 +59,7 @@ event ssl_client_hello%(c: connection, version: count, possible_ts: time, client
|
||||||
##
|
##
|
||||||
## .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_extension
|
## .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_extension
|
||||||
## ssl_session_ticket_handshake x509_certificate ssl_server_curve
|
## ssl_session_ticket_handshake x509_certificate ssl_server_curve
|
||||||
|
## ssl_dh_server_params
|
||||||
event ssl_server_hello%(c: connection, version: count, possible_ts: time, server_random: string, session_id: string, cipher: count, comp_method: count%);
|
event ssl_server_hello%(c: connection, version: count, possible_ts: time, server_random: string, session_id: string, cipher: count, comp_method: count%);
|
||||||
|
|
||||||
## Generated for SSL/TLS extensions seen in an initial handshake. SSL/TLS
|
## Generated for SSL/TLS extensions seen in an initial handshake. SSL/TLS
|
||||||
|
@ -117,7 +118,7 @@ event ssl_extension_elliptic_curves%(c: connection, is_orig: bool, curves: index
|
||||||
## ssl_extension_server_name ssl_server_curve
|
## ssl_extension_server_name ssl_server_curve
|
||||||
event ssl_extension_ec_point_formats%(c: connection, is_orig: bool, point_formats: index_vec%);
|
event ssl_extension_ec_point_formats%(c: connection, is_orig: bool, point_formats: index_vec%);
|
||||||
|
|
||||||
## Generated a named curve is chosen by the server for the SSL/TLS connection. The
|
## Generated if a named curve is chosen by the server for the SSL/TLS connection. The
|
||||||
## curve is sent by the server in the ServerKeyExchange message as defined in
|
## curve is sent by the server in the ServerKeyExchange message as defined in
|
||||||
## :rfc:`4492`, in case an ECDH or ECDHE cipher suite is chosen.
|
## :rfc:`4492`, in case an ECDH or ECDHE cipher suite is chosen.
|
||||||
##
|
##
|
||||||
|
@ -131,6 +132,22 @@ event ssl_extension_ec_point_formats%(c: connection, is_orig: bool, point_format
|
||||||
## ssl_extension_server_name
|
## ssl_extension_server_name
|
||||||
event ssl_server_curve%(c: connection, curve: count%);
|
event ssl_server_curve%(c: connection, curve: count%);
|
||||||
|
|
||||||
|
## Generated if a server uses a DH-anon or DHE cipher suite. This event contains
|
||||||
|
## the server DH parameters, which are sent in the ServerKeyExchange message as
|
||||||
|
## defined in :rfc:`5246`.
|
||||||
|
##
|
||||||
|
## c: The connection.
|
||||||
|
##
|
||||||
|
## p: The DH prime modulus.
|
||||||
|
##
|
||||||
|
## q: The DH generator.
|
||||||
|
##
|
||||||
|
## Ys: The server's DH public key.
|
||||||
|
##
|
||||||
|
## .. bro:see:: ssl_alert ssl_client_hello ssl_established ssl_server_hello
|
||||||
|
## ssl_session_ticket_handshake ssl_server_curve
|
||||||
|
event ssl_dh_server_params%(c: connection, p: string, q: string, Ys: string%);
|
||||||
|
|
||||||
## Generated for an SSL/TLS Application-Layer Protocol Negotiation extension.
|
## Generated for an SSL/TLS Application-Layer Protocol Negotiation extension.
|
||||||
## This TLS extension is defined in draft-ietf-tls-applayerprotoneg and sent in
|
## This TLS extension is defined in draft-ietf-tls-applayerprotoneg and sent in
|
||||||
## the initial handshake. It contains the list of client supported application
|
## the initial handshake. It contains the list of client supported application
|
||||||
|
|
|
@ -409,6 +409,19 @@ refine connection SSL_Conn += {
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
function proc_dh_server_key_exchange(rec: SSLRecord, p: bytestring, g: bytestring, Ys: bytestring) : bool
|
||||||
|
%{
|
||||||
|
BifEvent::generate_ssl_dh_server_params(bro_analyzer(),
|
||||||
|
bro_analyzer()->Conn(),
|
||||||
|
new StringVal(p.length(), (const char*) p.data()),
|
||||||
|
new StringVal(g.length(), (const char*) g.data()),
|
||||||
|
new StringVal(Ys.length(), (const char*) Ys.data())
|
||||||
|
);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
%}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
refine typeattr Alert += &let {
|
refine typeattr Alert += &let {
|
||||||
|
@ -501,3 +514,7 @@ refine typeattr CertificateStatus += &let {
|
||||||
refine typeattr EcServerKeyExchange += &let {
|
refine typeattr EcServerKeyExchange += &let {
|
||||||
proc : bool = $context.connection.proc_ec_server_key_exchange(rec, curve_type, curve);
|
proc : bool = $context.connection.proc_ec_server_key_exchange(rec, curve_type, curve);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
refine typeattr DhServerKeyExchange += &let {
|
||||||
|
proc : bool = $context.connection.proc_dh_server_key_exchange(rec, dh_p, dh_g, dh_Ys);
|
||||||
|
};
|
||||||
|
|
|
@ -356,8 +356,9 @@ type CertificateStatus(rec: SSLRecord) = record {
|
||||||
# Usually, the server key exchange does not contain any information
|
# Usually, the server key exchange does not contain any information
|
||||||
# that we are interested in.
|
# that we are interested in.
|
||||||
#
|
#
|
||||||
# The one exception is when we are using an elliptic curve cipher suite.
|
# The exception is when we are using an ECDHE, DHE or DH-Anon suite.
|
||||||
# In this case, we can extract the final chosen cipher from here.
|
# In this case, we can extract information about the chosen cipher from
|
||||||
|
# here.
|
||||||
type ServerKeyExchange(rec: SSLRecord) = case $context.connection.chosen_cipher() of {
|
type ServerKeyExchange(rec: SSLRecord) = case $context.connection.chosen_cipher() of {
|
||||||
TLS_ECDH_ECDSA_WITH_NULL_SHA,
|
TLS_ECDH_ECDSA_WITH_NULL_SHA,
|
||||||
TLS_ECDH_ECDSA_WITH_RC4_128_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
|
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
|
||||||
-> ec_server_key_exchange : EcServerKeyExchange(rec);
|
-> 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
|
default
|
||||||
-> key : bytestring &restofdata &transient;
|
-> key : bytestring &restofdata &transient;
|
||||||
};
|
};
|
||||||
|
@ -466,6 +570,19 @@ type EcServerKeyExchange(rec: SSLRecord) = record {
|
||||||
data: bytestring &restofdata &transient;
|
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.)
|
# V3 Certificate Request (7.4.4.)
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
key length in bits, 1024
|
|
@ -0,0 +1,10 @@
|
||||||
|
#separator \x09
|
||||||
|
#set_separator ,
|
||||||
|
#empty_field (empty)
|
||||||
|
#unset_field -
|
||||||
|
#path ssl
|
||||||
|
#open 2014-04-27-00-52-03
|
||||||
|
#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p version cipher curve server_name session_id last_alert established cert_chain_fuids client_cert_chain_fuids subject issuer client_subject client_issuer
|
||||||
|
#types time string addr port addr port string string string string string string bool vector[string] vector[string] string string string string
|
||||||
|
1398558136.319509 CXWv6p3arKYeMETxOg 192.168.18.50 62277 162.219.2.166 443 TLSv12 TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA - - - - T F6fLv13PBYz8MNqx68,F8cTDl1penwXxGu4K7 (empty) emailAddress=denicadmmail@arcor.de,CN=www.lilawelt.net,C=US CN=StartCom Class 1 Primary Intermediate Server CA,OU=Secure Digital Certificate Signing,O=StartCom Ltd.,C=IL - -
|
||||||
|
#close 2014-04-27-00-52-03
|
|
@ -3,9 +3,9 @@
|
||||||
#empty_field (empty)
|
#empty_field (empty)
|
||||||
#unset_field -
|
#unset_field -
|
||||||
#path ssl
|
#path ssl
|
||||||
#open 2014-04-26-16-45-23
|
#open 2014-04-27-06-48-05
|
||||||
#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p version cipher curve server_name session_id last_alert established cert_chain_fuids client_cert_chain_fuids subject issuer client_subject client_issuer
|
#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p version cipher curve server_name session_id last_alert established cert_chain_fuids client_cert_chain_fuids subject issuer client_subject client_issuer
|
||||||
#types time string addr port addr port string string string string string string bool vector[string] vector[string] string string string string
|
#types time string addr port addr port string string string string string string bool vector[string] vector[string] string string string string
|
||||||
1394747126.855035 CXWv6p3arKYeMETxOg 192.168.4.149 60623 74.125.239.129 443 TLSv12 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - - - - T FlaIzV19yTmBYwWwc6,F0BeiV3cMsGkNML0P2,F6PfYi2WUoPdIJrhpg (empty) CN=*.google.com,O=Google Inc,L=Mountain View,ST=California,C=US CN=Google Internet Authority G2,O=Google Inc,C=US - -
|
1394747126.855035 CXWv6p3arKYeMETxOg 192.168.4.149 60623 74.125.239.129 443 TLSv12 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 secp256r1 - - - T FlaIzV19yTmBYwWwc6,F0BeiV3cMsGkNML0P2,F6PfYi2WUoPdIJrhpg (empty) CN=*.google.com,O=Google Inc,L=Mountain View,ST=California,C=US CN=Google Internet Authority G2,O=Google Inc,C=US - -
|
||||||
1394747129.505622 CjhGID4nQcgTWjvg4c 192.168.4.149 60624 74.125.239.129 443 TLSv12 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - - - - T FOye6a4kt8a7QChqw3,FytlLr3jOQenFAVtYi,FEmnxy4DGbxkmtQJS1 (empty) CN=*.google.com,O=Google Inc,L=Mountain View,ST=California,C=US CN=Google Internet Authority G2,O=Google Inc,C=US - -
|
1394747129.505622 CjhGID4nQcgTWjvg4c 192.168.4.149 60624 74.125.239.129 443 TLSv12 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 secp256r1 - - - T FOye6a4kt8a7QChqw3,FytlLr3jOQenFAVtYi,FEmnxy4DGbxkmtQJS1 (empty) CN=*.google.com,O=Google Inc,L=Mountain View,ST=California,C=US CN=Google Internet Authority G2,O=Google Inc,C=US - -
|
||||||
#close 2014-04-26-16-45-23
|
#close 2014-04-27-06-48-05
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
#separator \x09
|
||||||
|
#set_separator ,
|
||||||
|
#empty_field (empty)
|
||||||
|
#unset_field -
|
||||||
|
#path notice
|
||||||
|
#open 2014-04-27-06-41-50
|
||||||
|
#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p fuid file_mime_type file_desc proto note msg sub src dst p n peer_descr actions suppress_for dropped remote_location.country_code remote_location.region remote_location.city remote_location.latitude remote_location.longitude
|
||||||
|
#types time string addr port addr port string string string enum enum string string addr addr port count string set[enum] interval bool string string string double double
|
||||||
|
1398558136.430417 CXWv6p3arKYeMETxOg 192.168.18.50 62277 162.219.2.166 443 - - - tcp SSL::SSL_Weak_Key Host uses weak DH parameters with 1024 key bits - 192.168.18.50 162.219.2.166 443 - bro Notice::ACTION_LOG 86400.000000 F - - - - -
|
||||||
|
1398558136.430417 CXWv6p3arKYeMETxOg 192.168.18.50 62277 162.219.2.166 443 - - - tcp SSL::SSL_Weak_Key DH key length of 1024 bits is smaller certificate key length of 2048 bits - 192.168.18.50 162.219.2.166 443 - bro Notice::ACTION_LOG 86400.000000 F - - - - -
|
||||||
|
1398558136.542637 CXWv6p3arKYeMETxOg 192.168.18.50 62277 162.219.2.166 443 - - - tcp SSL::SSL_Weak_Key Host uses weak certificate with 2048 bit key - 192.168.18.50 162.219.2.166 443 - bro Notice::ACTION_LOG 86400.000000 F - - - - -
|
||||||
|
#close 2014-04-27-06-41-50
|
BIN
testing/btest/Traces/tls/dhe.pcap
Normal file
BIN
testing/btest/Traces/tls/dhe.pcap
Normal file
Binary file not shown.
8
testing/btest/scripts/base/protocols/ssl/dhe.test
Normal file
8
testing/btest/scripts/base/protocols/ssl/dhe.test
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# @TEST-EXEC: bro -r $TRACES/tls/dhe.pcap %INPUT
|
||||||
|
# @TEST-EXEC: btest-diff .stdout
|
||||||
|
# @TEST-EXEC: btest-diff ssl.log
|
||||||
|
|
||||||
|
event ssl_dh_server_params(c: connection, p: string, q: string, Ys: string)
|
||||||
|
{
|
||||||
|
print "key length in bits", |Ys|*8;
|
||||||
|
}
|
8
testing/btest/scripts/policy/protocols/ssl/weak-keys.bro
Normal file
8
testing/btest/scripts/policy/protocols/ssl/weak-keys.bro
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# @TEST-EXEC: bro -r $TRACES/tls/dhe.pcap %INPUT
|
||||||
|
# @TEST-EXEC: mv notice.log notice-1.log
|
||||||
|
# @TEST-EXEC: btest-diff notice-1.log
|
||||||
|
|
||||||
|
@load protocols/ssl/weak-keys
|
||||||
|
|
||||||
|
redef SSL::notify_weak_keys = ALL_HOSTS;
|
||||||
|
redef SSL::notify_minimal_key_length = 4096;
|
Loading…
Add table
Add a link
Reference in a new issue