2024年3月24日发(作者:)

Snort预处理器介绍(详细)

Snort作为比较NB的开源IDS产品,其功能不限于规则匹配,还能检测异常、跨包

攻击和协议非规范攻击等。规则匹配由Snort的引擎部分完成;而其它的功能就要借助

Snort的预处理器了。

Snort预处理器,以插件形式实现,可以根据实际的需要编写插件,具有易扩展的特

点。目前,Snort预处理器主要功能有:

包重组

解码协议

异常检测

1、包重组

包重组在[2007年3月8日]的Blog中已有简单介绍。包重组主要有流重组和分片重

组两种形式,它们是Snort预处理器的最重要部分。具体的预处理器stream4和frag2均

已介绍过,这里略过。

2、解码协议

解码协议,把数据包协议解码成一个统一的格式,便于Snort进行规则匹配处理。

如,HTTP报文中,URL有多种表达格式:ASCII码;Unicode;“./”和“.”为等价

表示等。多种表达格式为规则匹配带来很大的不便,往往攻击报文在一种格式下可被检测,

但换一种格式表示就检测不出来了。通过解码协议,预先将各种合法格式表示成可检测的

标准格式,便容易检测HTTP报文了。处理HTTP的预处理器为:http_decode。

还有,Telnet常将协商数据和普通数据混合起来,这样给检测带来了很大的不便:攻

击数据中可能因插入了协商数据而不能够被Snort的规则匹配检测出来。所以,Snort的

做法是,先将协商数据从Telnet报文中去除,只保留普通的数据,然后将报文提交给Snort

的规则匹配引擎来处理。处理Telnet协商数据的预处理器为:telnet_decode。

再有,在RPC中,RPC有类似IP分片的RPC报文分片,其分片,可能是由于数据过

大,不得已而分片;也可能是为了逃避Snort的检测,故意对RPC攻击报文进行的分片。

往往由于攻击报文被分成多个部分而使各个分片失去攻击特征,以致Snort的规则匹配引

擎不能检测。所以,Snort在预处理器里,先将分片的RPC报文拼成一个完整的RPC报

文,然后交给规则引擎处理。处理RPC分片的预处理器为:rpc_decode。

3、异常检测

像端口扫描(通常是实施攻击的第一步,也是关键一步),如果通过规则匹配来检测,

那么,要么检测不出来,要么会出现过多的误报。因为端口访问有合法的,也有非法的,

但没有一个规则来判断某次端口访问是合法的。因此,Snort利用预处理器,用状态检测

的方法,对一定时间内的端口访问、目的主机等情况作统计分析,当有超出正常情况的端

口访问时,发出报警。处理端口扫描的预处理器为:portscan。

上面详细介绍了Snort预处理器的功能;下面,将介绍如何建立自己的Snort预处理

器。