第一次使用suricata
1.安裝
網上有許多安裝方法,我試過用ubuntu21版安裝,但失敗了,好像用ubuntu18.04版安裝會好一點,但我這里直接使用kali安裝的(kali永遠的神,我這用的2021最新版,kali越更新越好用),直接apt-get install suricata就安裝好了,很快,感絕就像假的一樣,但就是能用,之后就是安裝簽名(就是規則rules文件)就可以了,命令是suricata-update, 注意這是官方更新的rule規則,更新的配置文件存放在/var/lib/suricata/rules中,文件為classification.config和suricata.rules,需要cp至/etc/suricata/rules中才能加載成功,不然會有如下錯誤:
11/8/2021 -- 11:45:41 - <Warning> - [ERRCODE: SC_ERR_NO_RULES(42)] - No rule files match the pattern /etc/suricata/rules/suricata.rules
11/8/2021 -- 11:45:41 - <Warning> - [ERRCODE: SC_ERR_NO_RULES_LOADED(43)] - 1 rule files specified, but no rules were loaded!
ps:這里的警告是表示在你的配置文件suricata.yaml中的最后配置中有個默認規則文件,配置的是suricata.rules,是存放在rules文件夾里,但現在你里面沒有這個文件,所以會報錯。
你也可以改成其他文件(記得放在rules文件夾中),啟動的時候就是默認使用的是其他文件的規則。如下圖,我自己寫的測試規則文件this.rules,默認的官方文件suricata.rules被我注釋掉了。

完成以上就基本安裝完畢了。
這里說一下kali安裝的重要文件的作用:
目錄:
/etc/suricata/ 存放suricata執行和配置文件的目錄
/etc/suricata/rules 規則文件存放目錄,自己之后寫的也要放在這里
/var/log/suricata/ 存放suricata日志的目錄
文件:
suricata.yaml suricata的配置文件,重中之重,特別重要,位於/etc/suricata/下
suricata.rules 官方規則文件,存放在/etc/suricata/rules中
fast.log 警告日志文件,存放在/var/log/suricata/下,匹配的輸出都在這里
2.基本使用
使用前注意看看suricata.yaml文件開頭的HOME_NET和EXTERNAL_NET有沒有配置成any,沒有的話改一下。

簡單介紹一下一種最簡單的使用方法:
suricata -c /etc/suricata/suricata.yaml -i eth0
(使用suricata.yaml規則在eth0上開啟監控服務)
cat /var/log/suricata/fast.log (查看告警日志)
現在開始使用suricata寫一條百度觸發規則
alert http any any -> any any (msg:"hit baidu.com...";content:"baidu"; reference:url, www.baidu.com;)
保存為test.rules文件放在程序主目錄/etc/suricata下
可以這樣啟動,但不建議,可能會出錯:
suricata -c /etc/suricata/suricata.yaml -i eth0 -s test.rules
規范一點,最好將文件放在rules文件夾下,然后去suricata.yaml配置文件里修改我上面說的rule-files,在倒數30行左右,將原來的suricata.rules注釋掉,寫上test.rules.
然后直接啟動抓包
suricata -c /etc/suricata.yaml -i eth0
打開瀏覽器訪問baidu.com,然后cat /var/log/suricata/fast.log查看fast.log文件有沒有日志.很可能沒有,隨便輸入幾個字符搜索看看有沒有日志,可能有也可能沒有,有時候有,有時候又沒有,這是我遇到過的情況。
可能的原因我總結一下:
1.可能是你的虛擬機給的cpu核不夠,抓不過來,掉包了(這條原因不需要管它)
2.可能是瀏覽器有緩存,已經緩存過了,你發送請求,但瀏覽器自作聰明對百度服務器發送304包說我緩存過這個包,你不用發了,然后自己從緩存里拿,導致無法匹配到我這條HTTP規則。
解決的辦法:
1.改規則,將http改成tcp就ok了,因為304包也是tcp包
alert tcp any any -> any any (msg:"hit baidu.com...";content:"baidu"; reference:url, www.baidu.com;)
2.當然還可以去瀏覽器設置中清除緩存,有時候是必須這么做。
3.suricata和pcap
測試過程:使用wireshark抓包抓取特征流量,生成pcap包,然后使用suricata驗證pcap。
使用到的規則:
alert http $EXTERNAL_NET any -> $HOME_NET any (msg:"ET PHISHING Generic PhishKit Author Comment M1 2018-08-30"; flow:established,to_client; file_data; content:"|3c 21 2d 2d 20 22 32 6b 31 37 20 70 72 69 76 38 20 62 79 20 6b 40 6d 65 6c 32 70 20 24 22 20 2d 2d 3e|"; classtype:social-engineering; sid:2026061; rev:2; metadata:affected_product Web_Browsers, attack_target Client_Endpoint, created_at 2018_08_30, deployment Perimeter, former_category PHISHING, signature_severity Critical, tag Phishing, updated_at 2018_08_30, mitre_tactic_id TA0001, mitre_tactic_name Initial_Access, mitre_technique_id T1566, mitre_technique_name Phishing;)
其意思是:
flow:established,to_client; 建立tcp連接,且是服務器的響應包
content:包內必須含有其中的16進制的內容
http: 是http包
$EXTERNAL_NET any -> $HOME_NET any 目的地址和端口,源地址和端口任意
a.構造特征流量
由於必須是響應包,而burpsuite抓包在wireshark之后,只能在網站原文件里構造特征碼。
使用16進制轉換器得出content里的內容3c 21 2d 2d 20 22 32 6b 31 37 20 70 72 69 76 38 20 62 79 20 6b 40 6d 65 6c 32 70 20 24 22 20 2d 2d 3e
是
<!-- "2k17 priv8 by k@mel2p $" -->
使用phpstudy搭建網站,在index.php 里加入上面的內容,放在index.php的源文件里。
b.抓取特征流量
kali開啟wireshark抓包,過濾規則如下,ip填網站服務器的ip
ip.addr == 192.168.100.109 and tcp
讓kali去開瀏覽器去訪問物理機ip,抓包得到三個握手包和其中有個http包 狀態碼為200,如果是304就可能瀏覽器讀取的緩存,清除緩存就可以了。

選擇文件,導出特定分組,注意導出的文件要是pcap,不要是pcappng,pcappng是新版的,可能會出錯。
c.驗證特征流量
將之前的規則加入到自己創建的test.yaml中為了下面驗證pcap文件
suricata -c /etc/suricata/suricata.yaml -r xiao78.pcap -k none
在當前文件夾內會有個fast.log文件
cat fast.log
顯示是否匹配到了

