raul17
首发于raul17
Suricata规则介绍、以及使用suricata-update做规则管理

Suricata规则介绍、以及使用suricata-update做规则管理

0x00 写在前面

最近在整理Suricata规则,在网上看到@creepycool师傅对suricata的默认ET规则做了整理,介绍了每条规则的目的与用途。参考他的内容,做了些完善。后文详细介绍下使用suricata-update工具对Suricata的规则进行管理。

0x01 Suricata规则简介

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

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

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

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

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

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

重点研究下ET的规则。

0x02 ET规则集

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

doc.emergingthreats.net

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

0x03 规则管理

规则管理,就是便于对suricata的规则进行统一的管理,比如更新、启用、停用等。相关的规则管理工具有很多,简单列举几个:

Scirius是个管理Suricata规则集的Web应用。搭建和使用也不难,参见github。

我使用的是Suricata-Update做Suricata的规则管理:

规则更新

  • 安装
pip install --pre --upgrade suricata-update
  • 更新Suricata规则库
suricata-update

发现其他可用的规则库

  • 更新规则源
suricata-update update-sources
  • 列出更新源列表
suricata-update list-sources
  • 启用ptresearch/attackdetection的规则集
suricata-update enable-source ptresearch/attackdetection
  • 再次更新我们的规则集
suricata-update
  • 列出我们使用的规则源
suricata-update list-enabled-sources
  • 关闭某个规则源
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中支持三种规则特征:

# suricata-update - disable.conf

# Example of disabling a rule by signature ID (gid is optional).
# 1:2019401
# 2019401

# Example of disabling a rule by regular expression.
# - All regular expression matches are case insensitive.
# re:heartbleed
# re:MS(0[7-9]|10)-\d+

# Examples of disabling a group of rules.
# group:emerging-icmp.rules
# group:emerging-dos
# group:emerging*

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

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

suricata-update --disable-conf /etc/suricata/disable.conf

0x04 总结

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

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

最近的一次更新结果如下,规则总数为23519条:

0x05 参考链接

creepycool师傅:Suricata默认规则集的目的与用途

suricata-update的官方文档:suricata-update - A Suricata Rule Update Tool

编辑于 2018-05-15

文章被以下专栏收录