構建基於Suricata+Splunk的IDS入侵檢測系統
一.什麽是IDS和IPS?
IDS(Intrusion Detection Systems):入侵檢測系統,是一種網絡安全設備或應用軟件,可以依照一定的安全策略,對網絡、系統的運行狀況進行監視,盡可能發現各種攻擊企圖、攻擊行為或者攻擊結果,並發出安全警報。
IPS(Intrusion Prevention System):入侵防禦系統,除了具有IDS的監控檢測功能之外,可以深度感知檢測數據流量,對惡意報文進行丟棄,以阻止這些異常的或是具有傷害性的網絡行為。
NSM:網絡安全監控系統,用於收集、檢測和分析網絡安全數據,通常IDS是其組成部分之一。
IPS入侵防禦系統,是在IDS入侵檢測系統的基礎上,增加了事件處理以及安全防護功能,能夠主動對安全事件進行響應。
二.IDS/IPS的功能及分類
1.IDS根據兩種方法進行分類:按照數據來源、按照入侵檢測策略。
按照數據來源分類
- 基於網絡的入侵檢測系統(NIDS)
- 基於主機的入侵監測系統(HIDS)
- 分布式入侵檢測系統(DIDS)
按照入侵檢測策略分類
- 濫用檢測
- 異常檢測
- 完整性分析
2.IPS從功能上具有以下幾個組成部分:
- 數據采集:采集和捕獲流量數據
- 入侵檢測:分析流量和日誌數據,發現安全異常行為並發出警報,常見的有Snort、Suricata、Bro
- 結果展示:用於分析IDS警報並進行友好展示,常見的IDS警報分析工具有Snorby、Sguil、Base等
- 安全防禦:主動響應安全事件,采取丟棄數據包等等措施來阻止異常網絡行為,比如與iptables聯用
三.IDS檢測方法
IDS根據入侵檢測的行為分為:異常檢測和誤用檢測。
1、異常檢測方法
- 統計異常檢測方法
- 特征選擇異常檢測方法
- 基於貝葉斯推理異常檢測方法
- 基於貝葉斯網絡異常檢測方法
- 基於模式預測異常檢測方法
2、誤用檢測方法
- 基於條件的概率誤用檢測方法
- 基於專家系統誤用檢測方法
- 基於狀態遷移分析誤用檢測方法
- 基於鍵盤監控誤用檢測方法
- 基於模型誤用檢測方法
四.構建基於Suricata+Splunk的IDS入侵檢測系統
Suricata
隨著越來越多的服務器將網卡升級到10GB/40GB以太網,對線路上的硬件進行計算密集型的入侵檢測越來越困難。suircata是一款支持IDS和IPS的多線程入侵檢測系統,與傳統snort相比,suricata的多線程和模塊化設計上使其在效率和性能上超過了原有snort,它將 CPU 密集型的深度包檢測工作並行地分配給多個並發任務來完成。這樣的並行檢測可以充分利用多核硬件的優勢來提升入侵檢測系統的吞吐量,在數據包的深度檢測上效果優越。並且suricata可以兼容現有的Snort規則簽名,還增加了對ipv6的支持,已經逐漸成為傳統snort入侵檢測系統的代替方案。
參數 | Snort | Suricata |
---|---|---|
安裝方式 | 源碼安裝、安裝包安裝 | 源碼安裝 |
協議 | TCP,UDP,ICMP,IP | TCP,UDP,ICMP,IP,HTTP,FTP,TLS(SSL),SMB,DNS |
規則 | Snort規則,EmergingThreats規則 | Snort規則,EmergingThreats規則,VRT::Snort 規則 |
線程 | 單線程 | 多線程 |
IPS支持 | 與iptables等聯用實現 | 支持自動處理 |
IPv6支持 | 少數支持 | 全面支持 |
抓包方式 | libpcap | PF_RING, cua,netmap,af-packet |
幫助資料 | 官網及網絡上大量資料 | Suricata wiki |
Splunk
splunk是一款數據分析系統。它在快速收集、搜索、分析、實時獲取數據方面的能力較為突出,效率高,能夠處理PB級數據,並且它支持對數據源進行實時監控。支持自定義過濾規則。splunk使用簡單,通過用戶圖形界面進行各種統計分析操作, 能夠對數據進行可視化展示,形象直觀。本實驗中利用splunk實時監控IDS的警報日誌文件fast.log。
1.安裝Suricata
suricatawiki參考文檔
1.安裝suricata依賴
apt-get -y install libpcre3 libpcre3-dbg libpcre3-dev build-essential autoconf automake libtool libpcap-dev libnet1-dev libyaml-0-2 libyaml-dev zlib1g zlib1g-dev libmagic-dev libcap-ng-dev libjansson-dev pkg-config
安裝libhtp庫
git clone https://github.com/OISF/libhtp.git
cd libhtp/
./autogen.sh
./configure
make && sudo make install
2.下載suricata
去官網下載suricata並解壓
3.編譯suricata
默認模式下,Suricata以IDS模式運行,編譯命令:
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
如果需要 Suricata 同時運行 IDS 和 IPS,需要安裝額外依賴並使用如下命令進行編譯
sudo apt-get -y install libnetfilter-queue-dev libnetfilter-queue1 libnfnetlink-dev libnfnetlink0
./configure --enable-nfqueue --prefix=/usr --sysconfdir=/etc --localstatedir=/var
4.安裝suricata
make && sudo make install
sudo make install-conf # 安裝默認配置
sudo make install-rules # 安裝默認規則
sudo ldconfig # 讓系統共享動態鏈接庫
配置並使用Suricata監控安全事件
編輯配置文件
如果我們安裝時使用下面的命令,會進行默認配置,我們只需要修改相關配置文件中的參數即可。如果已經使用了默認配置,請直接跳到步驟4。
sudo make install-conf # 安裝默認配置
sudo make install-rules # 安裝默認規則
如果沒有安裝默認配置和規則,我們需要手動進行配置。參考步驟1、2、3。
創建Suricata配置目錄和日誌目錄
sudo mkdir /var/log/suricata
sudo mkdir /etc/suricata
把規則文件拷貝到Suricata配置目錄下
wget http://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz
tar zxvf emerging.rules.tar.gz
sudo cp -R rules/ /etc/suricata/
把Suricata安裝源文件中的suricata.yaml、classification.config、reference.config
文件拷貝到Suricata的配置目錄下
cd suricata
sudo cp suricata.yaml classification.config reference.config /etc/suricata/
編輯配置文件
suricata的配置文件路徑是:/etc/suricata/suricata.yaml
sudo vim /etc/suricata/suricata.yaml
我們需要註意一下幾個關鍵參數
HOME_NET
: 它指定了Suricata 監控的本地網絡,根據自己的網絡情況進行修改
HOME_NET: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]"
EXTERNAL_NET
變量的 !$HOME_NET
代表除本地網絡之外的其他網絡。
default-log-dir
:日誌文件存儲路徑,默認是/var/log/suricata。
outputs
:outputs選項下有很多可以輸出的配置選項,包括警告、檢測的數據包、產生的結果等,可以根據自己的需求進行配置。
fast.log
:默認的警告輸出文件。unified2.alert
:數據包輸出文件,將整個數據包以二進制的方式存儲到文件中。http.log
:HTTP日誌,包含了http請求、HOST字段、URI字段和User-Agent字段。Syslog
:這個選項決定了是否將suricata的警告輸出到syslog文件中。Drop.log
:當suricata工作在IPS模式下的時候,可以使用drop操作規則,這些drop掉的數據包信息就會存儲在drop.log文件中
max-pending-packets
: 設置suricata能同時處理的數據包數量,最少為1,最大值取決於內存的大小,更大的內存可以設置更大的值並擁有更好的性能,默認值是1024。
default-packet-size
:對處理的每個數據包的大小進行限制。默認值是1514,也是TCP數據包的最大長度(當數據超過這個長度便會使用TCP報文重組技術)。
編輯測試規則
針對suricata的安全規則的配置,可以參考suricata配置文檔
修改/etc/suricata/suricata.yaml
文件,設置我們的測試規則文件my.rules
default-rule-path: /etc/suricata/rules
rule-files:
- my.rules
然後我們去/etc/suricata/rules
目錄下創建我們的自定義規則文件my.rules
在該文件中,我們寫下自己的測試規則
alert icmp $HOME_NET any -> $EXTERNAL_NET any (msg:"TEST :ICMP PING"; itype:8; sid:20000; rev:3;)
alert tcp any any -> any 80 (msg:"http test";)
alert http any any -> any any (msg:"Filemagic jgp(1)"; flow:established; filemagic:"JPEG image data"; filestore; sid:10; rev:1;)
運行suricata進行測試
Suricata有不同的運行模式,我們可以使用如下命令查看
sudo suricata --list-runmodes
啟動Suricata之前,強烈建議先關閉網卡的LRO/GRO功能(即網卡收包時將同一流的小包合並成大包)。這會導致Suricata處理時很容易出現丟包問題,傳輸速度慢。解決方法,關閉LRO/GRO功能,命令:
ethtool -k eth0 #查看LRO/GRO當前是否打開
ethtool -K eth0 lro off #關閉LRO
ethtool -K eth0 gro off #關閉GRO
如果看到下列警示信息,可以忽視。它說明你的網卡不支持LRO。
Cannot change large-receive-offload
然後我們啟動suricata
sudo suricata -c /etc/suricata/suricata.yaml -i eth0
此時,suricata會開始監聽我們的流量,如果觸發了規則,會在默認日誌路徑/var/log/suricata/
下產生警報文件fast.log
使用Suricata監控網絡攻擊
模擬網絡攻擊:mysql暴力破解
IDS檢測規則
alert tcp $EXTERNAL_NET any -> $HOME_NET 3306 (msg:"MySQL Login Attack"; sid:11619; gid:3; rev:6; classtype:attempted-admin; reference:cve,2006-1518; metadata: engine shared, soid 3|11619, service mysql;)
此規則可以檢測出嘗試枚舉mysql管理員密碼的暴力破解攻擊。
使用Splunk分析展示IDS警報
下載splunklight版
安裝web環境:php+apache2
sudo apt-get install php7.0 libapache2-mod-php7.0 apache2
運行splunk服務
cd splunk\bin./splunk start
然後訪問本機8080端口即可。我們可以動態監控警報文件/var/log/suricata/fast.log
構建基於Suricata+Splunk的IDS入侵檢測系統