]> git.ipfire.org Git - thirdparty/suricata.git/log
thirdparty/suricata.git
3 months agopcap-log: define PCAP_NETMASK_UNKNOWN if not set 12968/head
Jason Ish [Fri, 4 Apr 2025 04:35:59 +0000 (22:35 -0600)] 
pcap-log: define PCAP_NETMASK_UNKNOWN if not set

This is defined in by newer versions of libpcap,
but older versions are still in use.

3 months agopcap-log: only allow one instance of pcap-log
Jason Ish [Tue, 1 Apr 2025 21:44:50 +0000 (15:44 -0600)] 
pcap-log: only allow one instance of pcap-log

As a global is used to store state, only one instance can be used.

See https://redmine.openinfosecfoundation.org/issues/7640.

3 months agopcap-log: add stats for written and filtered
Jason Ish [Tue, 1 Apr 2025 22:03:46 +0000 (16:03 -0600)] 
pcap-log: add stats for written and filtered

Filtered is the number of packets not written as they were filtered out.

3 months agopcap-log: add bpf filter for packets that are logged
Jason Ish [Tue, 1 Apr 2025 21:18:54 +0000 (15:18 -0600)] 
pcap-log: add bpf filter for packets that are logged

Add an optional bpf filter to pcap-log. If set, packets must match the
filter to be logged, otherwise they will be ignored.

This allows a user to limit what is logged to disk if they have pcap-log
enabled, but still inspect all data captured.

Ticket: #6832

3 months agohttp: restore behavior for event http.uri_delim_non_compliant
Philippe Antoine [Sat, 5 Apr 2025 19:22:25 +0000 (21:22 +0200)] 
http: restore behavior for event http.uri_delim_non_compliant

If we see a space-like character that is not space 0x20 in uri,
we set this event, even it the request line finished with a normal
space and protocol

Fixes: 9c324b796e6b ("http: Use libhtp-rs.)
3 months agodoc: stylistic and grammar fixes 12965/head
Lukas Sismis [Fri, 4 Apr 2025 10:25:38 +0000 (12:25 +0200)] 
doc: stylistic and grammar fixes

3 months agossh: sync the hassh setting with the defaults
Lukas Sismis [Thu, 19 Sep 2024 07:25:22 +0000 (09:25 +0200)] 
ssh: sync the hassh setting with the defaults

3 months agostream: decouple stream.bypass dependency from tls bypass
Dean Balandin [Tue, 27 Jun 2023 12:40:37 +0000 (12:40 +0000)] 
stream: decouple stream.bypass dependency from tls bypass

Decouple app.protocols.tls.encryption-handling and stream.bypass.
There's no apparent reason why encrypted TLS bypass traffic should
depend on stream bypass, as these are unrelated features.

Ticket: 6788

3 months agossh: add option to select behavior of encrypted parts
Lukas Sismis [Thu, 19 Sep 2024 07:24:01 +0000 (09:24 +0200)] 
ssh: add option to select behavior of encrypted parts

Ticket: 6788

3 months agotls: deprecate "default" as a encryption-handling option
Lukas Sismis [Thu, 27 Mar 2025 16:10:12 +0000 (17:10 +0100)] 
tls: deprecate "default" as a encryption-handling option

The default value for TLS encryption is generic and not precise.
The new keyword, "track-only" substitues the old keyword, being
more on point what action is actually taken when the TLS flow
reaches an encrypted state.

3 months agolua/detect: remove rule sid, rev and gid globals
Jason Ish [Fri, 4 Apr 2025 16:52:51 +0000 (10:52 -0600)] 
lua/detect: remove rule sid, rev and gid globals

For some rules the values are always 0, for others they get set, so not
consistent. Also not documented and not tested and should be replaced by
a "suricata.rule" lib.

For example, these globals would be set for this rule:

alert tcp any any -> any any (flow:to_server;
flowbits:isnotset,dataset_added; lua:dataset.lua;
flowbits:set,dataset_added;sid:1;rev:99;)

But not this rule:

alert dns any any -> any any (msg:"TEST DNS LUA dns.rrname"; \
      content:"org"; lua:test-rrname.lua; sid:1; rev:1;)

Related to ticket
https://redmine.openinfosecfoundation.org/issues/7490 (but not a fix)

This does not affect the functions with similar names for getting rule
details in output context.

3 months agodetect: rename with prefix SCSigTablePreRegister
Philippe Antoine [Wed, 2 Apr 2025 12:24:53 +0000 (14:24 +0200)] 
detect: rename with prefix SCSigTablePreRegister

to make it available to rust via bindgen

3 months agosnmp: restrict rust visibility
Philippe Antoine [Fri, 24 Jan 2025 15:31:01 +0000 (16:31 +0100)] 
snmp: restrict rust visibility

3 months agosnmp: register protocol dynamically
Philippe Antoine [Thu, 16 Jan 2025 08:00:24 +0000 (09:00 +0100)] 
snmp: register protocol dynamically

Ticket: 4103

3 months agosnmp: make log function use the generic prototype
Philippe Antoine [Thu, 16 Jan 2025 07:58:44 +0000 (08:58 +0100)] 
snmp: make log function use the generic prototype

and cast

and also remove unneeded mut

and rustfmt

3 months agooutput: public header for use in rust
Philippe Antoine [Sat, 29 Mar 2025 20:38:18 +0000 (21:38 +0100)] 
output: public header for use in rust

Ticket: 5053

Move enum OutputJsonLogDirection and struct
EveJsonTxLoggerRegistrationData to a public header user by rust
thanks to bindgen

Rename to use SC prefix on the way

And make EveJsonSimpleTxLogFunc use a const pointer to transaction

3 months agoscripts: remove unused code in setup-app-layer
Philippe Antoine [Sat, 29 Mar 2025 20:35:57 +0000 (21:35 +0100)] 
scripts: remove unused code in setup-app-layer

and fix typo

3 months agooutput: plugins can log flow or packet direction
Philippe Antoine [Thu, 16 Jan 2025 07:53:34 +0000 (08:53 +0100)] 
output: plugins can log flow or packet direction

3 months agoapp-layer: helper function AppProtoNewProtoFromString
Philippe Antoine [Thu, 16 Jan 2025 07:45:59 +0000 (08:45 +0100)] 
app-layer: helper function AppProtoNewProtoFromString

So that we do not have to know g_alproto_max to register
dynamically a new protocol from its name

3 months agoapp-layer: make some arrays even more dynamic
Philippe Antoine [Thu, 16 Jan 2025 07:40:46 +0000 (08:40 +0100)] 
app-layer: make some arrays even more dynamic

Ticket: 5053

Do not asume that we know the number of alprotos at the end
of AppLayerNamesSetup, but make arrays allocated by later
AppLayerProtoDetectSetup dynamic so that it can be reallocated
from AppLayerParserRegisterProtocolParsers

This helps have a single entry point for a protocol like SNMP

3 months agodetect: fix overflow for files protocol
Philippe Antoine [Wed, 15 Jan 2025 19:59:12 +0000 (20:59 +0100)] 
detect: fix overflow for files protocol

CID 1640392

Would happen only if we reached 15 protocols handling files

3 months agosmb/log: configuration option for types logging 12951/head
Philippe Antoine [Thu, 20 Mar 2025 10:07:05 +0000 (11:07 +0100)] 
smb/log: configuration option for types logging

suricata.yaml output section for smb now parses a types list
and will restrict logging of transactions to these types.

By default, everything still gets logged

Remove unused rs_smb_log_json_request on the way

Ticket: 7620

3 months agoconf: extend API for rust
Philippe Antoine [Thu, 20 Mar 2025 09:42:56 +0000 (10:42 +0100)] 
conf: extend API for rust

Will allow rust to list the values of an array such as
dns.types for outputs

3 months agopgsql: use generic name for TerminationMessage msg 12948/head
Juliana Fajardini [Fri, 4 Apr 2025 21:34:26 +0000 (14:34 -0700)] 
pgsql: use generic name for TerminationMessage msg

Since this structure can be used for different messages with other
meanings.

Related to
Task #4854

3 months agodoc/pgsql: document CopyOut-related response msgs
Juliana Fajardini [Fri, 4 Apr 2025 22:17:55 +0000 (15:17 -0700)] 
doc/pgsql: document CopyOut-related response msgs

Related to
Task #4854

3 months agopgsql: add initial support to copy-out subproto
Juliana Fajardini [Wed, 2 Apr 2025 03:00:07 +0000 (20:00 -0700)] 
pgsql: add initial support to copy-out subproto

This sub-protocol inspects messages exchanged between postgresql backend
and frontend after a 'COPY TO STDOUT' has been processed.

Parses new messages:
- CopyOutResponse -- initiates copy-out mode/sub-protocol
- CopyData -- data transfer messages
- CopyDone -- signals that no more CopyData messages will be seen from
  the sender for the current transaction

Task #4854

3 months agodetect/transforms: Add engine detect thread ctx to signature
Jeff Lucovsky [Fri, 4 Apr 2025 14:54:20 +0000 (10:54 -0400)] 
detect/transforms: Add engine detect thread ctx to signature

Modify the transform function signature to include the detect engine
thread ctx.

3 months agodoc/ftp: Add ftp.command_data 12942/head
Jeff Lucovsky [Sat, 29 Mar 2025 12:22:15 +0000 (08:22 -0400)] 
doc/ftp: Add ftp.command_data

This commits adds documentation for the ftp.command_data rule keyword
that includes usage examples.

3 months agodetect/ftp: ftp.command_data keyword
Jeff Lucovsky [Fri, 28 Mar 2025 15:01:15 +0000 (11:01 -0400)] 
detect/ftp: ftp.command_data keyword

Issue: 7503

Add the rule keyword ftp.command_data; a sticky buffer that matches on
the values send with FTP commands, e.g., USER someuser

3 months agorust: fix clippy warning manual_contains 12938/head
Philippe Antoine [Thu, 3 Apr 2025 11:43:29 +0000 (13:43 +0200)] 
rust: fix clippy warning manual_contains

warning: using `contains()` instead of `iter().any()` is more efficient
   --> src/http2/http2.rs:267:20
    |
267 |                 if block.value.iter().any(|&x| x == b'@') {
    |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `block.value.contains(&b'@')`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_contains
    = note: `#[warn(clippy::manual_contains)]` on by default

3 months agorust: fix clippy warnings doc_overindented_list_items
Philippe Antoine [Thu, 3 Apr 2025 11:40:39 +0000 (13:40 +0200)] 
rust: fix clippy warnings doc_overindented_list_items

warning: doc list item overindented
   --> src/nfs/rpc_records.rs:284:5
    |
284 | ///           type: bool
    |     ^^^^^^^^^^ help: try using `  ` (2 spaces)
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#doc_overindented_list_items
    = note: `#[warn(clippy::doc_overindented_list_items)]` on by default

3 months agorust: fix clippy missing_abi warning
Philippe Antoine [Mon, 31 Mar 2025 19:12:22 +0000 (21:12 +0200)] 
rust: fix clippy missing_abi warning

warning: extern declarations without an explicit ABI are deprecated
  --> src/core.rs:72:1
   |
72 | extern {
   | ^^^^^^ help: explicitly specify the "C" ABI: `extern "C"`
   |
   = note: `#[warn(missing_abi)]` on by default

3 months agodoc/sdp: fix doc to match real keywords names
Philippe Antoine [Thu, 3 Apr 2025 07:23:10 +0000 (09:23 +0200)] 
doc/sdp: fix doc to match real keywords names

Ticket: 7291

3 months agoci: make a build with ja disabled
Philippe Antoine [Thu, 27 Mar 2025 19:40:42 +0000 (20:40 +0100)] 
ci: make a build with ja disabled

Ticket: 7461

In order to run all SV tests in CI, including the ones that
require the abse,ce of the JA3 or JA4 feature

3 months agohttp: Use libhtp-rs.
Todd Mortimer [Mon, 26 Jun 2023 20:01:50 +0000 (20:01 +0000)] 
http: Use libhtp-rs.

Ticket: #2696

There are a lot of changes here, which are described below.

In general these changes are renaming constants to conform to the
libhtp-rs versions (which are generated by cbindgen); making all htp
types opaque and changing struct->member references to
htp_struct_member() function calls; and a handful of changes to offload
functionality onto libhtp-rs from suricata, such as URI normalization
and transaction cleanup.

Functions introduced to handle opaque htp_tx_t:
- tx->parsed_uri => htp_tx_parsed_uri(tx)
- tx->parsed_uri->path => htp_uri_path(htp_tx_parsed_uri(tx)
- tx->parsed_uri->hostname => htp_uri_hostname(htp_tx_parsed_uri(tx))
- htp_tx_get_user_data() => htp_tx_user_data(tx)
- htp_tx_is_http_2_upgrade(tx) convenience function introduced to detect response status 101
  and “Upgrade: h2c" header.

Functions introduced to handle opaque htp_tx_data_t:
- d->len => htp_tx_data_len()
- d->data => htp_tx_data_data()
- htp_tx_data_tx(data) function to get the htp_tx_t from the htp_tx_data_t
- htp_tx_data_is_empty(data) convenience function introduced to test if the data is empty.

Other changes:

Build libhtp-rs as a crate inside rust. Update autoconf to no longer
use libhtp as an external dependency. Remove HAVE_HTP feature defines
since they are no longer needed.

Make function arguments and return values const where possible

htp_tx_destroy(tx) will now free an incomplete transaction

htp_time_t replaced with standard struct timeval

Callbacks from libhtp now provide the htp_connp_t and the htp_tx_data_t
as separate arguments. This means the connection parser is no longer
fetched from the transaction inside callbacks.

SCHTPGenerateNormalizedUri() functionality moved inside libhtp-rs, which
now provides normalized URI values.
The normalized URI is available with accessor function: htp_tx_normalized_uri()
Configuration settings added to control the behaviour of the URI normalization:
- htp_config_set_normalized_uri_include_all()
- htp_config_set_plusspace_decode()
- htp_config_set_convert_lowercase()
- htp_config_set_double_decode_normalized_query()
- htp_config_set_double_decode_normalized_path()
- htp_config_set_backslash_convert_slashes()
- htp_config_set_bestfit_replacement_byte()
- htp_config_set_convert_lowercase()
- htp_config_set_nul_encoded_terminates()
- htp_config_set_nul_raw_terminates()
- htp_config_set_path_separators_compress()
- htp_config_set_path_separators_decode()
- htp_config_set_u_encoding_decode()
- htp_config_set_url_encoding_invalid_handling()
- htp_config_set_utf8_convert_bestfit()
- htp_config_set_normalized_uri_include_all()
- htp_config_set_plusspace_decode()
Constants related to configuring uri normalization:
- HTP_URL_DECODE_PRESERVE_PERCENT => HTP_URL_ENCODING_HANDLING_PRESERVE_PERCENT
- HTP_URL_DECODE_REMOVE_PERCENT => HTP_URL_ENCODING_HANDLING_REMOVE_PERCENT
- HTP_URL_DECODE_PROCESS_INVALID => HTP_URL_ENCODING_HANDLING_PROCESS_INVALID

htp_config_set_field_limits(soft_limit, hard_limit) changed to
htp_config_set_field_limit(limit) because libhtp didn't implement soft
limits.

libhtp logging API updated to provide HTP_LOG_CODE constants along with
the message. This eliminates the need to perform string matching on
message text to map log messages to HTTP_DECODER_EVENT values, and the
HTP_LOG_CODE values can be used directly. In support of this,
HTP_DECODER_EVENT values are mapped to their corresponding HTP_LOG_CODE
values.

New log events to describe additional anomalies:
HTP_LOG_CODE_REQUEST_TOO_MANY_LZMA_LAYERS
HTP_LOG_CODE_RESPONSE_TOO_MANY_LZMA_LAYERS
HTP_LOG_CODE_PROTOCOL_CONTAINS_EXTRA_DATA
HTP_LOG_CODE_CONTENT_LENGTH_EXTRA_DATA_START
HTP_LOG_CODE_CONTENT_LENGTH_EXTRA_DATA_END
HTP_LOG_CODE_SWITCHING_PROTO_WITH_CONTENT_LENGTH
HTP_LOG_CODE_DEFORMED_EOL
HTP_LOG_CODE_PARSER_STATE_ERROR
HTP_LOG_CODE_MISSING_OUTBOUND_TRANSACTION_DATA
HTP_LOG_CODE_MISSING_INBOUND_TRANSACTION_DATA
HTP_LOG_CODE_ZERO_LENGTH_DATA_CHUNKS
HTP_LOG_CODE_REQUEST_LINE_UNKNOWN_METHOD
HTP_LOG_CODE_REQUEST_LINE_UNKNOWN_METHOD_NO_PROTOCOL
HTP_LOG_CODE_REQUEST_LINE_UNKNOWN_METHOD_INVALID_PROTOCOL
HTP_LOG_CODE_REQUEST_LINE_NO_PROTOCOL
HTP_LOG_CODE_RESPONSE_LINE_INVALID_PROTOCOL
HTP_LOG_CODE_RESPONSE_LINE_INVALID_RESPONSE_STATUS
HTP_LOG_CODE_RESPONSE_BODY_INTERNAL_ERROR
HTP_LOG_CODE_REQUEST_BODY_DATA_CALLBACK_ERROR
HTP_LOG_CODE_RESPONSE_INVALID_EMPTY_NAME
HTP_LOG_CODE_REQUEST_INVALID_EMPTY_NAME
HTP_LOG_CODE_RESPONSE_INVALID_LWS_AFTER_NAME
HTP_LOG_CODE_RESPONSE_HEADER_NAME_NOT_TOKEN
HTP_LOG_CODE_REQUEST_INVALID_LWS_AFTER_NAME
HTP_LOG_CODE_LZMA_DECOMPRESSION_DISABLED
HTP_LOG_CODE_CONNECTION_ALREADY_OPEN
HTP_LOG_CODE_COMPRESSION_BOMB_DOUBLE_LZMA
HTP_LOG_CODE_INVALID_CONTENT_ENCODING
HTP_LOG_CODE_INVALID_GAP
HTP_LOG_CODE_ERROR

The new htp_log API supports consuming log messages more easily than
walking a list and tracking the current offset. Internally, libhtp-rs
now provides log messages as a queue of htp_log_t, which means the
application can simply call htp_conn_next_log() to fetch the next log
message until the queue is empty. Once the application is done with a
log message, they can call htp_log_free() to dispose of it.

Functions supporting htp_log_t:
htp_conn_next_log(conn) - Get the next log message
htp_log_message(log) - To get the text of the message
htp_log_code(log) - To get the HTP_LOG_CODE value
htp_log_free(log) - To free the htp_log_t

3 months agodoc: update configuration with flow rate-tracking 12931/head
Shivani Bhardwaj [Wed, 2 Apr 2025 09:17:21 +0000 (14:47 +0530)] 
doc: update configuration with flow rate-tracking

Feature 5647

3 months agoutil: add initial flow rate tracking implementation
Shivani Bhardwaj [Sat, 29 Mar 2025 13:33:16 +0000 (19:03 +0530)] 
util: add initial flow rate tracking implementation

In order to track flow rate and thus determine a course of action or
categorize it as elephant flow, track a flow's byte count per direction
in a ring buffer for a given time interval.

The implementation is simple and keeps overwriting the buffer and
updating the final sum. The sum of all the elements in the ring buffer
at any point in time should reflect the number of bytes for the
respective flow in the last of a given configured interval.
e.g. if the definition says that the flows must be tracked by a rate of
100k bytes in 10 seconds, the ring buffer at any point in time should
carry the total number of bytes seen by the respective flow in the last
10 seconds.

So far, the implementation only supports reading the flow rate
definition from suricata.yaml and using it to track the flows.

This solution adds up a space complexity to the existing Flow struct.
However, the added space complexity should only take effect if the
feature is in use. Since this buffer extends the Flow struct, it does
not impact the usual business logic or complexity of the code.

This implementation is currently limited to defining the time interval
of flow rate in seconds only. However, the number of seconds defined are
directly proportional to the aforementioned added space complexity as
that's the size of the ring buffer.

Feature 5647

3 months agojsonbuilder: prefix C API with SC
Jason Ish [Wed, 2 Apr 2025 04:38:27 +0000 (22:38 -0600)] 
jsonbuilder: prefix C API with SC

3 months agodetect: add email.x_mailer keyword
Alice Akaki [Tue, 1 Apr 2025 22:35:57 +0000 (18:35 -0400)] 
detect: add email.x_mailer keyword

email.x_mailer matches on MIME EMAIL X-Mailer
This keyword maps to the EVE field email.x_mailer
It is a sticky buffer
Supports prefiltering

Ticket: #7598

3 months agodetect: add email.message_id keyword
Alice Akaki [Tue, 1 Apr 2025 19:40:25 +0000 (15:40 -0400)] 
detect: add email.message_id keyword

email.message_id matches on MIME EMAIL Message-Id
This keyword maps to the EVE field email.message_id
It is a sticky buffer
Supports prefiltering

Ticket: #7593

3 months agomime/email: remove unnecessary logs
Alice Akaki [Wed, 2 Apr 2025 20:38:11 +0000 (16:38 -0400)] 
mime/email: remove unnecessary logs

fields 'date' and 'subject' are logged by enabling extended logging mode

3 months agodetect/flowbits: implement prefilter support
Victor Julien [Wed, 2 Apr 2025 07:09:48 +0000 (09:09 +0200)] 
detect/flowbits: implement prefilter support

Allow for more efficient rules that 'prefilter' on flowbits with 'isset' logic.

This prefilter is enabled by default, which means that if no mpm is present or
no explicit prefilter is used, the flowbits prefilter will be set up for a rule.

flowbits 'isset' prefilter

For rules that have a 'flowbits:isset,<bit>' statement, a "regular" prefilter
facility is created. It means that the rules are removed from the normal
match list(s) and added to a prefilter engine that runs prior to the individual
rule inspection stage.

Implementation: the prefilter is implemented as an RB_TREE of flowbits, with the
rule id's they "enable" stored per tree node. The matching logic is walking the
list of bits set in the flow and looking each of them up in the RB_TREE, adding
the rule ids of each of the matching bits to the list of rule candidates.

The 'isset' prefilter has one important corner case, which is that bits can in
fact be set during the rule evaluation stage. This is different from all other
prefilter engines, that evaluate an immutable state (for the lifetime of the
packet inspection).

flowbits 'set' post-match prefilter

For flowbits 'set' action, special post-match 'prefilter' facilities deal with
this corner case. The high level logic is that these track which 'isset' sigs
depend on them, and add these dependencies to the candidates list when a 'set'
action occurs.

This is implemented in a few steps:

1. flowbits 'set' is flagged
2. when 'set' action occurs the flowbit is added to a "post rule
   match work queue"
3. when the rule evaluation ends, the post-match "prefilter" engine is run
   on each of the flowbits in the "post rule match work queue"
4. these engines ammend the candidates list with the rule id dependencies
   for the flowbit
5. the candidates list is sorted to make sure within the execution for that
   packet the inspection order is maintained

Ticket: #2486.

3 months agodetect/prefilter: add post-match 'prefilter' engine
Victor Julien [Wed, 2 Apr 2025 07:06:57 +0000 (09:06 +0200)] 
detect/prefilter: add post-match 'prefilter' engine

Add support for special post-match engines. This allows a rule to enable
other rules when it matches.

Implementation is similar to prefilter engines, however prefilter
engines run before individual rules while this post-match engine runs
after and individual rule match. It will then add the new rules to the
existing rule list.

3 months agodetect/prefilter: fix pointer check
Victor Julien [Wed, 26 Feb 2025 19:16:18 +0000 (20:16 +0100)] 
detect/prefilter: fix pointer check

3 months agoflowbits: allow setter to know if set is new
Victor Julien [Mon, 10 Oct 2022 09:42:02 +0000 (11:42 +0200)] 
flowbits: allow setter to know if set is new

3 months agoflowbits: toggle returns state of the bit
Victor Julien [Fri, 10 Jun 2022 19:07:15 +0000 (21:07 +0200)] 
flowbits: toggle returns state of the bit

3 months agodetect: generic callback for md5-like keywords
Philippe Antoine [Tue, 7 Jan 2025 13:34:19 +0000 (14:34 +0100)] 
detect: generic callback for md5-like keywords

Ticket: 5634

3 months agodetect: use buffer ptr in validate callback api
Philippe Antoine [Tue, 15 Oct 2024 13:28:19 +0000 (15:28 +0200)] 
detect: use buffer ptr in validate callback api

Ticket: 5634

Allows to share the same validator functions when only the buffer
id is changing like for urilen, while still accessing the buffer
name for error logs

3 months agodetect/sdp: minor style fixup 12922/head
Victor Julien [Wed, 2 Apr 2025 08:30:01 +0000 (10:30 +0200)] 
detect/sdp: minor style fixup

3 months agodoc: add sdp sticky buffers
Giuseppe Longo [Mon, 30 Dec 2024 15:39:25 +0000 (16:39 +0100)] 
doc: add sdp sticky buffers

3 months agosdp: add sdp.media.encryption_key sticky buffer
Giuseppe Longo [Mon, 30 Dec 2024 15:38:35 +0000 (16:38 +0100)] 
sdp: add sdp.media.encryption_key sticky buffer

This adds a sticky (multi) buffer to match the "Encryption key" subfield
of the "Media description" field in both requests and responses.

Ticket #7291

3 months agosdp: add sdp.media.connection_data sticky buffer
Giuseppe Longo [Wed, 2 Oct 2024 08:25:59 +0000 (10:25 +0200)] 
sdp: add sdp.media.connection_data sticky buffer

This adds a sticky (multi) buffer to match the "Connection data"
subfield of the "Media description" field in both requests and
responses.

Ticket #7291

3 months agosdp: add sdp.media.media_info sticky buffer
Giuseppe Longo [Wed, 2 Oct 2024 08:19:44 +0000 (10:19 +0200)] 
sdp: add sdp.media.media_info sticky buffer

This adds a stick (multi) buffer to match the "Session information"
subfield of the "Media description" field in both requests and
responses.

Ticket #7291

3 months agosdp: add sdp.media.media sticky buffer
Giuseppe Longo [Wed, 2 Oct 2024 08:10:39 +0000 (10:10 +0200)] 
sdp: add sdp.media.media sticky buffer

This adds a sticky (multi) buffer to match the "Media" subfield of the
"Media description" field in both requests and responses.

Ticket #7291

3 months agosdp: add sdp.attribute sticky buffer
Giuseppe Longo [Mon, 30 Sep 2024 19:26:30 +0000 (21:26 +0200)] 
sdp: add sdp.attribute sticky buffer

This adds a sticky (multi) buffer to match the "Attribute" field in both
requests and responses.

Ticket #7291

3 months agosdp: add sdp.encryption_key sticky buffer
Giuseppe Longo [Mon, 30 Sep 2024 15:49:00 +0000 (17:49 +0200)] 
sdp: add sdp.encryption_key sticky buffer

This adds a sticky buffer to match the "Encryption key" field in both
requests and responses.

Ticket #7291

3 months agosdp: add sdp.timezone sticky buffer
Giuseppe Longo [Mon, 30 Sep 2024 13:44:59 +0000 (15:44 +0200)] 
sdp: add sdp.timezone sticky buffer

This adds a sticky bufffer to match the "Timezone" field in both
requests and responses.

Ticket #7291

3 months agosdp: add sdp.repeat_time sticky buffer
Giuseppe Longo [Mon, 30 Sep 2024 13:40:40 +0000 (15:40 +0200)] 
sdp: add sdp.repeat_time sticky buffer

This adds a sticky buffer to match the "Repeat time" field in both
requests and responses.

Ticket #7291

3 months agosdp: add sdp.time sticky buffer
Giuseppe Longo [Mon, 30 Sep 2024 13:36:32 +0000 (15:36 +0200)] 
sdp: add sdp.time sticky buffer

This adds a sticky buffer to match the "Time" field in both requests and
responses.

Ticket #7291

3 months agosdp: add sdp.bandwidth sticky buffer
Giuseppe Longo [Mon, 30 Sep 2024 13:30:07 +0000 (15:30 +0200)] 
sdp: add sdp.bandwidth sticky buffer

This adds a sticky (multi) buffer to match the "Bandwidth" field in both
requests and responses.

Ticket #7291

3 months agosdp: add sdp.connection_data sticky buffer
Giuseppe Longo [Mon, 30 Sep 2024 13:12:44 +0000 (15:12 +0200)] 
sdp: add sdp.connection_data sticky buffer

This adds a sticky buffer to match the "Connection data" field in both
requests and responses.

Ticket #7291

3 months agosdp: add sdp.phone_number sticky buffer
Giuseppe Longo [Mon, 30 Sep 2024 13:05:35 +0000 (15:05 +0200)] 
sdp: add sdp.phone_number sticky buffer

This adds a sticky buffer to match the "Phone number" field in both
requests and responses.

Ticket #7291

3 months agosdp: add sdp.email sticky buffer
Giuseppe Longo [Mon, 30 Sep 2024 13:04:10 +0000 (15:04 +0200)] 
sdp: add sdp.email sticky buffer

This adds a sticky buffer to match the "Email" field in both requests
and responses.

Ticket #7291

3 months agosdp: add sdp.uri sticky buffer
Giuseppe Longo [Mon, 30 Sep 2024 08:51:17 +0000 (10:51 +0200)] 
sdp: add sdp.uri sticky buffer

This adds a sticky buffer to match the "Uri" field in both requests and
responses.

Ticket #7291

3 months agosdp: add sdp.origin sticky buffer
Giuseppe Longo [Mon, 30 Sep 2024 08:44:42 +0000 (10:44 +0200)] 
sdp: add sdp.origin sticky buffer

This adds a sticky buffer to match the "Origin" field in both requests
and responses.

Ticket #7291

3 months agosdp: add sdp.session_info sticky buffer
Giuseppe Longo [Mon, 30 Sep 2024 07:57:36 +0000 (09:57 +0200)] 
sdp: add sdp.session_info sticky buffer

This adds a sticky buffer to match the "Session information" field in
both requests and responses.

Ticket #7291

3 months agosdp: add sdp.session_name sticky buffer
Giuseppe Longo [Mon, 30 Sep 2024 07:55:33 +0000 (09:55 +0200)] 
sdp: add sdp.session_name sticky buffer

This adds a sticky buffer to match the "Session name" field in both
requests and responses.

Ticket #7291

3 months agosdp: parse time and repeat_time multiple times
Giuseppe Longo [Tue, 15 Oct 2024 04:39:18 +0000 (06:39 +0200)] 
sdp: parse time and repeat_time multiple times

As defined in RFC4566, the time and repeat_time fields can be present
multiple times but they are currently parsed only once.

Ticket #7325

3 months agosdp: stringify structured fields
Giuseppe Longo [Fri, 4 Oct 2024 06:56:24 +0000 (08:56 +0200)] 
sdp: stringify structured fields

The current parser implementations take a field, such as connection data, and
split it into subfields for a specific structure (e.g., struct ConnectionData).
However, following this approach requires several sticky buffers to match the
whole field, which can make a rule a bit verbose and doesn't offer any advantage
for matching specific parts of a field.

With this patch, a single line is still split into pieces if it makes sense for
parsing purposes, but these pieces are then reassembled into a single string.
This way, only one sticky buffer is needed to match the entire field.

Ticket #7291

3 months agosdp: log media's encryption key
Giuseppe Longo [Fri, 4 Oct 2024 12:45:59 +0000 (14:45 +0200)] 
sdp: log media's encryption key

The encryption key subfield of the media description field is not
logged when it should be.

Ticket #7305

3 months agogithub-actions: bump actions/upload-artifact from 4.6.1 to 4.6.2
dependabot[bot] [Tue, 1 Apr 2025 19:47:09 +0000 (19:47 +0000)] 
github-actions: bump actions/upload-artifact from 4.6.1 to 4.6.2

Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.6.1 to 4.6.2.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1...ea165f8d65b6e75b540449e92b4886f43607fa02)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: 4.6.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
3 months agogithub-actions: bump actions/download-artifact from 4.1.9 to 4.2.1
dependabot[bot] [Tue, 1 Apr 2025 19:47:06 +0000 (19:47 +0000)] 
github-actions: bump actions/download-artifact from 4.1.9 to 4.2.1

Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4.1.9 to 4.2.1.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/cc203385981b70ca67e1cc392babf9cc229d5806...95815c38cf2ff2164869cbab79da8d1f422bc89e)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: 4.2.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
3 months agogithub-actions: bump github/codeql-action from 3.28.10 to 3.28.13
dependabot[bot] [Tue, 1 Apr 2025 19:47:03 +0000 (19:47 +0000)] 
github-actions: bump github/codeql-action from 3.28.10 to 3.28.13

Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.28.10 to 3.28.13.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Commits](https://github.com/github/codeql-action/compare/v3.28.10...v3.28.13)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 3.28.13
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
3 months agodetect: remove unneeded NULL check
Philippe Antoine [Tue, 1 Apr 2025 19:39:11 +0000 (21:39 +0200)] 
detect: remove unneeded NULL check

As spotted by cppcheck

fd is set only once, and DetectFlowSetup bails early if it is NULL

Fixes: c272a646c5ae ("detect: SigMatchAppendSMToList can fail")
4 months agorust/conf: rust format 12907/head
Jason Ish [Tue, 1 Apr 2025 16:55:18 +0000 (10:55 -0600)] 
rust/conf: rust format

4 months agorust/conf: use generated bindings to SCConf API
Jason Ish [Tue, 1 Apr 2025 16:42:52 +0000 (10:42 -0600)] 
rust/conf: use generated bindings to SCConf API

4 months agoconf: prefix conf API with SC
Jason Ish [Tue, 1 Apr 2025 16:04:19 +0000 (10:04 -0600)] 
conf: prefix conf API with SC

4 months agothreads/lib: fix coverity check for unchecked return code
Jason Ish [Tue, 1 Apr 2025 15:31:07 +0000 (09:31 -0600)] 
threads/lib: fix coverity check for unchecked return code

In thread startup, return error of TmThreadsWaitForUnpause() fails.
Fixed coverity check as in all other places the return value of this
function is checked and acted on.

4 months agorust/rdp: namespace and visibility cleanups
Jason Ish [Tue, 1 Apr 2025 15:16:11 +0000 (09:16 -0600)] 
rust/rdp: namespace and visibility cleanups

Ticket: #7498

4 months agorust/smb: namespace and visibility cleanups
Jason Ish [Tue, 1 Apr 2025 14:56:21 +0000 (08:56 -0600)] 
rust/smb: namespace and visibility cleanups

Ticket: #7498

4 months agodoc/entropy: Add documentation for the entropy keyword
Jeff Lucovsky [Tue, 1 Apr 2025 12:14:31 +0000 (08:14 -0400)] 
doc/entropy: Add documentation for the entropy keyword

This commits adds documentation for the entropy keyword.
The entropy keyword calculates the Shannon entropy value for content
with the calculated value used to determine whether an alert occurs.

4 months agodetect/entropy: Use entropy matching when needed
Jeff Lucovsky [Wed, 5 Feb 2025 21:38:03 +0000 (16:38 -0500)] 
detect/entropy: Use entropy matching when needed

This commit causes the content inspection engine to recognize and
invoke the entropy "match" function when the entropy keyword is used.

Issue: 4162

4 months agodetect/entropy: Add entropy keyword
Jeff Lucovsky [Wed, 5 Feb 2025 20:53:30 +0000 (15:53 -0500)] 
detect/entropy: Add entropy keyword

This commit adds keyword/build support for the entropy keyword. The
entropy keyword compares an entropy value with a value calculated
according to the Shannon entropy on the available content.

Issue: 4162

4 months agorust/detect: Add entropy support
Jeff Lucovsky [Wed, 5 Feb 2025 20:46:10 +0000 (15:46 -0500)] 
rust/detect: Add entropy support

This commit adds
- Parser for the entropy keyword
- Calculation of content the Shannon entropy value

Issue: 4162

The entropy keyword syntax is the keyword entropy followed by options
and the entropy value for comparison.

The minimum entropy keyword specification is:
entropy: value <entropy-spec>

This results in the calculated entropy value being compared with
<entropy-spec> with the equality operator.

Calculated entropy values are between 0.0 and 8.0, inclusive.

A match occurs when the values and operator agree. This example matches
if the calculated and entropy value are the same.

When entropy keyword options are specified, all options and "value" must
be comma-separated. Options and value may be specified in any order.

Options have default values:
- bytes is equal to the current content length
- offset is 0
- comparison with value is equality

entropy: [bytes <byteval>] [offset <offsetval>] value <entropy-spec>

Using default values:
entropy: bytes 0, offset 0, value =<entropy-spec>

<entropy-spec> is: <operator> (see below) and a value, e.g., "< 4.1"

The following operators are available from the float crate:
    - =  (default): Match when calculated entropy value equals specified entropy value
    - <  Match when calculated entropy value is strictly less than specified entropy value
    - <= Match when calculated entropy value is less than or equal to specified entropy value
    - >  Match when calculated entropy value is strictly greater than specified entropy value
    - >= Match when calculated entropy value is greater than or equal to specified entropy value
    - != Match when calculated entropy value is not equal to specified entropy value
    - x-y Match when calculated entropy value is in the range, exclusive
    - !x-y Match when calculated entropy value is not in the range, exclusive

4 months agofloat: General purpose floating point functions
Jeff Lucovsky [Wed, 5 Feb 2025 15:40:49 +0000 (10:40 -0500)] 
float: General purpose floating point functions

Issue: 4162

This commit adds a floating-point analog to `uint.rs` targeted
initially to be used by the forthcoming entropy keyword.

4 months agodoc: add http library supported fns 12891/head
Shivani Bhardwaj [Tue, 1 Apr 2025 06:18:13 +0000 (11:48 +0530)] 
doc: add http library supported fns

Task 7604

4 months agodoc: remove http cookie ua from list of buffers
Shivani Bhardwaj [Mon, 31 Mar 2025 12:28:15 +0000 (17:58 +0530)] 
doc: remove http cookie ua from list of buffers

as they are available via library using the tx
- tx:request_header("Cookie")
- tx:response_header("Cookie")
- tx:request_header("User-Agent")

4 months agolua: convert http fns into suricata.http lib
Shivani Bhardwaj [Wed, 26 Mar 2025 06:20:25 +0000 (11:50 +0530)] 
lua: convert http fns into suricata.http lib

Expose the existing lua fns through the library as suricata.http module.
All existing fns are accessible like before with a transaction.

Task 7604

4 months agoutil/lua: change arg name to reflect correctness
Shivani Bhardwaj [Wed, 26 Mar 2025 06:04:11 +0000 (11:34 +0530)] 
util/lua: change arg name to reflect correctness

lua fns do not care about the argument count, they work with the index of
the item in the stack. Before library, there was just one item on the stack
so it worked out, however, with the library, the first item in the stack is
the library userdata, so, the fn would fail with the existing hard coded
setting of 1 for argc which can easily be confused with the number of
arguments passed to the fn.

4 months agogithub-ci: add test for custom lib example
Jason Ish [Mon, 31 Mar 2025 19:13:09 +0000 (13:13 -0600)] 
github-ci: add test for custom lib example

Ticket: #7240

4 months agoexamples/lib: include cleanup
Jason Ish [Tue, 14 Jan 2025 22:26:21 +0000 (16:26 -0600)] 
examples/lib: include cleanup

Requires tm-threads.h.

Ticket: #7240

4 months agoexamples/lib: use packet setter functions
Jason Ish [Wed, 9 Oct 2024 21:21:32 +0000 (15:21 -0600)] 
examples/lib: use packet setter functions

Instead of direct field access.

Ticket: #7240

4 months agopacket: add set functions for some packet fields
Jason Ish [Wed, 9 Oct 2024 18:30:43 +0000 (12:30 -0600)] 
packet: add set functions for some packet fields

- SCPacketSetReleasePacket
- SCPacketSetLiveDevice
- SCPacketSetDatalink
- SCPacketSetTime
- SCPacketSetSource

Prevents direct access by library users and provides more ABI
stability.

Ticket: #7240

4 months agolib: remove TmModuleLibHandlePacket
Jason Ish [Mon, 7 Oct 2024 22:08:59 +0000 (16:08 -0600)] 
lib: remove TmModuleLibHandlePacket

This is better handled directly in the library user program so the
user has more control of the Packet structure, before and after
handling.

Ticket: #7240

4 months agoexamples/lib: use a main loop to wait for exit
Jason Ish [Fri, 4 Oct 2024 22:28:05 +0000 (16:28 -0600)] 
examples/lib: use a main loop to wait for exit

Instead of immediately entering shutdown, use SuricataMainLoop to wait
for the end of the pcap.

Ticket: #7240

4 months agolib: remove SCRunModeLibDestroyWorker
Jason Ish [Fri, 4 Oct 2024 22:27:28 +0000 (16:27 -0600)] 
lib: remove SCRunModeLibDestroyWorker

This was a one line wrapper around SCTmThreadsSlotPktAcqLoopFinish, so
library users can call that directly instead.

Ticket: #7240

4 months agoexamples/lib: create threadvars from main thread
Jason Ish [Mon, 30 Sep 2024 22:34:04 +0000 (16:34 -0600)] 
examples/lib: create threadvars from main thread

This also allows us to remove the sleep, as the ThreadVars are now
guaranteed to be created before PostInit.

Ticket: #7240

4 months agoexamples/lib: update library example for ips drop
Jason Ish [Thu, 12 Sep 2024 20:25:01 +0000 (14:25 -0600)] 
examples/lib: update library example for ips drop

Add a release packet callback where the action can be checked for drop.

Ticket: #7240

4 months agorunmodes: typedef runmode enum and use as type
Jason Ish [Mon, 26 Aug 2024 20:18:22 +0000 (14:18 -0600)] 
runmodes: typedef runmode enum and use as type

Also remove function to set the library mode. This is easy enough to
do with SCRunmodeSet, and we don't want to add a specific setter for
each and every runmode.

Ticket: #7240

4 months agolib: reorganize to avoid static prototypes
Jason Ish [Fri, 23 Aug 2024 20:54:24 +0000 (14:54 -0600)] 
lib: reorganize to avoid static prototypes

Ticket: #7240