扫一扫
关注微信公众号

IDS的规则建立
2008-04-17   

IDS要有效地捕捉入侵行为,必须拥有一个强大的入侵特征数据库,这就如同公安部门必须拥有健全的罪犯信息库一样。但是,IDS一般所带的特征数据库都比较死板,遇到“变脸”的入侵行为往往相逢不相识。因此,管理员有必要学会如何创建满足实际需要的特征数据样板,做到万变应万变!本文将对入侵特征的概念、种类以及如何创建特征进行介绍,希望能帮助读者尽快掌握对付“变脸”的方法。
  
  一、特征(signature)的基本概念
  
  IDS中的特征就是指用于判别通讯信息种类的样板数据,通常分为多种,以下是一些典型情况及识别方法:来自保留IP地址的连接企图:可通过检查IP报头(IP header)的来源地址轻易地识别。
  
  带有非法TCP 标志联合物的数据包:可通过对比TCP报头中的标志集与已知正确和错误标记联合物的不同点来识别。
  
  含有特殊病毒信息的Email:可通过对比每封Email的主题信息和病态Email的主题信息来识别,或者,通过搜索特定名字的附近来识别。
  
  查询负载中的DNS缓冲区溢出企图:可通过解析DNS域及检查每个域的长度来识别利用DNS域的缓冲区溢出企图。还有另外一个识别方法是:在负载中搜索“壳代码利用”(exploit shellcode)的序列代码组合。
  
  通过对POP3服务器发出上千次同一命令而导致的DoS攻击:通过跟踪记录某个命令连续发出的次数,看看是否超过了预设上限,而发出报警信息。
  
  未登录情况下使用文件和目录命令对FTP服务器的文件访问攻击:通过创建具备状态跟踪的特征样板以监视成功登录的FTP对话、发现未经验证却发命令的入侵企图。
  
  从以上分类可以看出特征的涵盖范围很广,有简单的报头域数值、有高度复杂的连接状态跟踪、有扩展的协议分析。一叶即可知秋,本文将从最简单的特征入手,详细讨论其功能及开发、定制方法。
  
  另外请注意:不同的IDS产品具有的特征功能也有所差异。例如:有些网络IDS系统只允许很少地定制存在的特征数据或者编写需要的特征数据,另外一些则允许在很宽的范围内定制或编写特征数据,甚至可以是任意一个特征;一些IDS系统只能检查确定的报头或负载数值,另外一些则可以获取任何信息包的任何位置的数据。
  
  二、特征有什么作用?
  
  这似乎是一个答案很明显的问题:特征是检测数据包中的可疑内容是否真正“不可就要”的样板,也就是“坏分子克隆”。IDS系统本身就带有这个重要的部分,为什么还需要定制或编写特征呢?是这样:也许你经常看到一些熟悉的通讯信息流在网络上游荡,由于IDS系统的特征数据库过期或者这些通讯信息本身就不是攻击或探测数据,IDS系统并
  
  没有对它们进行关注,而这时你的好奇心升起,想在这些可疑数据再次经由时发出报警,想捕捉它们、仔细看看它们到底来自何方、有何贵干,因此,唯一的办法就是对现有特征数据库进行一些定制配置或者编写新的特征数据了。
  
  特征的定制或编写程度可粗可细,完全取决于实际需求。或者是只判断是否发生了异常行为而不确定具体是什么攻击名号,从而节省资源和时间;或者是判断出具体的攻击手段或漏洞利用方式,从而获取更多的信息。我感觉,前者适用于领导同志,后者需要具体做事者使用,宏观加微观,敌人别想遛进来!
  三、首席特征代表:报头值(Header Values)
  
  报头值的结构比较简单,而且可以很清楚地识别出异常报头信息,因此,特征数据的首席候选人就是它。一个经典的例子是:明显违背RFC793中规定的TCP标准、设置了SYN和FIN标记的TCP数据包。这种数据包被许多入侵软件采用,向防火墙、路由器以及IDS系统
  
  发起攻击。异常报头值的来源有以下几种:
  
  因为大多数操作系统和应用软件都是在假定RFC被严格遵守的情况下编写的,没有添加针对异常数据的错误处理程序,所以许多包含报头值的漏洞利用都会故意违反RFC的标准定义,明目张胆地揭发被攻击对象的偷工减料行为。
  
  许多包含错误代码的不完善软件也会产生违反RFC定义的报头值数据。
  
  并非所有的操作系统和应用程序都能全面拥护RFC定义,至少会存在一个方面与RFC不协调。
  
  随着时间推移,执行新功能的协议可能不被包含于现有RFC中。
  
  由于以上几种情况,严格基于RFC的IDS特征数据就有可能产生漏报或误报效果。对此,RFC也随着新出现的违反信息而不断进行着更新,我们也有必要定期地回顾或更新存在的特征数据定义。
  
  非法报头值是特征数据的一个非常基础的部分,合法但可疑的报头值也同等重要。例如,如果存在到端口31337或27374的可疑连接,就可报警说可能有特洛伊木马在活动;再
  
  附加上其他更详细地探测信息,就能够进一步地判断是真马还是假马。
  
  四、确定特征“候选人”
  
  为了更好地理解如何开发基于报头值的特殊数据,下面通过分析一个实例的整个过程进行详细阐述。
  
  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通讯外,
  
  正常情况下不应该出现这种现象。“反身”端口本身并不违反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软件的特征如此就创建完毕了。
  
  六、拓宽特征的“社会关系”,创建识别更多异常通讯的特征
  
  以上创建的特征可以满足对标准synscan软件的探测了。但synscan可能存在多种“变脸”,而其它工具也可能是“变化多端”的,这样,上述建立的特征必然不能将它们一一识别。这时就需要结合使用特殊特征和通用特征,才能创建一个更好、更全面的解决方案。如果一个入侵检测特征既能揭示已知“坏蛋”,还能预测“潜在的罪犯”,那么它的魅力将大大提高。
  
  首先看一个“变脸”synscan所发出的数据信息特征:
  
  只设置了SYN标志,这纯属正常的TCP数据包“长相”。
  
  TCP窗口尺寸总是40而不是1028。40是初始SYN信息包中一个罕见的小窗口尺寸,比正常的数值1028少见得多。

热词搜索:

上一篇:IDS的分类
下一篇:如何构建一个IDS?

分享到: 收藏