-
Notifications
You must be signed in to change notification settings - Fork 1.5k
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/transform: from_base64 transform #11350
Conversation
Refactor utility functions/definitions from the byte_math module into the parser module. This includes parse_var and ResultValue Issue: 6487
Issue: 6487 Implement from_base64 option parsing in Rust. The Rust module also contains unit tests.
Issue: 6487 Implement the from_base64 transform: [bytes value] [offset value] [mode strict|rfc4648|rfc2045] The value for bytes and offset may be a byte_ variable or an unsigned integer.
Issue: 6487 Document the new transform and indicate that it's the preferred way to perform base64 decoding (preferred over base64_decode)
Issue: 6487 To avoid ambiguity, a single definition for base 64 decoding modes will be used. The Rust base64 transform contains the definitions for the existing mode types: Strict, RFC2045, RFC4648
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.
Some nits inline but nothing that should block the merge. Tests pretty good. 🚀
#[repr(u8)] | ||
#[derive(Copy, Clone, Debug, PartialEq, Eq)] | ||
pub enum DetectBase64Mode { | ||
Base64ModeRelax = 0, |
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: Relax mode does not seem to have been implemented any longer and doesn't do anything. Do you think we should remove it?
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.
Good observation. I'll include that in a followup pr (post release).
* \param det_ctx detection engine ctx | ||
* \param s signature | ||
* \param opts_str transform options, if any | ||
* \retval 0 No decode |
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: did you mean -1 or 0?
const uint32_t input_len = buffer->inspect_len; | ||
/* | ||
* The output buffer is larger than needed. On average, | ||
* a base64 encoded string is 75% of the encoded |
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: decoded string is 75%
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.
Good point ... after the release occurs, I'll update this.
Information: QA ran without warnings. Pipeline 21167 |
Merged in #11353, thanks! |
Continuation of #11346
This PR provides the
from_base64
transform used to match on content decoded with base64 using the mode (default rfc4648).Link to redmine ticket: 6487
Describe changes:
from_base64
Updates:
Provide values to any of the below to override the defaults.
To use a pull request use a branch name like
pr/N
whereN
is thepull request number.
Alternatively,
SV_BRANCH
may also be a link to anOISF/suricata-verify pull-request.
SV_BRANCH=OISF/suricata-verify#1670