suricata 規(guī)則及部分關(guān)鍵字

規(guī)則格式

特征/簽名在suricata中起著非常重要的作用。在大多數(shù)情況下,人們使用現(xiàn)有的規(guī)則集。

Suricata-Update規(guī)則管理中描述了安裝規(guī)則集的正式方法。

Suricata規(guī)則文檔解釋了所有關(guān)于特征/簽名的內(nèi)容。

規(guī)則/簽名由以下內(nèi)容組成:

action:確定特征/簽名匹配時會發(fā)生什么(圖1紅色字體)

header:定義協(xié)議、IP地址、端口和規(guī)則的方向(圖1綠色字體)

rule options:定義規(guī)則的細(xì)節(jié)(圖1藍(lán)色字體)

圖1

(備注:紅色字體是Action,綠色字體是header,藍(lán)色字體是rule options.)

在這篇文章中,我們將使用上面的簽名/規(guī)則作為示例,突出顯示簽名的不同部分。它是從新興威脅數(shù)據(jù)庫(EmergingThreats)中提取的簽名,這是一個開放的數(shù)據(jù)庫,具有許多規(guī)則,您可以免費下載并在Suricata實例中使用。

1.Action

動作順序,默認(rèn)順序為:pass,drop,reject,alert

所有簽名/規(guī)則都有不同的屬性。其中之一是Action屬性。它決定了簽名/規(guī)則匹配時會發(fā)生什么。有四種類型的動作,當(dāng)簽名匹配并包含其中一個操作時將發(fā)生什么動作。

(1.1)pass

如果簽名匹配并包含pass, Suricata將停止掃描數(shù)據(jù)包并跳到所有規(guī)則的末尾(僅針對當(dāng)前數(shù)據(jù)包)。

(1.2)Drop

這只涉及IPS/內(nèi)聯(lián)模式。如果程序發(fā)現(xiàn)匹配的簽名(包含drop),它將立即停止。這個數(shù)據(jù)包不會再發(fā)送出去了。缺點:接收方?jīng)]有接收到有關(guān)正在進(jìn)行的操作的消息,從而導(dǎo)致時間延遲(使用TCP)。Suricata會為此數(shù)據(jù)包生成警報。

(1.3)Reject

這是對數(shù)據(jù)包的主動拒絕。接收方和發(fā)送方都接收到一個拒絕包。當(dāng)匹配該規(guī)則時,自動選擇兩種類型的拒絕包:

(1.3.1)如果匹配規(guī)則并包含reject的數(shù)據(jù)包與TCP有關(guān),它將是一個重置包(Reset-packet)。

(1.3.2)對于所有其他協(xié)議,它將是ICMP錯誤數(shù)據(jù)包。

Suricata還會生成警報。在Inline / IPS模式下,違規(guī)數(shù)據(jù)包也會像“drop”操作一樣被丟棄。

(1.5)Alert

如果簽名匹配并包含警報,則包將被視為與任何其他非威脅包一樣,除此之外,Suricata將生成一個警報。只有系統(tǒng)管理員才能注意到此警告alert。

Inline / IPS可以通過兩種方式阻止網(wǎng)絡(luò)流量。一種方法是drop?,另一種方式是reject。

規(guī)則將按照它們在文件中出現(xiàn)的順序加載。但它們將以不同的順序處理。簽名有不同的優(yōu)先級,最重要的簽名首先被掃描。優(yōu)先次序可以改變。默認(rèn)順序是: pass、drop、reject、alert。這意味著在丟棄(drop)規(guī)則之前考慮傳遞(pass?)規(guī)則,在拒絕(reject)規(guī)則之前考慮丟棄(drop)規(guī)則等等。

2.header

(2.1)協(xié)議

簽名/規(guī)則中的這個關(guān)鍵字告訴Suricata它所關(guān)注的協(xié)議是什么。可以在四種基本協(xié)議中進(jìn)行選擇

tcp (for tcp-traffic)

udp

icmp

ip (ip stands for ‘a(chǎn)ll’ or ‘a(chǎn)ny’)

同時也支持應(yīng)用層協(xié)議,可以從中選擇的第7層協(xié)議。如下:

http、ftp、tls (包括ssl)、smb、dns、dcerpc、ssh、smtp、imap、msn、modbus (默認(rèn)禁用)、dnp3 (默認(rèn)禁用)、enip (默認(rèn)禁用)、nfs (depends on rust availability)、ikev2 depends on rust availability)、krb5 (depends on rust availability)、ntp (depends on rust availability)、dhcp (depends on rust availability)。

這些協(xié)議的可用性取決于是否在配置文件suricata.yaml中啟用了該協(xié)議。如果您有一個簽名,例如一個http協(xié)議,Suricata確保簽名只有在涉及http通信時才能匹配。

(2.2)源和目標(biāo)地址(IP)

使用源和目標(biāo),分別指定流量的來源和流量的目標(biāo)。您可以分配IP地址(支持IPv4和IPv6)和IP范圍。這些可以與運營商結(jié)合。如圖1所示:第一個強調(diào)部分是源,第二個是目的地(注意方向箭頭的方向)。

drop tcp?$HOME_NET?any ->?$EXTERNAL_NET?any (msg:”ET TROJAN Likely Bot Nick in IRC (USA +..)”; flow:established,to_server; flowbits:isset,is_proto_irc; content:”NICK “; pcre:”/NICK .*USA.*[0-9]{3,}/i”; reference:url,doc.emergingthreats.net/2008124; classtype:trojan-activity; sid:2008124; rev:2;)

圖2

通常,可以使用變量,例如$HOME_NET和?$EXTERNAL_NET。配置文件指定了這些關(guān)注的IP地址,這些設(shè)置將用于代替規(guī)則中的變量。

示例:

圖3

(2.3)源和目標(biāo)端口

流量通過端口流入和流出。不同的端口具有不同的端口號。例如,HTTP的默認(rèn)端口是80,而443通常是HTTPS的端口。但請注意,端口不指示通信中使用的協(xié)議。相反,它確定哪個應(yīng)用程序正在接收數(shù)據(jù)。

上面提到的端口通常是目標(biāo)端口。源端口,即發(fā)送數(shù)據(jù)包的應(yīng)用程序,通常由操作系統(tǒng)分配一個隨機端口。在為自己的HTTP服務(wù)編寫規(guī)則時,通常會編寫any?->?80,這意味著從任何源端口到HTTP應(yīng)用程序(在端口80上運行)的任何數(shù)據(jù)包都是匹配的。在設(shè)置端口時,您也可以使用特殊操作符,如下:

圖4

示例:

圖5

(2.4)方向

方向告訴簽名/規(guī)則必須匹配的方式。幾乎每個簽名都有一個向右箭頭(->),意味著只有具有相同方向的數(shù)據(jù)包才能匹配。但是,也可以使規(guī)則匹配兩個方式(<>):

source->destination

source<>destination(both? directions)

但是沒有<-這種風(fēng)格。

以下示例說明了這一點。比如,有一個IP地址為1.2.3.4和端口1024的客戶端,以及一個IP地址為5.6.7.8的服務(wù)器,監(jiān)聽端口80(通常是HTTP)??蛻舳讼蚍?wù)器發(fā)送消息,服務(wù)器回復(fù)其答案。

圖5

使用規(guī)則:alert tcp 1.2.3.4 1024 -> 5.6.7.8? 80。此規(guī)則僅僅匹配第一個數(shù)據(jù)包,因為方向指定在響應(yīng)包上不匹配。

3.規(guī)則選項

規(guī)則的其余部分包括規(guī)則選項。它們用括號括起來并用分號分隔。某些選項具有設(shè)置功能(例如msg),這些設(shè)置功能的選項由關(guān)鍵字指定,關(guān)鍵字后面跟冒號,冒號后跟設(shè)置的內(nèi)容。其他選項沒有設(shè)置功能,只有簡單的關(guān)鍵字(例如nocase):

<keyword> : <settings>;

<keyword>;

規(guī)則選項具有特定的順序,更改其順序?qū)⒏淖円?guī)則的含義。

注意:字符 ; 和 " 在Suricata規(guī)則語言具有特殊含義,在規(guī)則選項值使用時必須轉(zhuǎn)義。使用轉(zhuǎn)義反斜杠,因為它充當(dāng)轉(zhuǎn)義字符例如:msg:" Message with semicolon\; " ;

接下來在文檔中介紹各種關(guān)鍵字的使用,一些關(guān)鍵字詳情如下:

3.1)修飾符關(guān)鍵字

一些關(guān)鍵字函數(shù)充當(dāng)修飾符。有兩種類型的修飾符。

(3.1.1)舊式“content modifiers”風(fēng)格:

alert http any any->any any(content:"index.php";http_uri;sid:1;)

在上面的示例中,修改了模式'index.php'以檢查HTTP uri緩沖區(qū)。

(3.1.2)最近的類型稱為sticky buffe。它首先放置緩沖區(qū)名稱,然后將其后面的所有關(guān)鍵字應(yīng)用于該緩沖區(qū),例如:

alert http any any->any any(http_response_line;content:"403 Forbidden";sid:1;)

在上面的示例中,針對HTTP響應(yīng)行檢查模式“403 Forbidden”,因為它遵循h(huán)ttp_response_line關(guān)鍵字

(3.2)標(biāo)準(zhǔn)化緩沖區(qū)

一個數(shù)據(jù)包由原始數(shù)據(jù)組成。HTTP和重組會復(fù)制這些類型的數(shù)據(jù)包。它們擦除異常內(nèi)容,組合數(shù)據(jù)包等。剩下的是一個叫做“標(biāo)準(zhǔn)化緩沖區(qū)”:

圖5

因為數(shù)據(jù)正在規(guī)范化,所以它不像過去那樣;?這是一種解釋.標(biāo)準(zhǔn)化緩沖區(qū)包括:所有HTTP關(guān)鍵字,重組流,TLS-,SSL-,SSH-,F(xiàn)TP-和dcerpc-緩沖區(qū)。

4.Meta 關(guān)鍵字

Meta?設(shè)置對Suricata的規(guī)則檢查沒有影響; 他們是Suricata上報的事件信息,對上報內(nèi)容有影響。

(4.1)msg (message)

關(guān)鍵字msg提供對觸發(fā)警報的有關(guān)簽名/規(guī)則相關(guān)文本提示信息。格式如下:

msg:"some description";

實例:

msg: "ET EXPLOIT SMB-DS DCERPC PnP bind attempt ";

約定:(1)通常將簽名第一部分設(shè)為大寫顯示簽名的類。(2)通常在簽名中的第一個關(guān)鍵字為msg。

(4.2)SID(規(guī)則ID)

關(guān)鍵字sid為每個簽名提供自己的ID。這個id用數(shù)字表示。sid的格式是:

sid:123;

通常,簽名sid是作為簽名的最后一個關(guān)鍵字(或者如果有rev的話,則倒數(shù)第二個)提供的。

(4.3)rev(修訂版)

sid關(guān)鍵字幾乎每次都伴隨著rev。Rev代表簽名的版本。如果修改了簽名,則簽名編寫者將增加rev的數(shù)量。rev的格式是:

rev:123;:

sid寫在rev之前,這是一個慣例,兩者都是最后一個關(guān)鍵字。

(4.4)gid(組ID)

gid關(guān)鍵字可用于為不同的簽名組提供另一個id值(如sid中)。Suricata默認(rèn)使用gid 1.可以修改它。它通常不會被改變,改變它沒有技術(shù)含義。您只能在警報中注意到它。

示例: 在一個?fast.log文件中:

10/15/09-03:30:10.219671 [**] [1:2008124:2] ET TROJAN Likely Bot Nick in IRC (USA +..) [**] [Classification: A Network Trojan was Detected] [Priority: 3] {TCP} 192.168.1.42:1028 -> 72.184.196.31:6667

[1:2008124:2]部分,1代表gid,2008124代表sid;2代表rev

(4.5)分類

classtype關(guān)鍵字提供有關(guān)規(guī)則和警報分類的信息。它由短名稱,長名稱和優(yōu)先級組成。例如,它可以告訴規(guī)則是僅僅是信息性的還是關(guān)于黑客等。對于每個classtype,這個classification.config具有將在規(guī)則中使用的優(yōu)先級classtype定義如下:

config classification: web-application-attack,Web Application Attack,1

config classification: not-suspicious,NotSuspiciousTraffic,3

現(xiàn)在,當(dāng)我們在配置中定義了這個時,我們可以在規(guī)則中使用classtypes。具有classtype web-application-attack的規(guī)則將被賦予優(yōu)先級1,并且警報將包含“Web Application Attack”:

圖六

(4.6)reference (參考)

可以找到參考關(guān)鍵字指向有關(guān)簽名的信息以及簽名試圖解決的問題的位置。參考關(guān)鍵字可以在簽名中多次出現(xiàn)。此關(guān)鍵字適用于簽名編寫者和分析師,他們會調(diào)查簽名匹配的原因。它具有以下格式:

reference:type,reference

示例:reference: url,www.info.com? ? ?、reference: cve,CVE-2014-1234

(4.7)priority(優(yōu)先級)

priority關(guān)鍵字帶有一個強制數(shù)字值,范圍從1到255.最常使用數(shù)字1到4。將首先檢查具有更高優(yōu)先級的簽名。最高優(yōu)先級是1.通常,簽名已經(jīng)通過classtype具有優(yōu)先級。這可以用關(guān)鍵字優(yōu)先級否決。優(yōu)先格式為:

priority:1;

(4.8)metadata(元數(shù)據(jù))

metadata關(guān)鍵字允許將額外的非功能信息添加到簽名中。雖然格式是自由格式,但建議堅持使用鍵值對,因為Suricata可以在前夕警報中包含這些值。格式為:

metadata:keyvalue;

metadata:keyvalue,keyvalue;

(4.9)target(目標(biāo))

target關(guān)鍵字允許規(guī)則編寫者指定警報的哪一側(cè)是攻擊的目標(biāo)。如果指定,則會增強警報事件以包含有關(guān)源和目標(biāo)的信息。

格式為:

target:[src_ip|dest_ip]

如果值為src_ip,則生成的事件中的源IP(JSON中的src_ip字段)是攻擊的目標(biāo)。如果target設(shè)置為dest_ip,則目標(biāo)是生成的事件中的目標(biāo)IP。

5.IP 關(guān)鍵字

5.1 ttl

ttl關(guān)鍵字用于檢查數(shù)據(jù)包標(biāo)頭中的特定IP生存時間值。

格式為:ttl:<number>.

在ttl關(guān)鍵字的末尾,您可以輸入要匹配的值。生存時間值確定數(shù)據(jù)包在Internet系統(tǒng)中的最長時間。如果此字段設(shè)置為0,則必須銷毀數(shù)據(jù)包。生存時間基于跳數(shù)。數(shù)據(jù)包通過的每個跳/路由器減去一個數(shù)據(jù)包TTL計數(shù)器。此機制的目的是限制數(shù)據(jù)包的存在,以便數(shù)據(jù)包不會在無限路由循環(huán)中結(jié)束。

5.2?ipopts?

使用ipopts關(guān)鍵字,您可以檢查是否設(shè)置了特定的IP選項。Ipopts必須在規(guī)則的開頭使用。每條規(guī)則只能匹配一個選項。有幾個選項可以匹配。這些是:

圖七

5.3??sameip?

每個數(shù)據(jù)包都有一個源IP地址和一個目標(biāo)IP地址。源IP可以與目標(biāo)IP相同。使用sameip關(guān)鍵字,您可以檢查源的IP地址是否與目標(biāo)的IP地址相同。sameip關(guān)鍵字的格式為:sameip;

5.4?ip_proto?

使用ip_proto關(guān)鍵字,您可以匹配數(shù)據(jù)包標(biāo)頭中的IP協(xié)議。您可以使用協(xié)議的名稱或編號。例如,您可以匹配以下協(xié)議:

圖八

5.5 ID?

使用id關(guān)鍵字,您可以匹配特定的IP ID值。ID標(biāo)識主機發(fā)送的每個數(shù)據(jù)包,并且通常與正在發(fā)送的每個數(shù)據(jù)包一起遞增。IP ID用作片段標(biāo)識號。每個數(shù)據(jù)包都有一個IP ID,當(dāng)數(shù)據(jù)包被分段時,該數(shù)據(jù)包的所有片段都具有相同的ID。以這種方式,分組的接收器知道哪些片段屬于同一分組。(IP ID不處理順序,在這種情況下使用偏移。它闡明了片段的順序。)

id:<number>;

5.6 geoip

geoip關(guān)鍵字使您(您)能夠匹配網(wǎng)絡(luò)流量的源,目標(biāo)或源和目標(biāo)IP地址,并查看它所屬的國家/地區(qū)。為了能夠做到這一點,Suricata使用Maxmind的GeoIP API。

geoip的語法:

圖九

因此,您可以看到您可以使用以下內(nèi)容來明確您希望匹配的方向:

圖十

該關(guān)鍵字僅支持IPv4。因為它使用Maxmind的GeoIP API,所以必須編譯libgeoip。

5.7?fragbits (IP碎片)

使用fragbits關(guān)鍵字,可以檢查IP頭中是否設(shè)置了分段和保留位。fragbits關(guān)鍵字應(yīng)放在規(guī)則的開頭。Fragbits用于修改碎片機制。在將消息從一個Internet模塊路由到另一個Internet模塊期間,可能發(fā)生分組大于網(wǎng)絡(luò)可以處理的最大分組大小。在這種情況下,可以分段發(fā)送數(shù)據(jù)包。數(shù)據(jù)包大小的最大值稱為最大傳輸單位(MTU)。您可以匹配以下位:

圖11

可以使用以下修飾符更多地指定匹配此位:

圖12

格式:fragbits:[*+!]<[MDR]>;

5.8?fragoffset?

使用fragoffset關(guān)鍵字,您可以匹配IP片段偏移字段的特定十進(jìn)制值。如果要檢查會話的第一個片段,則必須將fragoffset 0與More Fragment選項組合在一起。碎片偏移字段便于重組。id用于確定哪些片段屬于哪個分組,并且片段偏移字段闡明片段的順序。您可以使用以下修飾符:

圖13

fragoffset的格式:

????????????????fragoffset:[!|<|>]<number>;

5.9?TOS?

tos關(guān)鍵字可以匹配IP頭TOS字段的特定十進(jìn)制值。tos關(guān)鍵字的值可以是0到255,IP頭的這個字段已由rfc2474更新,?以包含差異化服務(wù)的功能?。格式:

tos:[!]<number>;

6.TCP 關(guān)鍵字

6.1 SEQ?

可以在簽名中使用seq關(guān)鍵字來檢查特定的TCP序列號。序列號是TCP連接的兩個端點實際上隨機生成的數(shù)字??蛻舳撕头?wù)器都創(chuàng)建一個序列號,它隨著它們發(fā)送的每個字節(jié)的增加而增加。所以這個序列號對于雙方都是不同的。該序列號必須由連接的雙方確認(rèn)。通過序列號,TCP處理確認(rèn),命令和重傳。它的數(shù)量隨著發(fā)送方發(fā)送的每個數(shù)據(jù)字節(jié)而增加。seq有助于跟蹤字節(jié)所屬的數(shù)據(jù)流中的位置。如果SYN標(biāo)志設(shè)置為1,則數(shù)據(jù)的第一個字節(jié)的序列號是該數(shù)字加1(因此,2)。

6.2 ACK

ack是對TCP連接另一端發(fā)送的所有先前(數(shù)據(jù))字節(jié)的接收的確認(rèn)。在大多數(shù)情況下,TCP連接的每個數(shù)據(jù)包在第一個SYN之后都有一個ACK標(biāo)志,而ack-number隨著每個新數(shù)據(jù)字節(jié)的接收而增加??梢栽诤灻惺褂胊ck關(guān)鍵字來檢查特定的TCP確認(rèn)號。

6.3?window(窗口)

window關(guān)鍵字用于檢查特定的TCP窗口大小。TCP窗口大小是一種控制數(shù)據(jù)流的機制。窗口由接收器設(shè)置(接收器通告的窗口大?。?,并指示可以接收的字節(jié)數(shù)。在發(fā)送方可以發(fā)送相同數(shù)量的新數(shù)據(jù)之前,接收方必須首先確認(rèn)此數(shù)據(jù)量。該機制用于防止接收器被數(shù)據(jù)溢出。窗口大小的值是有限的,可以是2到65.535字節(jié)。要更多地利用帶寬,您可以使用更大的TCP窗口。window關(guān)鍵字的格式:

window:[!]<number>;

7.ICMP 關(guān)鍵字

ICMP(Internet控制消息協(xié)議)是IP的一部分。在提供數(shù)據(jù)(數(shù)據(jù)報)方面,IP本身并不可靠。ICMP在出現(xiàn)問題時提供反饋。它不會阻止問題的發(fā)生,但有助于理解出錯的地方和地點。如果需要可靠性,使用IP的協(xié)議必須自己處理可靠性。在不同的情況下,將發(fā)送ICMP消息。例如,當(dāng)目的地不可達(dá)時,如果沒有足夠的緩沖容量來轉(zhuǎn)發(fā)數(shù)據(jù),或者當(dāng)數(shù)據(jù)報不應(yīng)該被分段時,等等??梢栽诎㈩愋偷牧斜碇姓业礁鄡?nèi)容。ICMP消息有四個重要內(nèi)容,可以與相應(yīng)的ICMP關(guān)鍵字匹配。它們是:消息的類型,代碼,id和序列。

7.1? ITYPE?

itype關(guān)鍵字用于匹配特定的ICMP類型(數(shù)字)。ICMP有幾種消息,并使用代碼來澄清這些消息。不同的消息由不同的名稱區(qū)分,但更重要的是數(shù)值。有關(guān)更多信息,請參閱包含消息類型和代碼的表。

itype關(guān)鍵字的格式:

????????itype:min<>max;

????????itype:[<|>]<number>;

如查找大于10的ICMP類型:

itype:>10

以下列出了ICMP類型

圖14

7.2?ICODE

使用icode關(guān)鍵字,您可以匹配特定的ICMP代碼。ICMP消息的代碼闡明了該消息。與ICMP類型一起,它表明您正在處理什么樣的問題。代碼與每種ICMP類型具有不同的用途。icode關(guān)鍵字的格式:

icode:min<>max;

icode:[<|>]<number>;

示例:此示例查找大于5的ICMP代碼:icode:>5;

以下列出了所有ICMP類型的含義。如果未列出代碼,則僅在上表中定義類型0并具有ICMP代碼的含義。最新的表格可以在IANA的網(wǎng)站上找到

圖15

7.3 icmp_id

使用icmp_id關(guān)鍵字,您可以匹配特定的ICMP id值。每個ICMP數(shù)據(jù)包在發(fā)送時都會獲得一個id。在接收方收到數(shù)據(jù)包時,它將使用相同的ID發(fā)送回復(fù),以便發(fā)送方識別它并將其與正確的ICMP請求連接。icmp_id關(guān)鍵字的格式:

????????icmp_id:<number>;?

7.4?icmp_seq?

您可以使用icmp_seq關(guān)鍵字檢查ICMP序列號。ICMP消息都有序列號。這可以用于(與id一起)用于檢查哪個回復(fù)消息屬于哪個請求消息.icmp_seq關(guān)鍵字的格式:

icmp_seq:<number>;

8.Payload關(guān)鍵字

Payload關(guān)鍵字檢查數(shù)據(jù)包或流的有效負(fù)載的內(nèi)容。

8.1 content(內(nèi)容)

content關(guān)鍵字在簽名中非常重要。在引號之間,您可以寫下您希望簽名匹配的內(nèi)容。最簡單的內(nèi)容格式是:

content: ”............”;

可以在簽名中使用多個內(nèi)容。內(nèi)容匹配字節(jié)。一個字節(jié)有256個不同的值(0-255)。你可以匹配所有角色;?從a到z,大寫和小寫以及所有特殊標(biāo)志。但并非所有字節(jié)都是可打印字符。對于這些字節(jié),使用十六進(jìn)制表示法。許多編程語言使用0x00作為表示法,其中0x表示它涉及二進(jìn)制值,但規(guī)則語言?|00|用作表示法。這種表示法也可用于可打印字符。如:

圖16

您無法在內(nèi)容中使用的字符因為它們在簽名中已經(jīng)很重要。要匹配這些字符,您應(yīng)該使用十六進(jìn)制表示法。這些是:

圖17

將大寫符號寫成大寫字符是一種慣例

要http://在簽名的內(nèi)容中編寫,您應(yīng)該這樣寫:如果在簽名中使用十六進(jìn)制表示法,請確保始終將其放在管道之間。否則,表示法將作為內(nèi)容的一部分。content:?“http|3A|//”;幾個例子:

圖18

可以讓簽名檢查整個有效載荷以與內(nèi)容匹配,或者讓它檢查有效載荷的特定部分。如果您沒有為簽名添加任何特殊內(nèi)容,它將嘗試在有效內(nèi)容的所有字節(jié)中找到匹配項。默認(rèn)情況下,模式匹配區(qū)分大小寫。內(nèi)容必須準(zhǔn)確,否則不會匹配。

舉例:

圖19

content:!”Firefox/3.6.13”;。這意味著如果使用的Firefox版本不是3.6.13,則會生成警報。

8.2?nocase(不關(guān)心大小寫)

如果您不想?yún)^(qū)分大寫和小寫字符,可以使用nocase。關(guān)鍵字nocase是內(nèi)容修飾符.此關(guān)鍵字的格式為:nocase;您必須將其放在要修改的內(nèi)容之后,例如:

content: “abc”; nocase;它對簽名中的其他內(nèi)容沒有影響。

8.3?depth(深度)

depth關(guān)鍵字是絕對內(nèi)容修飾符。它來自內(nèi)容。深度內(nèi)容修飾符帶有必需的數(shù)值,如:depth:12;深度后的數(shù)字表示將檢查有效負(fù)載開頭的字節(jié)數(shù)。

8.4?startswith

該startswith關(guān)鍵字類似depth。它不需要參數(shù),必須遵循content關(guān)鍵字。它修改了content在緩沖區(qū)的開頭準(zhǔn)確匹配。如:content:"GET|20|";startswith;

startswith?是一個簡寫符號:

content:"GET|20|";depth:4;offset:0;

startswith不能與被混合depth,offset,within或?distance為相同的圖案。

8.5 offset?(偏移)

offset關(guān)鍵字指定將檢查有效負(fù)載中的哪個字節(jié)以查找匹配。例如offset:3;?檢查第四個字節(jié)并進(jìn)一步。關(guān)鍵字偏移和深度可以組合并且通常一起使用。

如: content:“def”; offset:3; depth:3;

它將檢查從第三個字節(jié)到第六個字節(jié)的有效載荷。

8.6 (distance )距離

關(guān)鍵字distance是相對內(nèi)容修飾符。這意味著它表示此content?關(guān)鍵字與其前面的內(nèi)容之間的關(guān)系。距離在前一次匹配后有影響。關(guān)鍵字distance帶有必填數(shù)值。給出距離的值確定有效載荷中的字節(jié),從中檢查相對于前一個匹配的匹配項。距離僅確定Suricata將開始尋找模式的位置。所以,distance:5;?表示模式可以是前一個匹配后的任何位置+5個字節(jié)。要限制Suricata最后一次匹配后的距離,請使用“within”。

如:

圖20

距離也可以是負(fù)數(shù)。它可用于檢查部分相同內(nèi)容(參見示例)的匹配項,或者甚至完全位于其之前的內(nèi)容。但這并不經(jīng)常使用。與其他關(guān)鍵字可以獲得相同的結(jié)果。

8.7?within

關(guān)鍵字within?是相對于前一個匹配。其中的關(guān)鍵字帶有必填數(shù)值。使用within確保只有當(dāng)內(nèi)容與設(shè)置的字節(jié)數(shù)內(nèi)的有效負(fù)載匹配時才會有匹配。within?不能為0(零).

圖21

如前所述,距離和內(nèi)部可以很好地組合在一個簽名中。如果您希望Suricata檢查有效負(fù)載的特定部分以進(jìn)行匹配,請在內(nèi)部使用。

圖22

8.8?isdataat

isdataat關(guān)鍵字的目的是查看有效負(fù)載的特定部分是否仍有數(shù)據(jù)。關(guān)鍵字以數(shù)字(位置)開頭,然后是可選的,后跟“relative”,用逗號和選項rawbytes分隔。您可以使用“relative”一詞來了解有效負(fù)載的特定部分是否仍有相對于上一次匹配的數(shù)據(jù)。

如:

isdataat:512;

isdataat:50,relative;

第一個例子說明了一個簽名,它搜索有效載荷的字節(jié)512。第二個例子說明了在最后一次匹配之后搜索字節(jié)50的簽名。

您也可以在isdataat之前使用否定(?。?/p>

圖23

8.9 dsize

使用dsize關(guān)鍵字,您可以匹配數(shù)據(jù)包有效負(fù)載的大小。例如,您可以使用關(guān)鍵字來查找有效負(fù)載的異常大小。這在檢測緩沖區(qū)溢出時可能很方便。格式:

dsize:<number>;

8.10?rpc

rpc關(guān)鍵字可用于在RPC過程編號和RPC版本的SUNRPC CALL中進(jìn)行匹配。您可以使用通過*定義的通配符修改關(guān)鍵字。使用此通配符,您可以匹配所有版本和/或程序編號。RPC(遠(yuǎn)程過程調(diào)用)是一種允許計算機程序在另一臺計算機(或地址空間)上執(zhí)行過程的應(yīng)用程序。它用于進(jìn)程間通信。請參見?http://en.wikipedia.org/wiki/Inter-process_communication

格式:

????rpc:<applicationnumber>,[<versionnumber>|*],[<procedurenumber>|*]>;

8.11?replace(IPS模式)

替換內(nèi)容修飾符只能在ips中使用。它調(diào)整網(wǎng)絡(luò)流量。它將其后面的內(nèi)容('abc')更改為另一個('def'),參見示例:

圖24

替換修飾符必須包含與其替換的內(nèi)容一樣多的字符。它只能用于單個數(shù)據(jù)包。它不適用于HTTP uri等規(guī)范化緩沖區(qū)或重組流中的內(nèi)容匹配。

校驗和將由Suricata重新計算,并在使用replace關(guān)鍵字后更改。

8.12pcre(Perl兼容正則表達(dá)式)

關(guān)鍵字pcre與正則表達(dá)式上的特定匹配。有關(guān)正則表達(dá)式的更多信息,請訪問http://en.wikipedia.org/wiki/Regular_expression。

pcre的復(fù)雜性雖然價格很高,但它對性能有負(fù)面影響。因此,為了減輕Suricata不得不經(jīng)常檢查pcre,pcre主要與'content'相結(jié)合。在這種情況下,在檢查pcre之前,內(nèi)容必須先匹配。pcre的格式:pcre:"/<regex>/opts";

有一些pcre的特性可以修改:

默認(rèn)情況下,pcre區(qū)分大小寫。

.(點)是正則表達(dá)式的一部分。它匹配除換行符之外的每個字節(jié)。

默認(rèn)情況下,有效負(fù)載將被檢查為一行。

可以使用以下字符修改這些質(zhì)量:

圖25

這些選項是perl兼容修飾符。要使用這些修飾符,您應(yīng)該將它們添加到正則表達(dá)式后面的pcre。像這樣:

????pcre: “/<regex>/i”;

有一些pcre兼容的改性劑也可以改變pcre的質(zhì)量。這些是:

A:模式必須在緩沖區(qū)的開頭匹配。(在pcre ^中類似于A.)

E:忽略緩沖區(qū)/有效負(fù)載末尾的換行符。

G:顛倒貪婪。

8.12.1?Suricata的修飾符

Suricata有自己特定的pcre修飾符。這些是:

R:匹配相對于最后一個模式匹配。它類似于距離:0;

U:使標(biāo)準(zhǔn)化的uri上的pcre匹配。它與uri_buffer匹配就像uricontent一樣,內(nèi)容與http_uri.U結(jié)合可以與/ R結(jié)合使用。請注意,R是相對于前一個匹配的,因此兩個匹配必須位于HTTP-uri緩沖區(qū)中。閱讀有關(guān)HTTP URI規(guī)范化的更多信息。

圖26

I:在HTTP-raw-uri上進(jìn)行pcre匹配。它與http_raw_uri匹配在同一個緩沖區(qū)中。我可以和/ R結(jié)合使用。請注意,R是相對于前一個匹配的,因此兩個匹配必須位于HTTP-raw-uri緩沖區(qū)中。閱讀有關(guān)HTTP URI規(guī)范化的更多信息。

P:在HTTP-request-body上進(jìn)行pcre匹配。因此,它在與http_client_body相同的緩沖區(qū)上匹配。P可以與/ R組合。請注意,R是相對于前一個匹配的,因此兩個匹配必須位于HTTP請求主體中。

Q:在HTTP響應(yīng)主體上進(jìn)行pcre匹配。因此,它在與http_server_body相同的緩沖區(qū)上匹配。Q可與/ R組合使用。請注意,R是相對于前一個匹配的,因此兩個匹配必須位于HTTP響應(yīng)主體中。

H:在HTTP標(biāo)頭上進(jìn)行pcre匹配。H可以與/ R組合。請注意,R是相對于前一個匹配的,因此兩個匹配必須位于HTTP標(biāo)頭正文中。

D:使非標(biāo)準(zhǔn)化標(biāo)題上的pcre匹配。因此,它在與http_raw_header相同的緩沖區(qū)上匹配。D可以與/ R組合。請注意,R是相對于前一個匹配的,因此兩個匹配必須位于HTTP-raw-header中。

M:使請求方法上的pcre匹配。因此,它在與http_method相同的緩沖區(qū)上匹配。M可以與/ R組合。請注意,R與前一個匹配項相關(guān),因此兩個匹配項必須位于HTTP方法緩沖區(qū)中。

C:在HTTP-cookie上進(jìn)行pcre匹配。因此,它與http_cookie在同一個緩沖區(qū)上匹配。C可以與/ R組合。請注意,R與前一個匹配項相關(guān),因此兩個匹配項必須位于HTTP-cookie緩沖區(qū)中。

S:使HTTP-stat-code上的pcre匹配。因此,它在與http_stat_code相同的緩沖區(qū)上匹配。S可與/ R組合使用。請注意,R是相對于前一個匹配的,因此兩個匹配必須位于HTTP-stat-code緩沖區(qū)中。

Y:使HTTP-stat-msg上的pcre匹配。因此,它在與http_stat_msg相同的緩沖區(qū)上匹配。Y可以與/ R組合。請注意,R是相對于前一個匹配的,因此兩個匹配必須位于HTTP-stat-msg緩沖區(qū)中。

B:您可以在簽名中遇到B,但這只是為了兼容性。因此,Suricata不使用B但支持它,因此它不會導(dǎo)致錯誤。

O:覆蓋配置pcre匹配限制。

V:在HTTP-User-Agent上進(jìn)行pcre匹配。因此,它在與http_user_agent相同的緩沖區(qū)上匹配。V可以與/ R組合。請注意,R與前一個匹配項相關(guān),因此兩個匹配項必須位于HTTP-User-Agent緩沖區(qū)中。

W:在HTTP主機上進(jìn)行pcre匹配。因此,它在與http_host相同的緩沖區(qū)上匹配。W可與/ R組合使用。請注意,R與前一個匹配項相關(guān),因此兩個匹配項必須位于HTTP-Host緩沖區(qū)中。


9.轉(zhuǎn)換

轉(zhuǎn)換關(guān)鍵字將粘性緩沖區(qū)中的數(shù)據(jù)轉(zhuǎn)換為其他內(nèi)容。例:

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

即使在navigate和(之間有一個或多個空格,此示例也會匹配流量。變換可以鏈接。它們按照它們在規(guī)則中出現(xiàn)的順序進(jìn)行處理。每個轉(zhuǎn)換輸出都充當(dāng)下一個輸出的輸入。

9.1??strip_whitespace

剝離isspace()C中調(diào)用所考慮的所有空格,如:

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

9.2?compress_whitespace

將所有連續(xù)的空格壓縮到單個空間中.

9.3?to_sha256

獲取緩沖區(qū),計算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;)

注意:取決于libnss被編譯到Suricata中。


10.預(yù)過濾關(guān)鍵字

10.1?fast_pattern?

10.1.1?Suricata快速模式確定解釋

如果在規(guī)則中明確設(shè)置了'fast_pattern'關(guān)鍵字,Suricata將使用它作為快速模式匹配。'fast_pattern'關(guān)鍵字只能按規(guī)則設(shè)置一次。如果未設(shè)置“fast_pattern”,Suricata會自動確定要用作快速模式匹配的內(nèi)容。以下說明Suricata用于自動確定要使用的快速模式匹配的邏輯。(請注意,如果存在正(即非否定)內(nèi)容匹配,則忽略否定內(nèi)容匹配以進(jìn)行快速模式確定。否則,考慮否定的內(nèi)容匹配)

fast_pattern選擇標(biāo)準(zhǔn)如下:

1.Suricata首先識別簽名中使用的具有最高“優(yōu)先級”的所有內(nèi)容匹配。優(yōu)先級基于匹配的緩沖區(qū),通常“http_ *”緩沖區(qū)具有更高的優(yōu)先級(較低的數(shù)字是較高的優(yōu)先級)。有關(guān)哪些緩沖區(qū)具有優(yōu)先級的詳細(xì)信息,請參見?附錄B.

2.在步驟1中識別的內(nèi)容匹配(最高優(yōu)先級內(nèi)容匹配)內(nèi),最長(就字符/字節(jié)長度而言)內(nèi)容匹配被用作快速模式匹配。

3.如果多個內(nèi)容匹配具有相同的最高優(yōu)先級并且有資格獲得最長長度,則具有最高字符/字節(jié)多樣性分?jǐn)?shù)(“模式強度”)的那個匹配用作快速模式匹配。有關(guān)用于確定圖案強度的算法的詳細(xì)信息,請參閱附錄C.

4.如果多個內(nèi)容匹配具有相同的最高優(yōu)先級,符合最長長度和相同的最高模式強度,則最后注冊的緩沖區(qū)(“l(fā)ist_id”)用作快速模式匹配。有關(guān)不同緩沖區(qū)/列表的注冊順序,請參閱附錄B.

5.如果多個內(nèi)容匹配具有相同的最高優(yōu)先級,則有資格獲得最長的長度,相同的最高模式強度,并且具有相同的list_id(即查看相同的緩沖區(qū)),然后是首先出現(xiàn)的(從左到右) )在規(guī)則中用作快速模式匹配。

值得注意的是,對于具有相同優(yōu)先級,長度和模式強度的內(nèi)容匹配,'http_stat_msg','http_stat_code'和'http_method'優(yōu)先于常規(guī)'內(nèi)容'匹配。

10.1.2?附錄

附錄A - Suricata 1.3.4的緩沖區(qū),list_id值和注冊順序.對于Suricata 1.1.x - 1.4.x,這應(yīng)該基本相同.

圖27

附錄B - Suricata 2.0.7的緩沖區(qū),list_id值,優(yōu)先級和注冊順序

對于Suricata 2.0.x,這應(yīng)該基本相同。


附錄C
- 模式強度算法

圖29

來自detect-engine-mpm.c。基本上,模式強度“得分”從零開始,從左到右查看傳入的字節(jié)數(shù)組中的每個字符/字節(jié)。如果之前在數(shù)組中沒有看到字符/字節(jié),如果它是一個字母字符,它會為分?jǐn)?shù)增加3;?否則,如果它是可打印字符0x00,0x01或0xFF,它會為分?jǐn)?shù)增加4;?否則它會增加6分。如果在分?jǐn)?shù)加1之前已經(jīng)看到字符/字節(jié)。最終得分返回。


在多模式匹配器(MPM)中僅使用一個簽名內(nèi)容。如果有多個內(nèi)容,則Suricata使用“最強”的內(nèi)容。這意味著長度的組合,內(nèi)容的變化程度以及它所處的緩沖區(qū)。通常,越長越好,越多越好。有時,簽名作者得出結(jié)論,他希望Suricata使用其他內(nèi)容,而不是默認(rèn)使用。例如:

User-agent: Mozilla/5.0 Badness;

content:”User-Agent|3A|”;

content:”Badness”; distance:0;

在此示例中,您會看到第一個內(nèi)容比第二個內(nèi)容更長且更多,因此您知道Suricata將使用此內(nèi)容作為MPM。由于“User-Agent:”會經(jīng)常匹配,并且“Badness”在網(wǎng)絡(luò)流量中顯得較少,因此您可以使用“fast_pattern”使Suricata使用第二個內(nèi)容。

content:”User-Agent|3A|”;

content:”Badness”; distance:0; fast_pattern;

10.1.1? fast_pattern:only

有時簽名只包含一個內(nèi)容。在這種情況下,沒有必要Suricata將在MPM中找到匹配后進(jìn)一步檢查。如果只有一個內(nèi)容,則整個簽名匹配。Suricata會自動注意到這一點。在某些簽名中,仍然用'fast_pattern:only;'表示。雖然Suricata不需要fast_pattern:但它確實支持它。

10.1.2??fast_pattern:’chop’

如果您不希望MPM使用整個內(nèi)容,可以使用fast_pattern'chop'。例如:

content: “aaaaaaaaabc”; fast_pattern:8,4;

這樣,MPM僅使用最后四個字符

10.2 prefilter

可以使用'prefilter'關(guān)鍵字在特定規(guī)則中啟用其他非MPM關(guān)鍵字的預(yù)過濾器引擎。在以下規(guī)則中,TTL測試將用于預(yù)過濾而不是單字節(jié)模式:

alert ip any any->any any(ttl:123;prefilter;content:"a";sid:1;)

有關(guān)如何配置預(yù)濾器引擎的更多信息,請參閱預(yù)濾器引擎


11 .流關(guān)鍵字

11.1?flowbits

Flowbits由兩部分組成。第一部分描述了它將要執(zhí)行的操作,第二部分是flowbit的名稱。有多個數(shù)據(jù)包屬于一個流。Suricata將這些流量保留在內(nèi)存中。欲了解更多信息,請參閱 流和流處理。Flowbits可以確保在例如兩個不同的數(shù)據(jù)包匹配時生成警報。只有兩個數(shù)據(jù)包匹配時才會生成警報。因此,當(dāng)?shù)诙€數(shù)據(jù)包匹配時,Suricata必須知道第一個數(shù)據(jù)包是否也匹配。如果數(shù)據(jù)包匹配,F(xiàn)lowbits標(biāo)記流程,因此Suricata'知道'它應(yīng)該在第二個數(shù)據(jù)包匹配時生成警報。

Flowbits有不同的動作。這些是:

flowbits:set,name

????????????將在流程中設(shè)置條件/'名稱'(如果存在)。

flowbits:isset,name

????????????可以在規(guī)則中使用,以確保在規(guī)則匹配并在流中設(shè)置條件時生成警報。

flowbits:toggle,name

????????????反轉(zhuǎn)當(dāng)前設(shè)置。因此,例如,如果設(shè)置了條件,則將取消設(shè)置,反之亦然。

flowbits:unset,name

????????????可用于取消流程中的條件。

flowbits:isnotset,name

????????????可以在規(guī)則中使用,以確保它在匹配時生成警報,并且未在流中設(shè)置條件。

flowbits:noalert

????????????此規(guī)則不會生成警報。

如:

圖30

當(dāng)您查看第一個規(guī)則時,您將注意到它會生成一個警報,如果它匹配,如果它不是該規(guī)則末尾的'flowbits:noalert'。此規(guī)則的目的是檢查“userlogin”上的匹配項并在流中標(biāo)記該匹配項。因此,無需生成警報。沒有第一條規(guī)則,第二條規(guī)則無效。如果第一個規(guī)則匹配,則flowbits將該特定條件設(shè)置為存在于流中?,F(xiàn)在使用第二個規(guī)則可以檢查先前的數(shù)據(jù)包是否滿足第一個條件。如果此時第二個規(guī)則匹配,則會生成警報。

11.2?flow

flow關(guān)鍵字可用于匹配流的方向,因此可以to/from客戶端或to/from服務(wù)器進(jìn)行匹配。如果流程建立與否,它也可以匹配。flow關(guān)鍵字也可用于表示簽名必須僅在流上(only_stream)或僅在數(shù)據(jù)包上匹配(no_stream)。

因此,使用flow關(guān)鍵字,您可以匹配:

to_client

????????????匹配從服務(wù)器到客戶端的數(shù)據(jù)包。

to_server

????????????匹配從客戶端到服務(wù)器的數(shù)據(jù)包。

from_client

????????????匹配從客戶端到服務(wù)器的數(shù)據(jù)包(與to_server相同)。

from_server

????????????匹配從服務(wù)器到客戶端的數(shù)據(jù)包(與to_client相同)。

established

????????????匹配已建立的連接。

not_established

????????????匹配不屬于已建立連接的數(shù)據(jù)包。

stateless

????????????匹配已建立連接且不屬于已建立連接的數(shù)據(jù)包。

only_stream

????????????匹配由流引擎重新組裝的數(shù)據(jù)包。

no_stream

????????????匹配尚未由流引擎重組的數(shù)據(jù)包。將不匹配已重新組裝的數(shù)據(jù)包。

only_frag

????????????匹配已從片段重組的數(shù)據(jù)包。

no_frag

????????????匹配尚未從片段重組的數(shù)據(jù)包。

可以組合多個流選項,例如:

圖31

確定的標(biāo)準(zhǔn)取決于協(xié)議:

對于TCP,將在三次握手之后建立連接:

圖32

對于其他協(xié)議(例如UDP),在看到來自連接兩邊的流量后,將認(rèn)為建立了連接。

圖33

11.3?flowint

Flowint允許使用變量進(jìn)行存儲和數(shù)學(xué)運算。它的運行方式與flowbits非常相似,但增加了數(shù)學(xué)功能,并且可以存儲和操作整數(shù),而不僅僅是標(biāo)志集。我們可以將它用于許多非常有用的事情,例如計算出現(xiàn)次數(shù),添加或減去出現(xiàn)次數(shù),或者在流中對多個因子進(jìn)行閾值處理。這將很快擴展到全局上下文,因此用戶可以在流之間執(zhí)行這些操作。

語法如下:

flowint:name,modifier[,value];

定義var(不是必需的),或檢查是否設(shè)置了一個:

flowint:name,<+,-,=,>,<,>=,<=,==,!=>,value;

flowint:name,(isset|isnotset);

比較或改變變量。加,減,比較大于或小于,大于或等于,小于或等于可用。要比較的項目可以是整數(shù)或其他變量。

例如,如果您想要計算在特定流中看到用戶名的次數(shù),并警告它是否超過5。

alert tcp any any->any any(msg:"Counting Usernames";content:"jonkman";\flowint:usernamecount,+,1;noalert;)這將計算每次出現(xiàn)并增加var usernamecount,而不為每個出現(xiàn)警報。現(xiàn)在說如果流中有超過五個匹配,我們想要生成警報:alert tcp any any->any any(msg:"More than Five Usernames!";content:"jonkman";\flowint:usernamecount,+,1;flowint:usernamecount,>,5;)因此,只有當(dāng)usernamecount超過五個時,我們才會收到提醒.所以現(xiàn)在讓我們說我們想要獲得如上所述的警報,但不是如果有更多的用戶名注銷。假設(shè)此特定協(xié)議表示使用“jonkman logout”注銷,請嘗試:alert? tcp? any? any->any? any(msg:"Username Logged out";content:"logout jonkman";\flowint:usernamecount,-,1;flowint:usernamecount,>,5;)所以現(xiàn)在,如果此特定用戶名的活動登錄數(shù)超過五個,我們將僅收到警報.這是一個相當(dāng)簡單的例子,但我相信它顯示了這樣一個簡單的函數(shù)可以為規(guī)則編寫做些什么的力量。我在登錄跟蹤,IRC狀態(tài)機,惡意軟件跟蹤和暴力登錄檢測等方面看到了很多應(yīng)用程序。

假設(shè)我們正在跟蹤一個通常允許每個連接有五次登錄失敗的協(xié)議,但是我們有一個漏洞,攻擊者可以在五次嘗試之后繼續(xù)登錄,我們需要了解它。alert tcp an yany->any any(msg:"Start a login count";content:"login failed";\flowint:loginfail,notset;flowint:loginfail,=,1;noalert;)因此,如果變量尚未設(shè)置,我們會檢測到初始失敗,如果是,則將其設(shè)置為1。我們的第一擊。

alert tcp any any->any any(msg:"Counting Logins";content:"login failed";\flowint:loginfail,isset;flowint:loginfail,+,1;noalert;)

如果已設(shè)置,我們現(xiàn)在正在遞增計數(shù)器。

alert tcp any any->any any(msg:"More than Five login fails in a Stream";\content:"login failed";flowint:loginfail,isset;flowint:loginfail,>,5;)

現(xiàn)在,如果我們在同一個流中交叉五次登錄失敗,我們將生成警報。

但是,我們還要說,如果有兩次成功登錄并且之后登錄失敗,我們也需要提醒。

alert tcp any any->any any(msg:"Counting Good Logins";\content:"login successful";flowint:loginsuccess,+,1;noalert;)

在這里,我們計算好登錄,所以現(xiàn)在我們將計算與失敗相關(guān)的良好登錄:

alert tcp any any->any any(msg:"Login fail after two successes";\content:"login failed";flowint:loginsuccess,isset;\flowint:loginsuccess,=,2;)

11.4?stream_size?

流大小選項根據(jù)注冊的字節(jié)數(shù)按序列號匹配流量。此關(guān)鍵字有幾個修飾符

圖34

格式:

stream_size:<server|client|both|either>,<modifier>,<number>;

規(guī)則中stream-size關(guān)鍵字的示例:

alert tcp any any->any any(stream_size:both,>,5000;sid:1;)

12 . bypass關(guān)鍵字

Suricata有一個bypass關(guān)鍵字,可用于簽名,以排除進(jìn)一步評估的流量。該bypass關(guān)鍵字在預(yù)期流量較大的情況下非常有用(例如Netflix,Spotify,Youtube).該bypass關(guān)鍵字被視為匹配后關(guān)鍵字.如:在匹配的http流量上繞過流量:

alert http any any->any any(content:"suricata-ids.org";\http_host;bypass;sid:10001;rev:1;)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容