方向操作符:
方向操作符"->"表示規則所施加的流的方向。方向操作符左邊的ip地址和端口號被認為是流來自的源主機,方向操作符右邊的ip地址和端口信 息是目標主機,還有一個雙向操作符
"<>"。它告訴snort把地址/端口號對既作為源,又作為目標來考慮。這對於記錄/分析雙向對話很方 便,例如telnet或者pop3會話。用來記錄一個telnet會話的兩側的流的范例如下:
log !192.168.1.0/24 any <> 192.168.1.0/24 23
Activate 和 dynamic 規則:
注:Activate 和 dynamic 規則將被tagging 所代替。在snort的將來版本,Activate 和 dynamic 規則將完全被功能增強的tagging所代替。
Activate 和 dynamic 規則對給了snort更強大的能力。你現在可以用一條規則來激活另一條規則,當這條規則適用於一些數據包時。在一些情況下這是非常有用的,例如你想設置一條規則:當一條規則結束后來完成記錄。Activate規則除了包含一個選擇域:activates外就和一條alert規則一樣。Dynamic規則除 了包含一個不同的選擇域:activated_by
外就和log規則一樣,dynamic規則還包含一個count域。
Actevate規則除了類似一條alert規則外,當一個特定的網絡事件發生時還能告訴snort加載一條規則。Dynamic規則和log規則類似,但它是當一個activate規則發生后被動態加載的。把他們放在一起如下圖所示:
activate tcp !$HOME_NET any -> $HOME_NET 143 (flags: PA; content: "|E8C0FFFFFF|/bin"; activates: 1; msg: "IMAP buffer overflow!";) dynamic tcp !$HOME_NET any -> $HOME_NET 143 (activated_by: 1; count: 50;)
規則選項
規則選項組成了snort入侵檢測引擎的核心,既易用又強大還靈活。所有的snort規則選項用分號";"隔開。規則選項關鍵字和它們的參數用冒號":"分開。按照這種寫法,snort中有42個規則選項關鍵字。
msg - 在報警和包日志中打印一個消息。 logto - 把包記錄到用戶指定的文件中而不是記錄到標准輸出。 ttl - 檢查ip頭的ttl的值。 tos - 檢查IP頭中TOS字段的值。 id - 檢查ip頭的分片id值。 ipoption - 查看IP選項字段的特定編碼。 fragbits - 檢查IP頭的分段位。 dsize - 檢查包的凈荷尺寸的值 。 flags - 檢查tcp flags的值。 seq - 檢查tcp順序號的值。 ack - 檢查tcp應答(acknowledgement)的值。 window - 測試TCP窗口域的特殊值。 itype - 檢查icmp type的值。 icode - 檢查icmp code的值。 icmp_id - 檢查ICMP ECHO ID的值。 icmp_seq - 檢查ICMP ECHO 順序號的值。 content - 在包的凈荷中搜索指定的樣式。 content-list 在數據包載荷中搜索一個模式集合。 offset - content選項的修飾符,設定開始搜索的位置 。 depth - content選項的修飾符,設定搜索的最大深度。 nocase - 指定對content字符串大小寫不敏感。 session - 記錄指定會話的應用層信息的內容。 rpc - 監視特定應用/進程調用的RPC服務。 resp - 主動反應(切斷連接等)。 react - 響應動作(阻塞web站點)。 reference - 外部攻擊參考ids。 sid - snort規則id。 rev - 規則版本號。 classtype - 規則類別標識。 priority - 規則優先級標識號。 uricontent - 在數據包的URI部分搜索一個內容。 tag - 規則的高級記錄行為。 ip_proto - IP頭的協議字段值。 sameip - 判定源IP和目的IP是否相等。 stateless - 忽略劉狀態的有效性。 regex - 通配符模式匹配。 distance - 強迫關系模式匹配所跳過的距離。 within - 強迫關系模式匹配所在的范圍。 byte_test - 數字模式匹配。 byte_jump - 數字模式測試和偏移量調整。 flow - 這個選項要和TCP流重建聯合使用。它允許規則只應用到流量流的某個方向上。這將允許規則只應用到客戶端或者服務器端
舉例說明:
例子1:
alert tcp any any -> any 3306 (msg:"MySQL Server Geometry Query Integer溢出攻擊"; flow:to_server,established; dsize:<300; flags:A; content:"|03|"; nocase; offset:4; depth:1; content:"select|20|geometryn|28|0x00000000000700000001"; distance:10; within:50; reference:cve,2013-1861; reference:bugtraq,58511; classtype-danger:medium; tid:14999; rev:1;)
規則頭:alert tcp any any -> any 3306 //匹配任意源IP和端口到任意目的IP和端口為3306的TCP數據包發送告警消息。
規則選項:
msg:"MySQL Server Geometry Query Integer溢出攻擊"; //在報警和包日志中打印的消息內容。 flow:to_server,established; //檢測向服務器發送方向的報文。 dsize:<300; //應用層負載包長度小於300 flags:A; //TCP flags值為10 content:"|03|"; nocase; offset:4; depth:1; //負載偏移4取1的值為03,不區分大小寫,這塊寫的應該是有問題字符串有不區分大小寫,16進制不涉及。
//相對於上面的03特征向后偏移10個字節之后再取50個字節,
//50個字節里邊包含select|20|geometryn|28|0x00000000000700000001
content:"select|20|geometryn|28|0x00000000000700000001"; distance:10; within:50;
reference:cve,2013-1861; reference:bugtraq,58511; //可參考cve和bugtraq classtype-danger:medium; //危險等級中等 sid:20141107; //規則ID rev:1 //版本信息,第一個版本
例子2:
heartbleed漏洞下行檢測規則
alert tcp $EXTERNAL_NET any -> $HOME_NET 443 (msg:"openssl Heartbleed attack";flow:to_server,established; content:"|18 03|"; depth: 3; byte_test:2, >, 200, 3, big; byte_test:2, <, 16385, 3, big; threshold:type limit, track by_src, count 1, seconds 600; reference:cve,2014-0160; classtype:bad-unknown; sid:20140160; rev:2;)
規則頭:alert tcp $EXTERNAL_NET any -> $HOME_NET 443 EXTERNAL_NET和HOME_NET都在/etc/snort/snort.conf中配置。
規則選項:
msg:"openssl Heartbleed attack"; //消息信息 flow:to_server,established; //向服務器發送的請求包檢測一次 content:"|18 03|"; depth: 3; //頭部3個字節之內存在0x1803 byte_test:2, >, 200, 3, big; //從第3個字節開始取2個字節的大字節序大於200 byte_test:2, <, 16385, 3, big; //從第3個字節開始取2個字節的大字節序小於16385 threshold:type limit, track by_src, count 1, seconds 600; //限速 600s記錄一次按src地址進行記錄 reference:cve,2014-0160; //參考cve編號 classtype:bad-unknown; //危害級別 sid:20140160; //規則ID rev:2; //版本2
附:
bugtraq:http://www.securityfocus.com/
cve:http://cve.mitre.org/compatible/product_type.html
cnvd:http://www.cnvd.org.cn/
可利用kali虛擬機中nmap,nessus,CIS或者X-scan對系統進行掃描,產生告警紀錄