Writing Snort Rules

来源
https://paginas.fe.up.pt/~mgi98020/pgr/writing_snort_rules.htm

基础

Snort使用一种简单,轻量级的规则描述语言,该语言灵活且强力。在开发Snort规则时,需要遵守以下准则:1)首先,Snort规则必须完全包含在一行上,因为Snort规则解析器不知道如何处理多行上的规则。
Snort规则被分为两个逻辑部分,规则头和规则选项。规则头包含规则的操作、协议、源和目标IP地址和网络掩码,以及源和目标端口信息。规则选项部分包含警报消息和关于应该检查数据包的哪些部分,以确定是否应该采取规则操作的信息。
例如

alert tcp any any -> 192.168.1.0/24 111 (content:"|00 01 86 a5|"; msg: "mountd access";)

第一个括号之前的文本是规则头,括号中包含的部分是规则选项。规则选项部分中冒号前的单词称为选项关键字。值得注意的是,规则选项部分并不是任何规则特别要求的,它们只是为了定义更严格的数据包来收集或警告(或删除) 。组成规则的所有元素都必须真实有效,才能采取所指示的规则动作。同时,可以考虑在一个Snort规则库文件中的各种规则来形成一个大的逻辑OR语句。首先来看规则头部分。
Includes
incuce关键字允许将其他规则文件包含在Snort命令行中指示的规则文件中。它的工作原理类似于C编程语言中的“#include”,读取命名文件的内容,并将它们放在文件中包含出现的位置。
规范

include: <include file path/name>

请注意,在这一行的末尾没有分号。所包含的文件将把任何预定义的变量值替换为它们自己的变量引用。更多相关信息,请参见Snort规则文件中定义和使用变量的Variables section 。

Variables
变量可以在Snort中定义。这些都是用var关键字设置的简单替换变量。

var: <name> <value>
var MY_NET [192.168.1.0/24,10.1.1.0/24]
alert tcp any any -> $MY_NET any (flags: S; msg: "SYN packet";)

规则变量名称可以通过数种方式进行修改。可以使用“$”操作符来定义元变量。该关键字可以与修饰符‘ ?’和 ‘ - ’ 一起使用。

$var - define meta variable
$(var) - replace with the contents of variable "var"
$(var:-default) - replace with the contents of the variable "var" or with "default" if "var" is undefined.
$(var:?message) - replace with the contents of variable "var" or print out the error message "message" and exit

规则头

规则动作:

规则头包含定义包的“谁、在哪里、做什么”的信息,以及当出现符合规则中指示的数据包时该如何响应。规则中的第一项是规则动作。规则动作会告诉Snort在找到符合规则条件的数据包时要做什么。这里有五种可用的默认操作:alert, log, pass, activate, 和 dynamic。

  • alert - 使用所选的警报方法生成一个警报,然后记录该数据包
  • log - 记录包
  • pass - 忽略包
  • activate - 发出警报,然后打开另一个动态规则
  • dynamic - 保持空闲,直到被激活规则激活,然后充当日志规则
    您还可以定义您自己的规则类型,并将一个或多个输出插件与它们关联起来。然后,您可以将规则类型作为Snort规则中的操作使用。
这个示例将创建一个类型,其日志仅为tcpdump:
ruletype suspicious
{type logoutput log_tcpdump: suspicious.log
}

Protocols:
规则中的下一个字段是协议。Snort目前正在分析的有三种IP协议的可疑行为:tcp、udp和icmp。

IP Addresses:
规则标头的下一部分将处理给定规则的IP地址和端口信息。关键字“any”可以用来定义任何地址。Snort没有为规则文件中的IP地址字段提供主机名查找的机制。这些地址由一个直接的数字IP地址和一个CIDR块组成。CIDR块指示应该应用于规则的地址和根据规则进行测试的任何传入数据包的网络掩码。例如,地址/CIDR组合192.168.1.0/24将表示从192.168.1.1到192.168.1.255的地址块。任何使用此指定的规则,例如目标地址,都将与该范围内的任何地址相匹配。CIDR名称为我们提供了一种很好的短写方法来用几个字符指定大地址空间。
有一个运算符可以应用于IP地址,即否定运算符。此操作符告诉Snort匹配除了列出的IP地址所指示的地址以外的任何IP地址。否定运算符用 “ ! ” 表示。例如,对初始示例的一个简单修改是让它对来自本地网络之外的任何流量发出警报。

alert tcp !192.168.1.0/24 any -> 192.168.1.0/24 111 (content: "|00 01 86 a5|"; msg: "external mountd access";)
此规则的IP地址表示“任何具有源IP地址不是来自内部网络和内部网络上的目标地址的tcp数据包”。

Port Numbers:
端口号可以通过多种方式指定,包括“任何”端口、静态端口定义、范围和否定方式。任何“端口都是通配符值,字面意思是任何端口。静态端口 由单个端口号表示,如端口映射器111,telnet23,或http80等。端口范围用范围操作符“:”表示。范围运算符可以应用 关于获取不同含义的方法,如下所示。

  • log udp any any -> 192.168.1.0/24 1:1024
    日志来自从1到1024的任何端口和目的地端口的udp流量
  • log tcp any any -> 192.168.1.0/24 :6000
    记录从任何端口转到小于或等于6000的端口的tcp流量
  • log tcp any :1024 -> 192.168.1.0/24 500:
    记录从小于或等于1024的私有端口发送到大于或等于500的端口的tcp流量

端口否定是通过使用否定运算符 " ! "。否定运算符可以应用于任何其他规则类型(除了任何规则,这将转换为无,如何Zen…)

log tcp any any -> 192.168.1.0/24 !6000:6010

The Direction Operator
方向操作符“->”表示该规则适用的流量的方向或“方向”。方向操作符左侧的IP地址和端口号为边界 d为来自源主机的流量,操作员右侧的地址和端口信息为目标主机。还有一个双向运算符,即籼稻 带有“<>”符号。这告诉Snort要考虑源方向或目标方向上的地址/端口对。这对于记录/分析对话的双方都很方便,例如 Telnet或POP3会话。

log !192.168.1.0/24 any <> 192.168.1.0/24 23

规则选项

规则选项构成了Snort入侵检测引擎的核心,结合了易用性、功能和灵活性。所有的Snort规则选项都使用分号“;”字符相互分隔 cter.规则选项关键字用冒号分隔“:”字符。目前有15个规则选项关键字:

  • msg - 打印警告和包日志信息
  • logto - 将数据包记录到用户指定的文件名中,而不是记录在标准的输出文件中
  • ttl - 测试IP标头的TTL字段值
  • tos - 测试IP标头的TOS字段值
  • id - 测试IP头的片段ID字段
  • ipoption - 查看IP选项字段中的特定代码
  • fragbits - 测试IP报头的分片位
  • dsize - 根据一个值来测试数据包的有效负载大小
  • flags - 测试TCP标志的内容
  • seq - 测试特定值的TCP序列号字段
  • ack - 测试TCP的ACK域
  • itype - 根据特定的值测试ICMP类型字段
  • icode - test the ICMP code field against a specific value
  • icmp_id - test the ICMP ECHO ID field against a specific value
  • icmp_seq - test the ICMP ECHO sequence number against a specific value
  • content - search for a pattern in the packet’s payload
  • content-list - search for a set of patterns in the packet’s payload
  • offset - modifier for the content option, sets the offset to begin attempting a pattern match
  • depth - modifier for the content option, sets the maximum search depth for a pattern match attempt
  • nocase - match the preceeding content string with case insensitivity
  • session - dumps the application layer information for a given session
  • rpc - watch RPC services for specific application/proceedure calls
  • resp - active response (knock down connections, etc)
  • react - active response (block web sites)

Snort Rules规则相关推荐

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

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

  2. ad19电气规则检查_建议收藏Altium Designer Rules规则详解

    对于PCB的设计, AD提供了详尽的10种不同的设计规则,这些设计规则则包括导线放置.导线布线方法.元件放置.布线规则.元件移动和信号完整性等规则.根据这些规则, Protel DXP进行自动布局和自 ...

  3. 开源IDS系列--【2015】获取snort vrt 规则(talo)

    1.在snort网站注册 2.注册成功后,会在个人信息中生成:Oinkcode 3.https://www.snort.org/rules/snortrules-snapshot-2973.tar.g ...

  4. YII2 rules 规则验证器

    [['code','name'],'trim'], ['code','string','max'=>4], [['code','name','status'], 'required'], ['e ...

  5. snort create mysql_Snort入侵检测系统构建

    Snort入侵检测系统构建 难度等级:中等 实验时长:200min [实验目的] 通过本实验掌握snort入侵检测系统的搭建以及相关配置. [实验环境] Snort服务器登录信息: 用户名: coll ...

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

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

  7. snort规则检测引擎初探

    0x01缘由        目前的产品开发过程中,涉及到了对应用层协议类型的检测.考虑到要构建高效的规则匹配引擎,于是再次研究了snort的规则引擎.      主要目的还是开阔下设计思路和借鉴一些方 ...

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

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

  9. Yii2.0 rules常用验证规则

    设置一个修改方法,但是save(),没有成功,数据修改失败,查了好久,一般情况就是不符合rules规则,而我没有设置rules规则,重新设置了一个不能为空,然后就修改成功,rules里面什么也不写,也 ...

最新文章

  1. hibernate对象管理
  2. 《Java设计模式与实践》——工厂模式
  3. 一次二次开发中的经验与教训(一)
  4. 【C++教程】03.第一个程序解析
  5. Python程序开发——第四章 字典与集合
  6. windows7 64位下安装tensorflow终极解决方案
  7. gzip和gunzip 解压参数
  8. linux命令中cd / 和 cd ~
  9. 十三、实现Comparable接口和new ComparatorT(){ }排序的实现过程
  10. oracle不空顺序输出,Oracle应用笔记
  11. python无效的类字符串_Python基础-字符串处理
  12. 【源码阅读】dbutil包中BasicRowProcessor内部类CaseInsensiti...
  13. 在“后台反复读取用户相册”?微信回应:最新版本将取消
  14. dlib疲劳检测_基于OpenCV的实时睡意检测系统
  15. c c++函数资源释放时避免goto的方法
  16. Hive建表语句Location与HDFS创建目录
  17. 身份证前六位地址验证
  18. 基础篇:6.5)形位公差-标注 Mark
  19. 服务器pcb维修方法,电路板维修的方法与口诀
  20. 文档多级列表_如何在Google文档中创建多级列表

热门文章

  1. Matlab中EMD工具箱的下载安装和使用
  2. 大庆职业学院计算机应用,大庆职业学院计算机应用工程系
  3. webpack ensure异步加载
  4. 基于java(springboot框架)家政服务预约系统 开题报告
  5. Linux内核分析——第二周学习笔记
  6. 如何提升CSS技术?8个硬核技巧带你迅速提升CSS技术
  7. 开放大学计算机网络试题,国家开放大学电大本科《计算机网络》2024期末试题及答案(试卷号:1255).docx...
  8. python数值积分_数值积分 python代码实现
  9. 【2023 年第十三届 MathorCup 高校数学建模挑战赛】D 题 航空安全风险分析和飞行技术评估问题 27页论文及代码
  10. 算法题-小彭十分喜欢烤串,但是他的钱只能买固定的烤串的数量M,假设这些烤串的价格相同且恰逢店老板正在举办活动,每个烤串都是用各种不同的食材串成(其中也包括种类相同的)且每个烤串都有三个食材。食材有豆腐