No description
Find a file
Johanna Amann c72c1cba6f DPD: change handling of pre-confirmation violations, remove max_violations
This commit revamps the handling of analyzer violations that happen
before an analyzer confirms the protocol.

The current state is that an analyzer is disabled after 5 violations, if
it has not been confirmed. If it has been confirmed, it is disabled
after a single violation.

The reason for this is a historic mistake. In Zeek up to versions 1.5,
analyzers were unconditianally removed when they raised the first
protocol violation.

When this script was ported to the new layout for Zeek 2.0 in
b4b990cfb5, a logic error was introduced
that caused analyzers to no longer be disabled if they were not
confirmed.

This was the state for ~8 years, till the DPD::max_violations options
was added, which instates the current approach of disabling unconfirmed
analyzers after 5 violations. Sadly, there is not much discussion about
this change - from my hazy memory, I think this was discovered during
performance tests and the new behavior was added without checking into
the history of previous changes.

This commit reinstates the originally intended behavior of DPD. When an
analyzer that has not been confirmed raises a protocol violation, it is
immediately removed from the connection. This also makes a lot of sense
- this allows the analyzer to be in a "tasting" phase at the beginning
of the connection, and to error out quickly once it realizes that it was
attached to a connection not containing the desired protocol.

This change also removes the DPD::max_violations option, as it no longer
serves any purpose after this change. (In practice, the option remains
with an &deprecated warning, but it is no longer used for anything).

There are relatively minimal test-baseline changes due to this; they are
mostly triggered by the removal of the data structure and by less
analyzer errors being thrown, as unconfirmed analyzers are disabled
after the first error.
2025-01-30 16:59:44 +00:00
.github/workflows Fix another typo in the Coverity workflow script 2025-01-09 18:45:56 -07:00
auxil Bump auxil/spicy to latest development snapshot 2025-01-14 17:28:31 +01:00
ci Update COPYING date to now and fix some [skip CI] 2025-01-09 08:38:45 -05:00
cmake@85c6f90f23 Updating submodule(s) [nomail] 2024-12-13 12:18:00 -07:00
cmake_templates Add configure option to enable/disable spicy SSL 2024-06-04 14:13:59 +01:00
doc@c3ce915021 Update doc submodule [nomail] [skip ci] 2025-01-17 00:12:51 +00:00
docker docker: Add cppzmq/libzmq dependencies 2024-12-10 20:33:02 +01:00
man Use the same rules as cmake submodule to reformat Zeek 2023-05-09 08:31:43 -07:00
scripts DPD: change handling of pre-confirmation violations, remove max_violations 2025-01-30 16:59:44 +00:00
src IRC analyzer - make protocol confirmation more robust. 2025-01-30 16:59:40 +00:00
testing DPD: change handling of pre-confirmation violations, remove max_violations 2025-01-30 16:59:44 +00:00
.cirrus.yml cirrus/container_image_manifest: match RC tags, too 2024-12-13 13:17:37 +01:00
.clang-format Update COPYING date to now and fix some [skip CI] 2025-01-09 08:38:45 -05:00
.clang-tidy Disable annoying bugprone-easily-swappable-parameters clang-tidy check [skip ci] 2022-10-07 16:15:47 -07:00
.cmake-format.json Format JSON with clang-format 2023-10-30 09:41:13 +01:00
.dockerignore Add .dockerignore to suppress btest artifacts 2021-09-24 17:04:26 -07:00
.git-blame-ignore-revs Update .git-blame-ignore-revs 2023-10-30 09:42:39 +01:00
.gitattributes GH-1497: Support CRLF line-endings in Zeek scripts and signature files 2021-04-08 20:32:30 -07:00
.gitignore Update .gitignore to add Emacs and Vim temp files 2024-02-07 12:12:58 -07:00
.gitmodules cluster/backend/zeromq: Add cppzmq submodule 2024-12-10 20:33:02 +01:00
.pre-commit-config.yaml Update COPYING date to now and fix some [skip CI] 2025-01-09 08:38:45 -05:00
.typos.toml -O gen-standalone-C++ fixes for recent more aggressive AST profiling 2024-12-12 14:27:12 -08:00
.update-changes.cfg Add script to update external test repo commit pointers 2019-04-05 17:09:01 -07:00
CHANGES Merge remote-tracking branch 'origin/topic/vern/standalone-lambdas' 2025-01-20 10:27:46 +01:00
CMakeLists.txt Require Python 3.9 in CMakeLists.txt 2024-12-11 11:08:37 -07:00
configure configure: Add --disable-cluster-backend-zeromq 2024-12-10 20:33:02 +01:00
COPYING Update COPYING date to now and fix some [skip CI] 2025-01-09 08:38:45 -05:00
COPYING-3rdparty Rename COPYING.3rdparty to COPYING-3rdparty 2023-01-03 12:10:03 -07:00
INSTALL Update documentation to include "Book of Zeek" revisions 2021-02-01 15:54:36 -08:00
Makefile Fix warning about grealpath when running 'make dist' on Linux 2024-07-11 13:45:14 -07:00
NEWS Merge remote-tracking branch 'origin/topic/johanna/gh-4061' 2025-01-14 14:39:56 +00:00
README Add tooling section to README 2023-01-27 13:03:52 -07:00
README.md Update link to slack in README.md 2023-06-01 14:21:44 +02:00
ruff.toml Swap pre-commit yapf for ruff/ruff-format, fix findings 2024-12-11 11:08:37 -07:00
SECURITY.md Add SECURITY.md, pointing at the website 2025-01-13 08:21:28 -07:00
vcpkg.json Switch all of the conan configuration to vcpkg 2024-02-02 14:52:16 -07:00
VERSION Merge remote-tracking branch 'origin/topic/vern/standalone-lambdas' 2025-01-20 10:27:46 +01:00
zeek-path-dev.in Move CMake template files to separate directory 2023-06-26 13:39:59 -07:00

Zeek Logo

The Zeek Network Security Monitor

A powerful framework for network traffic analysis and security monitoring.

Key FeaturesDocumentationGetting StartedDevelopmentLicense

Follow us on Twitter at @zeekurity.

Coverage Status Build Status

Slack Discourse

Key Features

  • In-depth Analysis Zeek ships with analyzers for many protocols, enabling high-level semantic analysis at the application layer.

  • Adaptable and Flexible Zeek's domain-specific scripting language enables site-specific monitoring policies and means that it is not restricted to any particular detection approach.

  • Efficient Zeek targets high-performance networks and is used operationally at a variety of large sites.

  • Highly Stateful Zeek keeps extensive application-layer state about the network it monitors and provides a high-level archive of a network's activity.

Getting Started

The best place to find information about getting started with Zeek is our web site www.zeek.org, specifically the documentation section there. On the web site you can also find downloads for stable releases, tutorials on getting Zeek set up, and many other useful resources.

You can find release notes in NEWS, and a complete record of all changes in CHANGES.

To work with the most recent code from the development branch of Zeek, clone the master git repository:

git clone --recursive https://github.com/zeek/zeek

With all dependencies in place, build and install:

./configure && make && sudo make install

Write your first Zeek script:

# File "hello.zeek"

event zeek_init()
    {
    print "Hello World!";
    }

And run it:

zeek hello.zeek

For learning more about the Zeek scripting language, try.zeek.org is a great resource.

Development

Zeek is developed on GitHub by its community. We welcome contributions. Working on an open source project like Zeek can be an incredibly rewarding experience and, packet by packet, makes the Internet a little safer. Today, as a result of countless contributions, Zeek is used operationally around the world by major companies and educational and scientific institutions alike for securing their cyber infrastructure.

If you're interested in getting involved, we collect feature requests and issues on GitHub here and you might find these to be a good place to get started. More information on Zeek's development can be found here, and information about its community and mailing lists (which are fairly active) can be found here.

License

Zeek comes with a BSD license, allowing for free use with virtually no restrictions. You can find it here.

Tooling

We use the following tooling to help discover issues to fix, amongst a number of others.