VeriSignIntrusionDetectionSystemEvasioniDefenseSecurityReport.docx
《VeriSignIntrusionDetectionSystemEvasioniDefenseSecurityReport.docx》由会员分享,可在线阅读,更多相关《VeriSignIntrusionDetectionSystemEvasioniDefenseSecurityReport.docx(8页珍藏版)》请在冰豆网上搜索。
![VeriSignIntrusionDetectionSystemEvasioniDefenseSecurityReport.docx](https://file1.bdocx.com/fileroot1/2023-1/6/d2c2526a-9c36-4265-9323-dd75d640bc84/d2c2526a-9c36-4265-9323-dd75d640bc841.gif)
VeriSignIntrusionDetectionSystemEvasioniDefenseSecurityReport
入侵检测系统逃避
一份iDefense安全报告
VeriSign、iDefense智能组
2006年05月10日
目录
1简单的IDS逃避技术1
1.1模式匹配漏洞1
1.2Unicode逃避技术2
1.3拒绝服务攻击(DoS)2
1.4误报的产生3
1.5会话拼接3
2复杂的IDS躲避技术4
2.1碎片化4
2.2Time-To-Live(生存时间)攻击4
2.3无效的RST数据包5
2.4紧急标志5
2.5多态Shellcode6
2.6ASCIIShellcode6
2.7应用层攻击7
3解决逃逸问题8
3.1合规8
3.2基于目标主机的数据包解读8
3.3Time-to-live问题9
3.4解决Shellcode问题9
4结论10
1简单的IDS逃避技术
20世纪90年代中后期,入侵检测系统(IDS)技术在系统管理员中变得流行起来,这一技术使管理员能识别出是否有人在何时想要入侵。
这项技术似乎很简单,一个监控流量的网络设备检测攻击或异常的行为并警告系统管理员。
在企业环境中出现IDS技术不久之后,黑客们想出了几种方法来逃避检测。
起初,逃避技术是粗糙的,最简单的有拒绝服务攻击(DoS)、误报和简单模式匹配技术。
然而,随着时间的推移,黑客们可以利用更复杂的方法,例如会话拼接、碎片化和多态shell代码。
IDS技术的引进和恶意行为者的后续响应标志着黑客和IDS开发商之间的竞争开始,开发人员修复IDS技术问题,以更好地检测攻击特征,而黑客们忙着创造新的方式来逃避改进的IDS技术。
本报告探讨了为什么IDS技术,虽然有用,但不应该被视为一个集所有功能于一身的网络安全解决方案。
不应该依靠单独的IDS技术对网络安全状态做出准确的评估,而应该与其他能补足其固有优势的技术联合起来做出评估。
1.1模式匹配漏洞
许多黑客制作的逃避技术利用了大多数的IDS采用的基于模式的检测方法。
基于模式的检测方法,使用基于已知漏洞或可利用代码中常用的字符串,进行模式匹配来识别潜在的攻击。
然而,这种方法是有问题的,因为不是所有的输入必须相同才能触发某些弱点,甚至在输入中做微小的改变就可以绕过检测模式,使开发者难以开发有效的模式。
下面的例子说明了HTTP会话中的一个将要被处理模式,一个模糊的版本试图绕过模式匹配。
Pattern:
GET/cgi-bin/phf?
Obfuscation:
GET/cgi-bin/aaaaaaaaaaaaaaaaaaaaaaaaaa/..%25%2fp%68f?
两个版本都导致相同的输出,但看起来很不一样。
这个例子是简单的,可能会或可能不会绕过大多数IDS技术的模式匹配引擎。
但是,它有效的显示了,输入可以改变但仍然产生相同的输出。
多数现代IDS在这一特殊大大的提升。
大多数现代的IDS在这方面有很大的提高。
然而,由于在使用的签名模式中的缺陷,一些公开发行的签名可以被绕过。
1.2Unicode逃避技术
一个类似的躲避IDS技术的方法是利用Unicode。
Unicode是一个字符集,它为每种书面语言的每个字符分配一个唯一的识别符,以方便统一的每种语言在计算机上的表示。
这对IDS技术来说是有问题的,因为Unicode可以有一个单独的字符的多种表示。
例如,'\'可以被表示为图5C、C19C和E0819C,这使得编写模式匹配签名非常困难。
然而,Unicode标准最近进行了更改,使得多重表示非法。
不过需要注意的是,一些应用程序可能仍然使用旧的标准。
一个Unicode如何影响IDS的例子出现在由RainForrestPuppy于2000年10月发布的微软IIS4.0/5.0目录遍历漏洞。
这个IIS漏洞不当的限制URL请求中用Unicode编码的目录清单。
这允许远程攻击者可以查看他们通常不会被允许看到的IIS服务器上的文件。
1.3拒绝服务攻击(DoS)
许多IDS采用的是仅用于存储的IDS警报日志的中央日志服务器。
中央服务器的功能是集中警报数据,因此它可以被看作是一个整体,而不是基于分立系统的。
然而,如果攻击者知道中央日志服务器的IP地址,他们就可以用DoS攻击使服务器变慢,甚至使其崩溃。
在服务器关闭后,因为警报数据不再被记录,攻击就可以不被注意的进行。
攻击者可能使用另一种方法是发送误报来试图填满中央日志服务器的磁盘空间。
一旦磁盘空间已满,攻击就不会被注意,同样是因为警报数据不再被记录。
1.4误报的产生
类似于DOS方式的另一种攻击是产生大量必须被记录的警报数据。
攻击者可以制作已知被用来触发IDS警报的数据包,迫使其产生大量的错误的报告。
这种类型的攻击被设计成产生大量“噪声”日志,使真正的攻击警报被淹没在误报当中。
攻击者都非常清楚,当看着日志数据,区分真实的攻击报告和误报是非常困难的。
1.5会话拼接
会话拼接是利用一些IDS在数据进行模式匹配前没有重建会话的IDS躲避技术。
此外,一些入侵检测系统只重组会话的一部分,因为重组是一种处理器密集型任务。
会话拼接背后的思想是将数据分割到几个数据包里,确保没有单个数据包内会与IDS认证的特征模式相匹配。
此外,如果攻击者知道是什么IDS在使用,他们就能在数据包之间添加延迟来躲避重组检查。
许多IDS会重组通信流,因此,如果一个数据包没有在规定的合理时间内收到IDS会停止重组和处理该数据流。
如果受到攻击的应用程序保持会话活动的时间比IDS花在重组会话的时间越长,IDS将会停止工作。
其结果是,在IDS停止重组会话后,任何数据包都可能带有攻击者发来的恶意数据,而这些都会被忽视。
现代的IDS已经找到方法来处理会话拼接。
例如,重组完整的数据包流是现在常见的做法,基本上杜绝了会话拼接攻击。
2
复杂的IDS躲避技术
2.1碎片化
碎片攻击和会话拼接攻击类似,攻击者都是分块发送不会触发IDS特征匹配或引起警告的数据包。
碎片攻击通常比会话拼接攻击更具威力,而攻击者在躲避手段中也更具创造力。
有两个分片的方法常用来躲避入侵检测系统。
一种方法将覆盖先前碎片的一部分,第二种方法将覆盖一个完整的片段。
这对攻击者有用,因为这使他们能在整个数据包中写入垃圾信息,并将其混杂在标准协议之中,以实施他们的攻击。
以下是碎片攻击的两个例子:
攻击1:
重叠方法
Packet1:
GET/cgi-bin/
Packet2:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/../phxx
Packet3:
f?
这个分片的例子里,数据包3的数据覆盖了数据包2的’xx’部分,使信息重组为以下内容:
GET/cgi-bin/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/../phf?
攻击2:
覆盖方法
Packet1:
GET/cgi-bin/
Packet2:
some_normal_filename.cgi
Packet3:
/aaa/../aaa/../aaa/../phxx
Packet4:
f?
本例与第一个类似,但这个例子里,’xx’部分被覆盖,而some_normal_filename.cgi数据包完全被后面两个数据包覆盖。
这就使最终得到结果为:
GET/cgi-bin/phf?
然而,值得注意的是,像Snort等IDS已经找到办法通过重组来解决这类攻击。
2.2Time-To-Live(生存时间)攻击
Time-To-Live攻击也是一种攻击者躲避IDS技术的方法。
为使这一技术正常工作,攻击者必须对内部网络拓扑结构有一定的了解。
如果攻击者知道到达目标主机的距离和目标主机前是否部署了IDS,他们就能绕开检测。
通过在TCP数据包中使用小的TTL值,攻击者用他们掌握的网络拓扑结构知识发送只到达IDS的数据包。
反过来,IDS会认为该数据包寻址到终端主机将使它在那里,这就允许攻击者在IDS处理流里注入垃圾数据包。
通过发送带有大TTL值的数据包,保证攻击的数据包到达终端主机。
使用小的TTL值允许攻击者发送目的地址为终端主机的数据包给IDS,而这些数据包并没有真正到达终端主机。
下面是一个Time-To-Live攻击的示例:
Packet1:
GET/cgi-bin/pTTL10
Packet2:
some_file.cgi?
=TTL5
Packet3:
hf?
TTL10
这个例子假设目标主机在10TTL限制以外并将接收数据。
同时还假设IDS在5TTL限制以内,任何TTL值低于5的数据将不会到达目标主机。
这意味着目标主机将会收到”GET/cgi-bin/phf?
”,而IDS收到的是"GET/cgi-bin/psome_file.cgi?
=hf?
."
2.3无效的RST数据包
TCP协议使用校验和来确保通信是可靠的。
一个校验和被添加到每个传送的片段中并在接受终端校验。
当校验和与接收主机期望的校验和不一致时,这个数据包被接收终端丢弃。
TCP协议也使用RST数据包来结束双向通信。
攻击者能利用这一特征通过发送带有无效校验和的RST数据包来躲避检测,这会导致IDS停止处理流,因为IDS认为通信会话已经结束了。
然而,终端主机看到这个数据包并验证校验和的值,如果校验和无效就丢弃它。
一些IDS系统可能将这样的数据包解读为一个会话真的结束了并停止重组会话。
这样的例子允许攻击者继续和终端主机通信而欺骗IDS,因为终端主机继续接收跟在带有无效校验和的RST数据包后面的数据包。
2.4紧急标志
紧急标志被用在TCP协议里来标记数据是紧急的。
TCP用一个紧急指针指向数据包内紧急数据的开始。
当紧急标志被置位时,所有在紧急指针之前的数据被忽略,紧急指针指向的数据优先被处理。
一些IDS没有考虑TCP协议的紧急特征,这就允许攻击者躲避IDS,就像在其他躲避技术中看到的那样。
攻击者能在紧急指针之前放入垃圾数据,IDS读取数据而不考虑终端主机的紧急标志处理机制。
这意味着IDS处理的数据比终端主机真正处理的数据多。
下面是一个紧急标志攻击的例子:
“当紧急数据和一般数据放在一起时,紧急数据后面的一字节数据将丢失”
Packet1:
ABC
Packet2:
DEFUrgencyPointer:
3
Packet3:
GHI
Endresult:
ABCDEFHI
这个例子解释了紧急标志和紧急指针是如何工作的。
根据1122RFC,当紧急数据和一般数据放在一起时,紧急指针导致紧急数据随后的一个字节数据丢失。
2.5多态Shellcode
大部分的IDS包含shellcode里常用的字符串特征。
这可以被轻松绕过,通过使用包含解密残端的加密shellcode。
这意味着shellcode可以在每次发送时是完全不同的。
多态shellcode通过简单形式的加密允许攻击者隐藏他们的shellcode。
对IDS来说,很难将这些数据确定为shellcode。
这种方法也隐藏了shellcode常用的字符串,使shellcode特征失效。
2.6ASCIIShellcode
和多态shellcode类似,ASCIIshellcode仅包含ASCII标准所包含的字符。
这种shellcode形式对攻击者有用,因为它允许攻击者绕开在字符串输入代码里常用的强制字符限制。
它也帮助攻击者绕开IDS特征模式匹配,因为和多态shellcode一样,shellcode里的字符串被隐藏起来了。
使用ASCII码的shellcode是非常严格的,在某些情况下它限制了shellcode能做什么,因为不是所有的汇编指令都能直接转换成ASCII值。
通过转换成ASCII字符表示来不正确的转换其他指令或指令组合,执行原指令相同的目的,这种限制可以被绕过。
下面是一个ASCIIshellcode的例子:
charshellcode[]=
"LLLLYhb0pLX5b0pLHSSPPWQPPaPWSUTBRDJfh5tDS"
"RajYX0Dka0TkafhN9fYf1Lkb0TkdjfY0Lkf0Tkgfh"
"6rfYf1Lki0tkkh95h8Y1LkmjpY0Lkq0tkrh2wnuX1"
"Dks0tkwjfX0Dkx0tkx0tkyCjnY0LkzC0TkzCCjtX0"
"DkzC0tkzCj3X0Dkz0TkzC0tkzChjG3IY1LkzCCCC0"
"tkzChpfcMX1DkzCCCC0tkzCh4pCnY1Lkz1TkzCCCC"
"fhJGfXf1Dkzf1tkzCCjHX0DkzCCCCjvY0LkzCCCjd"
"X0DkzC0TkzCjWX0Dkz0TkzCjdX0DkzCjXY0Lkz0tk"
"zMdgvvn9F1r8F55h8pG9wnuvjrNfrVx2LGkG3IDpf"
"cM2KgmnJGgbinYshdvD9d";
当执行时,上面这段shellcode执行”/bin/sh”。
仔细观察,读者会发现’bin’和’sh’被包含在shellcode的最后几个字节里。
2.7应用层攻击
应用层攻击使多种不同形式的逃避成为可能。
许多处理图像、视频和音频的应用程序使用一些压缩格式,使媒体数据以比没有压缩的原始数据更小的形式被传送,这就提高了数据传送速度。
当在这些应用中发现漏洞时,完整的攻击就会在压缩数据内发生,而IDS将没有办法检查压缩格式文件的特征。
许多IDS寻找允许攻击的特定条件。
但是,有时候攻击可以采取许多不同的形式。
例如,整数溢出漏洞可以利用几种不同的整数值。
这一事实加上压缩数据,使特征检测非常困难。
最近的应用层攻击的例子可能是WindowsMediaPlayer的BMP漏洞MS06-005。
通过使用包含几种不同形式”nops”(即空操作操作码)的shellcode,可能建立一个看似合法的位图文件。
结合nopsled末尾的多态shellcode,这可以很容易躲避IDS对这一缺陷的特征检查。
此外,如果IDS不寻找缺陷的原因(即BMP格式标头中的大小字段),几乎每次都可以使用不同的大小,而这在使用中几乎不会造成副作用。
3
解决逃逸问题
那么,IDS开发者和使用者能做些什么来解决逃逸问题呢?
惊奇的是,用户们能做的事很少。
减轻IDS逃逸威胁的最佳途径是坚持安全漏洞意识,及时给漏洞打补丁,基于网络拓扑结构和网络接收流量明智的选择IDS。
IDS开发者已经发明了避免以上讨论过的逃逸技术的方法。
在决定部署哪种IDS时,像支持适当重组碎片的流合规技术和Unicode和UTF8编码技术就是一些参考特征。
3.1合规
合规接收混乱的输入并试图将它转换成终端主机最终看见的内容。
这通常需要编码的格式,如Unicode和UTF8。
合规进程允许编码、翻译和模式匹配的归一化数据,这可以防止攻击者使用Unicode或UTF8字符串混淆攻击字符串。
不过,还有其他的方法仍能绕过这个,如多态shellcode、ASCII码shellcode和其他被应用程序支持的编码等模糊处理方法。
一些IDS试图在多态shellcode上应用合规器,但是这很困难,在尝试高效监控剩余网络流量的同时去解码多态shellcode将耗费很多时间。
3.2基于目标主机的数据包解读
当比较逃逸技术和组织逃逸的方法的优势时,人们可以看到,IDS处于不利地位,因为这些系统试图重新建立那些终端主机最终看到的并处理它们。
这是有问题的,因为进行网络数据通信有许多不同的方法。
为了正确地完成这个任务,应使用终端主机的TCP/IP栈,而不是试图用终端主机处理该流的方式重新建立数据流。
使用主机做这项工作时,任务的猜测部分被清除。
这种类型的系统仍然必须处理各种形式的编码,而且在某些方面仍然会是有缺陷的,但大多数基于网络的逃逸的影响将大大缓解。
另一个选择是在IDS中使用模块化的TCP/IP堆栈和使用基于目标主机操作系统的堆栈,这可以和基于主机的IDS一样有效。
但是,在实施之前,这种方法必须进行彻底的研究。
例如,每个操作系统处理异常流量的方式必须彻底检查。
最终,这个方法可能会证明是非常有效的缓解了网络级的逃逸,如碎片、RST数据包处理和紧急标志。
3.3Time-to-live问题
针对TTL值的问题提出了一些有趣的解决方案。
有几个选择可以解决这个问题,其中一些甚至可能帮助识别和消除未来的问题。
处理这个问题的第一种方法是自动的将TTL字段更改为一个较大的值,从而确保终端主机总是接收到的数据包。
在这种情况下,攻击者无法对IDS隐瞒信息。
其结果是,该数据从未到达终端主机,也就没有给终端主机发送恶意负载。
对IDS隐瞒的数据原本目的是只到达IDS,但如果它到达终点的主机,攻击成功缓解。
第二种方法更复杂,并给数据提供了一些其他的可能性。
必须做的第一件事是,IDS必须在它监控的网络内收集所有的MAC地址。
然后,它必须得到每个主机的TTL信息,并将这些信息映射到每台主机。
其结果是IDS将知道数据被发往到达主机的距离和该主机的MAC地址。
这样可以把IDS自身与其他形式的纯粹基于特征码的检测相结合。
然而,如果主机在网络中经常移动,该数据必须被更新。
3.4解决Shellcode问题
一种检测多态shellcode的方法寻找空操作操作码而不是寻找0x90。
有几种操作码不修改存储器,但会修改寄存器值。
这些操作码经常在多态shellcode里使用以躲避IDS。
目前的办法需要将许多空操作码和一个阈值比对,如果达到了阈值就报警。
这种方法是相当准确的,但已经知道会产生误报。
此外,这种方法不限制shellcode的影响,也没限制攻击者利用它耍花招。
4
结论
虽然有很多方法可以逃避入侵检测系统,同样有很多的方法来检测使用的逃避技术的攻击。
要使IDS技术真正有效,就必须尝试检测所有的攻击和对付逃避。
显然,这让攻击者占据上风。
本文旨在提醒有关机构IDS固有的优势和弱点。
入侵检测系统是有用的工具,但它们有局限性。
通过使用IDS技术,它更容易追踪网络内发生的事情。
然而,只依靠IDS提供的信息可能还不够充分,不足以彻底保护网络。
有时候,攻击过程是安静的,有些时候动静会很大。
那么,系统管理员怎样才能真正知道什么时候正在发生攻击?
答案是用补充IDS固有优势的其他技术来加强IDS。
最健全的安全方法在任何网络环境是限制攻击的途径。
这意味着,尽快使用最新的软件修补程序和补丁。
健全的安全措施不会降低对IDS技术的需求,但会降低对这类系统的依赖
在部署IDS时,机构应该对其所部署的网络有一个透彻的了解。
明智的做法是在部署IDS时,找出网络入口点、被监控的主机数和网络流量。
对网络的拓扑结构有一个透彻的了解将有助于削弱本报告中讨论的躲避技术,提高IDS技术的功效。