suricata 兼容 snort规则的大部分语法。今天我来教大家编写一条检测请求的规则。基于suricata 6.0.x 版本。
以http的流量举例:
例如,想匹配一个黑客工具建立三次握手后发起的恶意请求,使用下面的关键字:
flow:established,to_server;
想匹配请求方法,POST等,使用下面的关键字:
http.method; content:"POST";
如果想匹配GET请求,改成:
http.method; content:"GET";
如果想匹配请求头中的字段,例如UserAgent,含有hacktool:
http.user_agent; content:"hacktool";
如果想匹配请求体含有 helloworld:
http.request_body; content:"helloworld";
如果想匹配URL,含有/usdt:
http.uri; content:"/usdt";
合起来就是一条规则,最后补上msg字段,以及sid(规则号)字段:
alert http any any -> any any (msg:"web-attack.new_test"; flow:established,to_server; http.method; content:"POST"; http.user_agent; content:"hacktool"; http.request_body; content:"helloworld"; http.uri; content:"/usdt"; sid:100000001;)
至于 classtype 字段,表示规则分类,是可选字段。
这条规则可以放到suricata 规则里面跑,如果流量中匹配特征,就可以产生告警。怎么样,你学会了吗?
上面的步骤相对简单,可以适配简单的匹配情况,我把这个过程工具化,并向我的团队推广,这样可以减少规则编写过程中的出错,它编写出来的东西语法很规范,也可以节约很多时间成本,将更多时间放在威胁分析及攻防上面。
效果演示:
我这个工具可以适配匹配多个请求头里的关键字以及匹配请求体里面多处特征的需求。
就像中学时的"完形填空"一样,点击“生成”按钮,复制完生成的规则改一下规则号即可。
如果想匹配多处请求头内容,例如同时匹配请求头中同时含有 Cookie:qwerasdf ,请求体中同时含有 white hat leeezp :
好了,今天的分享就到这里,欢迎关注专栏,会持续更新,如有疑问请在评论区留言。