10.30. Base64 关键词¶
Suricata 支持对缓冲区中的 base64 编码数据进行解码,并对解码后的数据进行匹配。
这是通过使用两个关键词 base64_decode
和 base64_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=¬_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=¬_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;)