一. Suricata簡介
Suricata是一個免費、開源、成熟、快速、健壯的網路威脅檢測引擎。Suricata引擎能夠進行實時入侵檢測(IDS)、內聯入侵預防(IPS)、網路安全監控(NSM)和離線pcap處理。Suricata使用強大而廣泛的規則和簽名語言來檢查網路流量,並提供強大的Lua指令碼支援來檢測複雜的威脅。使用標準的輸入和輸出格式(如YAML和JSON),使用現有的SIEMs、Splunk、Logstash/Elasticsearch、Kibana和其他資料庫等工具進行整合將變得非常簡單。Suricata專案和程式碼由開放資訊保安基金會(OISF)擁有和支援,OISF是一個非盈利基金會,致力於確保Suricata作為一個開源專案的開發和持續成功。
二. Suricata主要特點
l 支援從nfqueue中讀取流量
l 支援分析離線pcap檔案和pcap檔案方式儲存流量資料
l 支援ipv6
l 支援pcap,af_packet,pfring,硬體卡抓包
l 多執行緒
l 支援內嵌lua指令碼,以實現自定義檢測和輸出指令碼
l 支援ip信用等級
l 支援檔案還原
l 相容snort規則
l 支援常見資料包解碼:IPv4, IPv6, TCP, UDP, SCTP, ICMPv4, ICMPv6, GRE, Ethernet, PPP, PPPoE, Raw, SLL, VLAN, QINQ, MPLS, ERSPAN, VXLAN
l 支援常見應用層協議解碼:HTTP, SSL, TLS, SMB, DCERPC, SMTP, FTP, SSH, DNS, Modbus, ENIP/CIP, DNP3, NFS, NTP, DHCP, TFTP, KRB5, IKEv2, SIP, SNMP, RDP
三. Suricata主要特點
3.1 規則配置
配置檔案位置:/etc/suricata/suricata.yaml
規則目錄位置:/etc/suricata/rules
先設定HOME_NET與EXTERNAL_NET,推薦HOME_NET填寫內網網段,EXTERNAL_NET設定為any
注意:如果HOME_NET設定了any,EXTERNAL_NET設定!HOME_NET的話會報錯,如果HOME_NET設定了內網地址,EXTERNAL_NET設定為!$HOME_NET的話,有些內網之間的告警就無法匹配到。
一般為了測試方便,都設定為any。
透過配置檔案的default-rule-path設定規則目錄,rule-files來選擇啟用那些規則
其他配置檔案有:
classification-file:
/etc/suricata/classification.config
reference-config-file:
/etc/suricata/reference.config
threshold-file:
/etc/suricata/threshold.config
3.2 規則配置
更多參考官網文件:
低版本手冊:
http://suricata.readthedocs.io/en/suricata-4.0.4
高版本手冊:
https://suricata.readthedocs.io/en/latest/index.html#
suricata和snort區別:
https://suricata.readthedocs.io/en/latest/rules/differences-from-snort.html
下面是suricata規則的常見格式:
3.2.1 規則頭部
規則頭部對應屬性:
alert tcp $EXTERNAL_NET $FILE_DATA_PORTS -> $HOME_NET any
規則行為;協議;源ip;源埠;流量方向;目標ip;目標埠;紅色代表規則頭
規則行為,根據優先順序排列:
pass 如果匹配到規則後,suricata會停止掃描資料包,並跳到所有規則的末尾
drop ips模式使用,如果匹配到之後則立即阻斷資料包不會傳送任何資訊
reject 對資料包主動拒絕,接受者與傳送中都會收到一個拒絕包
alert 記錄所有匹配的規則並記錄與匹配規則相關的資料包
協議:
在規則中指定匹配那些協議,suricata支援的協議要比snort多一些
TCP、UDP、ICMP、IP(同時用與TCP與UDP)、http、ftp、smb、dns
源ip,目標ip:
支援單個ip,cidr,ip組,[96.30.87.36,96.32.45.57],所有主機any,以及規則檔案中配置的ip變數$HOME_NET(受保護的ip段)與$EXTERNAL_NET(其他所有ip)
源埠/目標埠:
支援設定單個埠80,埠組[80,8080],埠範圍[1024:65535]以及any任意埠,還可以在配置檔案中新增埠組,透過!號來進行排除
流量方向:
-> 單向流量,從源ip到目標ip的單項流量
<> 雙向流量,2個ip往返之間的流量
3.2.2 規則選項
規則選項使用分號分隔,有兩種格式:
(keyword):(settings);
(keyword);
即由關鍵字和設定值(部分沒有)組成
關鍵字有很多類,大致有以下幾種:
元關鍵字、paylaod關鍵字、及各類協議關鍵字等
3.3 規則提取測試
下面是經常使用的測試命令:
suricata -c /etc/suricata/suricata.yaml -T #-T引數測試規則是否存在問題
suricata -r test.pcap -k none -S test.rules #測試流量和規則匹配情況
執行生成四個結果檔案:
如果有簽名命中則出現在eve.json與fast.log中。其中,fast.log記錄了包含的具體alert情況,包括時間、五元組資訊、告警id和告警資訊等,是我們本次重點分析的物件。eve.json則記錄了告警資訊、flow流資訊、協議解析的資訊(例如http,dns等),以及攻擊的payload等。