- 前言
- 在Linux上部署Suricata
- Suricata的基本配置
- 配置檔案
- Suricata的規則
- Suricata的使用
- Suricata檢測SQL隱碼攻擊
前言
Suricata 是一個高效能的網路入侵檢測和防禦系統(IDS/IPS)。它是由OISF開發,完全開源,並且可以免費使用。
Suricata和Snort的區別,有什麼優勢?
Snort 也是一個開源的IDS,能夠實時監控網路流量,檢測和防禦潛在的威脅。與Snort相比,Suricata的設計注重效能和可擴充套件性,它可以在低至中等規格的硬體上執行,支援多執行緒,同時處理高吞吐量的網路流量,同時流分析功能更為強大和複雜。說白了就是效能更強,功能更多。
Suricata能夠檢測各種網路威脅,包括但不限於:
-
協議解析:支援多種協議,如TCP, UDP, ICMP, HTTP, FTP等。
-
簽名匹配:使用類似於Snort的規則語言進行簽名匹配,以檢測已知攻擊模式。
-
異常檢測:可以檢測到異常行為,如異常流量或潛在的惡意行為。
-
應用層檢測:能夠檢測應用層的攻擊和異常行為,例如SQL隱碼攻擊。
-
流量分析:可以對網路流量進行深入分析,包括狀態跟蹤和流量重建。
-
實時響應:在檢測到攻擊時,可以實時阻斷或記錄攻擊流量。
Suricata的一些主要執行模式:
-
Single 模式:在這種模式下,所有的資料處理任務都由單個工作執行緒完成。
-
Workers 模式:這是為了高效能而設計的模式。在Workers模式中,每個工作執行緒都獨立執行從資料包捕獲到日誌記錄的所有任務,以實現負載均衡和提高處理速度。
-
Autofp 模式:這種模式適用於處理PCAP檔案或在某些IPS設定的情況下。Autofp模式下,有一個或多個資料包捕獲執行緒,它們捕獲資料包並進行解碼,然後將資料包傳遞給 flow worker 執行緒。
在Linux上部署Suricata
廢話少說,開始搭建!強烈建議參考官方的安裝文件一步步安裝:https://docs.suricata.io/en/latest/quickstart.html#installation
官方主要提供了兩種安裝方式:
第一種是使用包管理工具,參考 Binary packages
第二種是使用原始碼編譯安裝,參考 Source
在Ubuntu上安裝Suricata,OISF維護了一個PPA suricata-stable,其中總是包含最新的穩定版本。
第一種方式只需要新增相應倉庫源即可,需要注意的是,使用root許可權或者使用sudo來安裝:
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:oisf/suricata-stable
sudo apt update
sudo apt install suricata jq # jq是用來顯示Suricata的EVE JSON輸出資訊的工具
安裝後檢視正在執行的Suricata版本、選項以及服務狀態:
sudo suricata --build-info
sudo systemctl status suricata
Suricata的搭建過程非常簡單,官方的文件永遠是最好的參考文件。
Suricata的基本配置
配置檔案
首先來關注一下 /etc/suricata
下的幾個配置檔案:
-
classification.config 用於定義和分類不同型別的網路事件,比如哪些是潛在的攻擊、哪些是正常的網路活動等。
-
reference.config 包含了一些安全網站,漏洞平臺的URL網址,用來聯絡外部的惡意攻擊檢測網站。
-
suricata.yaml 是Suricata的主要配置檔案,它包含了規則配置、介面配置、日誌配置、檢測配置等。
-
threshold.config 用於定義流量的閾值和速率限制。設定在特定時間內對特定事件或簽名的觸發次數進行限制。
-
rules/ 規則目錄,存放不同種類的規則檔案 *.rules,規則用來判定流量攻擊型別,並定義攻擊型別和告警種類等。
Suricata的規則
在 rules/ 目錄下存放的各種 *.rules 檔案可以包含一個或多個用於檢測不同型別威脅的規則,同樣採用 Snort 的規則格式。
一個規則主要由以下三個部分組成:
-
action 決定當規則匹配時的處理動作
-
header 定義協議,IP地址,埠和規則的方向
-
rule options 定義規則的細節
在上圖中,紅色部分為action,綠色部分為header,藍色部分為rule options。
action主要有這個:
-
alert 生成一個告警
-
pass 停止對包的進一步檢查,並跳到所有規則的末尾
-
drop 丟棄資料包併產生告警
-
reject 向匹配報文的傳送端傳送RST/ICMP不可抵達錯誤
在IPS模式下,使用任何拒絕動作也會啟用drop。
header部分定義協議,IP地址,埠和規則的方向:
-
註明協議種類,只要是tcp、udp、icmp、ip等
-
Any:源地址/目的地址(IP)
-
Any:源埠/目的埠
-
->:方向,單向流量;<>雙向流量
-
Any:源地址/目的地址(IP)
-
Any:源埠/目的埠
rule options定義規則的細節:
-
msg:警報訊息,當規則匹配時輸出的訊息。
-
flow:流量匹配選項,指定規則匹配的流量特徵,如是否已建立等。
-
content:規則匹配的內容。
-
classtype:規則的分類型別,由 classification.config 檔案定義。
-
sid:用於唯一性規則標識。
-
rev:規則版本號。
比如 rules/app-layer-events.rules 中的一條規則示例:
alert ip any any -> any any (msg:"SURICATA Applayer Mismatch protocol both directions"; flow:established; app-layer-event:applayer_mismatch_protocol_both_directions; flowint:applayer.anomaly.count,+,1; classtype:protocol-command-decode; sid:2260000; rev:1;)
-
alert
這是規則的開始,表示如果匹配此規則,Suricata將生成一個警報。 -
ip any any -> any any
這表示規則適用於任何流量,不限制源IP和目的IP。 -
msg:"SURICATA Applayer Mismatch protocol both directions"
這是當規則觸發時顯示的訊息。 -
flow:established
這個條件指定規則只應用於已建立的流,即那些已經完成了TCP三向握手的連線。 -
app-layer-event:applayer_mismatch_protocol_both_directions
指定了應用層事件,即應用層協議不匹配的情況。 -
flowint:applayer.anomaly.count,+,1
這是一個流量計數器,每當規則觸發時,對流內的應用層異常計數器進行遞增操作。 -
classtype:protocol-command-decode
指定了事件的分類型別,即協議命令解碼。 -
sid:2260000
規則的唯一識別符號Signature ID。 -
rev:1
這是規則的版本號,區分同一規則的不同版本。
關於Suricata的規則還有很多的內容,詳細參考:https://docs.suricata.io/en/latest/rules/index.html
Suricata的使用
在使用suricata之前,首先了解surcata的基本的幾個命令:
-c # 指定配置檔案的路徑
-T # 測試配置執行
-i # 指定網路卡
suricata-update # 更新規則
第一步我們要確定Suricata應該在哪個介面和IP地址上進行檢測,ifconfig命令檢視網路卡和IP地址。
第二步編輯 Suricata 的配置檔案 /etc/suricata/suricata.yaml,指明需要監聽的網路卡,網路範圍 HOME_NET。
sudo vim /etc/suricata/suricata.yaml
第三步啟動執行Suricata
suricata -i ens33 -c /etc/suricata/suricata.yaml
使用 -v 引數,增加日誌級別來增加Suricata應用程式日誌的詳細程度。
Suricata檢測SQL隱碼攻擊
只需要向Suricata匯入SQL的規則就可以檢測,根據Suricata的規則我們可以自己編寫相關的SQL檢測規則來進行檢測。幸運的的是已經有開源的專案提供了大量的Suricata rules來檢測各種型別的攻擊,參考專案suricata-rules
將SQL隱碼攻擊的規則檔案但放到 /var/lib/suricata/rules/ 這個目錄下:
此外還需要在/etc/suricata/suricata.yaml檔案中新增針對SQL隱碼攻擊的檢測規則檔案sql_injection.rules。
注意:新增新的規則檔案以後,必須使用 suricata-update
命令重新載入配置檔案,更新規則。
啟動Suricata服務,載入配置檔案,並指定網路卡為ens33
suricata -i ens33 -c /etc/suricata/suricata.yaml
使用sqlmap測試一下:
當Suricata檢測到可能的SQL隱碼攻擊時,會產生記錄日誌、傳送警報等相應的響應動作,產生的相關日誌資訊放在目錄:/var/log/suricata/
在/var/log/suricata/目錄下,其中的 fast.log
檔案包含了快速報警資訊,提供了關於檢測到的安全事件的簡要摘要。fast.log 的每一條記錄包含:時間戳、條目的編號、當規則匹配時產生的警報訊息msg、使用的協議、源IP地址、目標IP地址。
而 eve.json
檔案提供了更多的資訊,包括流量細節、規則資訊、負載資料等。eve.json 的每一條記錄包含:時間戳、流ID、輸入介面、事件型別。源源埠:21、目標IP、目標埠、協議、資料包來源、警報資訊、動作開始時間、源IP、目標IP、源埠、目標埠等。
透過分析這些日誌檔案資訊,可以得到事件發生的確切時間,事件型別,事件的來源,受影響的目標等資訊,從而達到入侵檢測的目的。
踩到的坑:
Suricata在新增規則檔案後,必須要使用 suricata-update 命令重新載入配置檔案,否則規則會不生效,檢測不到相應的惡意流量。自定義的規則檔案需要嚴按照官方的要求進行編寫,使用 suricata -T
命令檢測規則是否可以正常執行,否則規則檔案無法被正確載入,服務無法正常啟動。
若有錯誤,歡迎指正!o( ̄▽ ̄)ブ