[转载]NIDS 的局限性
文章作者:Robert Graham网络入侵探测系统不是非常可靠,公认只能做主要安全系统的一个补充;
主系统如防火墙,加密和授权是非常可靠的,一些bug或者错误的设置可能会导致这些
系统出问题;但是它们最底层的原理都经验证是准确的。但NIDS 底层的原理就不是完全准确的;
所有的入侵探测系统都会有这两个问题:为什么正常的工作会有许多的错误告警;
为什么仔细的hacker可以躲开IDS或者使IDS无效;当然,可以找出很多的例子来表明
NIDS是不准确的。
但这并不表示入侵探测系统就是没用的。在当今的网络中,攻击如此普遍,以致人
们在第一次安装这样的系统时,通常都会大吃一惊(无论是在防火墙外还是防火墙内);
一个好的IDS系统可以很好的提高一个站点的安全性;有一点必须提醒的就是IDS只是
一个补充;一个”证实为正确的“系统通常由于人为的错误会出故障;而”证实为不正确的“
系统却能很好的工作。
下面将讨论NIDS的一些局限性:
1.交换式的网络(天生的缺陷)
交换式的网络(如:100 mbps,千兆位的以太交换机)对NIDS来说,将会造成戏剧
性的问题;如果要插入一个sensor来监视所有的数据包是绝不容易的;
已有一些这个问题的解决方案,但不是所有的都令人满意;
嵌入在交换机内的IDS:
一些厂商(Cisco,ODS)内置了IDS在交换机里面。我只能说,这些IDS系统没有商用
的NIDS系统那样好的检测范围;
监控端口
许多交换机有一个监控端口可以连接网络分析器;NDIS也可以很容易的加到这个端
口;一个明显的问题就是这个端口的速度比交换机的底板要慢很多,以致在高负荷
的交换机上,NIDS就不能监测所有的数据。此外,这种端口多是为网络管理做sniffer
用,所以就经常会被切换掉;
线缆分流(交换机之间或交换机到接点)
监控台可以直接连在线缆上监控数据报,这可以是交换机之间的线缆,也可以是从交
换机到主机的线缆。可以有不同的技术来实现:
线内分流
线内分流就是一种直接插入到通信流中,并拷贝一份相同数据的设备。一个典型的例
子就是Shomiti Century Tap
(见[url]http://www.shomiti.com/productsf/tapfamilyf.html[/url])
它直接插入到100mbps全双工的线路中,可以允许一台配有2个网络适配器的计算机
同时读取这2个通道的数据;
吸血鬼分流
在过去的一些日子里,吸血鬼分流是同轴电缆以太网的主要手段,
也是连接末端接点到网络的一个行之有效的方法。
自感应分流
大多数的分流都可以用TDR(Time Domain Reflectometer:时域反射计)检测到;
而自感应分流无需改变线缆,只要安放在线缆的外面,就可以监听线缆的发射的
电磁波。一般,只有间谍才会使用的这种方法。
线缆分流的问题,就在于他们产生了大量的数据流,大多数的NIDS在未能处理这么
高负载之前,就已经瘫痪了。特别是在交换机间的情况,尤其突出。
感谢Christopher Zarcone <[email]czarcone@acm.org[/email]>提供的以上的资料。
基于主机的sensors
从原理上来说,解决交换网络的资源限制的唯一方法就是分布式的基于主机的入侵
探测。象BlackICE 和 CyberCop Monitor,就是一些个基于主机的Agent包含一个基于
网络的监视本主机的网络的组件,其他的则进行传统的日志和审计功能;
2 资源局限性
NIDS位于网络中心位置,他们一定要能坚持不断的分析,和储藏
由可能成千上万的机器所产生的信息,仿效所有机器的连接
发送数据;显然,它并不能完全做到,只有投机取巧了。
下面列出一些典型资源问题.
2.1网络负载流量
当前的NIDS在满负荷的情况下,都很难保持正常功能;平均的情况下一个网站
每帧的大小大约有180字节, 在100 mbps 的以太网上,能以50,000个
数据报/秒的速率传输;但大多数的IDS产品都不能跟上这速度.
绝大部分顾客的实际情况比这个速度相比要慢,但是这仍然是一个值得关心的问题.
当你购买一个IDS产品时,可以问销售商:系统每秒能处理多少个数据报.很多销售商
将设法告诉你每秒能处理多少位。但是真正性能的瓶颈是数据报的数目.实际上所有
的IDS系统能在每数据报1500字节的情况下处理100 mbps 的流量,却很少有能在
每数据报60字节的情况下处理100 mbps的流量的.
2.2 TCP连接
IDS 必须为许多TCP连接保持连接状态.这就要求大容量的内存.一些逃避技术将使
问题进一步恶化,它们常常要求IDS甚至在客户/服务器已经关闭它之后,保持连接
信息。
当你购买一个IDS产品时,问销售商:系统能同时处理多少TCP连接.
2.3 其他状态信息
在IDS要保存在内存里的状态信息中,TCP只是最简单的例子;
但是还有其它的信息包含IP碎片,TCP扫描信息和ARP表.
2.4 长时间的状态
一个经典问题就是"缓慢扫描",攻击者非常缓慢扫描系统.
IDS是不可能长时间储藏这么多的信息,那样就不能和数据匹配了.
3 攻击NIDS
攻击者可以用下列的方式攻击一个入侵探测系统.
3.1 使sensor失效
NIDS通常是作为"被动监视器"的COTS(Commerical-off-the-shelf)电脑.
监视器是旁置于网络流的,不是在中心位置;这就意味着.
如果他们不能跟上高速的网络流量,而他们又没有任何节流的手段.他们就必须开始丢
数据包.这就正如用一个消防水龙带喝水一样.
现在很少有NIDS能跟得上一个满负荷的100 mbps连接,
(其中"满负荷"意味着平均一个数据报的大小是180字节,大约是50,000个
数据报/秒).
高的网络流量不仅仅是使sensor开始丢掉不能处理的数据报,而且可以使sensor
完全瘫痪.例如,假设有一个能处理最大限度的 20,000帧/秒的Sensor.
当网络负载是40,000帧/秒的时候,
它真正的处理速度将降到10,000帧/秒或者5,000帧/秒甚至趋近于零。
这是因为帧的接收与帧的分析是不同的过程处理的。
在大多数的结构中,是由系统来抓包;即使是太繁忙不能分析也不例外,这样就
花去了许多应该用于分析的时间。
因此,一个攻击者可以通过使链路流量达到饱和的方式来攻击IDS探测器。如果攻击者来自局
域网内,他/她就可以使用数据传输程序。
远程攻击者可以执行smurf 或 fraggle 的攻击,同样可以打满连接。
由于攻击者不可能有足够的速度,这种方式来攻击的比较困难。
3.2 使事件存储失去用途
端口扫描工具'nmap'含有一项称作"圈套"扫描的特征.它使用几百个假的IP地址
再加上攻击者的真正IP地址来进行扫描.这将导致管理员不可能区分一个IP
是真实的IP,或者只是伪造的IP中的一个.
任何攻击能由按同样的方式组成.一次带有伪造地址的强硬攻击总是在内部某处
藏着一次真正攻击.管理员要从这些噪音里发现攻击,将是非常的困难.
处理有争议的数据的方法有两种;如果一个攻击者值得怀疑,数据就必须保留
下来,留待下一次分析;其他的攻击也要写入到事件的存储空间里来.当数据库
填满后,将不会再发现攻击,或者更旧的攻击记录将被删除.无论是那一种,
都可能没有任何表明攻击者的证据存在.
3.3 DoS(拒绝服务)
NIDS是一个极其复杂的系统,与一个运行着多个服务的完整TCP/IP栈的复杂性
是等同的。这就意味着 NIDS容易受到像SYN FLOOD 和smurf Attachs 这样的
攻击的影响.
此外,攻击者常常能购买到与被攻击者相同的IDS系统,然后,进行多方面的实验,
来发现是IDS失效的数据报.然后在攻击的时候,攻击者首先使IDS失效,
然后进行不被察觉的活动.
4 简单躲开IDS的方法
这部分描绘欺骗最简单的IDS的简单方法.下一个部分将描绘进一步方法.
4.1 分片
分片就是将单个IP数据包拆散成多个更小数据包的技术.数据在到达应用
程序之前,在接收端的TCP/IP栈中重新组合起来.绝大多数的IDS系统都
没有重新组合IP数据报的能力.因此,就有一些为了避开IDS,而自动分片的
简单工具(如fragroute);
注:将TCP头中间的IP数据报分片过去一直用来逃避防火墙的端口过滤;
一些工业级的NIDS能重新组合网络流量.另,一些防火墙能在把数据传给
另一端之前,通过分片重组的方法使网络流正常化.
4.2 避免用默认值的方法
人们常常把防火墙作为简单的NIDS使用,通常假定目的端口与协议唯一对应.
一个成功的安装了后门的hacker可以在非默认的端口上运作标准协议.例如,
一个hacker可以向一个用户发送一个被Back Orifice 感染的程序,
但是把端口改成了不等于默认值31337的一个其他值.绝大多数的IDS系统将
不再能正确辨认出这个问题 (只有少数能).
4.3 缓慢扫描
由于流量的容量,NIDS要维持一个长期的流量日志非常的困难。因此对于
"缓慢扫描" 如攻击者每小时只扫描一个端口,将很难发现;
4.4 协调的,低带宽攻击
有时黑客会从多个IP地址一起来运行"缓慢扫描".这个就使IDS系统很难将
这些信息关联起来;
4.5 地址哄骗/代理
IDS系统的一个目的就是指出谁在攻击.由于许多原因,这个将变得非常困难.
例如,'Smurf' attacks, 你将收到一个你从未发送的数据包的数以千计的回应.
NIDS能察觉这些回应,但是不能发现是谁发送了这些伪造的数据包.伪造IP地址的
技术用在TCP序列号预设中,因此NIDS就不能准确的知道攻击者是从什么地方来的.
最后,绝大部分攻击者通过FTP或者网络代理服务器,'发起'他们的攻击,或者从
他们已攻入的站点进行攻击。
因此,要发现谁在攻击你的地点是非常困难的,即使配置在你的防火墙中IP地址
过滤也没有用.
4.6 改变模式的躲避方法
很多简单NIDS是依靠模式匹配.攻击脚本有些众所周知的模式,那样简单编译一个
已知攻击脚本的输出的数据库可以提供相当好探测。但是只要简单的修改脚本
就可以很容易的逃脱IDS. 例如,当输入一个长密码的时候,一些POP3服务器都有
一个缓冲区溢出的问题.有好一些针对这一漏洞的广受欢迎的攻击脚本。
一个入侵探查系统能包含10种模式来匹配10个 最常用的脚本,而另一个入侵
探查系统注意着口令字段,当输入了超过100字节的时候,就告警。
第一种系统就可以容易通过修改攻击脚本来简单回避,在第二种系统就可以探测
到任何对这个问题的攻击.
5 复杂逃避方法
聪明的黑客可以穿过入侵探查系统攻击目标.Verm Paxson
在他的早期论文(有关他的名叫"Bro"的NIDS)中讨论过这一问题中的一些。
最初的PostScript版本在
[url]ftp://ftp.ee.lbl.gov/papers/bro-usenix98-revised.ps.Z.[/url]
有关避开NIDS的最初的文章是Thomas h.Ptacek和Timothy 写的。
最初的PostScript版本在:
[url]http://www.aciri.org/vern/Ptacek-Newsham-Evasion-98.ps.[/url]同样的镜象文件在
[url]http://www.robertgraham.com/mirror/Ptacek-Newsham-Evasion-98.html.[/url]
Thomas H.Ptacek声称很多/绝大多数商业产品(1999年10月)在这一点上有严重的
问题. 这一节的大部分就是对这二篇文章的总结.
这些文章描述了NIDS系统用的网络模型与实际的不一样的抽象原理
例如,闯入者可以发送一个TCP FYN的数据包,NIDS可以看到的,但是受害者主机绝不
会看到.这将使NIDS认为连接已经关闭了,而实际上却不是的.如果TCP连接不发送
"存活"信息, 在继续攻击之前,攻击者可以在这个"结束"后的几小时或几小时内一直
等待.实际上,大多数服务会在消除一段时间内没有激活的连接,但是攻击者还是
可以获得几分钟的等待。
首先攻击者要发现一种能发送数据报到NIDS,而后置的路由器要丢掉这些数据报的
方式。这些取决于路由器的设置,但是典型例子有小的TTL字段值,分片,源路由,
以及其它IP选项。
如果通过NIDS的连接很慢,Hacker就可以先在此连接填充一些高优先级的IP数据报,
然后发送一个低优先级的TCP FIN.路由的排队机制通常会丢包。
另一个方法就是考虑主机是否接受。例如,不同的TCP栈对于细微的无效输入有不同
的动作;(就像'nmap'和'queso'过去经常取操作系统的指纹设计程序的一样).
典型造成不同交通的方式拒绝或接受 有发送TCP选项,使IP分片或TCP分段超时,
重叠碎片或段,发送错误的TCP标志位或序号。
为了强调IDS系统中的Bug,Ptacek/Newsham的论文中集中在IP分片,和TCP分段上。
例如,他们指出如果发送的重叠分片带有不同数据,一些系统宁愿要从第一碎片
(WinNT,Solaris)开始要数据,然而其他的则是从最后碎片(Linux,BSD)开始保持
数据。NIDS就没办法知道末端节点是否将接受这一数据,就可能猜错.
他们对TCP/IP连接的分析非常的有深度,论述了TCP连接的"伪同步"方式,
其实远比人们想象的要脆弱。还有,IDS不能正确模拟所有的TCP/IP栈的
可能行为,以及确定末端节点将把哪些分组作为数据.TCP也有与IP分片
相同的重叠问题.例如:入侵探测系统可能会接受第一个段,
而忽略后面的段。但是大多数的主机接受最后的段;
为了确认是否能躲开入侵探测系统,他们尝试着攻击各种各样的入侵探测系统。
得到的结果却是令人沮丧的-- 用分片的方法,一个主要的IDS可以完全躲开。
其他的都可以使用与末节点的数据"失去同步"的方法,完全甩掉;
6 评估工具
下列的一些工具将有助于在这些问题上评估IDS系统:
Anzen NIDSbench
([url]http://www.anzen.com/research/nidsbench/.[/url] )
包含了一个强迫所有的数据流分片的"fragrouter"单元,它将演示一个hacker/cracker
用同样的方法躲开NIDS将是多么的容易。它可以接收进来的数据流,然后按各种规则分片。
分片的规则有:带有不同大小的重叠的IP 分片,同样也是不同大小的重叠的TCP分组,
插入TCP数据报来使连接失同步,等等。
此工具包还包含一个"tcpreplay"的程序,它可以导出以太网的负载,以验证NIDS保留的
数据报。
CASL
NAI 的 CyberCop Scanner 内置了CASL。可以用来对上述的插入/逃避方面的内容进行
确认性的测试。它允许对底层TCP/IP数据报的描述。
在 [url]http://www.roses-labs.com/labs/labs.htm[/url] 有一些CASL的脚本。
页:
[1]