Suricata 3规则介绍、以及使用

  • 列出更新源列表(有好多个规则源,后面有介绍的)

    suricata-update list-sources

    Name: sslbl/ja3-fingerprints
    Vendor: Abuse.ch
    Summary: Abuse.ch Suricata JA3 Fingerprint Ruleset
    License: CC0-1.0
    Name: malsilo/win-malware
    Vendor: malsilo
    Summary: Commodity malware rules
    License: MIT
    Name: abuse.ch/sslbl-c2
    Vendor: Abuse.ch
    Summary: Abuse.ch Suricata Botnet C2 IP Ruleset
    License: CC0-1.0
    Name: ptresearch/attackdetection
    Vendor: Positive Technologies
    Summary: Positive Technologies Attack Detection Team ruleset
    License: Custom

  • 启用某个规则集,如启动ptresearch/attackdetection的规则集

    suricata-update enable-source ptresearch/attackdetection

  • 再次更新我们的规则集

    suricata-update

  • 列出我们使用的规则源

    suricata-update list-enabled-sources

默认情况没有开启的规则

21/5/2025 -- 10:30:27 - <Warning> -- No enabled sources.

配置

复制代码
[root@nginx-ser rules]# suricata-update enable-source et/open
21/5/2025 -- 10:32:44 - <Info> -- Using data-directory /var/lib/suricata.
21/5/2025 -- 10:32:44 - <Info> -- Using Suricata configuration /etc/suricata/suricata.yaml
21/5/2025 -- 10:32:44 - <Info> -- Using /etc/suricata/rules for Suricata provided rules.
21/5/2025 -- 10:32:44 - <Info> -- Found Suricata version 4.1.10 at /usr/sbin/suricata.
21/5/2025 -- 10:32:44 - <Info> -- Creating directory /var/lib/suricata/update/sources
21/5/2025 -- 10:32:44 - <Info> -- Source et/open enabled
[root@nginx-ser rules]# suricata-update enable-source ptresearch/attackdetection
21/5/2025 -- 10:32:56 - <Info> -- Using data-directory /var/lib/suricata.
21/5/2025 -- 10:32:56 - <Info> -- Using Suricata configuration /etc/suricata/suricata.yaml
21/5/2025 -- 10:32:56 - <Info> -- Using /etc/suricata/rules for Suricata provided rules.
21/5/2025 -- 10:32:56 - <Info> -- Found Suricata version 4.1.10 at /usr/sbin/suricata.
21/5/2025 -- 10:32:56 - <Info> -- Source ptresearch/attackdetection enabled
[root@nginx-ser rules]# suricata-update list-enabled-sources
21/5/2025 -- 10:33:03 - <Info> -- Using data-directory /var/lib/suricata.
21/5/2025 -- 10:33:03 - <Info> -- Using Suricata configuration /etc/suricata/suricata.yaml
21/5/2025 -- 10:33:03 - <Info> -- Using /etc/suricata/rules for Suricata provided rules.
21/5/2025 -- 10:33:03 - <Info> -- Found Suricata version 4.1.10 at /usr/sbin/suricata.
Enabled sources:
  - et/open
  - ptresearch/attackdetection
  • 关闭某个规则源

    suricata-update disable-source et/pro

  • 删除某个规则源

    suricata-update remove-source et/pro

使用Suricata-update更新规则时,默认是将所有规则合并在一个规则文件中:/var/lib/suricata/rules/suricata.rules

Suricata-update有个 --no-merge参数,使用这个参数更新规则,规则不会进行合并,是以独立的文件存在于文件夹下。但是在管理规则的时候很不方便,必须要自己管理Suricata引入的规则。但是在禁用规则的时候,也可以使用suricata-update去配置disable.conf禁用的规则。不推荐使用 --no-merge参数更新规则。

指定一个文件让suricata-update合并输出会更简单。在suricata.yaml中修改default-rule-path和rule-files。

要禁用规则,在/etc/suricata目录下新建disable.conf,配置文件中写入规则特征,每次更新会禁用该规则。

参考Suricata-update的官方文档,disable.conf中支持三种规则特征:

第一种是sid,第二种是正则表达式,第三种是规则组名。

配置好disable.conf后,使用如下命令更新规则:

复制代码
suricata-update --disable-conf /etc/suricata/disable.conf

先简单了解了下Suricata默认ET规则每个规则的作用,后续再根据公司自身的情况,对规则做梳理、剔除和编写。

使用suricata-update管理规则很方便。我目前使用的规则源如下:

首先来关注一下 /etc/suricata 下的几个配置文件:

  • classification.config 用于定义和分类不同类型的网络事件,比如哪些是潜在的攻击、哪些是正常的网络活动等。

  • reference.config 包含了一些安全网站,漏洞平台的URL网址,用来联系外部的恶意攻击检测网站。

  • suricata.yaml是Suricata的主要配置文件,它包含了规则配置、接口配置、日志配置、检测配置等。

  • threshold.config 用于定义流量的阈值和速率限制。设置在特定时间内对特定事件或签名的触发次数进行限制。

  • rules/ 规则目录,存放不同种类的规则文件 *.rules,规则用来判定流量攻击类型,并定义攻击类型和告警种类等。

Suricata的规则#

在 rules/ 目录下存放的各种 *.rules 文件可以包含一个或多个用于检测不同类型威胁的规则,同样采用 Snort 的规则格式。

一个规则主要由以下三个部分组成:

  • action 决定当规则匹配时的处理动作

  • header 定义协议,IP地址,端口和规则的方向

  • rule options 定义规则的细节

在上图中,红色部分为action,绿色部分为header,蓝色部分为rule options。

action主要有这个:

  • alert 生成一个告警

  • pass 停止对包的进一步检查,并跳到所有规则的末尾

  • drop 丢弃数据包并产生告警

  • reject 向匹配报文的发送端发送RST/ICMP不可抵达错误

在IPS模式下,使用任何拒绝动作也会启用drop。

header部分定义协议,IP地址,端口和规则的方向:

  • 注明协议种类,只要是tcp、udp、icmp、ip等

  • Any:源地址/目的地址(IP)

  • Any:源端口/目的端口

  • ->:方向,单向流量;<>双向流量

  • Any:源地址/目的地址(IP)

  • Any:源端口/目的端口

  • rule options定义规则的细节:

rule options定义规则的细节:

  • msg:警报消息,当规则匹配时输出的消息

  • flow:流量匹配选项,指定规则匹配的流量特征,如是否已建立等

  • content:规则匹配的内容

  • classtype:规则的分类类型,由 classification.config 文件定义

  • sid:用于唯一性规则标识

  • rev:规则版本号

比如 rules/app-layer-events.rules 中的一条规则示例:

复制代码
alert ip any any -> any any (msg:"SURICATA Applayer Mismatch protocol both directions"; flow:established; app-layer-event:applayer_mismatch_protocol_both_directions; flowint:applayer.anomaly.count,+,1; classtype:protocol-command-decode; sid:2260000; rev:1;)
  1. alert 这是规则的开始,表示如果匹配此规则,Suricata将生成一个警报。

  2. ip any any -> any any 这表示规则适用于任何流量,不限制源IP和目的IP。

  3. msg:"SURICATA Applayer Mismatch protocol both directions" 这是当规则触发时显示的消息。

  4. flow:established 这个条件指定规则只应用于已建立的流,即那些已经完成了TCP三向握手的连接。

  5. app-layer-event:applayer_mismatch_protocol_both_directions 指定了应用层事件,即应用层协议不匹配的情况。

  6. flowint:applayer.anomaly.count,+,1 这是一个流量计数器,每当规则触发时,对流内的应用层异常计数器进行递增操作。

  7. classtype:protocol-command-decode 指定了事件的分类类型,即协议命令解码。

  8. sid:2260000 规则的唯一标识符Signature ID。

  9. rev:1 这是规则的版本号,区分同一规则的不同版本。

使用Suricata-Update规则管理工具,可以看到可用的规则源,该工具中有七个规则源,如下图所示:

复制代码
[root@nginx-ser rules]# suricata-update list sources
usage: suricata-update [-h] <command> ...
suricata-update: error: argument <command>: invalid choice: 'list' (choose from 'update', 'list-sources', 'list-enabled-sources', 'add-source', 'update-sources', 'enable-source', 'disable-source', 'remove-source')
[root@nginx-ser rules]# suricata-update list-sources
21/5/2025 -- 10:07:56 - <Info> -- Using data-directory /var/lib/suricata.
21/5/2025 -- 10:07:56 - <Info> -- Using Suricata configuration /etc/suricata/suricata.yaml
21/5/2025 -- 10:07:56 - <Info> -- Using /etc/suricata/rules for Suricata provided rules.
21/5/2025 -- 10:07:56 - <Info> -- Found Suricata version 4.1.10 at /usr/sbin/suricata.
21/5/2025 -- 10:07:56 - <Info> -- No source index found, running update-sources
21/5/2025 -- 10:07:56 - <Info> -- Downloading https://www.openinfosecfoundation.org/rules/index.yaml
21/5/2025 -- 10:07:58 - <Info> -- Saved /var/lib/suricata/update/cache/index.yaml
Name: sslbl/ja3-fingerprints
  Vendor: Abuse.ch
  Summary: Abuse.ch Suricata JA3 Fingerprint Ruleset
  License: CC0-1.0
Name: malsilo/win-malware
  Vendor: malsilo
  Summary: Commodity malware rules
  License: MIT
Name: abuse.ch/sslbl-c2
  Vendor: Abuse.ch
  Summary: Abuse.ch Suricata Botnet C2 IP Ruleset
  License: CC0-1.0
Name: stamus/nrd-phishing-30-open
  Vendor: Stamus Networks
  Summary: Newly Registered Domains Open only - 30 day list, phishing
  License: Commercial
  Parameters: secret-code
  Subscription: https://www.stamus-networks.com/stamus-labs/subscribe-to-threat-intel-feed
Name: abuse.ch/feodotracker
  Vendor: Abuse.ch
  Summary: Abuse.ch Feodo Tracker Botnet C2 IP ruleset
  License: CC0-1.0
Name: scwx/malware
  Vendor: Secureworks
  Summary: Secureworks suricata-malware ruleset
  License: Commercial
  Parameters: secret-code
  Subscription: https://www.secureworks.com/contact/ (Please reference CTU Countermeasures)
Name: abuse.ch/sslbl-blacklist
  Vendor: Abuse.ch
  Summary: Abuse.ch SSL Blacklist
  License: CC0-1.0
  Replaces: sslbl/ssl-fp-blacklist
Name: et/pro
  Vendor: Proofpoint
  Summary: Emerging Threats Pro Ruleset
  License: Commercial
  Replaces: et/open

我们能看到好多个规则源。

网上能找到的Suricata规则很多,列举几个

第一个是Suricata作者写的一个规则生成的脚本,生成用于应用和服务识别的规则。没用过,后面研究一下。

第二个是瑞士的非盈利组织abuse.ch维护的项目。他们维护的这个黑名单是标识恶意软件与僵尸网络相关的。他们提供了一个Suricata的规则,可以根据黑名单检测网络中的恶意连接。

第三个PT的Suricata规则库,根据恶意软件、黑客的网络通讯协议以及漏洞的poc去编写,感觉挺不错的,最主要的是,规则库更新的很快。

第四个我们就比较熟悉了,是Emerging Threats维护的规则,我们一般常用的就是这个规则库。很强大的规则库,规则数量有20000+。

ET规则集

研究下ET规则的每条规则的作用,官方的规则解释的链接为:

复制代码
app-layer-events.rules  针对应用协议的规则

botcc.portgrouped.rules botcc.rules
这些是已知和确认的活动僵尸网络和其C&C(command and control)服务器。由一些组织生成。每天更新。

ciarmy.rules
封锁被ciArmy.com标记出来的Top Attackers(ciArmy.com是个威胁数据库,对全球的任意ip地址提供准确的及时的评分)。定期更新。

compromised.rules  这是一个已知的受影响的主机列表。每天更新。

decoder-events.rules 解码器事件,里面包含了对解码器解码所产生的事件,比如包无效、包过大、过小等

dnp3-events.rules 包含对dnp3(分布式网络协议)的一些规则,不多,只有几条

dns-events.rules 包含对dns协议的一些规则,比如dnsflooded事件等,不多,只有几条

drop.rules  每天更新的Spamhaus DROP(Don't Route or Peer)列表,列出了著名的、专业的垃圾邮件发送者。每天更新。

dshield.rules 每天更新的DShield top attackers。十分可靠。

emerging-activex.rules  主要用来检测与ActiveX控件有关的攻击

emerging-attack_response.rules
这些规则是为了捕获成功攻击的结果,诸如"id=root"之类的东西,或者表示可能发生妥协的错误消息(即虽然产生了错误消息,但是攻击已经成功)。注意:木马和病毒感染后的活动一般在VIRUS规则集里,不是在这个规则集里。

emerging-chat.rules
主要检测聊天软件、即时通讯软件的攻击,大部分是国外的一些软件,比如facebook,雅虎,msn

emerging-current_events.rules

这些规则是不打算在规则集中长期保存的,或者是考虑纳入之前需要进行测试的规则。大多数情况下,这些都是针对当天的大量二进制URL的简单sigs,用来捕获CLSID新发现的易受攻击的应用程序,我们没有这些漏洞的任何细节。这些sigs很有用,却不是长期有效的。

复制代码
emerging-deleted.rules

里面都是被注释掉的规则,可能删除后的规则放在这里

复制代码
emerging-dns.rules

检测dns协议相关的攻击

复制代码
emerging-dos.rules

目的是捕获入站的DOS(拒绝服务)活动和出站指示。

复制代码
emerging-exploit.rules

用来检测exp的规则。一般来说,如果你正在找windows的exp,在这个规则里可以找到。就像sql注入一样,exploits有着自己的体系。
总之就是用来检测exploits漏洞的。

复制代码
emerging-ftp.rules

检测ftp协议相关的攻击

复制代码
emerging-games.rules

魔兽世界、星际争霸和其他流行的在线游戏都在这里。我们不打算把这些东西贴上邪恶的标签,只是它们不适合所有的攻击环境,所以将它们放在了这里。

复制代码
emerging-icmp_info.rules emerging-icmp.rules

检测与icmp协议相关的攻击

复制代码
emerging-imap.rules

检测与imap相关的攻击

复制代码
emerging-inappropriate.rules

色情、儿童色情,你不应该在工作中访问的网站等等。WARNING:这些都大量使用了正则表达式,因此存在高负荷和频繁的误报问题。只有当你真正对这些规则感兴趣时才去运行这些规则。

复制代码
emerging-info.rules

看了一些规则后,似乎是检测与信息泄露、信息盗取等事件的规则,里面会检测后门、特洛伊木马等与info相关的攻击

复制代码
emerging-malware.rules

这一套最初只是间谍软件,这就足够了。间谍软件和恶意软件之间的界限已经很模糊了。这里不仅仅是间谍软件,但是请放心,这里没有任何东西是你想在自己的网络或者PC上运行的。已知的更新模式、已知的恶意软件的UserAgent字符串和大量的其它有用的东西。如果你只准备运行一个规则集来保证安全性,这个规则集是首选。

复制代码
emerging-misc.rules

检测混杂的攻击,这种攻击一般没有确切的分类,或者使用了多种技术

复制代码
emerging-mobile_malware.rules

检测移动设备上的恶意软件

复制代码
emerging-netbios.rules

检测与netbios协议有关的攻击

复制代码
emerging-p2p.rules

P2P(Peer to Peer)之类的。我们并不想将它定义为有害的,只是不适合出现在IPS/IDS的网络环境中。

复制代码
emerging-policy.rules

对于经常被公司或组织政策禁止的事务的规则。Myspace、Ebay之类的东西。

复制代码
emerging-pop3.rules

检测与pop3协议有关的攻击

复制代码
emerging-rpc.rules

检测与rpc(远程过程调用协议)有关的攻击

复制代码
emerging-scada.rules

检测与SCADA(数据采集与监控系统)相关的攻击

复制代码
emerging-scan.rules

检测探测行为。Nessus,Nikto,端口扫描等这样的活动。这是攻击前准备时期的警告。

复制代码
emerging-shellcode.rules

检测shellcode,shellcode是一段用于利用软件漏洞而执行的代码,以其经常让攻击者获得shell而得名。

复制代码
emerging-smtp.rules

检测与smtp协议相关的攻击

复制代码
emerging-snmp.rules

测与snmp协议相关的攻击

复制代码
emerging-sql.rules

这是一个巨大的规则集,用于捕获在特殊应用程序上的特殊攻击。这里面有一些普遍的SQL注入攻击规则,效果很好,可以捕获大多数攻击。
但是这些规则根据不同的app和不同的web服务器,有很大的差别。如果你需要运行非常严格的web服务或者很重视信息的安全性,请使用这个规则集。

复制代码
emerging-telnet.rules

检测与telnet协议相关的攻击,例如暴力破解等

复制代码
emerging-tftp.rules

检测与tftp协议相关的攻击

复制代码
emerging-trojan.rules

检测trojan木马

复制代码
emerging-user_agents.rules

检测异常的user-agents

复制代码
emerging-voip.rules

检测voip相关的异常,它是一个新兴的规则集,目前还很小,但是我们预计它很快就会增长。

复制代码
emerging-web_client.rules

检测web客户端的攻击

复制代码
emerging-web_server.rules

检测web服务端的攻击

复制代码
emerging-web_specific_apps.rules

检测相关应用组件的漏洞(CVE)

复制代码
emerging-worm.rules

检测蠕虫

复制代码
http-events.rules

http事件规则

复制代码
modbus-events.rules

检测modbus事件

复制代码
rbn-malvertisers.rules rbn.rules

Rbn的规则,该规则已经过时了,可忽略。

复制代码
smtp-events.rules

检测smtp事件

复制代码
stream-events.rules

检测stream事件

复制代码
tls-events.rules

检测tls事件

复制代码
tor.rules

检测使用tor进行匿名通信的流量,tor本身没有威胁,但却是很可疑的行为

相关推荐
昭阳~6 分钟前
PostgreSQL日常维护
数据库·postgresql
北随琛烬入10 分钟前
Spark(32)SparkSQL操作Mysql
大数据·mysql·spark
数据库幼崽14 分钟前
MySQL 8.0 OCP 1Z0-908 171-180题
数据库·mysql·ocp
花伤情犹在14 分钟前
宝塔安装的 MySQL 无法连接的情况及解决方案
mysql
Мартин.42 分钟前
[Meachines] [Hard] Dab Enumerate+memcached+ldconfig-Lib-Hijack特權升級+Tyrant
数据库·缓存·memcached
weixin_4462608543 分钟前
现代化SQLite的构建之旅——解析开源项目Limbo
数据库·sqlite·开源
想你依然心痛1 小时前
Spark大数据分与实践笔记(第五章 HBase分布式数据库-02)
大数据·数据库·分布式·hbase
艺杯羹1 小时前
深入解析应用程序分层及 BaseDao 的封装策略
数据库·sql·mysql·jdbc·应用分层
xiaoqian99971 小时前
MySQL高频面试八连问(附场景化解析)
数据库·mysql·其他·面试
一只码代码的章鱼1 小时前
操作系统 第四章 -1
linux·服务器·数据库