snort入侵检测基础概述
编写规则的分析
语法分析
alert icmp any any <> $HOME_NET any (logto:"task1";msg:"---msg---";sid:100001)
1 2 3 4 5 6 7 8
1.响应机制
snort对规则的响应机制有5种
alert #警报并记录 pass #忽略 log #记录
activation #警报并启动另一个动态规则链
dynamic 由其他规则包调用
2.协议
snort能够分析的协议是:TCP、UDP和ICMP
3和4
源IP地址 源IP地址端口 #这些地址只能使用数字/CIDR
5 数据包流向
->单向 <-单向 <>双向
6和7
目的ip地址 目的ip地址端口
8可选项内容
1 msg 在警报和记录的数据中打印消息。 2 logto 将数据包记录到一个用户指定的文件 中。 3 ttl 检测 IP 数据包的 TTL 域。 4 id 检测 IP 数据包的分段 ID 域是否等于特定 的值。 5 dsize 检测数据包的有效荷载是否等于特定 的值。 6 content 在数据包的有效荷载重搜索特定的模 式串。 7 offset 设定 content 中所说的起点。 8 depth 设定 content 中所说的终点。 9 nocase 设定搜索中使用与大小写无关的方 式。 10 flags 检测 TCP 数据包的标志是否等于特定的 值。 11 seq 检测 TCP 的顺序号是否对于特定的值。 12 ack 检测 TCP 的应答域否对于特定的值。 13 itype 检测 ICMP 类型域是否等于特定的值。 14 icode 检测 ICMP CODE域是否等于特定的值。 15 session 将应用层中一个指定的会话总的数据 复制出来。 16 icmp id 检测 ICMP ECHO ID 域是否等于特 定的值。 17 icmp seq 检测 ICMP ECHO 顺序号是否等于 特定的值。 18 ipoption 检测 IP 数据包中的协议头部的选项 部分是否存在特定值。 19 rpc 检测 RPC服务的特定应用。 20 resp 主动应答。 格式 key:"pass";
告警设置
snort运行参数
-c 指定配置文件 -l 指定log存放目录 -L 指定log记录名称,与-l配合 -r 指定读取的pcap报文
and src ip
adn src/dst port portnumber
接口配置参数
-i #指定监听报文接口
-I #报警输出可以指定某个接口
-h 指定目标主机 192.168.0.0/24指定这个网段的所有主机
-dve 指定显示数据链路层的信息
报警模式的设置
-A fast #快速警报模式。使用时间戳、警报消息、源和目标IP/端口以简单格式写入警报 -A full #完全警报模式。这是默认警报模式,如果未指定模式,将自动使用 -A unsock #向另一个程序可以监听的unix套接字发送警报 -A none #关闭警报 -A console #向控制台发送“快速样式”警报 -A cmg #生成“cmg样式“警报
snort.conf详解
1)set the network variables #配置了多组IP变量 端口变量用于rules 部分路径信息寻找规则和库文件 2)Configure the decoder #解码器报警 3)Configure the base detection engine #配置基础检测引擎参数 4) Configure dynamic loaded libraries #配置动态加载库路径,动态规则路径 5) Configure preprocessors # 配置预处理器的开关,会把部分协议数据转化成变量 6) Configure output plugins #配置高速模式下的输出方式 7) Customize your rule set #配置自定义规则 8) Customize preprocessor and decoder rule set #配置预处理器和解码器规则集合 9) Customize shared object rule set #配置共享对象规则
# 设置要保护的网络地址 ipvar HOME_NET any # 设置外部网络地址。在大多数情况下保留为 any ipvar EXTERNAL_NET any # 您网络上的DNS服务器列表 ipvar DNS_SERVERS $HOME_NET # 您网络上的SMTP服务器列表 ipvar SMTP_SERVERS $HOME_NET # 您网络上的web服务器列表 ipvar HTTP_SERVERS $HOME_NET # 您网络上的sql服务器列表 ipvar SQL_SERVERS $HOME_NET # 您网络上的telnet服务器列表 ipvar TELNET_SERVERS $HOME_NET # 您网络上的ssh服务器列表 ipvar SSH_SERVERS $HOME_NET # 您网络上的ftp服务器列表 ipvar FTP_SERVERS $HOME_NET # 您网络上的sip服务器列表 ipvar SIP_SERVERS $HOME_NET # 运行web服务器的端口列表 portvar HTTP_PORTS [36,80,81,82,83,84,85,86,87,88,89,90,311,383,443,555,591,593,623,631,664,801,808,818,901,972,1158,1220,1270,1414,1533,1581,1719,1720,1741,1801,1812,1830,1942,2231,2301,2375,2381,2578,2809,2869,2980,3000,3029,3037,3057,3128,3443,3702,4000,4343,4592,4848,5000,5054,5060,5061,5117,5222,5250,5416,5443,5450,5480,5555,5600,5814,5894,5984,5985,5986,6080,6173,6988,7000,7001,7005,7070,7071,7080,7144,7145,7180,7181,7510,7770,7777,7778,7779,8000,8001,8008,8014,8015,8020,8028,8040,8080,8081,8082,8085,8088,8090,8095,8118,8123,8161,8180,8181,8182,8222,8243,8280,8300,8333,8344,8393,8400,8443,8484,8500,8509,8694,8787,8800,8852,8880,8888,8899,8983,9000,9001,9002,9050,9060,9080,9090,9091,9111,9200,9201,9290,9443,9447,9700,9710,9788,9830,9850,9999,10000,10080,10100,10250,10255,10297,10443,11371,12601,13014,14592,15489,16000,16992,16993,16994,16995,17000,18081,19980,29991,30007,30018,30888,33300,34412,34443,34444,36099,40007,41080,44449,49152,49153,50000,50002,50452,51423,53331,54444,55252,55555,56712] # 查看shellcode的端口列表,shellcode是一段用于利用软件漏洞而执行的代码 portvar SHELLCODE_PORTS !80 # 可能看到oracle攻击的端口列表 portvar ORACLE_PORTS 1024: # 要查找SSH连接的端口列表 portvar SSH_PORTS 22 # 运行ftp服务器的端口列表 portvar FTP_PORTS [21,2100,3535] #运行SIP服务器的端口列表 portvar SIP_PORTS [5060,5061,5600] # 用于文件检查的文件数据端口列表 portvar FILE_DATA_PORTS [$HTTP_PORTS,110,143] # GTP预处理器使用的GTP端口列表 portvar GTP_PORTS [2123,2152,3386] # 其他变量,不要修改 ipvar AIM_SERVERS [64.12.24.0/23,64.12.28.0/23,64.12.161.0/24,64.12.163.0/24,64.12.200.0/24,205.188.3.0/24,205.188.5.0/24,205.188.7.0/24,205.188.9.0/24,205.188.153.0/24,205.188.179.0/24,205.188.248.0/24] # 你的规则文件路径 (可以是相对路径) var RULE_PATH ../rules var SO_RULE_PATH ../so_rules var PREPROC_RULE_PATH ../preproc_rules #如果使用黑白名单预处理器,请配置这些 var WHITE_LIST_PATH ../rules var BLACK_LIST_PATH ../rules
三种变量 ipvar 定义一组IP 这种定义可以是一种ip或几个ip ipvar example[1.1.1.1,2.2.2.0/24] portvar 定义一组端口,可以是一个端口几个端口 端口范围 portvar exampble[80,91:94] var 定义一个普通变量 var PREPROC_RULE_PATH ../preproc_rules