Suricata 規(guī)則編寫(xiě)1-規(guī)則的結(jié)構(gòu)[轉(zhuǎn)]

轉(zhuǎn)自:http://xiaix.me/suricata-gui-ze-bian-xie-1-gui-ze-de-jie-gou/

1.簡(jiǎn)介

Suricata 是一款高性能的網(wǎng)絡(luò)IDS、IPS和網(wǎng)絡(luò)安全監(jiān)控引擎。
最著名的 IDS/IPS 是 Snort,那為什么我們還要用 Suricata 呢?
最主要的原因是 Snort 只支持單線程,而 Suricata 支持多線程,另外 Suricata 內(nèi)置支持 IPv6,并且支持現(xiàn)有的 Snort 規(guī)則和簽名。

2. Suricata 規(guī)則

一條 Suricata 規(guī)則由三個(gè)部分組成:

  • 操作(Action)
  • 頭部(Header)
  • 規(guī)則(Rule options)
image.png

2.1 操作(Action)

Action 顧名思義就是在匹配規(guī)則到時(shí)進(jìn)行什么樣的操作,其總共有四種可選的值,分別為:Pass,Drop,Reject 和 Alert。

Pass

如果匹配到了規(guī)則,則 Suricata 停止掃描數(shù)據(jù)包并跳過(guò)當(dāng)前所有規(guī)則(指的是當(dāng)前規(guī)則包內(nèi)的所有規(guī)則)。

Drop

這個(gè)值只能在 IPS/inline 模式下才可使用。
如果匹配到了規(guī)則,則 Suricata 也會(huì)立馬停止掃描數(shù)據(jù)包并將當(dāng)前數(shù)據(jù)包丟棄。

Reject
不同于 Drop 直接丟棄數(shù)據(jù)包,Reject 在匹配到規(guī)則時(shí)會(huì)主動(dòng)進(jìn)行拒絕數(shù)據(jù)包。當(dāng)數(shù)據(jù)包為 TCP 時(shí),會(huì)返回一個(gè) RST 數(shù)據(jù)包重置連接;為其他數(shù)據(jù)包時(shí),則會(huì)返回一個(gè) ICMP-error 數(shù)據(jù)包。
在拒絕了連接后 Suricata 也會(huì)產(chǎn)生相應(yīng)的警報(bào)。
這個(gè)我理解也是在IPS下才有。

Alert

當(dāng)匹配到規(guī)則時(shí),Suricata 不會(huì)對(duì)數(shù)據(jù)包進(jìn)行任何操作,會(huì)像對(duì)正常數(shù)據(jù)包一樣進(jìn)行放行,除了會(huì)記錄一條只有管理員能夠看到的警報(bào)。

以上四種操作也是有優(yōu)先級(jí)的,默認(rèn)的優(yōu)先級(jí)為:Pass > Drop > Reject > Alert。也就是規(guī)則在匹配時(shí)會(huì)優(yōu)先考慮包含 Pass 的規(guī)則,其次才是 Drop,再然后是 Reject,最后在考慮包含 Alert 的規(guī)則。

2.2 頭部

頭部中包含如下幾項(xiàng):

  • 協(xié)議(Protocol)
  • 源/目的地址(Source and destination)
  • 端口號(hào)(Ports)
  • 流向(Direction)

協(xié)議(Protocol)
這個(gè)字段用來(lái)告訴 Suricata 當(dāng)前規(guī)則所包含的協(xié)議。其取值可以為:tcp,udp,icmp,ip,http,ftp,tls(包含ssl),smb,dns等等。如下圖示例中紅色標(biāo)識(shí)所示:
頭部中包含如下幾項(xiàng):

image.png

源/目的地址(Source and destination)

源/目的地址可以設(shè)置為 IP 地址或者在配置文件(Suricata.yaml)里定義的變量,如:$HOME_NET和$EXTERNAL_NET。具體可以設(shè)置如下形式:

! 1.1.1.1 (除了 1.1.1.1 以外的所有 IP)
![1.1.1.1, 1.1.1.2] (除了 1.1.1.1 和 1.1.1.2 以外的所有 IP)
$HOME_NET (配置文件中設(shè)置的 HOME_NET)
[$EXTERNAL_NET, !$HOME_NET] (包含 EXTERNAL_NET 但不含 HOME_NET)
[10.0.0.0/24, !10.0.0.5] (10.0.0.0/24 除了 10.0.0.5)
[…..,[....]]
[…. ,![.....]]

注意:如果配置文件中 $HOME_NET 設(shè)置為 any,而 $EXTERNAL_NET 為 !$HOME_NET,那么這里就不能在使用! $EXTERNAL_NET 了,畢竟沒(méi)有 not any 不是嗎。


image.png

端口號(hào)(Ports)

不同的協(xié)議使用不同的端口號(hào),例如 HTTP 使用 80 端口,而 HTTPS 則使用 443。通常情況下端口號(hào)會(huì)設(shè)置為 any,這樣會(huì)影響所有的協(xié)議。如果有特殊需求可以按照如下方式單獨(dú)設(shè)置端口號(hào):

! 排除
: 范圍
[] 包含
, 分隔符

具體示例如下:

[80, 81, 82] (端口號(hào) 80, 81 和 82)
[80: 82] (范圍 80 到 82)
[1024: ] (從 1024 起到最大端口號(hào))
!80 (除了 80 以外的所有端口號(hào))
[80:100,!99] (從 80 到 100 除了 99 的端口)
[1:80,![2,4]]
[….[.....]]


image.png

流向(Direction)
流向告訴規(guī)則匹配哪些流量數(shù)據(jù),是匹配從外部網(wǎng)絡(luò)進(jìn)來(lái)的,還是匹配從內(nèi)部網(wǎng)絡(luò)出去的,亦或者兩種同時(shí)匹配。其中,每條規(guī)則都必須有一個(gè)向右的箭頭如下所示:

source -> destination
source <> destination (雙向匹配)

alert tcp 1.2.3.4 1024 - > 5.6.7.8 80
本例中,規(guī)則只會(huì)匹配從 1.2.3.4:1024 流向 5.6.7.8:80 的數(shù)據(jù),而對(duì)于相反方向的流量則會(huì)直接放行不進(jìn)行匹配。

image.png

2.3 規(guī)則

規(guī)則的每一條都遵循固定的格式:
name: settings;

注意:Suricata 是依據(jù) ; 來(lái)解析規(guī)則的,所以除了每條關(guān)鍵字末尾處千萬(wàn)別出現(xiàn);,不然解析會(huì)報(bào)錯(cuò),如果正則匹配中要用到記得前面加上轉(zhuǎn)義符。

每條規(guī)則也包含如下設(shè)置:

  • 元信息(meta-information)
  • 頭部(headers)
  • 有效載荷(payloads)
  • 流(flows)
    受篇幅所知,本問(wèn)只介紹元信息部分,余下內(nèi)容后續(xù)文章繼續(xù)講解。

元信息(meta-information)

msg (message)

msg 關(guān)鍵字就是當(dāng)本條規(guī)則匹配中時(shí),顯示在日志中的提示內(nèi)容,格式如下:

msg: “..........”;  

需要特別注意的是,msg 關(guān)鍵字必須為每條規(guī)則的第一個(gè)關(guān)鍵字,也就是說(shuō)必須出現(xiàn)在規(guī)則的最前面。

如下示例所示:

msg:"ATTACK-RESPONSES 403 Forbidden";  
msg:"ET EXPLOIT SMB-DS DCERPC PnP bind attempt";  

Sid (signature id)

表示sid 關(guān)鍵字識(shí)每條規(guī)則的 id,必須位數(shù)字且唯一。示例如下:

sid:2008124;  

Rev (Revision)
rev 關(guān)鍵字標(biāo)識(shí)修訂版本號(hào),每次修改后加一。
需要注意的是,rev 關(guān)鍵字一般要緊隨在 sid 關(guān)鍵字之后,且 sid 和 rev 一般要為規(guī)則最后的關(guān)鍵字,也就是出現(xiàn)在規(guī)則最后的位置,當(dāng)然如果還有 gid 關(guān)鍵字的話,gid 會(huì)在最后面。示例如下:

Gid (group id)

gid 關(guān)鍵字表示每條規(guī)則分組的 id,功能類似與 sid,不過(guò)因?yàn)槭欠纸M的 id,所以值可以重復(fù),另外就是如果不指定的話,默認(rèn)所有規(guī)則的 gid 值都為 1。其實(shí)這個(gè)值也只有在日志中才可能出現(xiàn),如下所示:

Classtype

classtype 關(guān)鍵字表示對(duì)當(dāng)前規(guī)則的分類的情況,這個(gè)關(guān)鍵字一般是在

classification.conf

文件中指定由名稱,描述和優(yōu)先級(jí)組成,它可以用來(lái)顯示當(dāng)前規(guī)則只是一條信息或是遭受了黑客的攻擊。classtype 定義示例如下:

config classification: web-application-attack,Web Application Attack,1  
config classification: not-suspicious,Not Suspicious Traffic,3  

需要注意的是,classtype 關(guān)鍵字需要出現(xiàn)在 sid 和 rev 關(guān)鍵字之前,其他關(guān)鍵字之后。示例如下:


Reference

reference 字段表示當(dāng)前規(guī)則相關(guān)信息所在 url,可以同時(shí)指定多條 url,一般規(guī)則如下:

reference: url, www.info.nl  

但也可以使用其他類型的引用,具體可選類型如下:

bugtraq            http://www.securityfocus.com/bid  
cve                http://cve.mitre.org/cgi-bin/cvename.cgi?name=  
nessus             http://cgi.nessus.org/plugins/dump.php3?id=  
mcafee             http://vil.nai.com/vil/dispVirus.asp?virus_k=  
url                http://  

以 CVE 為例,只需要填入 CVE 號(hào)

CVE-2016-6210

會(huì)自動(dòng)補(bǔ)全為

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-6210

的網(wǎng)址。多條引用示例如下:


Priority

priority 關(guān)鍵字用于指定當(dāng)前規(guī)則的優(yōu)先級(jí),取值范圍從 1 到 255,取值越小優(yōu)先級(jí)越大,但常用值為 1-4。

這個(gè)關(guān)鍵字通常我都不會(huì)添加,因?yàn)槲覀冎乐暗?classtype 關(guān)鍵字已經(jīng)包含有優(yōu)先級(jí)了,規(guī)則會(huì)自動(dòng)繼承這個(gè)優(yōu)先級(jí),但如果有其他需求可以添加這個(gè)關(guān)鍵字覆蓋 classtype 關(guān)鍵字的優(yōu)先級(jí)。格式如下:

priority:1;
metadata

這個(gè)關(guān)鍵字 Suricata 會(huì)直接忽略,那為什么還會(huì)存在呢?都是為了兼容 snort 規(guī)則。

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

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

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

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,551評(píng)論 19 139
  • 名詞延伸 通俗的說(shuō),域名就相當(dāng)于一個(gè)家庭的門牌號(hào)碼,別人通過(guò)這個(gè)號(hào)碼可以很容易的找到你。如果把IP地址比作一間房子...
    楊大蝦閱讀 20,796評(píng)論 2 56
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 12,374評(píng)論 6 13
  • Snort規(guī)則被分成兩個(gè)邏輯部分:規(guī)則頭和規(guī)則選項(xiàng)。規(guī)則頭包含規(guī)則的動(dòng)作,協(xié)議,源和目標(biāo)ip地址與網(wǎng)絡(luò)掩碼,以及源...
  • 孩子到了一定年齡,就必須離開(kāi)爸爸媽媽,去上幼兒園。當(dāng)父母的都會(huì)有這樣的想法,覺(jué)得孩子上學(xué)以后,自己可以有更多的休息...
    正好學(xué)拼讀閱讀 1,171評(píng)論 0 2

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