【星課堂】快速入門:如何使用Suricata構建網路入侵檢測系統?

星河Salaxy發表於2022-04-22

一. Suricata簡介

Suricata是一個免費、開源、成熟、快速、健壯的網路威脅檢測引擎。Suricata引擎能夠進行實時入侵檢測(IDS)、內聯入侵預防(IPS)、網路安全監控(NSM)和離線pcap處理。Suricata使用強大而廣泛的規則和簽名語言來檢查網路流量,並提供強大的Lua指令碼支援來檢測複雜的威脅。使用標準的輸入和輸出格式(如YAML和JSON),使用現有的SIEMs、Splunk、Logstash/Elasticsearch、Kibana和其他資料庫等工具進行整合將變得非常簡單。Suricata專案和程式碼由開放資訊保安基金會(OISF)擁有和支援,OISF是一個非盈利基金會,致力於確保Suricata作為一個開源專案的開發和持續成功。




二. Suricata主要特點

l 支援從nfqueue中讀取流量

支援分析離線pcap檔案和pcap檔案方式儲存流量資料

l 支援ipv6

l 支援pcap,af_packet,pfring,硬體卡抓包

多執行緒

l 支援內嵌lua指令碼,以實現自定義檢測和輸出指令碼

l 支援ip信用等級

支援檔案還原

l 相容snort規則

支援常見資料包解碼:IPv4, IPv6, TCP, UDP, SCTP, ICMPv4, ICMPv6, GRE, Ethernet, PPP, PPPoE, Raw, SLL, VLAN, QINQ, MPLS, ERSPAN, VXLAN

支援常見應用層協議解碼: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。

【星課堂】快速入門:如何使用Suricata構建網路入侵檢測系統?

透過配置檔案的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規則的常見格式:

【星課堂】快速入門:如何使用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關鍵字、及各類協議關鍵字等

【星課堂】快速入門:如何使用Suricata構建網路入侵檢測系統?


3.3 規則提取測試


下面是經常使用的測試命令:

suricata -c /etc/suricata/suricata.yaml -T #-T引數測試規則是否存在問題

suricata -r test.pcap -k none -S test.rules #測試流量和規則匹配情況

執行生成四個結果檔案:

【星課堂】快速入門:如何使用Suricata構建網路入侵檢測系統?【星課堂】快速入門:如何使用Suricata構建網路入侵檢測系統?【星課堂】快速入門:如何使用Suricata構建網路入侵檢測系統?

如果有簽名命中則出現在eve.json與fast.log中。其中,fast.log記錄了包含的具體alert情況,包括時間、五元組資訊、告警id和告警資訊等,是我們本次重點分析的物件。eve.json則記錄了告警資訊、flow流資訊、協議解析的資訊(例如http,dns等),以及攻擊的payload等。


相關文章