阿里安全研究实验室:IIS服务器漏洞分析

2015-04-30 18:37 出处:其他 作者:freebuf 责任编辑:shengyongzhen

  4月15日,在微软补丁日上微软公布了多个高危漏洞,其中一个MS15-034漏洞影响面最广,会造成IIS服务器蓝屏崩溃,特殊环境下或导致信息泄露。阿里巴巴安全研究实验室着重分析这一高危漏洞以及给国内互联网带来的影响。

  资料

  本次漏洞测试所使用网上流传的POC进行修改。 

0001

0002

  测试环境

  在Win7 32 + IIS 7环境下,使用前述的POC将可以使得Win7蓝屏从而导致IIS被远程拒绝服务。

0003

  漏洞原因

  经过简单的分析,HTTP!UlParseHeader负责处理客户端发送的HTTP头部数据,本次漏洞出现在对Http Header 中”Range”字段的处理。

  “Range”字段由HTTP!UlpParseRange负责解析,在该函数中有如下代码:

0004

  以前述的POC为例,使用的range字段为:

  Range: bytes=2-18446744073709551615",

  即Range.start =2,Range.Length=18446744073709551615-Range.start+1=0xfffffffffffffffe,并将该结构保存至HttpParser对象结构中(偏移0x5B8)。(网上流传的POC构造的Range.Start为0,导致这里计算出来的Range.Length会溢出)

  接着在函数UlAdjustRangesToContentSize中,相关代码会将Range.Length与http get所请求的文件大小进行对比,若Range.Length + Range.Start大于HTTP请求文件的真实大小, Range.Lenth将会被修复为正确的合法长度。在本例中,Range.Length已被构造为0xfffffffffffffffe,Range.Length+Range.Start将会发生溢出,从而可以绕过这个重置的代码。

0005

  HTTP.sys会使用UlBuildFastRangeCacheMdlChain来缓存请求的数据,并使用IoBuildPartialMdl来绑定MDL。

  VOID IoBuildPartialMdl(__in PMDL SourceMdl, __inout PMDL TargetMdl, __in PVOID VirtualAddress, __in ULONG Length );

  本次测试中,IoBuildPartialMdl的Length参数已被修改为超长数值,直接导致系统蓝屏。

  若特殊环境之下,超长Length映射成功,则可能导致信息泄露。

0006

  补丁比对

  借助IDA的patchdiff2,对http.sys进行补丁比对,得知补丁进行了更改的函数如下所示:

0007

  查看修补情况,发现修补后的代码添加了RtlULongLongAdd来防止前述溢出的问题。

0008

  HTTP!UlAdjustRangesToContentSize的比较结果如下:

0009

  其中补丁还用同样的方法修补了另一个整数溢出的地方HTTP!UlpDuplicateChunkRange。

0010

0011

0012

  小结

  目前,阿里云安全已能够提供安全无害的扫描检测手段和防御手段。阿里安全研究实验室建议使用IIS服务器的用户尽快安装微软最新补丁。同时,阿里云云盾也已经能够有效防御该漏洞攻击威胁。

  提醒广大企业和开发者:尽快安装微软官方补丁。补丁安装完毕后,要及时重启服务器。

  参考文章:

  [1] http://pastebin.com/ypURDPc4

  [2] https://github.com/rapid7/metasploit-framework/pull/5150 

  [3] http://blog.beyondtrust.com/the-delicate-art-of-remote-checks-a-glance-into-ms15-034

网络设备论坛帖子排行

最高点击 最高回复 最新
最新资讯离线随时看 聊天吐槽赢奖品