6.9. 变换

转换关键字将粘性缓冲区中的数据转换为其他内容。有些转换支持更好地控制转换过程的选项

例子::

alert http any any -> any any (file_data; strip_whitespace; \
    content:"window.navigate("; sid:1;)

此示例将匹配流量,即使在 navigate( .

可以链接变换。它们按照它们在规则中出现的顺序进行处理。每个变换的输出充当下一个变换的输入。

例子::

alert http any any -> any any (http_request_line; compress_whitespace; to_sha256; \
    content:"|54A9 7A8A B09C 1B81 3725 2214 51D3 F997 F015 9DD7 049E E5AD CED3 945A FC79 7401|"; sid:1;)

注解

并非所有的粘性缓冲区都支持转换

6.9.1. 点前缀

获取缓冲区,并在 . 字符有助于简化域检查。例如,输入字符串 hello.google.com 会被修改成 .hello.google.com . 此外,添加点允许 google.com 对抗 content:".google.com"

例子::

alert dns any any -> any any (dns.query; dotprefix; \
    content:".microsoft.com"; sid:1;)

此示例将匹配 windows.update.microsoft.commaps.microsoft.com.au 但不是 windows.update.fakemicrosoft.com .

此规则只能用于域上的匹配;示例:

alert dns any any -> any any (dns.query; dotprefix; \
    content:".microsoft.com"; endswith; sid:1;)

此示例将匹配 windows.update.microsoft.com 但不是 windows.update.microsoft.com.au .

最后,此规则只能用于TLD上的匹配;示例:

alert dns any any -> any any (dns.query; dotprefix; \
    content:".co.uk"; endswith; sid:1;)

此示例将匹配 maps.google.co.uk 但不是 maps.google.co.nl .

6.9.2. strip_whitespace

删除所有空格 isspace() 呼叫C。

例子::

alert http any any -> any any (file_data; strip_whitespace; \
    content:"window.navigate("; sid:1;)

6.9.3. compress_whitespace

将所有连续的空白压缩为一个空格。

6.9.4. to_md5

获取缓冲区,计算MD5哈希并传递原始哈希值。

例子::

alert http any any -> any any (http_request_line; to_md5; \
    content:"|54 A9 7A 8A B0 9C 1B 81 37 25 22 14 51 D3 F9 97|"; sid:1;)

6.9.5. to_sha1

获取缓冲区,计算sha-1哈希并传递原始哈希值。

例子::

alert http any any -> any any (http_request_line; to_sha1; \
    content:"|54A9 7A8A B09C 1B81 3725 2214 51D3 F997 F015 9DD7|"; sid:1;)

6.9.6. to_sha256

获取缓冲区,计算SHA-256哈希并传递原始哈希值。

例子::

alert http any any -> any any (http_request_line; to_sha256; \
    content:"|54A9 7A8A B09C 1B81 3725 2214 51D3 F997 F015 9DD7 049E E5AD CED3 945A FC79 7401|"; sid:1;)

6.9.7. pcrexform公司

获取缓冲区,应用所需的正则表达式,并输出 第一个捕获的表达式 .

注解

此转换需要包含正则表达式的必需选项字符串。

此示例警告如果 http.request_line 包含 /dropper.php 例子::

alert http any any -> any any (msg:"HTTP with pcrexform"; http.request_line; \
    pcrexform:"[a-zA-Z]+\s+(.*)\s+HTTP"; content:"/dropper.php"; sid:1;)

6.9.8. url_decode

解码url编码的数据,即将“+”替换为空格,将“%HH”替换为其值。这不会解码unicode“%uzzzzz”编码