Skip to content

Commit

Permalink
doc/userguide: document TCP urgent policy
Browse files Browse the repository at this point in the history
  • Loading branch information
victorjulien committed Dec 11, 2024
1 parent 779f9d8 commit d11e8a8
Showing 1 changed file with 52 additions and 0 deletions.
52 changes: 52 additions & 0 deletions doc/userguide/configuration/suricata-yaml.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1305,6 +1305,58 @@ network inspection.
.. image:: suricata-yaml/IDS_chunk_size.png


TCP Urgent Handling
^^^^^^^^^^^^^^^^^^^

TCP Urgent pointer support is a complicated topic, where it is essentially impossible
for a network device to know with certainty what the behavior of the receiving host is.

For this reason, many middleboxes strip the URG flag and reset the urgent pointer (see
for example RFC 6093, 3.4).

Several options are provided to control how to deal with the urgent pointer.

::

stream:
reassembly:
urgent:
policy: oob # drop, inline, oob (1 byte, see RFC 6093, 3.1), gap
oob-limit-policy: drop

`stream.reassembly.urgent.policy`:
- `drop`: drop URG packets before they affect the stream engine
- `inline`: ignore the urgent pointer and process all data inline
- `oob` (out of band): treat the last byte as out of band
- `gap`: skip the last byte, but do no adjust sequence offsets, leading to
gaps in the data

If the urgent policy is set to `oob`, there is an additional setting. Since OOB data does
advance the TCP sequence number, the stream engine tracks the number of bytes to make sure
no GAPs in the non-OOB data are seen by the app-layer parsers and detection engine. This
is currently limited to 64k per direction. If the number of OOB bytes exceeds that 64k, an
additional policy is triggered: `stream.reassembly.urgent.oob-limit-policy`.

`stream.reassembly.urgent.oob-limit-policy`:
- `drop`: drop URG packets before they affect the stream engine
- `inline`: ignore the urgent pointer and process all data inline
- `gap`: skip the last byte, but do no adjust sequence offsets, leading to gaps in the data

Observables
"""""""""""

Each packet with the URG flag set, will increment the `tcp.urg` counter.

When dropping the URG packets, the packets will have the drop reason
`ips.drop_reason.stream_urgent`, which is also a counter in the stats logging.

The stream event `stream-event:reassembly_urgent_oob_limit_reached` allows matching on the
packet that reaches the OOB limit. Stream rule `2210066` matches on this.

If `stats.stream-events` are enabled the counter `stream.reassembly_urgent_oob_limit_reached`
will be incremented if the OOB limit is reached.


Host Tracking
-------------

Expand Down

0 comments on commit d11e8a8

Please sign in to comment.