Snort部件
一、Snort部件介绍
Snort在逻辑上可以分为多个部件,这些部件共同工作,来检测特定的特征,并产生符合特定要求的输出格式。主要包含以下部件:
- 包解码器
- 预处理器
- 探测引擎
- 日志和告警系统
- 输出模块
1.1 包解码器
包解码器从不同的网络接口中获取包并准备预处理器或者送到探测引擎。网络接口可能是以太网、SLIP、PPP等
1.2 预处理器
预处理器是Snort在探测引擎做出一些凑真欧来发现数据包是否用来入侵之前排列或者修改数据包的组件或者插件。一些预处理器也可以通过发现数据包头部异常来执行一些探测工作,并产生告警。预处理器的工作对于任何IDS探测引擎依据规则分析数据都是非常重要的。黑客有很多愚弄IDS的技术。比如,你建立这样一条规则,用来在HTTP包中发现包含"scripts/iisadmin"的入侵特征,如果那将字符匹配过于严格的限制,那么黑客只需要做一些细小的变通,就能轻易耍弄你。例如:
- "scripts/./iisadmin"
- "scripts/examples/../iisadmin"
- "scripts/.\iisadmin"
为了使问题复杂化,黑客也会在字符中嵌入16位URL字符或者Unicode字符,这对web服务器来说是同样合法的,要注意web服务器能够理解所有这些字符,并将它们处理成为类似"scripts/iisadmin"这样的字符。如果IDS严格匹配某一字符,就可能不会探测到这种类型的攻击。预处理器可以将字符重新排列,已使IDS能够探测到。
预处理器也用来做包分片的组装。当一个大的数据流传向主机的时候,通常数据包会被分割。例如,以太网中默认的最大数据包大小是1500字节,这个数值由网络接口的MTU(Maximus Transfer Unit)值来确定。这就意味着你发送的数据如果大于1500字节,它将会被分割成多个数据包,以使每个数据包的大小都小于等于1500字节。接收方系统能够将这些小的分片重新组装,还原成原始的数据包。在IDS上,在可以对数据包进行特征分析之前,也需要重新组装数包。例如,可能入侵特征的一半在一个数据包分片上,而另外一半在别的分片上面。为了使探测引擎能够准去的分析特征,就需要组装所有的分片。黑客也用数据分片来对抗入侵检测系统。
预处理用来对抗这些攻击。Snort的预处理能够组装数据分片,解码HTTP URI,重新组装TCP流等等。这些功能是IDS中非常重要的部分。
1.3 探测引擎
探测引擎是Snort中最重要的部分,它的作用是探测数据包中是否含着入侵行为。探测引擎通过Snort规则来达到目的。规则被读入到内部的数据结构或者链表中,并与所有的数据包比对。如果一个数据包与某一规则匹配,就会有相应的动作(记录日志或告警等)产生吗否则数据包就会被丢弃。
探测引擎是Snort中时间相关的组件。根据你的机器的处理能力和你所定义的规则的多少,探测引擎会消耗不同的时间来对不同的数据包做出响应。在Snort工作中NIDS模式的时候,如果网络中数据流量过大,有时可能会因为来不及响应而丢弃一些包。探测引擎的负载取决于以下因素:
- 规则的数量
- 运行Snort的机器的处理能力
- 运行Snort的机器的内部总线速度
- 网络的负载
你需要了解探测系统可以剖析数据包并把规则应用在包的不同部分,这些部分可能是:
- 包的IP头部
- 包的传输层头,包括TCP、UDP或其他传输层协议头,也可以是ICMP头
- 应用层头,包括DNDS头、FTP头、SNMP头等等还有很多。有时你可以用一些间接的方法来获取应用头信息,如果位偏移等等。
- 包载荷,这意味着你可以建立这样一种规则,用来探测引擎来寻找传输数据中的字符。
在不同版本的Snort中,一旦探测引擎将数据包匹配到某个规则时,将会停止进一步的过程,然后根据规则产生告警或者丢弃日志,这就意味着及时如果包匹配了多条规则,仅仅第一个规则被应用,并不再进行其他的匹配,这样做有好处,但是除了下面的情况下:如果包匹配的第一个规则是低优先级的,就只能产生低优先级的告警,即使这个包也匹配高优先级的后面其他规则。这个问题在第二版的snort中得到了修正:包先对所有进行匹配,然后再产生告警,在对所有的规则进行匹配后,选择最高优先级的规则进行告警。
1.4 跟踪TCP数据流
Snort新增了一中叫做stream4的预处理器,这种预处理器能够同时处理数千并发的数据流。它可以重组TCP数据流,并进行包状态经检测,这就意味着你可以组装一个特定的TCP会话,并从利用多个TCP包进行攻击的方式中找出异常。你也可以查找流向(和)流出某个服务器端口的报文。