【作者主頁】只道當時是尋常
【專欄介紹】入侵檢測。專注網絡、主機安全,歡迎關注與評論。
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" 字符串,如果包含,則可能正在泄露安全主機的密碼信息。
👌 總結
- 純字符串類型適用于所匹配的字符串中不包含特殊字符,規則可視化效果好。
- 字節碼類型適用于特殊字符,例如'|'、':'等,或者無法用字符表示的字符。
- 混合類型適用于結合兩者的長處,靈活使用。
📢 注意
- 默認情況下,字符串匹配是區分大小寫的,字符串內容必須準確,否則將不匹配。
- 如果字符串中包含';'、'\'、'"',需要使用轉義字符串。
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" 字符串,如果包含,則可能正在泄露安全主機的密碼信息。
📢 注意
- 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" 字符串,如果匹配,則可能正在泄露安全主機的密碼信息。
📢 注意
- startswith 不能與 depth、offset、within 或 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" 字符串,如果匹配,則可能正在泄露安全主機的密碼信息。
📢 注意
- endswith 不能與 offset、within 或 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” 字符串,則可能正在泄露安全主機的密碼信息。
📢 注意
- distance 絕對值必須 ≤ 1M(1048576 字節)。
- 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” 字符串,則可能正在泄露安全主機的密碼信息。
📢 注意
- within 絕對值必須 ≤ 1M(1048576 字節)。
- 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"字符串則告警。
📢 注意
- 當 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 字節時產生告警。
📢 注意
- bsize 實現為 uint64_t 類型。
- 如果在 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 字節則產生告警。
📢 注意
- 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 F3 和 00 00 00 07,且第二個字節序列在第一個字節序列匹配位置之后的 4 個字節內被找到時,從第二個字節序列的起始位置提取 4 個字節,將其與數值 248 進行加法運算,并將結果存儲在名稱為 var 的變量中,該變量可能后續或者其它規則會使用。
📢 注意
- 如果 byte_math 選項中包含 relative,則 byte_math 關鍵字需要在 content 或者 pcre 關鍵字之后使用。
- 如果 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 時,觸發告警。
📢 注意
- 熵值的范圍在 0.0 到 8.0 之間(包含 0.0 和 8.0)。
- 熵值是以 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",并觸發警報,
📢 注意
- 替換的內容要與匹配的內容長度一致。
- 只能適用與 IPS 模式。
- 僅適用于單個數據包,不能用于重組后的流或者標準化后的緩沖區。
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 位數字,就會觸發告警。