doc: integer keywords

Ticket: 6628

Document the generic detection capabilities for integer keywords.
and make every integer keyword pointing to this section.
pull/10277/head
Philippe Antoine 2 years ago committed by Victor Julien
parent d05f3ac791
commit b8bc2c7e0f

@ -6,6 +6,8 @@ dhcp.leasetime
DHCP lease time (integer). DHCP lease time (integer).
dhcp.leasetime uses an :ref:`unsigned 64-bit integer <rules-integer-keywords>`.
Syntax:: Syntax::
dhcp.leasetime:[op]<number> dhcp.leasetime:[op]<number>
@ -25,6 +27,8 @@ dhcp.rebinding_time
DHCP rebinding time (integer). DHCP rebinding time (integer).
dhcp.rebinding_time uses an :ref:`unsigned 64-bit integer <rules-integer-keywords>`.
Syntax:: Syntax::
dhcp.rebinding_time:[op]<number> dhcp.rebinding_time:[op]<number>
@ -44,6 +48,8 @@ dhcp.renewal_time
DHCP renewal time (integer). DHCP renewal time (integer).
dhcp.renewal_time uses an :ref:`unsigned 64-bit integer <rules-integer-keywords>`.
Syntax:: Syntax::
dhcp.renewal_time:[op]<number> dhcp.renewal_time:[op]<number>

@ -244,6 +244,8 @@ filesize
Match on the size of the file as it is being transferred. Match on the size of the file as it is being transferred.
filesize uses an :ref:`unsigned 64-bit integer <rules-integer-keywords>`.
Syntax:: Syntax::
filesize:<value>; filesize:<value>;

@ -292,6 +292,8 @@ flow.age
Flow age in seconds (integer) Flow age in seconds (integer)
This keyword does not wait for the end of the flow, but will be checked at each packet. This keyword does not wait for the end of the flow, but will be checked at each packet.
flow.age uses an :ref:`unsigned 32-bit integer <rules-integer-keywords>`.
Syntax:: Syntax::
flow.age: [op]<number> flow.age: [op]<number>
@ -314,6 +316,8 @@ flow.pkts_toclient
Flow number of packets to client (integer) Flow number of packets to client (integer)
This keyword does not wait for the end of the flow, but will be checked at each packet. This keyword does not wait for the end of the flow, but will be checked at each packet.
flow.pkts_toclient uses an :ref:`unsigned 32-bit integer <rules-integer-keywords>`.
Syntax:: Syntax::
flow.pkts_toclient: [op]<number> flow.pkts_toclient: [op]<number>
@ -334,6 +338,8 @@ flow.pkts_toserver
Flow number of packets to server (integer) Flow number of packets to server (integer)
This keyword does not wait for the end of the flow, but will be checked at each packet. This keyword does not wait for the end of the flow, but will be checked at each packet.
flow.pkts_toserver uses an :ref:`unsigned 32-bit integer <rules-integer-keywords>`.
Syntax:: Syntax::
flow.pkts_toserver: [op]<number> flow.pkts_toserver: [op]<number>
@ -354,6 +360,8 @@ flow.bytes_toclient
Flow number of bytes to client (integer) Flow number of bytes to client (integer)
This keyword does not wait for the end of the flow, but will be checked at each packet. This keyword does not wait for the end of the flow, but will be checked at each packet.
flow.bytes_toclient uses an :ref:`unsigned 64-bit integer <rules-integer-keywords>`.
Syntax:: Syntax::
flow.bytes_toclient: [op]<number> flow.bytes_toclient: [op]<number>
@ -374,6 +382,8 @@ flow.bytes_toserver
Flow number of bytes to server (integer) Flow number of bytes to server (integer)
This keyword does not wait for the end of the flow, but will be checked at each packet. This keyword does not wait for the end of the flow, but will be checked at each packet.
flow.bytes_toserver uses an :ref:`unsigned 64-bit integer <rules-integer-keywords>`.
Syntax:: Syntax::
flow.bytes_toserver: [op]<number> flow.bytes_toserver: [op]<number>

@ -15,6 +15,8 @@ For example::
ttl:10; ttl:10;
ttl uses an :ref:`unsigned 8-bit integer <rules-integer-keywords>`.
At the end of the ttl keyword you can enter the value on which you At the end of the ttl keyword you can enter the value on which you
want to match. The Time-to-live value determines the maximal amount want to match. The Time-to-live value determines the maximal amount
of time a packet can be in the Internet-system. If this field is set of time a packet can be in the Internet-system. If this field is set
@ -431,6 +433,8 @@ tcp.mss
Match on the TCP MSS option value. Will not match if the option is not Match on the TCP MSS option value. Will not match if the option is not
present. present.
tcp.mss uses an :ref:`unsigned 16-bit integer <rules-integer-keywords>`.
The format of the keyword:: The format of the keyword::
tcp.mss:<min>-<max>; tcp.mss:<min>-<max>;
@ -506,6 +510,8 @@ messages. The different messages are distinct by different names, but
more important by numeric values. For more information see the table more important by numeric values. For more information see the table
with message-types and codes. with message-types and codes.
itype uses an :ref:`unsigned 8-bit integer <rules-integer-keywords>`.
The format of the itype keyword:: The format of the itype keyword::
itype:min<>max; itype:min<>max;
@ -565,6 +571,8 @@ code of a ICMP message clarifies the message. Together with the
ICMP-type it indicates with what kind of problem you are dealing with. ICMP-type it indicates with what kind of problem you are dealing with.
A code has a different purpose with every ICMP-type. A code has a different purpose with every ICMP-type.
icode uses an :ref:`unsigned 8-bit integer <rules-integer-keywords>`.
The format of the icode keyword:: The format of the icode keyword::
icode:min<>max; icode:min<>max;
@ -719,6 +727,8 @@ icmpv6.mtu
Match on the ICMPv6 MTU optional value. Will not match if the MTU is not Match on the ICMPv6 MTU optional value. Will not match if the MTU is not
present. present.
icmpv6.mtu uses an :ref:`unsigned 32-bit integer <rules-integer-keywords>`.
The format of the keyword:: The format of the keyword::
icmpv6.mtu:<min>-<max>; icmpv6.mtu:<min>-<max>;

@ -237,6 +237,8 @@ The ``urilen`` keyword is used to match on the length of the request
URI. It is possible to use the ``<`` and ``>`` operators, which URI. It is possible to use the ``<`` and ``>`` operators, which
indicate respectively *smaller than* and *larger than*. indicate respectively *smaller than* and *larger than*.
urilen uses an :ref:`unsigned 64-bit integer <rules-integer-keywords>`.
The format of ``urilen`` is:: The format of ``urilen`` is::
urilen:3; urilen:3;

@ -31,6 +31,8 @@ http2.priority
Match on the value of the HTTP2 priority field present in a PRIORITY or HEADERS frame. Match on the value of the HTTP2 priority field present in a PRIORITY or HEADERS frame.
http2.priority uses an :ref:`unsigned 8-bit integer <rules-integer-keywords>`.
This keyword takes a numeric argument after a colon and supports additional qualifiers, such as: This keyword takes a numeric argument after a colon and supports additional qualifiers, such as:
* ``>`` (greater than) * ``>`` (greater than)
@ -49,6 +51,8 @@ http2.window
Match on the value of the HTTP2 value field present in a WINDOWUPDATE frame. Match on the value of the HTTP2 value field present in a WINDOWUPDATE frame.
http2.window uses an :ref:`unsigned 32-bit integer <rules-integer-keywords>`.
This keyword takes a numeric argument after a colon and supports additional qualifiers, such as: This keyword takes a numeric argument after a colon and supports additional qualifiers, such as:
* ``>`` (greater than) * ``>`` (greater than)
@ -68,6 +72,8 @@ Match on the size of the HTTP2 Dynamic Headers Table.
More information on the protocol can be found here: More information on the protocol can be found here:
`<https://tools.ietf.org/html/rfc7541#section-6.3>`_ `<https://tools.ietf.org/html/rfc7541#section-6.3>`_
http2.size_update uses an :ref:`unsigned 64-bit integer <rules-integer-keywords>`.
This keyword takes a numeric argument after a colon and supports additional qualifiers, such as: This keyword takes a numeric argument after a colon and supports additional qualifiers, such as:
* ``>`` (greater than) * ``>`` (greater than)

@ -61,6 +61,8 @@ ike.exchtype
Match on the value of the Exchange Type. Match on the value of the Exchange Type.
ike.exchtype uses an :ref:`unsigned 8-bit integer <rules-integer-keywords>`.
This keyword takes a numeric argument after a colon and supports additional qualifiers, such as: This keyword takes a numeric argument after a colon and supports additional qualifiers, such as:
* ``>`` (greater than) * ``>`` (greater than)
@ -106,6 +108,8 @@ ike.key_exchange_payload_length
Match against the length of the public key exchange payload (e.g. Diffie-Hellman) of the server or client. Match against the length of the public key exchange payload (e.g. Diffie-Hellman) of the server or client.
ike.key_exchange_payload_length uses an :ref:`unsigned 32-bit integer <rules-integer-keywords>`.
This keyword takes a numeric argument after a colon and supports additional qualifiers, such as: This keyword takes a numeric argument after a colon and supports additional qualifiers, such as:
* ``>`` (greater than) * ``>`` (greater than)
@ -138,6 +142,8 @@ ike.nonce_payload_length
Match against the length of the nonce of the server or client. Match against the length of the nonce of the server or client.
ike.nonce_payload_length uses an :ref:`unsigned 32-bit integer <rules-integer-keywords>`.
This keyword takes a numeric argument after a colon and supports additional qualifiers, such as: This keyword takes a numeric argument after a colon and supports additional qualifiers, such as:
* ``>`` (greater than) * ``>`` (greater than)

@ -7,6 +7,7 @@ Suricata Rules
meta meta
header-keywords header-keywords
payload-keywords payload-keywords
integer-keywords
transforms transforms
prefilter-keywords prefilter-keywords
flow-keywords flow-keywords

@ -0,0 +1,77 @@
.. _rules-integer-keywords:
Integer Keywords
================
Many keywords will match on an integer value on the network traffic.
These are unsigned integers that can be 8, 16, 32 or 64 bits.
Simple example::
bsize:integer value;
The integer value can be written as base-10 like ``100`` or as
an hexadecimal value like ``0x64``.
The most direct example is to match for equality, but there are
different modes.
Comparison modes
----------------
Integers can be matched for
* Equality
* Inequality
* Greater than
* Less than
* Range
* Negated range
* Bitmask
* Negated Bitmask
.. note::
Comparisons are strict by default. Ranges are thus exclusive.
That means a range between 1 and 4 will match 2 and 3, but neither 1 nor 4.
Negated range !1-4 will match for 1 or below and for 4 or above.
Examples::
bsize:19; # equality
bsize:=0x13; # equality
bsize:!0x14; # inequality
bsize:!=20; # inequality
bsize:>21; # greater than
bsize:>=21; # greater than or equal
bsize:<22; # lesser than
bsize:<=22; # lesser than or equal
bsize:19-22; # range between value1 and value2
bsize:!19-22; # negated range between value1 and value2
bsize:&0xc0=0x80; # bitmask mask is compared to value for equality
bsize:&0xc0!=0; # bitmask mask is compared to value for inequality
Enumerations
------------
Some integers on the wire represent an enumeration, that is, some values
have a string/meaning associated to it.
Rules can be written using one of these strings to check for equality.
This is meant to make rules more human-readable and equivalent for matching.
Examples::
websocket.opcode:text;
websocket.opcode:1; # behaves the same
Bitmasks
--------
Some integers on the wire represent multiple bits.
Some of these bits have a string/meaning associated to it.
Rules can be written using a list (comma-separated) of these strings,
where each item can be negated.
Examples::
websocket.flags:fin,!comp;
websocket.flags:&0xc0=0x80; # behaves the same

@ -8,6 +8,8 @@ mqtt.protocol_version
Match on the value of the MQTT protocol version field in the fixed header. Match on the value of the MQTT protocol version field in the fixed header.
mqtt.protocol_version uses an :ref:`unsigned 8-bit integer <rules-integer-keywords>`.
The format of the keyword:: The format of the keyword::
mqtt.protocol_version:<min>-<max>; mqtt.protocol_version:<min>-<max>;

@ -280,6 +280,8 @@ bsize
With the ``bsize`` keyword, you can match on the length of the buffer. This adds With the ``bsize`` keyword, you can match on the length of the buffer. This adds
precision to the content match, previously this could have been done with ``isdataat``. precision to the content match, previously this could have been done with ``isdataat``.
bsize uses an :ref:`unsigned 64-bit integer <rules-integer-keywords>`.
An optional operator can be specified; if no operator is present, the operator will An optional operator can be specified; if no operator is present, the operator will
default to '='. When a relational operator is used, e.g., '<', '>' or '<>' (range), default to '='. When a relational operator is used, e.g., '<', '>' or '<>' (range),
the bsize value will be compared using the relational operator. Ranges are inclusive. the bsize value will be compared using the relational operator. Ranges are inclusive.
@ -336,6 +338,8 @@ This may be convenient in detecting buffer overflows.
dsize cannot be used when using app/streamlayer protocol keywords (i.e. http.uri) dsize cannot be used when using app/streamlayer protocol keywords (i.e. http.uri)
dsize uses an :ref:`unsigned 16-bit integer <rules-integer-keywords>`.
Format:: Format::
dsize:[<>!]number; || dsize:min<>max; dsize:[<>!]number; || dsize:min<>max;

@ -36,6 +36,8 @@ rfb.sectype
Match on the value of the RFB security type field, e.g. ``2`` for VNC challenge-response authentication, ``0`` for no authentication, and ``30`` for Apple's custom Remote Desktop authentication. Match on the value of the RFB security type field, e.g. ``2`` for VNC challenge-response authentication, ``0`` for no authentication, and ``30`` for Apple's custom Remote Desktop authentication.
rfb.sectype uses an :ref:`unsigned 32-bit integer <rules-integer-keywords>`.
This keyword takes a numeric argument after a colon and supports additional qualifiers, such as: This keyword takes a numeric argument after a colon and supports additional qualifiers, such as:
* ``>`` (greater than) * ``>`` (greater than)

@ -284,6 +284,8 @@ tls.cert_chain_len
Matches on the TLS certificate chain length. Matches on the TLS certificate chain length.
tls.cert_chain_len uses an :ref:`unsigned 32-bit integer <rules-integer-keywords>`.
tls.cert_chain_len supports `<, >, <>, !` and using an exact value. tls.cert_chain_len supports `<, >, <>, !` and using an exact value.
Example:: Example::

Loading…
Cancel
Save