files.log: Unroll and introduce uid and id fields

This is a script-only change that unrolls File::Info records into
multiple files.log entries if the same file was seen over different
connections by single worker. Consequently, the File::Info record
gets the commonly used uid and id fields added. These fields are
optional for File::Info - a file may be analyzed without relation
to a network connection (e.g by using Input::add_analysis()).

The existing tx_hosts, rx_hosts and conn_uids fields of Files::Info
are not meaningful after this change and removed by default. Therefore,
files.log will have them removed, too.

The tx_hosts, rx_hosts and conn_uids fields can be revived by using the
policy script frameworks/files/deprecated-txhosts-rxhosts-connuids.zeek
included in the distribution. However, with v6.1 this script will be
removed.
This commit is contained in:
Arne Welzel 2022-08-16 17:22:20 +02:00
parent f631551ffb
commit d2314d2666
39 changed files with 412 additions and 113 deletions

View file

@ -0,0 +1,26 @@
# @TEST-DOC: Implement Files::log_files and verify it is seeing unique File::Info records.
# @TEST-EXEC: zeek -b -r $TRACES/http/concurrent-range-requests.pcap uid-id.zeek >out.new
# @TEST-EXEC: zeek -b -r $TRACES/http/concurrent-range-requests.pcap frameworks/files/deprecated-txhosts-rxhosts-connuids uid-id-deprecated.zeek >out.deprecated
# @TEST-EXEC: btest-diff out.new
# @TEST-EXEC: btest-diff out.deprecated
@TEST-START-FILE uid-id.zeek
@load base/frameworks/files
@load base/protocols/http
event Files::log_files(rec: Files::Info)
{
print rec$uid, rec$id;
}
@TEST-END-FILE
@TEST-START-FILE uid-id-deprecated.zeek
@load base/frameworks/files
@load base/protocols/http
event Files::log_files(rec: Files::Info)
{
print rec$uid, rec$id, cat(rec$tx_hosts), cat(rec$rx_hosts), cat(rec$conn_uids);
}
@TEST-END-FILE

View file

@ -0,0 +1,16 @@
# @TEST-DOC: Verify the files.log mat when Input::add_analysis() The fields info$id and info$uid are not expected to be set.
# @TEST-EXEC: zeek -b -r $TRACES/http/get.trace $SCRIPTS/file-analysis-test.zeek %INPUT
# @TEST-EXEC: btest-diff files.log
@load base/frameworks/files
event zeek_init()
{
local source: string = "./myfile";
Input::add_analysis([$source=source, $name=source]);
}
@TEST-START-FILE ./myfile
%PDF-1.5
This isn't an actual pdf, but it shows in files.log as such :-)
@TEST-END-FILE