參考《網(wǎng)絡(luò)安全監(jiān)控:收集换吧、檢測(cè)和分析》
作者:(美)克里斯·桑德斯(Chris Sanders) (美)杰森·史密斯(Jason Smith)
翻譯:李柏松 李燕宏
Emerging威脅檢測(cè)規(guī)則wiki:http://doc.emergingthreats.net/bin/view/Main/WebHome
Emerging規(guī)則文件:http://rules.emergingthreatspro.com/
Snort規(guī)則與Suricata規(guī)則基本語法相同
一抄腔、規(guī)則頭部:
1. 規(guī)則行為:行為聲明看铆,用于通知IDS引擎在觸發(fā)警報(bào)時(shí)該怎么做
a. Alert 通知IDS引擎記錄所有匹配的規(guī)則法瑟、與匹配規(guī)則相關(guān)的數(shù)據(jù)包數(shù)據(jù)
b. Log 通知IDS引擎記錄所有匹配的規(guī)則、不記錄與匹配規(guī)則相關(guān)的數(shù)據(jù)包數(shù)據(jù)
c. Pass 通知IDS引擎對(duì)該數(shù)據(jù)包不做任何處理
2. 協(xié)議:通知IDS引擎該規(guī)則適用于何種協(xié)議
a. tcp
b. udp
c. icmp
d. ip 同時(shí)適用于TCP和UDP協(xié)議時(shí)使用
e. any
3. 源/目標(biāo) 主機(jī)
a. 可以是IP列表浮庐,也可以是CIDR形式的IP范圍甚负,可以在配置文件中指定
來源IP:$EXTERNAL_NET
目標(biāo)IP:$HOME_NET
Suricata配置文件:suricate.yaml
b. 若無法將規(guī)則局限于特定類型的主機(jī),可用關(guān)鍵詞“any”匹配任意主機(jī)
4. 源/目標(biāo) d端口
a. 可指定具體端口,如80
b. 可指定任意端口梭域,any
5. 流量方向
a. -> 從源到目標(biāo)地址的單向流量
b. <> 雙向流量
二斑举、規(guī)則選項(xiàng):
1. 事件信息選項(xiàng)
1. 消息(msg):對(duì)規(guī)則的描述,可以理解為規(guī)則的“名稱”
2. 特征標(biāo)識(shí)符(sid):用于唯一性地標(biāo)識(shí)規(guī)則病涨,sid不能重復(fù)富玷,且只能為數(shù)值
a. 0-10000000:為Sourcefire VRT保留
b. 20000000-29999999:為 Emerging Threats(ET)保留
c. 30000000+ :公用
3. 修訂(rev):用于表示規(guī)則發(fā)生了修改,可以理解為規(guī)則的版本號(hào)
a. 當(dāng)創(chuàng)建一條新規(guī)則時(shí)没宾,制定 rev:1; 凌彬,以表明該規(guī)則為第一版本
b. 當(dāng)規(guī)則被改變時(shí),無需創(chuàng)建新規(guī)則循衰,可保持sid不變铲敛,使rev遞增
4. 引用(reference):用于鏈接外部信息來源,從而為規(guī)則提供附加的情景資料
好處:保持規(guī)則整潔会钝,減小規(guī)則長度伐蒋,使其更易編輯管理
a. 直接指定: reference:<reference type>,<reference>;
reference:url,doc.emergingthreats.net/2010235
b. 可通過在suricata.yaml配置reference.config文件來定義引用類型
文件中使用格式:config reference:<reference type><reference prefix>;
例如 文件中:config reference:cve http://cve.mitre.org/cgi-bin/cvename.cgi?name=
規(guī)則中:reference:cve,2001-0414
實(shí)際引用:reference:cve,http://cve.mitre.org/cgi-bin/cvename.cgi?name=2001-0414
5. 優(yōu)先級(jí)(priority):用于手動(dòng)指定規(guī)則的優(yōu)先級(jí),提升分析員查看警報(bào)的效率
此選項(xiàng)可以任意整數(shù)設(shè)置迁酸,可使用0-10之間的數(shù)指定優(yōu)先級(jí)先鱼,0最高,10最低
6. 類別(classtype):用于根據(jù)規(guī)則所檢測(cè)的活動(dòng)類型為規(guī)則分類
規(guī)則中指定方式:classtype:<Classification Name>;
通過在suricata.yaml配置classification .config文件來描述規(guī)則中的類別
文件中格式:config classification: <classification name>,<classification description>,<classification privoroty>
classification name:類別名稱
classification description:類別描述
classification privoroty:類別指定的默認(rèn)優(yōu)先級(jí)奸鬓,當(dāng)規(guī)則使用類別時(shí)以此處優(yōu)先級(jí)為準(zhǔn)
2. 檢查內(nèi)容
1. 檢查內(nèi)容(content):檢查數(shù)據(jù)包內(nèi)容中是否包含某個(gè)字符串
如:content:"evilliveshere";
指定多個(gè)匹配項(xiàng):content:"evilliveshere"; content:"here";
a. 使用感嘆號(hào)焙畔!對(duì)匹配項(xiàng)的否定:content:!"evilliveshere";
b. 將字符串的十六進(jìn)制用管道符(|)進(jìn)行包圍:content:"|FF D8|";
c. 字符串與十六進(jìn)制混合使用:content:"|FF D8|evilliveshere";
d. 匹配內(nèi)容區(qū)分大小寫
e. 保留字符(; \ ")須進(jìn)行轉(zhuǎn)義或十六進(jìn)制轉(zhuǎn)碼
2. 檢測(cè)內(nèi)容修飾語:通過在匹配內(nèi)容之后添加一些修飾語,可以精確控制IDS引擎在網(wǎng)絡(luò)數(shù)據(jù)中匹配內(nèi)容的方式串远。
a. nocase:匹配內(nèi)容不區(qū)分大小寫宏多,如 content:"root";nocase;
b. offset:用于表示從數(shù)據(jù)包載荷的特定位置開始內(nèi)容匹配,從載荷其實(shí)位置算起
注意載荷開始位置從0字節(jié)處開始澡罚,而不是1字節(jié)處
content:"root";offset:5;
c. depth:用于限制搜索匹配內(nèi)容的結(jié)束位置伸但。若使用了offset,則開始位置為offset留搔,否則為載荷開始位置
content:"root";offset:5;depth:7;
d. distance:用于指定上一次內(nèi)容匹配的結(jié)束位置距離本次內(nèi)容匹配的開始位置的距離
e. within:用于限制本次匹配必須出現(xiàn)在上一次匹配內(nèi)容結(jié)束后的多少個(gè)字節(jié)之內(nèi)
f. distance和within的同時(shí)使用限制了第二次內(nèi)容匹配的匹配范圍更胖,如下
content:"evilliveshere"; content:"here"; distance:1;within:7;
在匹配字符串“evilliveshere”后的1到7個(gè)字節(jié)范圍內(nèi)對(duì)字符串“here”進(jìn)行匹配
g. http內(nèi)容修飾語:針對(duì)檢測(cè)http流量的規(guī)則,Suricata提供了http流重組能力隔显,同時(shí)提供了用于編寫HTTP流量相關(guān)的更高效的規(guī)則修飾器
例如:alert tcp any any -> any 80(msg:"Evil Doamin www.appliednsm.com"; "content:"GET";httpmethod; content:"www.appliednsm.com";http_uri; sid:5445555; rev:1;)
常用http內(nèi)容修飾語:
http_client_body HTTP客戶端請(qǐng)求的主體內(nèi)容
http_cookie HTTP頭字段的“Cookie”內(nèi)容
http_header HTTP請(qǐng)求或響應(yīng)頭的任何內(nèi)容
http_method 客戶端使用的HTTP方法(GET却妨,POST等)
http_uri HTTP客戶端請(qǐng)求的URI內(nèi)容
http_stat_code 服務(wù)器響應(yīng)的HTTP狀態(tài)字段內(nèi)容
http_stat_message 服務(wù)器響應(yīng)的HTTP狀態(tài)消息內(nèi)容
http_encode 在HTTP傳輸過程中所使用的編碼類型
```
3. 兼容Perl語法的正則表達(dá)式(PCRE):通過正則表達(dá)式對(duì)內(nèi)容進(jìn)行匹配
匹配信用卡號(hào)碼: pcre:"/([0-6]\d\d|7[0-256]\d|73[0-3]|77[0-2])-\d{2} - \d{4} /";
######3. 通信流量
通信流量:根據(jù)TCP協(xié)議網(wǎng)絡(luò)流量狀態(tài)編寫規(guī)則
三次握手:
1. 客戶端向服務(wù)器的監(jiān)聽端口發(fā)送SYN包來發(fā)起連接
2. 此時(shí),服務(wù)器需要向客戶端回復(fù)一個(gè)SYN/ACK包
3. 一旦收到該包荣月,客戶端會(huì)回復(fù)給服務(wù)器一個(gè)ACK包
數(shù)據(jù)流規(guī)則有一些專用選項(xiàng)管呵,分為三類:
1. 狀態(tài)選項(xiàng)
2. 定向選項(xiàng)
3. 流量模式狀態(tài)
配置格式:flow:<option>,<option>,<option>
有效聲明選項(xiàng)分別為
1. established:只匹配已經(jīng)建立TCP會(huì)話連接的流量
2. stateless:不論是否已建立TCP會(huì)話連接均匹配
方向選項(xiàng)分別為:
1. to_server:從客戶端到服務(wù)端的流量
2. from_server:從服務(wù)端到客戶端的流量
3. to_client:從服務(wù)端到客戶端的流量
4. from _client:從客戶端到服務(wù)端的流量
no_stream:待匹配數(shù)據(jù)是重組后的流
only_stream:待匹配數(shù)據(jù)是單獨(dú)的數(shù)據(jù)包
協(xié)議頭檢測(cè)
1. TTL:匹配指定的TTL指,可使用關(guān)系運(yùn)算符(< , <=, >=, >),可以用來識(shí)別操作系統(tǒng)類型
2. dsize:匹配一個(gè)指定payload大小的數(shù)據(jù)包哺窄,可使用關(guān)系運(yùn)算符(< , <=, >=, >)
3. itype:匹配指定的ICMP類型值
4. icode:匹配指定的ICMP代碼值
5. ip_proto:匹配指定的IP協(xié)議捐下,如IGMP账锹、GRE