目录

规则头

规则行为,根据优先级排列:

协议:

源ip,目标ip:

源端口/目标端口:

流量方向:

规则体

msg:

flow流匹配:

flowbits :

sameip源ip、目标ip检测:

content内容匹配:

不区分大小写 nocase:

偏移位置 offset:

结束位置 depth:

在xx范围外 distance :

在xx范围内 within:

有效载荷大小 dsize:

pcre正则  pcre:

http修饰符:

fast_pattern快速匹配模式:

threshold阀值:

reference引用:

priority优先级:

classtype类别:

sid特征标示符:

gid组:

rev修订:

metadata元数据:

自定义一个规则


参考: https://suricata.readthedocs.io/en/latest/rules/index.html#

规则头

alert tcp $HOME_NET any -> $EXTERNAL_NET 1024:

规则行为,根据优先级排列:

pass 如果匹配到规则后,suricata会停止扫描数据包,并跳到所有规则的末尾

drop ips模式使用,如果匹配到之后则立即阻断数据包不会发送任何信息

reject 对数据包主动拒绝,接受者与发送中都会收到一个拒绝包

alert 记录所有匹配的规则并记录与匹配规则相关的数据包

协议:

在规则中指定匹配那些协议,suricata支持的协议要比snort多一些

TCP、UDP、ICMP、IP(同时用与TCP与UDP)、http、ftp、smb、dns

源ip,目标ip:

支持单个ip,cidr,ip组,[96.30.87.36,96.32.45.57],所有主机any,以及规则文件中配置 的 ip变量$HOME_NET(受保护的ip段)与$EXTERNAL_NET(其他所有ip):

源端口/目标端口:

支持设置单个端口80,端口组[80,8080],端口范围[1024:65535]以及any任意端口,还可以在配置文件中添加端口组,通过!号来进行排除

流量方向:

-> 单向流量,从源ip到目标ip的单项流量

<> 双向流量,2个ip往返之间的流量

规则体

(msg:"ET MALWARE Win32/HunterStealer/AlfonsoStealer CnC Exfil"; flow:established,to_server; content:"|50 4b 03 04 14 00|"; depth:6; content:"Desktop.png"; distance:0; fast_pattern; reference:md5,20f025a45247cc0289e666057149c28e; reference:md5,7f053ba33d6e4bf07a15ee65dd2b0d92; classtype:command-and-control; sid:2031198; rev:1; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, created_at 2020_11_11, deployment Perimeter, former_category MALWARE, malware_family HunterStealer, signature_severity Major, updated_at 2020_11_11;)

msg:

规则名称,规则中的第一个字段,ids告警上显示的信息

ET MALWARE Win32/HunterStealer/AlfonsoStealer CnC Exfil

flow流匹配:

flow是特定时间内具有相同数据的数据包(5元组信息)同属于一个流,suricata会将这些流量保存在内存中。

to_client/from_server    服务器到客户端

to_server/from_client     客户端到服务器

established       匹配已经建立连接的(tcp则是经过3次握手之后,udp则是有双向流量)

no_established     匹配不属于建立连接的

only_stream    匹配由流引擎重新组装的数据包

no_stream    不匹配流引擎重新组装的数据包

flowbits :

flowbits 参照 链接:https://www.jianshu.com/p/2d54c0461904

Flowbits由两部分组成。 第一部分描述要执行的操作,第二部分是flowbit的名称。

Flowbits可以确保例如两个不同的数据包匹配时会生成警报。 只有两个数据包匹配时才会生成警报。 所以,当第二个数据包匹配时,Suricata必须知道第一个数据包是否匹配。 如果一个数据包匹配,Flowbits将标记流,Suricata会“知道”它会在第二个数据包匹配时产生警报。

流程有不同的操作。 这些是:

flowbits:set,name  将在流程中设置条件/'name',如果存在的话。
        flowbits:isset,name 可以在规则中使用,以确保它生成警报,当规则匹配并且条件在流中被设置时。
        flowbits:toggle,name 颠倒当前设置。 所以例如,如果一个条件设置, 它将被解除,反之亦然。
        flowbits:unset,name 可以用来取消流程中的条件。
        flowbits:isnotset,name 可以在规则中使用,以确保它生成警报,当它匹配并且条件未在流程中设置时。
        flowbits:noalert  此规则不会生成警报

当你看看第一条规则时,你会注意到,如果它匹配的话,会产生一个警告,如果它不是在规则末尾的'flowbits:noalert'。
        此规则的目的是检查“userlogin”上的匹配,并在流程中标记该匹配。 所以,没有必要产生一个警报。
        第二条规则没有第一条规则就没有效果。 如果第一条规则匹配,则流程将该特定条件设置为在流中存在。 现在用第二个规则可以检查前一个分组是否满足第一个条件。 如果第二条规则匹配,则会生成警报。

有可能在规则中多次使用flowbits并组合不同的功能。

sameip源ip、目标ip检测:

会将流量中源ip和目标ip相同的显示出来。

alert  ip any any -> any any (msg:"GPL SCAN same SRC/DST"; sameip;          reference:bugtraq,2666; reference:cve,1999-0016;          reference:url,www.cert.org/advisories/CA-1997-28.html; classtype:bad-unknown;          sid:2100527; rev:9; metadata:created_at 2010_09_23, updated_at 2010_09_23;)

content内容匹配:

检测数据包中是否存在此内容,例如检测流量中是否存在Desktop.png

如果有多个匹配项可以使用 content:"evilliveshere";   content:"here"; 这种写法,注意如果没有用内容修饰的话,ids不会按照先后顺序去匹配的,只会在内容中匹配是否包含这2个值,必须用内容修饰来调整先后顺序,用distance 0 来让第二个匹配项在第一个匹配项匹配位置之后匹配,并且如果有多个content他们的关系是and关系必须都匹配到才告警 。

使用感叹号!对匹配项的否定:content:!"evilliveshere";

将字符串的十六进制用管道符(|)进行包围:content:"|FF D8|"; 字符串与十六进制混合使用:content:"|FF |SMB|25 05 00 00 80|";

匹配内容区分大小写,保留字符(; \ "|)须进行转义或十六进制转码

内容修饰,能够更加精准匹配

不区分大小写 nocase

content:"root";nocase;    #修饰符直接在;号后面添加

偏移位置 offset

content:"xss";offset 100;    #代表了从数据包开始位置0往后偏移100位字节后进行匹配

结束位置 depth

content:"xss";offset 100;depth 200; #代表了匹配数据包结束的位置,如果没有offset则是从开始位置计算,有offset则是从offset开始,此次则是从100字节开始匹配到200字节内的内容。

xx范围外 distance

本次匹配必须在上一次匹配结束位置到distance设置的偏移位置区间之外,例如content:"msg1";content:"msg2";distance:25; 如果msg1在第100行找到,那么就会在100+25后匹配msg2

xx范围内 within

本次匹配必须在上一次匹配结束位置之内,如果上次结束是100,within 15;那么第二次匹配必须在100到115之内开始匹配

如果within与distance同时出现 content:"evilliveshere";  content:"here";  distance:1;within:7; 则匹配here在  evilliveshere位置结束1-7内匹配

有效载荷大小 dsize

dsize: >64   用来匹配payload大小,可以用来检测异常包大小

pcre正则  pcre

content:"xss"; pcre:"xss\w"   先匹配content内容后才进行匹配pcre正则,这样的话减少系统开销

http修饰符:

更多详细内容查看:http://suricata.readthedocs.io/en/suricata4.0.4/rules/http-keywords.html

alert http $EXTERNAL_NET any -> $HOME_NET any (msg:"ET EXPLOIT Mi Router 3 Remote Code Execution CVE-2018-13023"; flow:to_server,established; http.method; content:"GET"; http.uri; content:"/cgi-bin/luci/|3b|stok="; fast_pattern; content:"&sns=sns&grant=1&guest_user_id=guid&timeout="; distance:0; reference:url,blog.securityevaluators.com/show-mi-the-vulns-exploiting-command-injection-in-mi-router-3-55c6bcb48f09; reference:cve,2018-13023; classtype:attempted-admin; sid:2030311; rev:2; metadata:affected_product Linux, attack_target IoT, created_at 2020_06_11, deployment Perimeter, former_category EXPLOIT, signature_severity Minor, updated_at 2020_06_11;)

http.method         客户端使用的HTTP方法(GET,POST等)

http.uri                 HTTP客户端请求的URI内容

http.header          HTTP请求或响应头的任何内容

http.request_body  http 客户端请求的主体内容

http.request_line

http.header_names  http 头字符串("Referer", "User-Agent"等)

http.user_agent

http.referer

http.content_type

http.host

http.protocol  http版本("HTTP/1.0")

http.content_len

http.stat_code 服务器响应的HTTP状态字段内容

fast_pattern快速匹配模式:

如果suricata规则中有多个匹配项目,快速匹配的目的是设置优先级最高的匹配项,如果设置了快速匹配模式没有命中则跳过这条规则

threshold阀值:

threshold:  type <threshold|limit|both>, track <by_src | by_dst>, count <N>, seconds <T>

threshold 最小阀值  也就是说只有匹配到至少多少次数才进行告警

limit 限制告警次数,例如最少5分钟内告警一次

调节阀值主要是通过2种方法,一种是通过规则内的threshold关键字来调节,下图中类型是limit也就是限制告警次数,track  by_src代表来源ip,seconds 60 每个60秒告警一次count 1

另外一种则是通过配置文件/etc/threshold.config来进行控制,更加推荐这种方法,写在规则内部每次更新后都会替换掉。

event_filter gen_id 1(组id), sig_id  1101111(规则id), type limit ,track by_src, count 1 ,  seconds 60

suppress 则是告警排除,排除指定ip产生的规则告警,下图则表示如果来自217.110.97.128/25如果命中图中的规则后则不会产生告警,主要用于排除一些扫描ip

reference引用:

连接外部信息来源,补充描述,reference:url,sf-freedom.blogspot.com/2006/07/heap-spraying-internet-exploiter.html

priority优先级:

手动设置规则优先级别,范围1-255,1最高,一般都是1-4,suricata会首先检查优先级较高的规则

classtype类别:

根据规则检测到的活动类型为规则分类,  classtype:attempted-user

sid特征标示符:

用于唯一性规则标识,sid不能重复,0-10000000 VRT保留,20000000-29999999 Emerging保留,30000000+:公用

gid组:

[1:2000000] 告警前面的1代表组id

rev修订:

规则版本号,每次修改规则rev则递增1

metadata元数据:

suricata会忽略元数据背后的语句,用于添加备注

自定义一个规则

alert  tcp any any -> any any (msg: "Http rule test!";  flow:to_server,established; http.host; content:" y.gtimg.cn"; sid:3030303; rev:1;)


凡是过往,即为序章

suricata 检测规则编写相关推荐

  1. 开源入侵检测系统—Snort的配置与检测规则编写

    IDS(入侵检测系统)模式配置 1.创建snort用户和组,其中snort为非特权用户 groupadd snort useradd snort -r -s /sbin/nologin -c SNOR ...

  2. 网络入侵检测--Snort软件规则编写

    Snort规则编写 今天主要来讲一下Snort中的规则编写规则,还有些绕口,就是编写他们的rules的方法,可以帮助我们理解他们提供的rules和定义我们自己的rules. 首先我们来看一条规则 al ...

  3. 如何编写snort的检测规则

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 摘要  ...

  4. Suricata规则编写

    规则格式 Suricata规则包括以下三部分: action,action决定当signature匹配的时候会发生什么 header, 定义了协议,IP地址,端口和规则的位置 rule options ...

  5. 入侵检测规则匹配算法--单模匹配算法、多模匹配算法、hyperscan

    入侵检测规则匹配算法,分为单模式匹配算法和多模式匹配算法. 1. 单模式匹配 单模式匹配,就是一个串跟一个串进行匹配,常见算法有:BM算法和KMP算法. 1.1 BF (Brute Force)暴力匹 ...

  6. CVE-2018-1273漏洞复现日志+IDS规则编写

    CVE-2018-1273(Spring Data Commons) 远程命令执行漏洞 漏洞描述: Spring Data Commons(1.13至1.13.10之前的版本,2.0至2.0.5的版本 ...

  7. CCleaner 垃圾文件清理规则 编写指南

    以下内容的英文版本来源于 CCleaner 官方论坛,仅供参考.欢迎大家编写并分享针对常用国产软件的垃圾文件清理规则! 需要说明的是规则文件(Winapp2.ini)需和程序文件放于同一文件夹下,才能 ...

  8. 实验 snort安装配置与规则编写

    实验 snort安装配置与NIDS规则编写 1 实验目的 在linux或windows任意一个平台下完成snort的安装,使snort工作在NIDS模式下,并编写符合相关情景要求的snort规则. 2 ...

  9. 绿盟WEB防火墙(waf)规则编写

    一.自定义规则编写 1.主要变量 2.12个变量 URI--------------------http://10.67.8.118:8889/abc/shell.php URI-path------ ...

最新文章

  1. 由浅入深C A S,小白也能与BAT面试官对线
  2. 面试官:哪些原因会导致JAVA进程退出?
  3. Playmaker全面实践教程之简单的使用Playmaker示例
  4. UVa1062 - Containers贪心算法
  5. Visual Studio 正则表达式替换
  6. [Yii Framework] spl_autoload_register 导致加载顺序冲突
  7. 解密ControlRotation与ActorRotation
  8. 数据库(3)数据库操作
  9. 怎么判断自己是不是备胎 ?
  10. 基于主键索引和普通索引的查询区别
  11. 用matlab进行单整性检验,应用VAR模型时的15个注意点(笔记)
  12. Mybatis-plus 代码生成器(新)工具类
  13. 主流编程语言的介绍及特点
  14. JAVA实现简单限流器(上)
  15. 锦标赛算法Python实现
  16. 如何为YouTube启用暗模式
  17. RLS算法到卡尔曼滤波 II
  18. Java集成华为云对象存储
  19. 普通话计算机等级用英语怎么说,普通话用英语怎么说
  20. 小程序关注公众号组件<official-account ></official-account>的使用方法

热门文章

  1. java ios乱码_相同的后台java代码,txt文件解析,安卓解析正常,IOS却是乱码,PC解析也正常.......
  2. Matlab学习-数据转换、数据格式处理
  3. SpringMVC--两个XML配置文件
  4. CentOS 查看主机地址
  5. 很多想看的书籍都是pdf的,应该怎样进行编辑?
  6. R语言 改变重置dataframe索引index
  7. Overleaf的北大模板怎么修改封面
  8. 一花一世界,一树一菩提
  9. C++ 获取string字符串长度的三种方法
  10. html5图exif,获取图片详细信息(exif)