您的位置:首页 > 编程语言 > ASP

【转载】ASP.NET 发现重大资安弱点影响范围涵盖 ASP.NET 1.1 ~ 4.0

2012-06-21 10:10 183 查看
几天前从ScottGu'sBlog得知了一个ASP.NET的重大资安弱点,微软紧急的在最短时间内推出安全性更新,目前已正式发佈至WindowsUpdate网站,各位IT人员随时都能透过WindowsUpdate套用这次的安全性重大更新,以确保ASP.NET网站能够正常运作。由於这次的安全性更新被归类為「重大」等级,所以各位还是尽可能早更新、早安心,不要等出事了才反应喔!

本次的重大安全更新主要解决了一个在ASP.NET执行环境下可能会被进行阻断服务攻击(DoS;DenialofService)的问题,由於这类攻击手法已於2011-12-28在德国的ChaosCommunicationCongress骇客年会中被公开,研究员JulianWälde与AlexanderKlink在现场展示如何透过一个自订的表单攻击目前市面上多个知名的网站应用程式框架(WebApplicationFrameworks),其中包括PHP4,PHP
5,Java/JSP,ApacheTomcat,Jetty,ASP.NET,Python,v8,…等,他可以利用极少的HTTPRequests瘫痪现有的网站伺服器,而且不仅仅是ASP.NET可能受害,许多其他Web框架依然无法倖免於难!

还好目前微软已再极短的时间内推出安全性更新,请各位开发人员抽空更新主机。

以下是套用WindowsUpdate时会看到与.NETFramework相关的安全性更新,不同的作业系统与版本可能会有不同的选项出现,以下只是Windows7SP1x86环境下.NET3.5.1的安全性更新示意图:



请注意:套用之后可能会被要求重开机或强制重开机,安装此更新时请做好测试或其他因应措施。

技术摘要说明

我们在开发ASP.NET网站时通常都会使用Request.Form物件来取得透过瀏览器POST过来的资料,而此物件型别為NameValueCollection类别,该类别储存Key的方式是透过杂凑运算的方式计算出来的(hash-tabledata-structures),主要目的就是為了用极快的速度找到该Key的对应资料,不过此类别自行实做了有别於.NETFramework内建的杂凑演算法,它会将所有传入的Key都先转换為大写,并使用名為DJBX33X(Dan
Bernstein'stimes33,XOR)的杂凑演算法进行计算,这将导致此演算法有机会遭到Meet-in-the-middle攻击。

骇客能利用这个弱点实做出轻易可达成的杂凑碰撞攻击(Hashcollisionattacks),此类攻击可透过传入大量的POST资料并且夹带许多特别计算过的Key值,让这些Key值在这些Hash-table中產生出相同的杂凑值,如此一来在这个Hash-table中就会出现许多拥有相同杂凑值的Key,这便是「杂凑碰撞」的由来。而这类杂凑碰撞的情况正是DJBX33X演算法的致命伤,当一个NameValueCollection中存在著过多的「杂凑碰撞」就会导致电脑花上许多时间对该
Hash-table进行运算,所以会让ASP.NET执行绪花上数十分鐘到数小时的时间来操作相对应的Key值,如此一来便会耗尽网站伺服器的CPU资源,进而达到阻断服务的目的。

备註:在此阻断服务的意思是指让网站执行速度变慢或完全无法回应其他人的要求。

如下图示0~5区块便是运算出来的「杂凑值」,而EzEz,EzFY,FYEz,FYFY等等就是示意传入的Key值,当你要Hash-table中进行插入(insert)、查找(lookup)、删除(delete)键值(Key)时,每次都会花上O(n2)的复杂度进行运算,当拥有重复杂凑值的Key越来越多时,电脑对此Hash-table所花费的运算成本也会更高。



研究员提到:由於IIS的「关闭时间限制」预设值為90秒(如下图示),如果骇客连接到ASP.NET网站的网路速度為30kbit/s的情况下,就能让主机上某一个Core2等级的核心异常忙碌,若拥有1Gigabit/s的频宽便能同时间瘫痪约30,000个核心,所以就算你的主机丛集架构多弹性或多坚固,都很有可能只要一台机器就能瘫痪你整个机房的WebFarm主机。

这样的攻击手法可称為一个「有效率的阻断服务攻击」,因此微软便将此攻击视為「重大资安弱点」。



2012/1/2补充资讯

以下是EfficientDenialofServiceAttacksonWebApplicationPlatforms这场演讲的完整录影,将近一小时(
http://www.youtube.com/watch?v=R2Cq3CLI6H8),关於ASP.NET相关的解说是从26:55~31:26这段时间,可以点选这个连结看我剪辑过的版本,或直接看所有的解说(包含攻击展示)。

註:下载高解析度的版本http://bit.ly/rKwW58

本次微软推出的安全性更新主要是让ASP.NET在处理HTTPPOST要求时最多只能接受1,000个参数,一般来说不会有人透过POST传递表单资料超过1,000个栏位(以笔者的经验来说,传过最多的一次是700个栏位,当时是个问卷系统),如果传数参数超过1,000笔的话,就会出现HttpException(0x80004005):TheURL-encodedformdataisnotvalid.(英文)
或HttpException(0x80004005):URL编码型式资料无效。(中文)例外状况,如下图示:





若你的Web应用程式真的会传递超过1,000个栏位时,这个预设值也是可以设定的,请修改网站根目录下的web.config档,并在<appSettings>区段加上一组aspnet:MaxHttpCollectionKeys设定即可:

<appSettings>
<addkey="aspnet:MaxHttpCollectionKeys"value="2500"/>
</appSettings>


最后提醒
此问题并不只限於ASP.NET平台,其他像是Java、PHP、JRuby、Python等知名的WebApplicationFramework都是在受害的范围内,请适时做出适当的更新与处理。
备註:PHP5.4.0RC4新增了一个max_input_vars选项可控制输入的参数的总数,此举将可有效降低此弱点所带来的衝击。
还好我们有微软当靠山,有这种问题只要WindowsUpdate一下就能解决了,各位ASP.NET开发人员有没有觉得很幸福呢!^__^

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐