Skip to content
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

Closed
wants to merge 6 commits into from
Closed

Conversation

jlucovsky
Copy link
Contributor

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:

  • New transform: from_base64
  • Documentation
  • Keyword parser in rust.

Updates:

  • Update fuzzing targets with Rust enum types

Provide values to any of the below to override the defaults.

To use a pull request use a branch name like pr/N where N is the
pull request number.

Alternatively, SV_BRANCH may also be a link to an
OISF/suricata-verify pull-request.

SV_BRANCH=OISF/suricata-verify#1670

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
Copy link
Member

@inashivb inashivb left a 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,
Copy link
Member

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?

Copy link
Contributor Author

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
Copy link
Member

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
Copy link
Member

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%

Copy link
Contributor Author

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.

@victorjulien victorjulien added this to the 8.0 milestone Jun 21, 2024
@suricata-qa
Copy link

Information: QA ran without warnings.

Pipeline 21167

@victorjulien
Copy link
Member

Merged in #11353, thanks!

@jlucovsky jlucovsky deleted the 6487/17 branch June 25, 2024 13:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

4 participants