【网络入侵检测】Suricata之数据包内容匹配

【作者主页】只道当时是寻常

【专栏介绍】入侵检测。专注网络、主机安全,欢迎关注与评论。

1. 概要

本文详细介绍了网络入侵检测系统(如 Suricata)中用于检查数据包或流有效载荷的 Payload 关键字。content 用于匹配数据包内容,默认大小写敏感,特殊字符需十六进制表示;nocase 可使匹配不区分大小写;depth 指定从开头检查的字节数;startswith 和 endswith 分别确保内容在缓冲区起末匹配;offset、distance、within 用于控制匹配位置和范围。此外,还有用于字节操作的 byte_test、byte_math、byte_jump,计算熵值的 entropy,调整流量的 replace 等关键字,功能丰富多样。

2. content

在Suricata中,content 关键字用于匹配数据包中的特定字节或字符串序列。常用来在网络流量中查找特定的模式串,通常作为检测特征之一匹配恶意流量。


✉️ 关键字格式

content:"<要匹配的内容>";


下面是 content 关键字所支持的值类型:

  • 纯字符串类型

content:"Match The String"; # 匹配 "Match The String" 字符串

  • 字节码类型

content:"|4d 61 74 63 68 20 54 68 65 20 53 74 72 69 6e 67|"; # 十六进制字节码转换成字符串后为"Match The String"

  • 混合类型

# 下面匹配的内容都是 "Match The String"
content:"|4d 61 74 63 68| The String";
content:"Match |54 68 65| String";
content:"Match The |53 74 72 69 6e 67|";


📔 规则示例

alert http any any -> any any (msg:"A risk of password leakage has been detected."; content:"passwd"; sid:9000000; rev:1;)
alert http any any -> any any (msg:"A risk of password leakage has been detected."; content:"|70 61 73 73 77 64|"; sid:9000001; rev:1;)

  • 上面两条规则的作用是检测 http 报文中是否包含 "passwd" 字符串,如果包含,则可能正在泄露安全主机的密码信息。

👌 总结

  • 纯字符串类型适用于所匹配的字符串中不包含特殊字符,规则可视化效果好。
  • 字节码类型适用于特殊字符,例如'|'、':'等,或者无法用字符表示的字符
  • 混合类型适用于结合两者的长处,灵活使用。

📢 注意

  1. 默认情况下,字符串匹配是区分大小写的,字符串内容必须准确,否则将不匹配。
  2. 如果字符串中包含';'、'\'、'"',需要使用转义字符串。

3. nocase

在Suricata中,nocase 关键字是一个修饰符, 它的作用是:使内容匹配时忽略大小写


✉️ 关键字格式

content:"<要匹配的内容>"; nocase;


📔 规则示例

alert http any any -> any any (msg:"A risk of password leakage has been detected."; content:"passwd"; nocase; sid:9000000; rev:1;)

  • 上面规则的作用是检测 http 报文中是否包含 "passwd" 字符串,如果包含,则可能正在泄露安全主机的密码信息。其中"passwd"字符串是忽略大小写的,也就是报文数据中携带的内容不管是"Passwd",还是"PASSWD",如果只是变换字母的大小写都会匹配这条规则。

4. depth

在 Suricata 中,depth 关键字用于限制 content 匹配的字节范围。它指定了在数据包中检查内容时,只查看数据包的前多少字节,从而优化性能并提高规则的精确度。


✉️ 关键字格式

depth:<数字>;


📔 规则示例

alert http any any -> any any (msg:"A risk of password leakage has been detected."; content:"passwd"; depth:12; sid:9000000; rev:1;)

  • 上面规则的作用是检测 http 报文中前 12 个字节中是否包含 "passwd" 字符串,如果包含,则可能正在泄露安全主机的密码信息。

📢 注意

  1. depth 关键字要求位于 content 关键字之后,用于修饰前面的 content 关键字。

5. startswith

在 Suricata 中,startswith 关键字是 content 关键字的修饰符,它要求 content 内容必须在数据包的开始位置命中


✉️ 关键字格式

content:"<要匹配的内容>"; startswith;


📔 规则示例

alert http any any -> any any (msg:"A risk of password leakage has been detected."; content:"passwd"; startswith; sid:9000000; rev:1;)

  • 上面规则的作用是检测 http 报文中数据开头的六个字节是否匹配 "passwd" 字符串,如果匹配,则可能正在泄露安全主机的密码信息。

📢 注意

  1. startswith 不能与 depthoffsetwithin distance 关键字混合修饰同一个 content 关键字。

6. endswith

在 Suricata 中,endswith 关键字是 content 关键字的修饰符,它要求 content 内容必须在数据包的结尾位置。该关键字与 startswith 关键字功能正好相反


✉️ 关键字格式

content:"<要匹配的内容>"; endswith;


📔 规则示例

alert http any any -> any any (msg:"A risk of password leakage has been detected."; content:"passwd"; endswith; sid:9000000; rev:1;)

  • 上面规则的作用是检测 http 报文中数据结尾的六个字节是否匹配 "passwd" 字符串,如果匹配,则可能正在泄露安全主机的密码信息。

📢 注意

  1. endswith 不能与 offsetwithin distance 关键字混合修饰同一个 content 关键字。

7. offset

在 Suricata 中,offset 关键字是 content 关键字的修饰符,用于指定匹配内容时开始检查的字节偏移位置。换句话说,offset 允许你跳过数据包的前面一定数量的字节,然后从指定的偏移位置开始匹配内容。该关键字经常和 depth 关键字组合使用。


✉️ 关键字格式

offset:<数字>;


📔 规则示例

alert http any any -> any any (msg:"A risk of password leakage has been detected."; content:"passwd"; offset:3; depth:20; sid:9000000; rev:1;)

  • 上面规则的作用是检测 http 报文中从第 3 个字节开始,向后最多匹配 20 个字节中,是否包含 "passwd" 字符串,如果包含,则可能正在泄露安全主机的密码信息。

8. distance

在 Suricata 中,distance 关键字用于指定在数据包中查找内容时,当前匹配与下一个匹配之间最小的字节距离。也就是说,distance 定义了从当前匹配位置到下一个匹配内容之间至少大于或等于 distance 指定的距离。


✉️ 关键字格式

distance:<数字>;


📔 规则示例

alert http any any -> any any (msg:"A risk of password leakage has been detected."; content:"username"; content:"passwd"; distance:2; sid:9000000; rev:1;)

  • 上面规则的作用是检测 http 报文,如果先出现 “username” 字符串,并且在其之后至少间隔 2 个字节的位置出现了 “passwd” 字符串,则可能正在泄露安全主机的密码信息。

📢 注意

  1. distance 绝对值必须 ≤ 1M(1048576 字节)。
  2. distance 允许是负数。

9. within

在 Suricata 中,within 关键字用于指定在数据包中查找内容时,当前匹配与下一个匹配之间最大的字节距离。也就是说,within 定义了从当前匹配位置到下一个匹配内容之间的距离最大小于或等于 within 指定的距离


✉️ 关键字格式

within:<数字>;


📔 规则示例

alert http any any -> any any (msg:"A risk of password leakage has been detected."; content:"username"; content:"passwd"; within:10; sid:9000000; rev:1;)

  • 上面规则的作用是检测 http 报文,如果先出现 “username” 字符串,并且在其之后最多间隔 10 个字节的范围内包含 “passwd” 字符串,则可能正在泄露安全主机的密码信息。

📢 注意

  1. within 绝对值必须 ≤ 1M(1048576 字节)。
  2. within 不允许为 0。

10. isdataat

Suricata 中,isdataat 关键字用于检查 数据包中的特定位置是否包含有效的数据。它允许你指定一个字节偏移量,并检查该位置是否存在数据。


✉️ 关键字格式

isdataat:<位置值> [, relative]

  • relative 为可选值,表示相对于上一次匹配的位置开始,指定字节偏移量位置是否仍存在数据。

📔 规则示例

alert http any any -> any any (msg:"Excessively long data has been detected."; content:"end"; isdataat:1, relative; sid:9000000; rev:1;)

alert http any any -> any any (msg:"Excessively long data has been detected."; isdataat:100; sid:9000000; rev:1;)

  • 上面第一条规则的作用是检测 http 报文,如果包含"end"字符串,那么从该字符串结尾后开始偏 1 个字节是否有数据,如果有数据则进行告警操作。
  • 上面第一条规则的作用是检测 http 报文,检测第 100 字节位置是否有数据,如果有数据则进行告警操作。

11. absent

在 Suricata 中,absent 关键字用于匹配指定数据缺失的场景。


✉️ 关键字格式

absent: [or_else];

  • or_else 是或者的意思,可用于将前后两个关键字关联起来。

📔 规则示例

alert http any any -> any any (msg:"HTTP request without referer"; http.referer; absent; sid:9000000; rev:1;)

alert http any any -> any any (msg:"HTTP request without referer"; http.referer; absent: or_else; content: !"abc"; sid:9000000; rev:1;)

  • 上面第一条规则的作用是检测 http 报文,如果报文中没有 referer 字段值则告警。
  • 上面第一条规则的作用是检测 http 报文,如果报文中没有 referer 字段值或者有 referer 字段值但是 referer 字段中不包含"abc"字符串则告警。

📢 注意

  1. absent 关键字修饰 file.data 关键字时,含义是没有文件存在

12. bsize

在 Suricata 中,bsize 关键字用于指定缓冲区大小的匹配条件。它通常用于检测网络流量中的特定数据包或协议行为,特别是在处理 TCP 流时。这里“缓冲区”通常指的是数据包重组后形成的连续数据块,它可以是多个TCP数据段重组后的结果


✉️ 关键字格式

bsize:[<,<=,>,>=, !]number; || bsize:min<>max;


📔 规则示例

alert dns any any -> any any (msg:"bsize exact buffer size"; dns.query; content:"google.com"; bsize:10; sid:9000000; rev:1;)

alert dns any any -> any any (msg:"bsize less than value"; dns.query; content:"google.com"; bsize:<25; sid:9000000; rev:1;)

alert dns any any -> any any (msg:"test bsize rule"; dns.query; content:"middle"; bsize:6<>15; sid:9000000; rev:1;)

  • 上面第 一 条规则的作用是检测 DNS 报文,如果 DNS 查询字段内容中包含字符串"google.com"并且重组后的缓冲区大小等于 10 字节时产生告警。
  • 上面第 二 条规则的作用是检测 DNS 报文,如果 DNS 查询字段内容中包含字符串"google.com"并且重组后的缓冲区大小小于 20 字节时产生告警。
  • 上面第 三 条规则的作用是检测 DNS 报文,如果 DNS 查询字段内容中包含字符串"middle"并且重组后的缓冲区大小大于 5 字节且小于 15 字节时产生告警。

📢 注意

  1. bsize 实现为 uint64_t 类型。
  2. 如果在 bsize 关键字之前有一个或多个 content 关键字,那么每个 content 的出现都会被检查。如果 content 的长度与 bsize 设定的值之间存在不匹配(即根据 bsize 指定的大小条件,使得 content 无法匹配)(例如,如果你设置了bsize:<50,意味着只考虑小于50字节的缓冲区,但你的content长度为60字节),则会抛出一个错误。

13. dsize

在 Suricata 的中,dsize 关键字用于指定匹配数据包有效载荷大小。它与 bsize 类似,但不同的是,dsize 更专注于单个数据包的有效载荷大小,而不是流重组后的缓冲区大小。


✉️ 关键字格式

dsize:[<,<=,>,>=, !]number; || dsize:min<>max;


📌 规则示例

alert tcp any any -> any any (msg:"dsize exact size"; dsize:10; sid:1; rev:1;)

alert tcp any any -> any any (msg:"dsize less than value"; dsize:<10; sid:2; rev:1;)

alert tcp any any -> any any (msg:"dsize range value"; dsize:8<>20; sid:3; rev:1;)

  • 上面第 一 条规则的作用是检测 TCP 报文,如果 TCP 报文的负载长度等于 10 字节则产生告警。
  • 上面第 二 条规则的作用是检测 TCP 报文,如果 TCP 报文的负载长度小于 10 字节则产生告警。
  • 上面第 三 条规则的作用是检测 TCP 报文,如果 TCP 报文的负载长度大于 8 字节且小于 20 字节则产生告警。

📢 注意

  1. dsize 实现为 uint16_t 类型。

14. byte_test

在 Suricata 中,byte_test 关键字用于对数据包有效载荷中的特定字节序列进行数值测试。它允许你从有效载荷中提取指定数量的字节,并根据设定的条件进行比较,以确定是否满足特定的规则。


✉️ 关键字格式

byte_test:<num of bytes> | <variable_name>, [!]<operator>, <test value>, <offset> [,relative] [,<endian>][, string, <num type>][, dce][, bitmask <bitmask value>];

  • <num of bytes> :提取的字节数。
  • <variable_name>:byte_extract 或者 byte_math 对应的变量名。
  • <value>:用于比较的数值,支持十六进制和十进制。
  • <offset>: 偏移值(以字节为单位)。
  • [relative]:(可选)相对于上一个匹配项配置的偏移量。
  • [endian]:(可选)字节序,big(大端),little(小端)。
  • [string] <num>:(可选)将指定数据包内容转换成特定格式,支持 hex、dec 和 oct 格式。
  • [dce]:(可选)允许使用 DCE 模块确定字节序。
  • [bitmask]:(可选)对已转换的字节应用按位与(AND)操作符。

📌 规则示例

alert tcp any any -> any any (msg:"Byte_Test Example - Num = Value"; content:"|00 01 00 02|"; byte_test:2,=,0x01,0;sid:1; rev:1;)

alert tcp any any -> any any (msg:"Byte_Test Example - Num = Value relative to content"; content:"|00 01 00 02|"; byte_test:2,=,0x03,2,relative;sid:2; rev:1;)

alert tcp any any -> any any (msg:"Byte_Test Example - Num != Value"; content:"|00 01 00 02|"; byte_test:2,!=,0x06,0;sid:3; rev:1;)

alert tcp any any -> any any (msg:"Byte_Test Example - Detect Large Values"; content:"|00 01 00 02|"; byte_test:2,>,1000,1,relative;sid:4; rev:1;)

alert tcp any any -> any any (msg:"Byte_Test Example - Lowest bit is set"; content:"|00 01 00 02|"; byte_test:2,&,0x01,12,relative;sid:5; rev:1;)

alert tcp any any -> any any (msg:"Byte_Test Example - Compare to String"; content:"foobar"; byte_test:4,=,1337,1,relative,string,dec;sid:6; rev:1;)

  • 规则 1: 当检测到 TCP 流量中存在包含字节序列 00 01 00 02 的数据包时,从该字节序列的起始位置开始提取 2 个字节,并检查这 2 个字节的值是否等于 0x01,如果相等则产生告警。
  • 规则 2:当检测到 TCP 流量中存在包含字节序列 00 01 00 02 的数据包时,从该字节序列的结束位置开始向后偏移 2 个字节并提取 2 个字节,并检查这 2 个字节的值是否等于 0x03,如果相等则触发告警。
  • 规则 3:当检测到 TCP 流量中存在包含字节序列 00 01 00 02 的数据包时,从该字节序列的起始位置开始提取 2 个字节,并检查这 2 个字节的值是否不等于 0x06,如果不相等则触发告警。
  • 规则 4:当检测到 TCP 流量中存在包含字节序列 00 01 00 02 的数据包时,从该字节序列的结束位置开始向后偏移 1 个字节并提取 2 个字节,将这 2 个字节转换成 10 进制后与 1000 进行比较,如果转换后的值大于 1000,则触发告警。
  • 规则 5:当检测到 TCP 流量中存在包含字节序列 00 01 00 02 的数据包时,从该字节序列的结束位置开始向后偏移 12 个字节的位置提取 2 个字节,将这 2 个字节与 0x01 进行按位与运算,若结果不为 0,则触发告警。
  • 规则 6:当检测到 TCP 流量中存在包含字符串"foobar"时,从该字符串的结束位置开始向后偏移 1 个字节并提取 4 个字节,将这 4 个字节当作字符串处理并转换为十进制数值,然后检查其值是否等于 1337,如果相等则触发告警。

15. byte_math

在 Suricata 中,byte_math 是一个用于在规则中执行数学运算的关键字。它允许你从数据包的有效载荷中提取字节数据,进行指定的数学运算,并将结果存储在变量中,以供后续的规则选项使用。


✉️ 关键字格式

byte_math:bytes <num of bytes> | <variable-name> , offset <offset>, oper <operator>, rvalue <rvalue>, result <result_var> [, relative] [, endian <endian>] [, string <number-type>] [, dce] [, bitmask <value>];

  • <num of bytes>:提取的字节数。
  • <variable_name>:byte_extract 对应的变量名。
  • <offset>:偏移值(以字节为单位)。
  • oper <operator>:数学运算符号,支持+、 -、 *、 /、<<、>>。
  • rvalue <rvalue>:数学运算的右值,可以指定变量名。
  • result <result-var>:数学运算结果,存储在指定变量中。
  • [relative]:(可选)相对于上一个匹配项配置的偏移量。
  • [endian <type>]:(可选)字节序,big(大端),little(小端),dce(使用 DCE 模块自动确定字节序)。
  • [string <num_type>]:(可选)将指定数据包内容转换成特定格式,支持 hex、dec 和 oct 格式。
  • [dce]:(可选)允许使用 DCE 模块确定字节序。
  • [bitmask] <value>:(可选)对已转换的字节应用按位与(AND)操作符。

📌 规则示例

alert tcp any any -> any any (msg:"Testing bytemath_body"; content:"|00 04 93 F3|"; content:"|00 00 00 07|"; distance:4; within:4; byte_math:bytes 4, offset 0, oper +, rvalue 248, result var, relative;sid:1; rev:1;)

  • 上面这条规则的作用是:在 TCP 网络流量中,当数据包的有效载荷中依次出现字节序列 00 04 93 F300 00 00 07,且第二个字节序列在第一个字节序列匹配位置之后的 4 个字节内被找到时,从第二个字节序列的起始位置提取 4 个字节,将其与数值 248 进行加法运算,并将结果存储在名称为 var 的变量中,该变量可能后续或者其它规则会使用。

📢 注意

  1. 如果 byte_math 选项中包含 relative,则 byte_math 关键字需要在 content 或者 pcre 关键字之后使用。
  2. 如果 oper'/'rvalue 0,则 byte_math 关键字失效

16. byte_jump

在 Suricata 中,byte_jump 关键字用于允许规则在匹配过程中根据数据包的内容跳过一定数量的字节。这对于解析具有动态长度字段的协议特别有用,例如当需要根据某个字段的值来确定下一个字段的位置时。


✉️ 关键字格式

byte_jump:<num of bytes> | <variable-name>, <offset> [, relative][, multiplier <mult_value>][, <endian>][, string, <num_type>][, align][, from_beginning][, from_end] [, post_offset <value>][, dce][, bitmask <value>];

  • <num of bytes>:提取的字节数。
  • <variable_name>:byte_extract 或者 byte_math 对应的变量名。
  • <offset>:偏移值(以字节为单位)。
  • [relative]:(可选)相对于上一个匹配项配置的偏移量。
  • [multiplier] <value>:将提取的数值乘以<value>的值。
  • [endian]:(可选)字节序,big(大端),little(小端)。
  • [string] <num_type>:(可选)将指定数据包内容转换成特定格式,支持 hex、dec 和 oct 格式。
  • [align]:(可选)相关的数值向上取整到下一个 32 位边界。比如某个计算得到的字节位置数值不是 32 位边界上的值,使用 [align] 后就会将其调整到下一个 32 位边界对应的数值。
  • [from_beginning]:(可选)从数据包的起始位置开始跳转。
  • [from_end]:(可选)从数据包的结尾位置开始跳转。
  • [post_offset] <value>:(可选)在执行完 byte_jump 操作之后,检测指针会按照 <value> 所指定的字节数,再额外地跳跃移动相应数量的字节。
  • [dce]:(可选)允许使用 DCE 模块确定字节序。
  • [bitmask] <value>:(可选)按位与(AND)操作符会将 <value>和经过转换的字节进行按位与运算,在完成这个按位与运算之后,才会执行 byte_jump 的跳转操作。

📌 规则示例

alert tcp any any -> any any (msg:"Byte_Jump Example"; content:"Alice"; byte_jump:2,0; content:"Bob";sid:1; rev:1;)

alert tcp any any -> any any (msg:"Byte_Jump From the End -8 Bytes"; byte_jump:0,0, from_end, post_offset -8; content:"|6c 33 33 74|";sid:2; rev:1;)

  • 规则 1:这条规则的作用是在 TCP 网络流量中,先查找数据包有效载荷中是否包含字符串 “Alice”,若包含则从 “Alice” 所在位置提取 2 个字节并移动检测指针,然后在新位置继续查找字符串 “Bob”,若找到 “Bob” 则触发警报(注意,这里提取字节数起始就是跳过字节数,因为偏移为 0,所以提取字节的起始位置为所匹配字符串的第一个字节)。
  • 规则 2: 在 TCP 网络流量中,先将检测指针移动到数据包有效载荷末尾向前数 8 个字节的位置,然后在该位置往后 4 个字节的范围内查找字节序列 6c 33 33 74,若找到则触发告警。

17. byte_extract

在 Suricata 中,byte_extract 关键字用于从数据包有效载荷中提取指定数量的字节,并将提取的结果存储到一个变量中,以供后续规则判断(byte_test)或运算(byte_math)使用


✉️ 关键字格式

byte_extract:<num of bytes>, <offset>, <var_name>, [,relative] [,multiplier <mult-value>] [,<endian>] [, dce] [, string [, <num_type>] [, align <align-value];

  • <num of bytes>:提取的字节数。
  • <offset>:偏移值(以字节为单位)。
  • <var_name>:存储所提取值的
  • [relative]:(可选)相对于上一个匹配项配置的偏移量。
  • multiplier <value>:将提取的数值乘以<value>的值。
  • [endian]:(可选)字节序,big(大端),little(小端)。
  • [string] <num>:(可选)将指定数据包内容转换成特定格式,支持 hex、dec 和 oct 格式。
  • [dce]:(可选)允许使用 DCE 模块确定字节序。
  • align <align-value>:一种操作指令,其中 <align-value> 是一个取值为 2 或 4 的参数。其作用是在进行乘法运算(如果存在乘法运算的话,对应之前提到的 [multiplier] <value> )之后,将提取的值向上取整到下一个 <align-value> 字节的边界。例如,如果 <align-value> 为 2,且提取的值经过乘法运算后不是 2 的倍数,那么就会将这个值向上取整到最接近且大于它的 2 的倍数。

📌 规则示例

alert tcp any any -> any any (msg:"Byte_Extract Example Using distance"; content:"Alice"; byte_extract:2,0,size; content:"Bob"; distance:size; within:3; sid:1;)

  • 规则 1:这条规则的作用是在 TCP 网络流量中,先查找数据包有效载荷中是否包含字符串 “Alice”,若包含则从 “Alice” 所在位置提取 2 个字节并存储为变量 size,然后根据 size 的值确定位置,在该位置往后 3 个字节的范围内查找字符串 “Bob”,若找到 “Bob” 则触发告警。

18. entropy

在 Suricata 中,entropy 关键字用于计算数据包有效载荷的香农熵(Shannon entropy),并将其与指定的阈值进行比较,以判断数据的随机性程度。这对于检测加密、压缩或混淆的数据流非常有用,常用于识别潜在的恶意通信,如加密的命令与控制(C2)流量、数据泄露等。


✉️ 关键字格式

entropy: [operator ] value

或者

entropy: [bytes <byteval>,] [offset <offsetval>,] value <operator><entropy-value>

  • bytes <byteval>:(可选)如果省略,就默认对当前内容的所有字节进行熵值计算。如果未省略,则计算 <byteval> 字节长度的内容的熵值。
  • offset <offsetval>:(可选)如果省略,就默认对当前内容的起始位置开始计算。如果未省略,则从指定位置开始。
  • <operator>:操作符,支持=、<、<=、>、>=、!=。
  • <entropy-value>:所比较的熵值。

📌 规则示例

alert http any any -> any any (msg:"entropy simple test"; file.data; entropy: value >= 4; sid:1;)

  • 这条规则的作用是在 HTTP 网络流量中,对传输的文件数据部分计算香农熵值,当该熵值大于或等于 4 时,触发告警。

📢 注意

  1. 熵值的范围在 0.0 8.0 之间(包含 0.0 和 8.0)。
  2. 熵值是以 64 位浮点数的形式来表示的。

19. replace

在 Suricata 中,replace 关键字用于修改网络数据包内容的关键字,主要应用于入侵防御系统(IPS)模式


✉️ 关键字格式

content:<内容>; replace:<内容>;


📌 规则示例

alert tcp any any -> any any (msg:"replace name"; content:"jan"; replace:"bob"; sid:1;)

  • 这条规则用于监控 TCP 流量,当发现数据包内容中有 "jan" 时,将其替换为 "bob",并触发警报,

📢 注意

  1. 替换的内容要与匹配的内容长度一致。
  2. 只能适用与 IPS 模式。
  3. 仅适用于单个数据包,不能用于重组后的流或者标准化后的缓冲区。

20. pcre

在 Suricata 中,pcre 关键字用于在规则中应用正则表达式匹配,提供比 content 更强大的模式匹配能力


✉️ 关键字格式

pcre:"/<regex>/opts";


📌 规则示例

alert tcp any any -> any any (msg:"pcre match"; pcre:"/[0-9]{6}/"; sid:1;)

  • 这段规则的作用是监测 TCP 协议的网络流量,一旦在数据包内容中发现连续的 6 位数字,就会触发告警。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/76010.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot 整合 Redis 实现点赞功能:从基础到实践

在当今互联网应用开发中&#xff0c;点赞功能几乎成为了各类内容平台的标配。它不仅能增加用户与内容之间的互动&#xff0c;还能直观地反映内容的受欢迎程度。本文将详细介绍如何使用 Spring Boot 整合 Redis 来实现一个简单的文章点赞功能&#xff0c;让你轻松掌握这一实用技…

openGauss DataVec + Dify,快速搭建你的智能助手平台

在当今数字化和智能化的时代&#xff0c;大语言模型&#xff08;LLM&#xff09;的应用正以前所未有的速度改变着各个领域的工作方式和用户体验。Dify 作为一个开源的大语言模型应用开发平台&#xff0c;为开发者们提供了便捷且强大的工具&#xff0c;助力构建从基础智能体到复…

OpenLayers:extent与view extent 介绍

一、范围的概念 1.什么是范围&#xff1f; 在Openlayers中范围&#xff08;Extent&#xff09;是用于表示地理空间区域的一种概念。它通常由一个数字数组构成&#xff0c;数组中的内容为&#xff1a;[最小x坐标&#xff0c;最小y坐标&#xff0c;最大x坐标&#xff0c;最大y坐…

can‘t set boot order in virtualbox

Boot order setting is ignored if UEFI is enabled https://forums.virtualbox.org/viewtopic.php?t99121 如果勾选EFI boot order就是灰色的 传统BIOS就是可选的 然后选中任意介质&#xff0c;通过右边的上下箭头调节顺序&#xff0c;最上面的应该是优先级最高的 然后就…

如何在 Kali 上解决使用 evil-winrm 时 Ruby Reline 的 quoting_detection_proc 警告

在使用 Kali Linux 运行 Ruby 工具&#xff08;例如 evil-winrm&#xff09;时&#xff0c;你可能会遇到以下警告&#xff1a; Warning: Remote path completions is disabled due to ruby limitation: undefined method quoting_detection_proc for module Reline这个警告会导…

工资管理系统的主要功能有哪些

工资管理系统通过自动化薪资计算、税务处理、员工数据管理、报表生成等功能&#xff0c;极大地提升了薪资发放的效率和准确性。在传统的人工薪资管理中&#xff0c;HR人员需要手动计算每位员工的薪资&#xff0c;并确保符合税务要求&#xff0c;极易出错且耗时。而现代工资管理…

C++语言程序设计——02 变量与数据类型

目录 一、变量与数据类型&#xff08;一&#xff09;变量的数据类型&#xff08;二&#xff09;变量命名规则&#xff08;三&#xff09;定义变量&#xff08;四&#xff09;变量赋值&#xff08;五&#xff09;查看数据类型&#xff08;六&#xff09;数据类型的字节长度&…

咋用fliki的AI生成各类视频?AI生成视频教程

最近想制作视频&#xff0c;多方考查了决定用fliki&#xff0c;于是订阅了一年试试&#xff0c;这个AI生成的视频效果来看真是不错&#xff0c;感兴趣的自己官网注册个账号体验一下就知道了。 fliki官网 Fliki生成视频教程 创建账户并登录 首先&#xff0c;访问fliki官网并注…

文章记单词 | 第32篇(六级)

一&#xff0c;单词释义 inferior [ɪnˈfɪəriə(r)] adj. 较差的&#xff1b;次的&#xff1b;下级的&#xff1b;n. 下属&#xff1b;次品joy [dʒɔɪ] n. 欢乐&#xff1b;喜悦&#xff1b;乐趣&#xff1b;乐事&#xff1b;v. 因… 而高兴resemble [rɪˈzembl] vt. 类…

windows上安装Jenkins

1. 下载windows版 jenkins安装包 2. 配置本地安全策略 在 Windows 11/10 上打开本地安全策略。 Secpol.msc 或本地安全策略编辑器是一个 Windows 管理工具&#xff0c;允许您在本地计算机上配置和管理与安全相关的策略。 安全设置-》本地策略-》用户权限分配-》作为服务登录…

dfs二叉树中的深搜(回溯、剪枝)--力扣129、814、230、257

目录 1.1题目链接&#xff1a;129.求根节点到叶结点数字之和 1.2题目描述&#xff1a;给你一个二叉树的根节点 root &#xff0c;树中每个节点都存放有一个 0 到 9 之间的数字。 1.3解法(dfs-前序遍历)&#xff1a; 2.1题目链接&#xff1a;814.二叉树剪枝 2.2题目描述&…

【树形dp题解】dfs的巧妙应用

【树形dp题解】dfs的巧妙应用 [P2986 USACO10MAR] Great Cow Gathering G - 洛谷 题目大意&#xff1a; Bessie 正在计划一年一度的奶牛大集会&#xff0c;来自全国各地的奶牛将来参加这一次集会。当然&#xff0c;她会选择最方便的地点来举办这次集会。 每个奶牛居住在 N N …

【c++深入系列】:new和delete运算符详解

&#x1f525; 本文专栏&#xff1a;c &#x1f338;作者主页&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客励志语录&#xff1a; “生活不会向你许诺什么&#xff0c;尤其不会向你许诺成功。它只会给你挣扎、痛苦和煎熬的过程。但只要你坚持下去&#xff0c;终有一天&…

Spring Boot 实现防盗链

在 Spring Boot 项目中实现防盗链可以通过多种方式&#xff0c;下面为你介绍两种常见的实现方法&#xff0c;分别是基于请求头 Referer 和基于令牌&#xff08;Token&#xff09;的防盗链。 基于请求头 Referer 的防盗链 这种方法通过检查请求头中的 Referer 字段&#xff0c…

悄悄话识别、 打电话识别、攀高识别三种识别算法

在摄像头正对场景下,悄悄话识别(唇语识别)、打电话识别和攀高识别是三种典型的行为检测技术。以下从技术原理、算法模型、应用场景及挑战等方面进行详细分析: 一、悄悄话识别(唇语识别) 技术原理 唇语识别通过分析嘴唇的几何特征(形状、开合程度、运动轨迹)和动态变化…

centos部署的openstack发布windows虚拟机

‌CentOS上部署的OpenStack可以发布Windows虚拟机‌。在CentOS上部署OpenStack后&#xff0c;可以通过OpenStack平台创建和管理Windows虚拟机。以下是具体的步骤和注意事项&#xff1a; ‌安装和配置OpenStack‌&#xff1a; 首先&#xff0c;确保系统满足OpenStack的最低硬件…

【电子通识】案例:电缆的安装方式也会影响设备的可靠性?

背景 在日常生活中&#xff0c;我们常常会忽略一些看似微不足道的细节&#xff0c;但这些细节有时却能决定设备的寿命和安全性。比如&#xff0c;你知道吗&#xff1f;一根电缆的布置方式&#xff0c;可能会决定你的设备是否会因为冷凝水而损坏。 今天&#xff0c;我们就来聊聊…

【Web APIs】JavaScript 操作多个元素 ④ ( 表格全选复选框案例 )

文章目录 一、核心要点解析 - 表格全选复选框案例1、案例需求2、复选框设置3、获取 全选复选框 和 普通复选框4、设置 全选复选框 逻辑5、设置 普通复选框 逻辑 二、完整代码示例1、代码示例2、执行结果 一、核心要点解析 - 表格全选复选框案例 1、案例需求 在表格中 , 设置 多…

OpenAI发布GPT-4.1系列模型——开发者可免费使用

OpenAI刚刚推出GPT-4.1模型家族&#xff0c;包含GPT-4.1、GPT-4.1 Mini和GPT-4.1 Nano三款模型。重点是——现在全部免费开放&#xff01; 虽然技术升级值得关注&#xff0c;但真正具有变革意义的是开发者能通过Cursor、Windsurf和GitHub Copilot等平台立即免费调用这些模型。…

《重构全球贸易体系用户指南》解读

文章目录 背景核心矛盾与理论框架美元的“特里芬难题”核心矛盾目标理论框架 政策工具箱的协同运作机制关税体系的精准打击汇率政策的混合干预安全工具的复合运用 实施路径与全球秩序重构阶段性目标 风险传导与反制效应内部失衡加剧外部反制升级系统性风险 范式突破与理论再思考…