-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Detect integers 6644 v11 #10222
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Detect integers 6644 v11 #10222
Changes from all commits
6c6fbbd
2adbd03
08dc21e
f27ea82
27093cc
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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 exemple 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 | ||
|
Comment on lines
+63
to
+64
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. For a future work: I think that this deserves a ticket for us to ensure that all such cases have proper documentation indicating that both ways work, and what are the accepted text values for each.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This should rather be part of the dev/review process then. Otherwise, this ticket can never be closed as there will always be new future keywords
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Oh, not for this ticket, indeed!
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. But this is a new feature brought by a commit in this PR so no keywords use it now.
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. AH! Sorry for the noise, then 🙇🏽 |
||
|
|
||
| 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 | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -280,6 +280,8 @@ bsize | |
| 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``. | ||
|
|
||
| bsize uses an :ref:`unsigned 64-bits integer <rules-integer-keywords>`. | ||
|
|
||
| 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), | ||
| the bsize value will be compared using the relational operator. Ranges are inclusive. | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We should update this line where it says that ranges are inclusive, right?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This should be its own ticket, and back ported.
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I can do it, then :)
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
|
|
@@ -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 uses an :ref:`unsigned 16-bits integer <rules-integer-keywords>`. | ||
|
|
||
| Format:: | ||
|
|
||
| dsize:[<>!]number; || dsize:min<>max; | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit typo: example
(sorry for not picking that up before)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixing