用户名: 密码: 免费注册 忘记密码? 网站地图 | 加入收藏 | 设为首页
首页 | 新闻 | 工具 | 系统 | 办公 | 聊天 | 多媒体 | 网页 | 运营 | 平面 | 欣赏 | 数据库 | 程序 | 服务器 | 组网
网页 | 3dmax | Ghost | Windows Xp| Dreamweaver | photoshop | Flash | office | Alexa | Css | QQ | Asp | PHP | Jsp | Access
Flash MX 2004入门 | 网站推广策略 | CorelDRAW入门 | ASP学习 | 网站建设大师功 | Word入门
  iTbulo.com > 学院 > 软件新闻 > 病毒安全 > 正文
经验:针对IDS的逃避技术与相关对策
iTbulo.COM 2007-8-28 转载()

 

2.多变shell代码(polymorphic shell code)

  多变shell代码(polymorphic shell code)技术由K2开发的,设计思想来源于病毒逃避(virus evasion)技术。使用这种技术重新构造的shell代码更为危险,入侵检测设备非常难以检测到。这种技术只用于缓冲区溢出攻击,对付基于特征码的检测系统非常有效,而对于智能化的或者基于协议分析的检测系统的效果要差很多。为了便于讨论,我们以SSH CRC32缓冲区为例。我们先看以下snort检测规则:

alert tcp $EXTERNAL_NET any -> $HOME_NET 22 (msg:"EXPLOIT ssh CRC32  
overflow /bin/sh"; flags:A+; content:"/bin/sh"; reference:bugtraq,2347;  
reference:cve,CVE-2001-0144; classtype:shellcode-detect; sid:1324; rev:1;)  
alert tcp $EXTERNAL_NET any -> $HOME_NET 22 (msg:"EXPLOIT ssh CRC32  
overflow NOOP"; flags:A+; content:"|90 90 90 90 90 90 90 90 90 90 90 90 90 90 90)

  上面的第一条规则简单地检查从外部到$HOME_NET,目标端口是22的数据包,搜索里面是否包含字符串/bin/sh。第二条规则是检查是否包含x86空操作字符(0x90)。多变shell代码(polymorphic shell code)使用很多方法逃避字符串匹配系统的检测。首先(以x86架构为例),使用其它的字符代替0x90执行无操作(no-op)指令。对于X86架构,有55种替代方式,其它的要少一些。这些替代方式以一种伪随机的方式结合到一块,建立缓冲区溢出shell代码包含无操作(no-op)指令的部分。除此之外,shell代码本身也采用XOR机制编码。通过这种方式建立的缓冲区溢出shell代码被重组后不会包含以上的特征码,从而能够逃过字符串匹配检测。

  多变shell代码检测对基于特征码检测的IDS是一个很大的挑战。Next Generation Security Technologie公司的技术白皮书Polymorphic Shellcodes vs. Application IDSs中提出了一些检测多变shell代码的设想。通过搜索无操作(no-op)字符的一个特定长度的正则表达式,可以实现对多变shell代码的精确检测。最近,Dragos Ruiu发布了一个用于检测多变shell代码的snort预处理插件spp_fnord,这个插件采用了和上面相似的检测技术。这个预处理插件有端口和长度两个配置选项。例如,如果某个人在配置时设置了80、21、23和53等端口,它就只对这几个端口的数据流量进行多变shell代码的检测,而不会对其它端口(例如:22)进行检测。

  3.会话拼接(session splicing,叫会话分割更合适一些)

  上面讨论的这些方法都是属于攻击数据在一个数据包中的情况,没有涉及攻击数据和会话通过多个数据包投递的情况。RFP在Whisker中实现了一种IDS逃避技术叫作会话拼接(session splicing),就是把会话数据放到多个数据包中发出,例如:

+-------------------------+  
| packet number | content |  
|---------------+---------|  
| 1 | G |  
|---------------+---------|  
| 2 | E |  
|---------------+---------|  
| 3 | T |  
|---------------+---------|  
| 4 | 20 |  
|---------------+---------|  
| 5 | / |  
|---------------+---------|  
| 6 | H |  
+---------------+---------+

  通过这种方式,每次只投递几个字节的数据,就可能避开字符串匹配入侵检测系统的监视。要监视这种攻击,需要入侵检测系统或者能够理解、监视网络会话(即使IDS有这种能力,攻击者也可以通过其它的凡是避开监视),或者采用其它的技术监视这种攻击。snort使用以下规则来监视会话拼接:

alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS 80 (msg:"WEB-MISC whisker  
space splice attack"; content:"|20|"; flags:A+; dsize:1;  
reference:arachnids,296; classtype:attempted-recon; reference)

  这条规则使snort检测目标为$HTTP_SERVERS 80端口的ACK报文的负载长度是否等于1以及是否包含空格(16进制的20)。使用这条规则可以精确地检测出whisker,但是攻击者只要稍加修改就可以避开这个检测。为了能够检测可能出现的会话拼接攻击,可以对上面这条snort规则进行扩展,使其检查负载很短的HTTP请求。但是,这样做的副作用是提高了误报警数量,而且在某些情况下攻击者还是能够避开监视。为了真正有效地检测这种攻击,需要入侵检测系统能够完整地理解网络会话,不过这是非常困难的。应该注意的是目前大多数系统能够重组会话,在所有的会话数据到达之前,它们会等待一些时间。而等待时间的长短与程序有关。例如,Apache/RedHat的会话超时时间是6分钟,IIS/Win2K等待的时间非常长。因此,攻击者完全可以每15分钟发送一个字节的会话数据,而IIS还会认为是有效的会话。最新版本的snort能够监视长期的会话和网络层欺骗,例如:小TTL值。

上一页  [1] [2] [3] [4] 下一页

文章搜索
相关资讯
相关文章 相关下载
没有相关文章
焦点信息