【網絡入侵檢測】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.pswp.cn/web/76010.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76010.shtml
英文地址,請注明出處:http://en.pswp.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等平臺立即免費調用這些模型。…

《重構全球貿易體系用戶指南》解讀

文章目錄 背景核心矛盾與理論框架美元的“特里芬難題”核心矛盾目標理論框架 政策工具箱的協同運作機制關稅體系的精準打擊匯率政策的混合干預安全工具的復合運用 實施路徑與全球秩序重構階段性目標 風險傳導與反制效應內部失衡加劇外部反制升級系統性風險 范式突破與理論再思考…