policy/protocols/conn/known-services.zeek
- Known
This script logs and tracks active services. For this script, an active service is defined as an IP address and port of a server for which a TCP handshake (SYN+ACK) is observed, assumed to have been done in the past (started seeing packets mid-connection, but the server is actively sending data), or sent at least one UDP packet. If a protocol name is found/known for service, that will be logged, but services whose names can’t be determined are also still logged.
- Namespace:
Known
- Imports:
base/frameworks/cluster, base/frameworks/storage/async.zeek, base/frameworks/storage/sync.zeek, base/utils/directions-and-hosts.zeek, policy/frameworks/storage/backend/sqlite
Summary
Runtime Options
The timeout interval to use for operations against
|
|
The hosts whose services should be tracked and logged. |
|
Require UDP server to respond before considering it an “active service”. |
Redefinable Options
|
The options for the service store. |
The type of storage backend to open. |
|
The expiry interval of new entries in |
|
The Broker topic name to use for |
|
The name to use for |
|
Toggles between different implementations of this script. |
|
Switches to the version of this script that uses the storage framework instead of Broker stores. |
State Variables
Storage configuration for Broker stores Holds the set of all known services. |
|
Storage configuration for storage framework stores This requires setting a configuration in local.zeek that sets the Known::use_storage_framework boolean to T, and optionally sets different values in the Known::service_store_backend_options record. |
|
|
Tracks the set of daily-detected services for preventing the logging of duplicates, but can also be inspected by other scripts for different purposes. |
Types
The record type which contains the column fields of the known-services log. |
Redefinitions
The known-services logging stream identifier. |
|
|
Events
Event that can be handled to access the |
Hooks
A default logging policy hook for the stream. |
Detailed Interface
Runtime Options
- Known::service_store_timeout
-
The timeout interval to use for operations against
Known::service_broker_storeandKnown::service_store_backend.
- Known::service_tracking
- Type:
- Attributes:
- Default:
LOCAL_HOSTS- Redefinition:
from policy/tuning/track-all-assets.zeek
=:``ALL_HOSTS``
The hosts whose services should be tracked and logged. See
Hostfor possible choices.
- Known::service_udp_requires_response
-
Require UDP server to respond before considering it an “active service”.
Redefinable Options
- Known::service_store_backend_options
- Type:
- Attributes:
- Default:
{ serializer=Storage::STORAGE_SERIALIZER_JSON forced_sync=F redis=<uninitialized> sqlite=[database_path=":memory:", table_name="zeek/known/services", busy_timeout=5.0 secs, pragma_commands={ ["integrity_check"] = "", ["journal_mode"] = "WAL", ["synchronous"] = "normal", ["temp_store"] = "memory" }, pragma_timeout=500.0 msecs, pragma_wait_on_busy=5.0 msecs] }
The options for the service store. This should be redef’d in local.zeek to set connection information for the backend. The options default to a memory store.
- Known::service_store_backend_type
- Type:
- Attributes:
- Default:
Storage::STORAGE_BACKEND_SQLITE
The type of storage backend to open.
- Known::service_store_expiry
-
The expiry interval of new entries in
Known::service_broker_storeandKnown::service_store_backend. This also changes the interval at which services get logged.
- Known::service_store_name
-
The Broker topic name to use for
Known::service_broker_store.
- Known::service_store_prefix
-
The name to use for
Known::service_store_backend. This will be used by the backends to differentiate tables/keys. This should be alphanumeric so that it can be used as the table name for the storage framework.
- Known::use_service_store
-
Toggles between different implementations of this script. When true, use a Broker data store, else use a regular Zeek set with keys uniformly distributed over proxy nodes in cluster operation.
- Known::use_storage_framework
-
Switches to the version of this script that uses the storage framework instead of Broker stores. This will default to
Tin v8.1.
State Variables
- Known::service_broker_store
- Type:
- Default:
{ name=<uninitialized> store=<uninitialized> master_node="" master=F backend=Broker::MEMORY options=[sqlite=[path="", synchronous=<uninitialized>, journal_mode=<uninitialized>, failure_mode=Broker::SQLITE_FAILURE_MODE_FAIL, integrity_check=F]] clone_resync_interval=10.0 secs clone_stale_interval=5.0 mins clone_mutation_buffer_interval=2.0 mins }
Storage configuration for Broker stores Holds the set of all known services. Keys in the store are
Known::AddrPortServTripletand their associated value is always the boolean value of “true”.
- Known::service_store_backend
- Type:
opaqueof Storage::BackendHandle
Storage configuration for storage framework stores This requires setting a configuration in local.zeek that sets the Known::use_storage_framework boolean to T, and optionally sets different values in the Known::service_store_backend_options record. Backend to use for storing known services data using the storage framework.
- Known::services
-
Tracks the set of daily-detected services for preventing the logging of duplicates, but can also be inspected by other scripts for different purposes.
In cluster operation, this table is uniformly distributed across proxy nodes.
This table is automatically populated and shouldn’t be directly modified.
Types
- Known::ServicesInfo
- Type:
- Fields:
-
-
port_proto:
transport_proto&log The transport-layer protocol which the service uses.
-
port_proto:
The record type which contains the column fields of the known-services log.
Events
- Known::log_known_services
- Type:
event(rec:Known::ServicesInfo)
Event that can be handled to access the
Known::ServicesInforecord as it is sent on to the logging framework.
Hooks
- Known::log_policy_services
- Type:
A default logging policy hook for the stream.