IDS要有效地捕捉入侵行为,必须拥有一个强大的入侵特征数据库,这就如同一款强大的杀毒软件必须拥有强大切完善的病毒库一样。带有非法TCP 标识的数据包:可通过对比TCP报头中的标志集与已知正确和错误标记的不同点来识别。
确定特征数据的候选对象
为了更好地理解如何开发基于报头值的特殊数据,下面通过分析一个实例的进行详细阐述。
Synscan是一个流行的用于扫描和探测系统的工具,由于它的代码被用于创建蠕虫Ramen的头部片断而在2001年早期大出风头。Synscan的执行行为很具典型性,它发出的信息包具有多种可分辨的特性,包括:
不同的来源IP地址信息
TCP来源端口21,目标端口21
服务类型0
IP鉴定号码39426(IP identification number)
设置SYN和FIN标志位
不同的序列号集合(sequence numbers set)
不同的确认号码集合(acknowledgment numbers set)
TCP窗口尺寸1028
下面我们对以上这些数据进行筛选,看看哪个比较合适做特征数据。我们要寻找的是非法、异常或可疑数据,大多数情况下,这都反映出攻击者利用的漏洞或者他们使用的特殊技术。以下是特征数据的候选对象:
只具有SYN和FIN标志集的数据包,这是公认的恶意行为迹象。
没有设置ACK标志,但却具有不同确认号码数值的数据包,而正常情况应该是0。
来源端口和目标端口都被设置为21的数据包,经常与FTP服务器关联。这种端口相同的情况一般被称为reflexive,除了个别时候如进行一些特别NetBIOS通讯外,正常情况下不应该出现这种现象。reflexive端口本身并不违反TCP标准,但大多数情况下它们并非预期数值。例如在一个正常的FTP对话中,目标端口一般是21,而来源端口通常都高于1023。
TCP窗口尺寸为1028,IP鉴定号码在所有数据包中为39426。根据IP RFC的定义,这2类数值应在数据包间有所不同,因此,如果持续不变,就表明可疑。
如何正确使用特征
从以上4个候选特征对象中,我们可以单独选出一项作为基于报头的特征数据,也可以选出多项组合作为特征数据。
选择一项数据作为特征有很大的局限性。例如一个简单的特征可以是只具有SYN和FIN标志的数据包,虽然这可以很好地提示我们可能有一个可疑的行为发生,但却不能给出为什么会发生的更多信息。SYN和FIN通常联合在一起攻击防护墙和其他设备,只要有它们出现,就预示着扫描正在发生、信息正在收集、攻击将要开始。但仅仅这些而已,我们需要的是更多的细节资料。
选择以上4项数据联合作为特征也不现实,因为这显得有些太特殊了,而且可能占有太多的系统资源。尽管能够精确地提供行为信息,但是比仅仅使用一个数据作为特征而言,会显得远远缺乏效率。实际上,特征定义永远要在效率和精确度间取得折中。大多数情况下,简单特征比复杂特征更倾向于误报(false positives),因为前者很普遍;复杂特征比简单特征更倾向于漏报(false negatives),因为前者太过全面,攻击软件的某个特征会随着时间的推进而变化。
多也不行,少亦不可,完全应由实际情况决定。例如,我们想判断攻击可能采用的工具是什么,那么除了SYN和FIN标志以外,还需要什么其他属性?“反身”端口虽然可疑,但是许多工具都使用到它,而且一些正常通讯也有此现象,因此不适宜选为特征。TCP窗口尺寸1028尽管有一点可疑,但也会自然的发生。IP鉴定号码39426也一样。没有ACK标志的ACK数值很明显是非法的,因此非常适于选为特征数据。当然,根据环境的不同,及时地调整或组合特征数据,才是达到最优效果的不二法门。
接下来我们创建一个特征,用于寻找并确定synscan发出的每个TCP信息包中的以下属性:
只设置了SYN和FIN标志
IP鉴定号码为39426
TCP窗口尺寸为1028
第一个项目已经十分普遍,第二个和第三个项目联合出现在同一数据包的情况不很多,因此,将这三个项目组合起来就可以定义一个详细的特征了。再加上其他的synscan属性不会显著地提高特征的精确度,只能增加资源的耗费。到此,判别synscan软件的特征如此就创建完毕了。