扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:中国IT实验室 2007年9月2日
关键字:
在本页阅读全文(共2页)
4.碎片攻击
碎片攻击和会话拼接(session splicing)有点类似。直到最近,很多入侵检测系统在进行字符串匹配之前不能准确地重组碎片。现在这种情况有了改观,所有的入侵检测系统都能够进行某些重组。不过,还是有很多方法可以避开入侵检测系统的监视。碎片重组的问题是在进行字符串匹配以前,入侵检测系统必须在内存中缓存所有的碎片,然后进行重组。而且,他还需要直到、碎片在目的主机会如何重组。Thomas Ptacek and Timoth Newsham于1998年写的Insertion,Evasion and Denial of Service: Eluding Network Intrusion Detection描述了许多基于网络的碎片躲避和其它类型的躲避技术。碎片攻击包括:碎片覆盖、碎片重写、碎片超时和针对网络拓扑的碎片技术(例如使用小的TTL)等。下面,我们将详细讨论。
4.1.碎片覆盖
所谓碎片覆盖就是发送碎片覆盖先前碎片中的数据。例如:
碎片1 GET x.idd
碎片2 a.?(缓冲区溢出数据)
第二个碎片的第一个字符覆盖第一个碎片最后一个字符,这两个碎片被重组之后就变成了GET x.ida?(缓冲区溢出数据)。实际情况远非这么简单,更详细的细节请参考烂文IDS欺骗之Fragroute篇(上)。
4.2.碎片数据覆盖
这种方法和上面的碎片覆盖有些类似,只不过是覆盖全部的碎片数据,例如:
碎片1 GET x.id
碎片2 一些随机的字符
碎片3 a.?(缓冲区溢出数据)
这些碎片在经过目标系统的重组之后,碎片3将完全覆盖碎片2,重组之后的数据变成GET x.ida?(缓冲区溢出数据)。如果入侵检测系统的重组方式和目标系统不同,就无法重组出“GET x.ida?(缓冲区溢出数据)”,因此就检测不出这个攻击。
4.3.碎片超时
这种攻击依赖于入侵检测系统在丢弃碎片之前会保存多少时间。大多数系统会在60秒之后将丢弃不完整的碎片流(从收到第一个碎片开始计时)。如果入侵检测系统保存碎片的时间小于60秒,就会漏掉某些攻击。例如:
碎片1(设置了MF位)GET foo.id
碎片2(59秒之后发出) a?(缓冲区溢出数据)
如果IDS保存起始碎片的时间不到60秒,就会漏过攻击。幸运的是,如果配置没有错误,现在的网络入侵检测系统能够检测此类攻击。
这种技术结合其它的网络技术(例如:TTL值)将更有威胁。如果入侵检测系统和被监视的系统不在同一个网段,攻击者就可以在TTL上做手脚。有的单位由于经费的限制,不能在自己的每个子网都部署IDS节点,只在网络的出入口部署一套IDS,监视所有的网络流量。这种情况下,如果被攻击的主机在其它的子网,攻击数据包到目标系统的跳数就大于到IDS的跳数。攻击者可以伪造碎片的TTL,使某些碎片刚好能够到达,而无法到达目标系统,例如:
碎片序号负载TTL(假设攻击者到目标的跳数是5,到IDS的跳数是3)
1 GET foo.id 5
2 evasion.html 3
3 a?(缓冲区溢出数据) 5
从这些碎片中,IDS重组的数据是“GET foo.idevasion.html a?(缓冲区溢出数据)”或者“GET foo.idevasion.html”(如果IDS的超时时间小于60秒)。通过这种方式,攻击者成功地在IDS中插入了垃圾数据。
5.碎片和snort特征码
下面我们把上述攻击和某些snort特征码进行比较。对于.ida缓冲区溢出攻击,默认的snort特征码几乎无法捕获任何通过碎片发动的攻击(如果使用了frag2预处理模块,snort可以截获碎片超时攻击)。下面是针对.ida缓冲区溢出攻击的snort检测规则:
alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS 80 (msg:"WEB-IIS ISAPI
.ida attempt"; uricontent:".ida?"; nocase; dsize:>239; flags:A+;
reference:arachnids,552; classtype:web-application-attack;
reference:cve,CAN-2000-0071; sid:1243; rev:2;)
另外,snort还有一条检测小碎片的规则,一旦发现太小的碎片,就会触发这条规则:
alert ip $EXTERNAL_NET any -> $HOME_NET any (msg:"MISC Tiny
Fragments"; fragbits:M; dsize: <25; classtype:bad-unknown; sid:522)
但是,这样还是不能检测某些攻击。还是以ida缓冲区溢出为例,这个攻击实际上和请求的URI无关,因此攻击者可以在前面加入一些垃圾数据以避免触发碎片检测规则。
碎片1 GET reallylongstringtoevadedetect.i
碎片2 da?(缓冲区溢出数据)
这些技术并非只针对snort。Cisco Secure IDS也能够进行碎片重组,并且能够对上述碎片攻击进行报警。
实际上,碎片攻击要复杂的多,尤其是涉及到TTL和碎片覆盖。
检测碎片攻击也非常困难。使IDS的碎片超时时间至少为60秒,增加对异常碎片的报警,最重要的是系统管理人员要对碎片攻击的潜在威胁有清醒的认识。2002年四月,Dug Song发布了Fragroute,引发了不小的震动。很快,snort社团发布了能够对碎片攻击进行更好检测的snort1.8.6版。
6.拒绝服务
还有一种比较野蛮的方法就是拒绝服务。拒绝服务可以针对检测设备本身和管理设备。Stick、snot和其它一些测试工具能够是入侵检测设备产生大量的报警。使用这些工具,可以达成如下目标:
消耗检测设备的处理能力,是真正的攻击逃过检测。
塞满硬盘空间,使检测设备无法记录日志。
使检测设备产生超出其处理能力的报警。
使系统管理人员无法研究所有的报警。
挂掉检测设备。
对IDS来说,这类工具无迹可寻,因此非常难以对付。
结论
本文我们讨论了一些常用的IDS躲避技术及其对策。其中有些技术需要攻击者具有熟练的攻击技巧,而有写技术却无需太多的技巧。而fragroute之类的工具出现,大大降低了攻击者采用某些技术的难度,使防御的一方总是处于被动。希望这些东西对大家有点用。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者