mirror of
https://github.com/zeek/zeek.git
synced 2025-10-09 18:18:19 +00:00

Intel notices are identified by a direction independent 3-tuple (indicator, originator IP, responder IP). This allows notice suppression. Additionally service and intel source are added to the notice mail.
71 lines
1.8 KiB
Text
71 lines
1.8 KiB
Text
|
|
@load base/frameworks/intel
|
|
@load base/frameworks/notice
|
|
|
|
module Intel;
|
|
|
|
export {
|
|
redef enum Notice::Type += {
|
|
## Intel::Notice is a notice that happens when an intelligence
|
|
## indicator is denoted to be notice-worthy.
|
|
Intel::Notice
|
|
};
|
|
|
|
redef record Intel::MetaData += {
|
|
## A boolean value to allow the data itself to represent
|
|
## if the indicator that this metadata is attached to
|
|
## is notice worthy.
|
|
do_notice: bool &default=F;
|
|
|
|
## Restrictions on when notices are created to only create
|
|
## them if the *do_notice* field is T and the notice was
|
|
## seen in the indicated location.
|
|
if_in: Intel::Where &optional;
|
|
};
|
|
}
|
|
|
|
event Intel::match(s: Seen, items: set[Item])
|
|
{
|
|
for ( item in items )
|
|
{
|
|
if ( item$meta$do_notice &&
|
|
(! item$meta?$if_in || s$where == item$meta$if_in) )
|
|
{
|
|
local n = Notice::Info($note=Intel::Notice,
|
|
$msg = fmt("Intel hit on %s at %s", s$indicator, s$where),
|
|
$sub = s$indicator);
|
|
local service_str = "";
|
|
|
|
if ( s?$conn )
|
|
{
|
|
n$conn = s$conn;
|
|
|
|
# Add identifier composed of indicator, originator's and responder's IP,
|
|
# without considering the direction of the flow.
|
|
local intel_id = s$indicator;
|
|
if( s$conn?$id )
|
|
{
|
|
if( s$conn$id$orig_h < s$conn$id$resp_h)
|
|
intel_id = cat(intel_id, s$conn$id$orig_h, s$conn$id$resp_h);
|
|
else
|
|
intel_id = cat(intel_id, s$conn$id$resp_h, s$conn$id$orig_h);
|
|
}
|
|
n$identifier = intel_id;
|
|
|
|
if ( s$conn?$service )
|
|
{
|
|
for ( service in s$conn$service )
|
|
service_str = cat(service_str, service, " ");
|
|
}
|
|
}
|
|
|
|
# Add additional information to the generated mail
|
|
local mail_ext = vector(
|
|
fmt("Service: %s\n", service_str),
|
|
fmt("Intel source: %s\n", item$meta$source));
|
|
n$email_body_sections = mail_ext;
|
|
|
|
NOTICE(n);
|
|
}
|
|
}
|
|
}
|