Below is a Logstash filter that will add some valuable fields to your x509 Bro log.
The field names are:
- cert.expired
- cert.date.not_valid_after
- cert.date.not_valid_before
- cert.lifespan.days
- cert.lifespan.hours
- cert.lifespan.seconds
# BRO x509
filter {
if [doctype] == "x509" {
mutate {
remove_field => [ "host" ]
rename => {
"id" => "[bro][fuid]"
"basic_constraints.ca" => "[basic_constraints][ca]"
"certificate.curve" => "[cert][curve]"
"certificate.exponent" => "[cert][exponent]"
"certificate.issuer" => "[cert][issuer]"
"certificate.key_alg" => "[cert][key][alg]"
"certificate.key_length" => "[cert][key][length]"
"certificate.key_type" => "[cert][key][type]"
"certificate.not_valid_after" => "[cert][not_valid_after]"
"certificate.not_valid_before" => "[cert][not_valid_before]"
"certificate.serial" => "[cert][serial]"
"certificate.sig_alg" => "[cert][sig_alg]"
"certificate.subject" => "[cert][subject]"
"certificate.version" => "[cert][version]"
"san.dns" => "san_dns"
}
}
date {
match => [ "[cert][not_valid_after]", "UNIX" ]
target => "[cert][date][not_valid_after]"
}
date {
match => [ "[cert][not_valid_before]", "UNIX" ]
target => "[cert][date][not_valid_before]"
}
ruby {
code => "
vafter = event.get('[cert][not_valid_after]');
vbefore = event.get('[cert][not_valid_before]');
seconds = (vafter - vbefore).ceil;
hours = (seconds / 3600).ceil;
days = (seconds / 84600).ceil;
validcheck = event.get('[cert][date][not_valid_after]') - event.get('@timestamp');
if validcheck > 0
expired = false
else
expired = true
end
event.set('[cert][expired]', expired);
event.set('[cert][lifespan][seconds]', seconds);
event.set('[cert][lifespan][hours]', hours);
event.set('[cert][lifespan][days]', days);
"
}
}
}
Below is what the output looks like in Kibana

No comments:
Post a Comment