Snort规则
Snort是一个轻量级的网络入侵检测系统。具有实时数据流量分析日志IP网络数据包捕获的能力,能够进行协议分析,对内容进行搜索/匹配。通过编写规则文件,能够检测各种不同的攻击方式,对攻击进行实时告警。
支持平台
Windows,Linux和Mac OS
参考文档
wangan.com/docs/snortnet
规则组成
-
规则头
- 规则行为
- 协议类型
- 源/目的IP地址
- 子网掩码
- 方向操作符
- 源/目的端口
-
规则选项
- 告警信息
- 异常数据的信息(特征码、signature)
例子
alert tcp 202.110.8.1 any -> 122.111.90.8 80 (msg:”Web Access”; sid:1)
规则头
- 规则行为
“alert”表示如果这条规则被触发则告警,属于规则行为。除了alet以外,规则行为还有4种,分别是log、pass、activate、dynamic。
- alert:使用选定的告警方法产生告警信息,并且记录数据包。
- log:记录数据包
- pass:忽略数据包
- activate:告警,接着打开其它的dynamic规则 。
- dynamic:保持空闲状态,直到被activete规则激活,作为一条log规则。
- 协议
每条snort规则的第二项为协议类型,目前支持分析的协议类型:TCP、UDP、ICMP,不排除未来可能对ARP、ICRP、GRE、OSPF、RIP、IPX等协议的支持。
- 源/目的IP地址
any 则为定义任意IP地址,比如![192.168.1.0/24,10.1.1.1.0/24]表示非这两个网段的IP。
- 端口号
any 则为定义任意端口号,也可以通过设置static静态端口号,或者通过设置端口号的范围,比如 1:1024表示端口号1到端口号1024、500:表示大于等于500的端口号、!1:500表示除了端口号1到500
- 方向操作符号
除了单向 “->”方向操作符外,还有“<>”双向操作符。通俗的说就是代表数据包的流向,操作符左边代表源地址\源端口,操作符右边代表目的地址\目的端口。
规则描述
msg:在报警和包日志中打印一个消息。
logto:把包记录到用户指定的文件中而不是记录到标准输出。
ttl:检查ip头的ttl的值。
tos:检查IP头中TOS字段的值。
id:检查ip头的分片id值。
ipoption:查看IP选项字段的特定编码。
fragbits: 检查IP头的分段位。
dsize:检查包的净荷尺寸的值 。
flags:检查tcp flags的值。
seq:检查tcp顺序号的值。
ack:检查tcp应答(acknowledgement)的值。
window:测试TCP窗口域的特殊值。
itype:检查icmp type的值。
icode:检查icmp code的值。
icmp_id: 检查ICMP ECHO ID的值。
icmp_seq: 检查ICMP ECHO 顺序号的值。
content:在包的净荷中搜索指定的样式。
content-list 在数据包载荷中搜索一个模式集合。
offset:content选项的修饰符,设定开始搜索的位置 。
depth:content选项的修饰符,设定搜索的最大深度。
nocase:指定对content字符串大小写不敏感。
session:记录指定会话的应用层信息的内容。
rpc:监视特定应用/进程调用的RPC服务。
resp:主动反应(切断连接等)。
react:响应动作(阻塞web站点)。
reference:外部攻击参考ids。
sid:snort规则id。
rev:规则版本号。
classtype:规则类别标识。
priority:规则优先级标识号。
uricontent:在数据包的URI部分搜索一个内容。
tag: 规则的高级记录行为。
ip_proto:IP头的协议字段值。
sameip:判定源IP和目的IP是否相等。
stateless:忽略刘状态的有效性。
regex:通配符模式匹配。
distance:强迫关系模式匹配所跳过的距离。
within:强迫关系模式匹配所在的范围。
byte_test:数字模式匹配。
byte_jump:数字模式测试和偏移量调整。
flow:这个选项要和TCP流重建联合使用。它允许规则只应用到流量流的某个方向上。这将允许规则只应用到客户端或者服务器端
规则例子
- 记录所有telnet登陆到一个特定主机的数据包
log tcp any any -> 192.168.1.1/32 23
- 在第一条规则基础上记录双向流量
log tcp any any <> 192.168.1.1/32 23
- 记录了所有到达本地主机的icmp数据包
log icmp any any -> 192.168.1.0/24 any
- 允许双向的从你的机子到其他站点的http包
pass tcp any 80 <> 192.168.1.0/24 any
- 这条告警规则显示了本地主机对其他主机的111端口的访问,并在log中显示端口影射调用(‘portmapper call’)信息
alert tcp 192.168.1.0/24 any -> any 111 (msg:"Portmapper call";)
- 记录其他任意地址的小于1024端口访问本地小于1024端口的流量
log tcp any :1024 -> 192.168.1.0/24 :1024
- 规则将会发现SYN FIN扫描
alert tcp any any -> 192.168.1.0/24 any (msg:"SYN-FIN scan!"; flags: SF;)
- 规则将会发现空tcp扫描
alert tcp any any -> 192.168.1.0/24 any (msg:"Null scan!"; flags: 0;)
- 规则将会发现Queso fingerprint扫描
alert tcp any any -> 192.168.1.0/24 any (msg:"Queso fingerprint";flags: S12;)
- 这条规则将进行基于内容的查找以发现溢出攻击
alert tcp any any -> 192.168.1.0/24 143 (msg:"IMAP Buffer overflow!"; content:"|90E8 C0FF FFFF|/bin/sh";)
- 这条规则将会发现PHF攻击
alert tcp any any -> 192.168.1.0/24 80 (msg:"PHF attempt"; content:"/cgi-bin/phf";)
- 规则将会发现traceroute包
alert udp any any -> 192.168.1.0/24 any (msg:"Traceroute"; ttl:1;)
- 规则将会发现其他主机对本地发出的icmp包
alert udp any any -> 192.168.1.0/24 any (msg:"Traceroute"; ttl:1;)
- 这条规则发现nmap的tcp 的ping扫描
alert tcp any any -> 192.168.1.0/24 any (flags: A; ack: 0; msg:"NMAP TCP ping!";)
- 这条规则将会发现源路由的数据包(源路由攻击)
alert tcp any any -> any any (ipopts: lsrr; msg: "Source Routed packet!";)
Kali下安装Snort
sudo apt-get update
sudo apt-get install flex
sudo apt-get install bison
sudo apt-get install aptitude
sudo aptitude install libpcap-dev
sudo apt-get install automake
sudo ldconifg
aptitude install libpcre3-dev
aptitude install libdumbnet-dev
aptitude install zlib1g-dev
wget https://www.snort.org/downloads/snort/daq-2.0.7.tar.gz
tar xvzf daq-2.0.7.tar.gz
cd daq-2.0.7
./configure && make && sudo make install
wget https://www.snort.org/downloads/snort/snort-2.9.16.1
.tar.gz
tar xvzf snort-2.9.16.1.tar.gz
cd snort-2.9.16.1
./configure --disable-open-appid --enable-sourcefire && make && sudo make install