本文只针对snort3
Snort选项
1、 msg - 在报警和包日志中打印一个消息
2、 logto - 把包记录到用户指定的文件中而不是记录到标准输出
-------------------------------------------------------------------------------------------------------
ip协议首部
3、 ttl - 检查ip头的ttl的值(生存时间),可以中转多少个路由器的意思,每经过一个路由器,TTL会减少 1,直到变成0 则丢弃该包。
4、 tos- 检查ip头的tos域的值,用来表示服务的质量。可划分为 DSCP 和 ECN,DSCP 用来进行质量控制,ECN 用来报告网络拥堵情况。
5、 id - 检查ip头的分片id值,用于分片重组。同一个分片的标识值是相同的,不同分片的标识值不同。
6、 ipoption- 检查ip头的option域,可变长的可选信息,最多包含40字节。选项字段很少被使用。可用的IP可选项有:
(1)记录路由: 记录数据包途径的所有路由的IP,这样可以追踪数据包的传递路径;
(2)时间戳: 记录每个路由器数据报被转发的时间或者时间与IP地址对,这样就可以测量途径路由之间数据报的传输的时间;
(3)松散路由选择: 指定路由器的IP地址列表数据发送过程中必须经过所有的路由器;
(4)严格路由选择: 数据包只能经过被指定的IP地址列表的路由器;
(5)上层协议(如TCP/UDP)的头部信息。
7、 fragbits- 检查ip头的分片标志位(flags)
-------------------------------------------------------------------------------------------------------
8、 dsize - 检查包的数据部分大小(data size)
9、 content - 在包的数据部分中搜索指定的内容
10、 nocase - 指定对content字符串大小写不敏感
12、 flags -检查tcp flags的值
13、 seq - 检查tcp顺序号的值
14、 ack - 检查tcp应答(acknowledgement)的值
15、 itype - 检查icmp type的值
16、 icode - 检查icmp code的值
17、 session - 记录指定会话的应用层信息的内容
18、 icmp_id - 检查ICMP ECHO ID的值
19、 icmp_seq - 检查ICMP ECHO 顺序号的值
20、 rpc - 监视特定应用/进程调用的RPC服务
21、 resp - 主动反应(切断连接等)
22、 reference- 外部参考id
23、 sid- snort的规则id
24、 rev- 规则的版本号
25、 classtype- 规则的分类号,攻击分类
26、 priority- 规则的优先级
27、 ip_proto- ip头的协议值
28、 sameip- 源地址和目标地址相同
29、 stateless- 无状态连接(match regardless of stream state)
30、 regex- 通配符模式匹配
http://tc.wangchao.net.cn/bbs/detail_238700.html
Snort用户手册(转)_cuemes08808的博客-CSDN博客
-------------------------------------------------------------------------------------------------------
sid - snort 规则 id
补充选项
Flow: to_server, established
3.4 Snort Non-payload 检测规则选项_「Snort安装使用中文手册」 - 网安
How does the flow option of Snort work? - Information Security Stack Exchange
-------------------------------------------------------------------------------------------------------
http_uri
使用GET方法即可
3.5 Payload Detection Rule Options
3.3 Snort Payload检测规则选项_「Snort安装使用中文手册」 - 网安
Snort rules with content - Stack Overflow
-------------------------------------------------------------------------------------------------------
detection_filter
detection_filter 定义了一个发包速率,在规则生成事件之前,源主机或目标主机必须超过这个速率。
例:
detection_filter:track by_src,count 50,seconds 1;
当1秒内已检测到50个数据包时,snort从检测到的第51个包开始报警
-------------------------------------------------------------------------------------------------------
pkt_data
即“请求数据”请求数据
-------------------------------------------------------------------------------------------------------
within
within关键字是一个内容修饰符,它要求处于within关键词之前的两个content匹配之间的距离不超过N个字节。
within N;
例:
content:"ABC";content:"EFG",within 10;
payload:ABC1234567EFG 可触发,而“ABC12345678EFG”不可触发
即“ABC”与“EFG”之间不可超过10个字节,且这10个字节包含“EFG”
-------------------------------------------------------------------------------------------------------
distance
distance 关键字要求处于distance关键词之前的两个content匹配之间的距离须超过N个字节。
distance N;
例:
content:"ABC";content:"EFG",distance 7;
payload:ABC1234567EFG 可触发,而“ABC123456EFG”不可触发
即“ABC”与“EFG”之间必须超过7个字节。
亦即从“C”之后的字节开始(即从“1”开始),到字节“G”为止,字节数<10
故distance常与within连用
content:"ABC";content:"EFG",within 6, distance 3;
表示从ABC之后的3个字节开始的6个字节内,应包含EFG
payload:ABC123456EFG 刚好触发
-------------------------------------------------------------------------------------------------------
depth
设定搜索的最大深度,它设置了内容模式匹配函数从起始位置搜索的最大深度,且该深度应包含content。
例:
content:"ABC";content:"EFG",depth 12;
payload:ABC123456EFG 可触发,而“ABC1234567EFG”不可触发
-------------------------------------------------------------------------------------------------------
offset
设置匹配content的起始位置,depth从offset设置的起始位置开始算起
例:
payload:ABC123456EFG
content:"ABC";content:"EFG", depth 11; 不可触发
content:"ABC";content:"EFG", depth 11,within 1; 可触发
-------------------------------------------------------------------------------------------------------
byte_jump
flow: to_server; content:"|11 94 00 F5|"; byte_jump:4, 12, relative, align; byte_test:4, >, 900, 20, relative;
表示命中|11 94 00 F5|之后,再偏移12字节,获取4字节转成数值A,并将获取的数值进行4字节对齐,得到A+。再从偏移A+的地方往后偏移20字节,获取4字节跟900比较。
主要针对RPC
https://isecurity.huawei.com/sec/web/viewIpsmanual.do?id=2214
-------------------------------------------------------------------------------------------------------
http_client_body
The http_client_body keyword is a content modifier that restricts the search to the body of an HTTP client request.
-------------------------------------------------------------------------------------------------------
注意事项
1.对于to_server和to_client
需要在设置文件中查看snort规则中对应的service类型,是否以第一次的源IP为client。Snort会以首次发包的源IP进行client和server的区分,从而检测to_server和to_client。
2.对于http_uri等http相关的包负载检测字段
snort会检测3次握手包,一次攻击包,还会检测第5个包,其内容为受害主机对攻击主机tcp的ack确认包。在使用libnet构造包时,此ack包的seq值为seq+len(attackpayload)+1,如此才可正常确认。
3.sid问题
sid不应相同。当有多条规则使用相同sid时,snort只会应用最后一条使用此sid的规则
4.运行命令
snort -c /usr/local/etc/snort/snort.lua --daq-dir /usr/local/lib/daq -R /usr/local/etc/snort/rules/rules-server115.rules -i eno1 -A fast -k none
参考
snort学习以及规则编写_fa1lr4in的博客-CSDN博客_snort uricontent