记第一次使用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
显示是否匹配到了