网络通信 频道

杂谈入侵检测防御系统(2)

几乎所有当前市场上的网络入侵检测系统都是基于一种被动数据收集方式的协议分析,我们可以预见,这种方式在本质上是有缺陷的。
毫无疑问,这样的入侵检测系统会监视整个网络环境中的数据流量,并且总是与一种预定义的可疑行为模式来进行对照,甚至所谓的入侵行为分析技术也只是简单地从单位时间状态事件技术上做了些组合工作,事实上离真正实用的复杂黑客入侵行为的剖析和理解还有很远的距离。
对于这种检测技术的可靠性,我们可以通过自定义的三种可行性很强的攻击方式来验证——插入攻击、逃避攻击和拒绝服务攻击。我们可以看到,当一个入侵者实施了这样的入侵策略以后,所谓的入侵检测系统便妥协了。我们的结论是这种入侵检测系统不是放之四海而皆准的,除非它们从根本上被重新设计过。
真正实用的入侵检测系统的存在价值就是能够察觉黑客的入侵行为并且进行记录和处理,当然,人们也会根据自己的需求提出需要强大的日志记录策略、黑客入侵诱导等等。
不同的入侵检测系统存在不同的入侵分析特征。一个企图检测Web入侵的系统可能只会考虑那些常见的恶意HTTP协议请求;同样道理,一个监视动态路由协议的系统可能只会考虑网络是否存在RIP欺骗攻击等等。目前国内市场上的大部分入侵检测系统使用同一个入侵行为定义库,如著名的SNORT特征库,这说明我们在技术挖掘方面的投入还不够,事实上我国在基础研究设施的投入上也存在严重不足。
入侵检测系统现在已经成为重要的安全组件,它有效地补充和完善了其他安全技术和手段,如近乎快过时的基于协议和端口的防火墙。入侵检测系统为管理人员提供相应的警告信息、报告可能发生的潜在攻击,从而抵挡了大部分“只是对系统设计好奇”的普通入侵者。
世界上已经开发出了很多种入侵检测系统,我们可以用通用的入侵检测体系结构(CIDF:Common Intrusion Detection Framework)来定义常见的入侵检测系统的功能组件。这些功能组件通常包括事件产生器、分析引擎、存储机制、
攻击事件对策。
许多入侵检测系统在设计之时就仅仅被考虑作为警报器。好在多数商业化的入侵检测系统配置了可用的防御性反攻击模块,起码可以切断TCP连接或动态地更改互动防火墙过滤规则。这样就可以阻止黑客沿着同一路径继续他的攻击行为。一些入侵检测系统还配置了很好的攻击诱骗模块,可以为系统提供进一步的防护,也为进一步深入研究黑客行为提供了依据。
对于比较普遍的两种入侵检测模式--基于网络的入侵检测和基于主机的入侵检测,我们可以这样考虑:基于主机的入侵检测系统对于特定主机给予了定制性的保护,对于发生在本地的、用户级的、特征性比较明显的入侵行为有防范作用。但是,这种模式对于发生在网络传输层的入侵通常是无可奈何的,想让应用级特征比较强的系统同时把系统级和网络底层技术实现得比较完善是不太现实的。虽然我们可以看到在伟大的Linux系统上实现了Lids,毕竟象Solaris,NT这样的系统,我们能够了解的只是皮毛。
基于网络的入侵检测系统需要监视整个网络的流量,匹配可疑行为特征。它的技术实现通常必须从网络和系统的底层入手,而且它同时保护的是网络上的一批主机,无论它们使用的什么系统。基于网络的入侵检测系统显然不会关心某一台主机之上正在进行着什么操作,只要这些操作数据不会扩散到网络上来。因为网络入侵检测系统是以行为模式匹配为基础的,我们可以断定它有匹配失误的可能,有因为不能确定某种行为是入侵而将其放行的可能。那么当一个“聪明”的入侵者骗过了这种系统,顺利地进入一台主机,该系统的厄运开始了。
被动的网络监视器通常利用网络的混杂模式工作,它们直接从网络媒介获得网络中数据包的拷贝,而不考虑这些包本来是不应该被它们接收的。当然,这种被动的网络底层协议分析总是“安静地”存在于网络的某个地方,它只是根据网络媒介提供的这种特征,在其他主机不知不觉的时候将网络数据拷贝一份。同时,
需要考虑到,根据引擎端实现平台的不同,各平台实现的网络数据包捕获机制的不同,在混杂模式下丢包的程度是不同的。事实上,对于大多数还需要从内核读取数据的应用级包过滤系统,只能考虑以更快的方式把数据读取到用户空间,进而发送给其它
进程。 这样处理的化,要求从技术上增加用户空间的缓冲区尺寸,如在BSD(BPF)的系统上,能够利用BIOCSBLEN ioctl调用来增加缓冲区尺寸。
入侵检测系统地最重要的特征莫过于其检测的“精确性”。因此IDS要对捕获到的数据包进行详细的分析,所以对IDS的攻击就是针对IDS在分析
据时的弱点和漏洞。
网络IDS捕获到网络上传输的数据包并进行分析,以便知道一个对象对另一个对象做了什么。IDS总是通过网络上交换的数据包来对终端系统上发生的信息行为进行判断。假设一个带有错误UDP校验和的IP数据包,大多数操作系统会丢弃这样的数据。某些比较陈旧的系统也可能会接受。IDS需要了解每一个终端系统的
具体情况,否则IDS按照自己的方式构造出来的逻辑在终端系统上的应用会有
不同。某些操作系统有可能会接受一个明显存在问题的数据包,如允许一个有错误的校验和的IP包。当然,IDS如果不进行分辨,必然会丢掉这些本来终端系统会接受的数据。
就算IDS系统知道网络都有些什么操作系统,它也没有办法通过查看一个包而知道是否一个终端系统会接受这个包。原因很简单,CPU耗尽、内存不足都可能导致系统发生丢包现象。
IDS全部的信息来源就是它捕获到的数据包。但是,IDS应该多了解一些关于终端系统的网络行为,应该了解终端系统如何处理各种网络数据。但是,实际上,这是不可能的。
在处理所谓的拒绝服务攻击时,存在两种常见的情况:某些IDS系统在自己处于停机状态时,可以保持网络正常的信息流通,这种属于“fail-open”型;另一种则是“fail-closed”型,即当IDS系统出现问题时,整个网络也随之瘫痪了。
网络检测系统是被动的。它们不控制网络本身,也不会以任何方式维护网络的
连接。如果一个IDS系统是fail-open的,入侵者通过各种手段使IDS资源不
可用了,那时IDS就没有任何防范入侵的作用了。正是因为这样,IDS系统加强自身抗拒绝服务攻击的能力显得极为重要。
当然,许多攻击方式讨论的都是针对基于嗅探模式的IDS系统。这些类型的攻击都企图阻止协议分析,阻止特征模式匹配,阻止IDS获得足够信息以得出结论。
针对入侵检测系统弱点的攻击探讨
有时IDS系统会接受终端系统丢弃了的数据包。因为IDS认为终端系统接受并且处理了这些数据,而事实上终端系统由于种种原因丢弃了这些数据包。一个入侵者就可以利用这一点,制造那种他所想要入侵的主机会丢弃而IDS系统将接受并作出判断的数据包,以使IDS与终端系统得到不同的结论。
我们可以把这种攻击称为“插入式”攻击。道理很简单,假设一个入侵者发往终端系统的数据是attack,但是,他通过精心构造在数据流中加入了一个多余的t。对于终端系统而言,这个t是被丢掉不被处理的;而对于IDS系统而言,它得到的最终上下文关系是atttack,这个结论使IDS认为这次行为并没有对终端系统形成攻击而不作处理,事实上,终端系统已经接受了attack数据。
现在让我们来分析一下这种方式的攻击如何阻止特征分析。特征分析通常的方式是根据固定模式判断某个特定的字串是否被存在于一个数据流中,例如,对待一个phf的HTTP攻击,IDS通常检查这个字串的存在与否,“GET /cgi-bin/phf?”, IDS系统判断这种情况很容易,只需要简单的子串搜索功能便可以做到,然而,但是,如果一个入侵者通过插入式攻击的思想在这次HTTP请求中增加了这样的内容,GET /cgi-bin/pleasedontdetectthisforme?,里面同样包含了phf,但是在IDS
看来,味道已经不一样了。
插入式攻击的的结果就是IDS系统与终端系统重组数据后得到了不一样的内容。通常,插入式攻击在IDS没有终端系统处理数据那么严格的时候都存在。可能好的解决方法就是让IDS系统在处理网络中需要重组的数据的时候,作出严格的判断和处理,尽可能地与终端系统处理地效果一个样。可是,引来了另外一个问题,这便是另一种攻击方式,相对地叫做“逃避式“攻击模式。
相对的,有些数据包是IDS不会接受的,而终端系统却会对这些数据作出处理。当然,IDS由于不接受某些包,而会导致与这些数据相关的上下文关系无法了解。
问题的现象是因为IDS在对数据包进行审核处理的时候过于严格,使得往往某些数据在终端系统而言,是要进行接受重组处理的,而在IDS本身,仅仅是不作处理,导致许多攻击在这种严格的分析引擎的鼻子地下躲过。
逃避式攻击和插入式攻击都有效地愚弄了模式匹配引擎系统。结果都是入侵者使得IDS与终端系统接受处理了不同的数据流,在逃避式攻击中,终端系统比IDS接受了更多的内容而遭受攻击。
还是上面的phf的例子,入侵者发送了一个HTTP请求,使得原本的GET /cgi-bin/phf?在IDS处理的结论中变成了GET /gin/f,当然,这个结论对于大多数IDS系统来说,几乎没有任何意义。
从技术上来看, 插入式和逃避式这两种对付检测系统的方式也不是这容易就被入侵者所利用,因为实现这种攻击要求入侵具备相当的知识面和实践能力。
现在的许多网络协议是简单的并且容易分析的。比如一个普通的网络分析器就能够容易的判断一个UDP DNS请求的目的。
其它的一些协议则复杂的多,在得出实际传输的内容之前,需要对许多单个的数据包进行考虑。这样的话,网络监视器必须总是监视内容的数据流,跟踪包含在数据流中的信息。例如,为了解析出一个TCP连接中发生了什么,必须重组这次连接中的整个数据流。
TCP这样的协议,允许在IP最大包尺寸范围内的任意大小的数据被包含于每一个分散的数据包中,数据可以无序地到达目的地,每个数据包都具有一个序列号来表明自己在数据流中的位置。TCP数据流的接受者有责任重新按照序列号进行数据包的重新排序和组合,并解析出数据发送者的意思。这有一套TCP的数据重组机制来完成。
在IP层,IP也定义了一种自己的机制,叫做“碎片“,这种机制允许主机把一个数据包切分为更小的数据分片。每一个片都有一个标记,标记自己原来属于原始数据包的什么相对位置,叫做”偏移值“。IP实现允许接受这样的IP碎片包,并且根据偏移值来重组原始数据包。
插入式攻击通过增加一些数据包到数据流中导致终端系统重组很困难。被插入的数据包能够改变数据流的先后顺序,进而阻止IDS正确地处理紧跟着的正确的数
据包。包的插入重叠了老的数据,在IDS系统上重写了数据流。某些情况下,插入数据包,改变了数据流原来的意思。
逃避式攻击则是导致IDS系统在进行流重组的时候错过了其中的部分关键内容,被IDS忽略的数据包可能对于数据流的顺序来说是至关重要的;IDS系统可能在逃避式攻击之后不知道该如何对这些数据下结论了。许多情况下,入侵者产生整个躲避IDS系统检测的数据流是相对简单的。
插入式和逃避式IDS攻击都不是很容易防范的,除非IDS通过了第二信息源的配合,能够对当前监视的网络拓扑结构以及对作为被监视对象的终端系统所能够接收什么样的数据包进行跟踪分析,否则问题依然存在,这是目前必须要提出来的对被检测网络的诠释技术,尽可能通过配合第二信息源的方式,让IDS对它所检测的网络中的终端系统以及网络实际环境有一个成熟的了解.
如果一个攻击能够造成实现插入任意的IP数据包,那么,插入一个UDP或者ICMP也是没有问题的。所以可以看出IDS系统在IP层实现对这两种入侵手段的免疫将是很重要的。
一个最容易的让终端系统丢弃IP数据包的方式是让数据包具有不正确的IP头
部信息。如RFC731定义。入侵者所使用的这些头部信息有问题的数据包在现实中可能会遇到问题,除非攻击对象IDS系统处在同一个局域网之内,例如如果version域不是4,而是其他的值,这种数据包实际上是不会被路由的。当然,对于其他的一些域值,比如IP包长度或者IP头长度,一个不规范的长度将阻止IDS系统正确定位IP中的传输层的位置等。
在IP头域信息中,最容易被忽略的是校验值。似乎对于一个IDS系统去校验每一个捕获的IP数据包的校验是没有必要的。然而,一个带有病态的校验值的数据报对于大多数IP实现来说都是不会被处理的。一个IDS系统在设计的时候考虑到有问题的校验了么?如果没有考虑到校验的必要性,那么很难避免“插入式“攻击。
TTL域表示了一个数据包在到达目的系统的过程中需要经过多少路由器。每一次,一个路由器转发一个数据包,数据包所带的TTL信息将会被消耗。TTL消耗尽时,包也被丢弃了。所以,入侵者可以构建一个TTL的值,使得发送的数据包刚好可以到达IDS系统,但是TTL刚好耗尽了,数据本来应该到达的目标却没有到。
相类似的另一个问题与IP头部的DF标志有关。DF标志置位使得转发设备即便是在包超出标准大小尺寸的时候也不要对数据进行IP分片,
紧紧通知简单的丢弃掉这些包。
这两个不明确的问题的解决要求IDS系统能够了解它所监视的网络拓扑结构。
IP校验和问题很好解决;一个IDS系统可以假设如果校验和是错误的,那么数据包将会被目标系统所不接受。而IP的选项域的存在又导致一些不同的可能性。
许多操作系统可以配置为自动拒绝源路由数据包。除非IDS了解是否一个源路由数据包的目标主机拒绝这样的数据包,否则不可能正确处理这样情况。
对IP数据包中的源路由项进行检查或许是一个明显的必要。然而,其他的一些选项也是必须应该考虑的。例如,“timestamp“选项要求特定的数据包的接受者在数据包里放置一个时间戳标记。如果这个选项出现问题,处理事件戳选项的代码将强迫丢弃这个包。如果IDS没有如同终端系统那样核实时间戳选项的话,
便存在问题。
同一个LAN上的入侵者能够指引链路层的数据帧到IDS系统,不必允许作为IP目标的主机看到这个包。如果一个入侵者知道了IDS的MAC地址,他便能将他的欺骗包发往IDS系统,LAN上的其他系统不会处理这个数据包,但是,如果IDS不检查接受到的数据包的MAC地址,它是不会知道发生了什么情况的。
逃避式攻击则是导致IDS系统在进行流重组的时候错过了其中的部分关键内容,被IDS忽略的数据包可能对于数据流的顺序来说是至关重要的;IDS系统可能在逃避式攻击之后不知道该如何对这些数据下结论了。许多情况下,入侵者产生整个躲避IDS系统检测的数据流是相对简单的。
因为终端系统将重组IP碎片,所以IDS系统能够进行IP碎片重组也是重要的。一个不能正确的重组碎片的IDS系统将是容易受到攻击的,入侵者仅仅通过人工生产碎片的攻击方式便可以愚弄IDS。IP碎片的数据流通常有序到达。但是,协议允许碎片以任何次序到达。一个终端系统必须能够重组无序到达的数据包分片。
一个IDS系统如果不能处理IP碎片无序到达这种情况的话,也是存在问题的;一个入侵者能够故意捣乱他的碎片来逃避IDS检测。而且IDS必须在全部的碎片都被接收到以后才进行碎片重组。当然了,接收到的分片必须被存储下来,直到分片流可以被重组为一个完整的IP数据包。如果一个入侵者利用分片的形式来对网络进行flooding攻击,那么IDS系统通常会资源耗尽。每个终端系统也必须处理这个
问题。许多系统根据TTL来丢弃分片,而避免这种由于大量碎片请求造成的内存不足。许多入侵者能够刻意地通过构造病态的IP分片躲避传统的包过滤器,他们使用的是尽可能小的分片包,因为单个的分片所包含的数据不足以达到过滤规则对应的匹配长度。
另外,出现的问题是重叠的分片处理问题,可能性是这样的,具有不同尺寸的分片先后到达系统,并且分片的数据位置处于重叠状态,既是说,如果一个分片迟于另外一个分片达到系统,两个分片对于重组参数来说是同一个,这时新到的数据可能会覆盖掉已经先到达的老的一些数据。

文章转载地址:http://www.cnpaf.net/Class/hack/0512182034509617616.htm

0
相关文章