10.30. Base64 关键词

Suricata 支持对缓冲区中的 base64 编码数据进行解码,并对解码后的数据进行匹配。

这是通过使用两个关键词 base64_decodebase64_data 实现的。必须同时使用这两个关键词才能生成警报。

10.30.1. base64_decode

从缓冲区解码 base64 数据,并将其提供给 base64_data 函数使用。

我们建议改用 base64 转换功能 —— 参见 from_base64

语法:

base64_decode:bytes <数值>, offset <数值>, relative;

bytes 选项指定 Suricata 应解码并供 base64_data 使用的字节数。 该数值限制为 64KiB。 解码将在缓冲区末尾停止。

offset 选项指定 Suricata 在解码前应跳过的字节数。 如果未设置 relative,则跳过的字节数是相对于载荷缓冲区的起始位置计算的。

relative 选项使解码相对于前一个内容匹配的位置开始。默认行为是从缓冲区起始位置开始。 该选项使 offset 相对于前一个匹配的位置跳过字节。

10.30.2. base64_data

base64_data 是一个 粘性缓冲区

允许对之前由 base64_decode 解码的数据进行内容匹配。

10.30.3. 示例

以下是一个规则示例,用于匹配 http_uri 缓冲区中找到的 base64 编码字符串 "test"。

它从已知字符串 "somestring" 的相对位置开始解码,已知偏移量为 1。这必须是缓冲区中第一个出现的 "somestring"。

示例:

缓冲区内容:
http_uri = "GET /en/somestring&dGVzdAo=&not_base64"

规则:
alert http any any -> any any (msg:"示例"; http.uri; content:"somestring"; \
     base64_decode:bytes 8, offset 1, relative; \
     base64_data; content:"test"; sid:10001; rev:1;)

缓冲区内容:
http_uri = "GET /en/somestring&dGVzdAo=&not_base64"

规则:
alert http any any -> any any (msg:"示例"; content:"somestring"; http_uri; \
     base64_decode:bytes 8, offset 1, relative; \
     base64_data; content:"test"; sid:10001; rev:1;)