IDS入侵特征库创建实例解析
  六、拓宽特征的“社会关系”,创建识别更多异常通讯的特征
  以上创建的特征可以满足对标准synscan软件的探测了。但synscan可能存在多种“变脸”,而其它工具也可能是“变化多端”的,这样,上述建立的特征必然不能将它们一一识别。这时就需要结合使用特殊特征和通用特征,才能创建一个更好、更全面的解决方案。如果一个入侵检测特征既能揭示已知“坏蛋”,还能预测“潜在的罪犯”,那么它的魅力将大大提高。

  首先看一个“变脸”synscan所发出的数据信息特征:

  只设置了SYN标志,这纯属正常的TCP数据包“长相”。

   TCP窗口尺寸总是40而不是1028。40是初始SYN信息包中一个罕见的小窗口尺寸,比正常的数值1028少见得多。

  “反身”端口数值为53而不是21。老版本的BIND使用“反身”端口用于特殊操作,新版本BIND则不再使用它,因此,经常看到这个信息会让我们睁大怀疑的眼睛。

  以上3种数据与标准synscan产生的数据有很多相似出,因此可以初步推断产生它的工具或者是synscan的不同版本,或者是其他基于synscan代码的工具。显然,前面定义的特征已经不能将这个“变脸”识别出来,因为3个特征子项已经面目全非。这时,我们可以采取三种方法:

  再单独创建一个匹配这些内容的特殊特征。

  调整我们的探测目标,只关注普通的异常行为,而不是特殊的异常行为,创建识别普通异常行为的通用特征。

  1和2都创建,既全面撒网,也重点垂钓,真实的罪犯必抓,可疑的分子也别跑。

  通用特征可以创建如下:

  没有设置确认标志,但是确认数值却非0的TCP数据包。
   只设置了SYN和FIN标志的TCP数据包。
   初始TCP窗口尺寸低于一定数值的TCP数据包。

  使用以上的通用特征,上面提到过的两种异常数据包都可以有效地识别出来。看来,网大好捞鱼啊。

  当然,如果需要更加详细地探测,再在这些通用特征的基础上添加一些个性数据就可以创建出一个特殊特征来。还是那个观点,创建什么样的特征、创建哪些特征,取决于实际需求,实践是检测创建何种特征的唯一标准吗!

  七、报头值关键元素小结,信息包种类检查分析

  从上面讨论的例子中,我们看到了可用于创建IDS特征的多种报头值信息。通常,最有可能用于生成报头相关特征的元素为以下几种:

  IP地址,特别保留地址、非路由地址、广播地址。
   不应被使用的端口号,特别是众所周知的协议端口号和木马端口号。
   异常信息包片断。
   特殊TCP标志组合值。
   不应该经常出现的ICMP字节或代码。

   知道了如何使用基于报头的特征数据,接下来要确定的是检查何种信息包。确定的标准依然是根据实际需求而定。因为ICMP和UDP信息包是无状态的,所以大多数情况下,需要对它们的每一个“属下”都进行检查。而TCP信息包是有连接状态的,因此有时候可以只检查连接中的第一个信息包。例如,象IP地址和端口这样的特征将在连接的所有数据包中保持不变,只对它们检查一次就可放心。其他特征如TCP标志会在对话过程的不同数据包中有所不同,如果要查找特殊的标志组合值,就需要对每一个数据包进行检查。检查的数量越多,消耗的资源和时间也就越多。

  另外我们还要了解一点:关注TCP、UDP或者ICMP的报头信息要比关注DNS报头信息更方便。因为TCP、UDP以及ICMP都属于IP协议,它们的报头信息和载荷信息都位于IP数据包的payload部分,比如要获取TCP报头数值,首先解析IP报头,然后就可以判断出这个载荷的“父亲”是TCP。而象DNS这样的协议,它又包含在UDP和TCP数据包的载荷中,如果要获取DNS的信息,就必须深入2层才能看到真面目。而且,解析此类协议还需要更多更复杂的编程代码,完全不如TCP等简单。实际上,这个解析操作也正是区分不同协议的关键所在,评价IDS系统的好坏也体现在是否能够很好地分析更多的协议。