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本身没有威胁,但却是很可疑的行为

相关推荐
虾条_花吹雪1 小时前
5、Spring AI(MCPServer+MCPClient+Ollama)开发环境搭建_第一篇
数据库·人工智能·学习·spring·ai
一 乐7 小时前
民宿|基于java的民宿推荐系统(源码+数据库+文档)
java·前端·数据库·vue.js·论文·源码
鹏码纵横7 小时前
已解决:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 异常的正确解决方法,亲测有效!!!
java·python·mysql
美林数据Tempodata8 小时前
大模型驱动数据分析革新:美林数据智能问数解决方案破局传统 BI 痛点
数据库·人工智能·数据分析·大模型·智能问数
野槐9 小时前
node.js连接mysql写接口(一)
数据库·mysql
Zzzone6839 小时前
PostgreSQL日常维护
数据库·postgresql
chxii9 小时前
1.13使用 Node.js 操作 SQLite
数据库·sqlite·node.js
冰刀画的圈9 小时前
修改Oracle编码
数据库·oracle
这个胖子不太裤9 小时前
Django(自用)
数据库·django·sqlite
麻辣清汤9 小时前
MySQL 索引类型及其必要性与优点
数据库·mysql