快捷搜索:   nginx

病从“口”入--警惕来自浏览器的入侵

一. IE的多事之秋

九月真是多事之秋,每年的这个月份里,总是要发生一些令人淬不及防的事情的。在一间大学宿舍里,王同学正如一般大学生一样百无聊赖的以上网玩游戏看小说打发在大学里的每一个日子,现在接近九月底了,舍友们正在讨论国庆去哪里腐败,而他,则急于寻找一款网络游戏的新外挂。

王同学通过搜索引擎找到了一个号称拥有最新最全外挂的站点并如愿以偿的找到了对应着他那款游戏的外挂下载页面连接,但是当他打开这个页面时,IE浏览器突然毫无预兆的关闭了。“这破机器!”王同学有点恼怒的骂了一句,他还没来得及记下网站的地址,这下可找不到了,他只好登录游戏把人物移动到一处僻静的地方让其自行“修炼”,还挂了好几个同学的QQ,然后赶着上课去了。

当王同学再次回到宿舍时,他的表情是可以用“口瞪目呆”来形容的:在他机器上挂的QQ全都以“您的QQ/TM正在别处登录,您被迫下线”的提示面对着屏幕前的人,而那款网络游戏早就蹦出了“与服务器连接失败,请重新登录”的消息界面。王同学手忙脚乱的去登录,只觉得一阵天昏地暗:QQ全部提示密码不正确,而那款网游里的人物不仅所有道具物品失踪,甚至连衣服都被人扒光了,正在原地站着等他呢。

事后,王同学借来最新杀毒软件,才发现机器感染了一个专门盗窃密码的木马,要是王同学那会儿连网络银行也登录了的话,恐怕他的损失会更大。

木马到底是什么时候混进来的呢?王同学差点把这一星期做的事情都回忆了个遍,仍然毫无头绪,他郁闷了。

二. 虎!虎!虎!IE遭遇零日攻击

其实,郁闷的并不仅仅王同学一个。今年9月,全球广大用户都有可能遭遇一场神秘的木马入侵事件,如果遭受入侵的用户能把之前做过的事情回忆起来,那么他们大部分人都会有过点击不明网站连接后IE突然关闭的经历,但是谁会留意到这么一个不起眼的“IE崩溃”错误背后,隐藏着一个巨大的阴谋呢?

这次的幕后黑手,借助的入侵途径非常特殊,所以导致大众几乎都防不胜防,因为,被渗透的是我们使用最频繁的IE浏览器。

今年9月20日,国内一个安全团体“XSec.org”发布了一个漏洞利用代码,称为“Internet Explorer VML Buffer Overflow Download Exec Exploit”(IE浏览器VML缓冲区溢出导致远程代码执行漏洞),这场危害级别被定义为“严重”的安全风波开始在国内蔓延开来。

其实9月20日并非祸害的第一日。早在9月18日,就有外国安全团体在某著名黑客交流邮件列表FD(Full-disclosure Mailing list)里公开了这个漏洞,XSec.org则写出了漏洞利用代码并把它正式的传播了出去,从而把这场危机带入了国内。

现在我们来看看国内安全小组发出的有关这个漏洞的安全公告信息:“NSFocus安全小组得知IE的VML组件存在一个未公开的漏洞,已经有某些网站利用这个漏洞向用户的电脑上安装间谍软件。VML(Vector Markup Language)是一种基于XML的矢量图形绘制语言。IE通过vgx.dll提供了对VML语言的支持,可以在解析页面中嵌入的VML,显示矢量图。vgx.dll在解析VML的时候存在缓冲区溢出漏洞,利用这个漏洞可以完全控制用户的系统。该漏洞目前尚无补丁。”

许多用户也许是在这一次公告里才第一次听说了VML,也可能会发出疑问:我用浏览器上网,和这个图形绘制语言有什么联系?为什么这个VML出现漏洞会导致IE遭受入侵?这是因为,浏览器面对的是互联网众多的交互功能,以单独一家公司自身的处理能力,要让浏览器能识别处理世界上尽多数的交互功能是不现实的,因此任何浏览器厂商都要为程序设计一个公开的接口规范让其能调用扩展或第三方接口程序,以便把它自身并不认识的交互任务交给某些有特定处理能力的接口程序来处理,所以浏览器并非是一个独立的程序,而是一个可以调用多个扩展组件运行的结合体。浏览器通过读取页面特定标记来决定自己需要加载什么组件执行,例如读取到脚本标记就自动加载脚本扩展组件执行、读取到XML标记就交给XML处理扩展执行,如果这些众多的扩展组件被取消,你将会发现浏览器大概只能显示最基本的文字和图片了。

而这次的事件,最根本的溢出发生在VML组件里,也就是说,浏览器自身并没有问题,但是当它把数据传递给VML执行并期待它返回一个能让自己看懂的结果时,VML组件不幸溢出而执行了数据里的非法要求,例如“去某某站点下载一个程序执行”,然后因为堆栈在内存里发生异常而被系统的保护机制给踢掉,而浏览器是执行这个组件的宿主,因此它也随着组件的异常退出而崩溃了,而这些动作在用户界面上的表现就是IE浏览器自动关闭,但是用户并不会知道,在浏览器关闭之前,那只充满邪恶的木马已经在你的机器里撒开蹄子奔跑了。

以上都是对VML缓冲区溢出漏洞导致后果的描述,究竟它是什么样的一种漏洞呢?现在让我们来系统的了解一下溢出发生的过程。

首先,入侵者以VML标记声明格式开头编写一个HTML页面,让浏览器明白它需要调用VML组件去解释这个页面里的代码(<html xmlns:v="urn:schemas-microsoft-com:vml">),然后用一些标准的VML格式标记填写前缀,为后面的构造溢出字符串做初始化工作的准备,紧接着,溢出代码开始了,入侵者使用“<v:fill method>”标记填充内容,它使用超过260个字节的字符串作为内容填充method数据字串,后面紧跟着经过了Unicode编码的溢出执行代码(ShellCode),由于VML组件在检测缓冲区时遗漏了对其长度的严格判断,因而导致缓冲区发生溢出,入侵者提交的ShellCode得以执行,从而实现了远程执行代码的漏洞,在这次事件里,远程添加管理员账户或者开启远程登录功能很明显是没用的,因为VML组件会很快因为内存异常而崩溃,且入侵者也不知道用户什么时候会被漏洞渗透,因此这次,通过溢出实现下载文件执行的ShellCode是最实际的,而且他们都这样做了。

因此,遭遇了漏洞渗透的用户,在浏览器宣告崩溃的同时,那只从远方站点下载来的小木马已经开始运行了,只是,你不会很快就知道的。

而使用XP Service Pack 2的用户可以说是侥幸逃过了一劫,由于SP2引入了被称为“执行保护”的技术(也被称为Cookie保护),执行保护是被设计为针对溢出攻击的众多保护方法之一,它通过一个异常函数在缓冲区里额外插入一个数值进行数据检验,如果发生溢出,这个数值就会被覆盖和改变,系统就根据检测这个数值来判断是否发生了溢出,一旦发生情况,被溢出的程序就会被异常函数进行处理,从而防止了程序缓冲区被溢出的情况发生。

但是这种方法也可以通过一些途径突破,如设法让溢出的部分恰好覆盖异常函数所在的内存区域,从而使保护机制失效,溢出也就得以成功执行了,事实上已经有人写出了针对SP2的VML溢出,只是由于机器环境关系可能导致异常函数的地址不同而成功率低下,但是如果这一难题被攻破了,SP2用户也不可避免的被卷入危机中了。

---------------------------------------------------------------
小知识:什么是溢出
“溢出”(Overflow)通常是与“缓冲区”(Buffer)存在密切联系的,当程序向内存写入数据时,必须向系统申请一片内存领域用于存放数据,这个内存领域被称为“缓冲区”,正常情况下程序会检查数据长度并且不允许输入超过缓冲区长度的字符串,但是绝大多数程序都会假设数据长度总是与所分配的存储空间相匹配,这就为缓冲区溢出埋下隐患。当计算机程序向缓冲区内填充的数据位数超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上,这就发生了所谓的“缓冲区溢出”(Buffer Overflow),它能导致多种后果的产生,一般情况下,覆盖其他数据区的数据是没有意义的,最多造成应用程序错误。但是,如果输入的数据是经过入侵者精心设计的,覆盖缓冲区的数据恰恰是黑客的入侵程序代码,被溢出的程序就会在它依据自身执行机制来处理缓冲区时,执行了这段入侵程序代码,从而让程序作出非设计者期望的预期行为。这段入侵程序代码被称为“ShellCode”,一段精心设计的ShellCode可以执行多种命令,如添加系统权限账户、开启一个远程登录交互界面等。
---------------------------------------------------------------

回到安全公告上来,其实对于用户而言,最可怕的并非对漏洞的简单描述,而是最后一句“该漏洞目前尚无补丁”的杀伤力,“尚无补丁”意味着,一般用户根本不能通过简便的途径让自己逃过这只到处延伸的黑手,从而使整个网络的用户群陷入巨大的危害隐患中,这种违反安全业界“先出补丁,再公布漏洞”的攻击模式就被称为“0day”(零日攻击)。

---------------------------------------------------------------
小知识:什么是“0day”
0day并非一种特定的攻击漏洞,它是对“攻击先行于安全补丁”的攻击行为的统称,0day是一直就存在的,但它们仅仅在少数团体和个人之间悄然流传,主要用于安全交流,从而不会导致大规模的网络攻击事件罢了,只是近年来,越来越多的人为了某些目的,大肆的公开这些尚未被安全厂商发布公告和提供相应补丁代码的攻击利用代码,甚至为了利益而出售0day,最终造成0day性质的攻击代码到处流传而引发危机,这样的攻击就被称为“Zero-Day-Attack”(零日攻击),自从典型的0day攻击“WMF漏洞”第一次打破了0day的“少数人交流”守则后,越来越多0day性质的攻击浮出了水面,0day攻击的危害,最大程度并非在于它的利用漏洞,而是因为,它,在被公布出来直到厂商发布相关补丁的一段时间内都无丁可补,这段时间,被称为零日攻击的“防护真空期”。
---------------------------------------------------------------

由于零日攻击的性质,这次的IE溢出事件备受关注,因为IE占据了大部分市场份额,如果这一漏洞的缺陷(公布的通用攻击代码不能溢出XP Service Pack 2)被人加以修补,将会造成新一轮安全风波,在漏洞利用代码公布之日到厂商发布安全补丁时的这段日子,广大用户都只能在零日攻击的“防护真空期”阴影下浏览网页,危机重重。

幸好多家第三方安全厂商重视到这个隐患,所以迅速的发布了补丁代码,如ZERT(Zeroday Emergency Response Team,零日漏洞紧急响应小组)就于最短时间内发布了相应补丁,而且发布安全公告的NSFocus小组也提出了零时注销VML扩展组件的方法:
开始->运行,输入这个命令:regsvr32 /u "%CommonProgramFiles%\Microsoft Shared\VGX\vgx.dll"

但是,鉴于国内用户主要关心的内容并非安全,大部分人根本就不知道出现了这个漏洞,更不会去修补这个漏洞,因而我们仍然担忧,一旦真正通用的攻击代码流行起来,国内多少用户又会遭遇入侵事件,这只能取决于微软发布安全补丁的时间了。同时,安全界应该庆幸,这个漏洞是不能通过蠕虫的方式传播的,否则恐怕会重演当年的SQL、DCOM危机。

三. 无处不在的浏览器漏洞

浏览器作为用户与网络交互使用最频繁的“窗口”,要容纳的范围之广,其自身设计的复杂性是不可避免的,同时也由于它是一种不可抛弃的基本交互界面,提供了大量的组件扩展,与其说它是一个程序,它更像是一种巨大的靠各个功能扩展组件连结起来的巨大程序集合,由于这一特性,浏览器总能吸引许多安全研究者对其进行检测和研究,因此有关浏览器的漏洞报告和攻击从来就没有停止过,这些漏洞并非一定是来自浏览器自身的,任何一种参与浏览器工作的扩展组件出现漏洞都会直接影响到浏览器自身,因而我们一般把它们统称为浏览器漏洞。

浏览器漏洞并非一定是缓冲区溢出,它包括了多种因素,像控件安全问题、脚本权限盘查失误、跨站数据检测不严、子框架程序执行权限、BHO组件自动安装等,都给入侵者提供了渗透的门道。

公然挑衅用户安全的流氓:不请自来的浏览器控件

在中国,我们很多时候可以看到这样一番景象:且不说街上林林总总的网吧,就连一个最普通的家庭电脑、单位里的电脑,只要你打开浏览器,就会看到上面出现一堆“助手”、“秘书”、“工具栏”等非浏览器官方功能组件,但是当你询问电脑的主人有关这些东西的来历时,会发现他们比你还莫名其妙:这不是本身就有的吗?系统自己给我装上去的啊!

国内的浏览器领域,充斥着各种流氓,而且,它们都是自动安装的,因此每个流氓软件公司都造就了非常高的“用户拥有量”业绩。而且最关键一点是,用户根本就不知道他们的利益和安全已经受到了侵害。

许多用户都有过经历,去了某个站点后浏览器突然有段时间停止响应,然后硬盘灯狂闪,在这之后,浏览器上就冒出了一个工具条,这就是“自动下载安装控件”缺陷导致的后果,这种不光彩的技术最早被某个公司使用而迅速占据了国内网络市场。这些自动强制安装的流氓策略其实是一种最具安全隐患的手段,因为这些入驻用户系统的控件可以变为后门性质,而且一些国外非法站点早已经利用浏览器自动安装控件的缺陷来向那些为了特殊原因而访问它们站点的用户种植广告软件和后门了,如果这个强制安装技术被大量公开,我们的用户将防不胜防。

来自框架的渗透:浏览器上挂木马

许多读者都听说过“网页挂马”,甚至一些站点日访问量大的站长还接到不明人士的询问:“可以用你的站挂马吗,我出XXXX元!”,除此之外,一部分经常上论坛的用户如果不幸经历过论坛被入侵的事件,其中有一半几率就是论坛被“网页挂马”了,而访问该论坛的人则通通被感染木马,这是为什么呢,什么是“网页挂马”?

网页挂马实际上并不复杂,它是利用了HTML规范里用于在页面中插入框架的iframe标记配合MIME漏洞进行的破坏渗透,由于框架可以被设置为宽度0高度0的大小,在浏览器上它是不会显示出来的,而框架里可以自由的插入任意HTML文件连接和脚本,如果攻击者使用特殊的MIME信息为一个有害的程序伪造一个虚假的头部信息,浏览器会误以为它是合法媒体文件而下载执行,如果用户的浏览器没有打上相应补丁,他必然会遭受木马的入侵,这种攻击方法被称为“MIME头部错误解析攻击”。

MIME是Multipurpose Internet Mail Extension的缩写,起初定义为在Internet电子信件中的编码方法,现在它已经演化成一种指定文件类型的通用方法。

MIME用于标识文件的格式,如果Internet上有两个程序在联系,其中一个发文件,另一个接收文件,那么接收方怎么判断文件格式的呢?这就是MIME的功劳。系统通过读取发送方的MIME标记来获知它要如何处理该文件,错误的MIME格式会导致浏览器进行错误处理,例如有时候我们在下载某些文件时浏览器却显示了一堆乱码,这就是一个典型的MIME标记错误的例子,我们看到的乱码实际上是文件内容,正常情况下浏览器会识别出它是二进制文件而弹出下载提示框,如果由于某些原因,浏览器无法获取发送方的MIME数据,那么它将按默认格式——文本的方式来读取文件并显示出来,这样看起来似乎没有危害,但是,一旦发送方特意伪造某些能让系统认为它是可以合法下载的MIME头部呢?这就产生了“MIME头部错误解析攻击”这样一种影响至今的攻击方式。

早在多年以前,某安全小组就发现IE在处理不正常的MIME类型中存在问题,攻击者可以建立一个包含可执行文件的附件的HTML格式邮件并修改MIME头部信息,使IE不正确处理这个MIME所指定的执行文件附件从而导致附件中的文件被执行。简单说来,就是把MIME头部改为音乐媒体格式,让浏览器误以为附件是一个音乐文件,音乐文件和程序文件都是一样的二进制数据,对于程序文件,IE会提示用户是否下载运行,而对于音乐文件,IE会直接把它解码还原数据到系统临时目录里,然后通过一个简单的文件后缀名判断来决定该用哪种方法处理它。到这里,浏览器经过了两次判断:MIME类型、文件后缀。这是一个连环扣,例如用户收到一个MP3文件,MIME把它描述成音乐文件,所以浏览器解码保存这个文件到一个临时目录,而后查找调用这个文件后缀MP3对应的执行程序,这就是一次完整的工作过程;但是问题就出在这个似乎毫无问题的步骤上,如果攻击者给用户发送一个带有EXE后缀可执行文件的邮件,并把它的MIME描述为音乐文件,这时候浏览器会把它解到临时目录,然后根据它的后缀名调用一个能打开它的应用程序——EXE后缀告诉系统,直接运行这个文件!于是这个文件就被顺利执行了,用户的机器也就遭到破坏,这就是“网页挂马”的根本原理。入侵者使用EML格式文件作为木马载体,是因为它是在文件内部声明MIME头部标记的,这就给入侵者实现了最方便的标记篡改。

在实际应用中,入侵者会在页面里建立一个隐藏的iframe框架,把它的目标地址指向已经写好的eml文件或现在流行的网页木马生成器产生的脚本页面,然后就可以守株待兔了,访问了带有这个框架页面的用户会因为浏览器错误解析MIME头部而导致文件被下载运行。

交互危机:跨站和脚本

对于论坛的开发人员来说,最头痛的莫过于屡禁不止的“跨站攻击”(CSS),这不是“样式表”的简称,而是一种配合客户端脚本实现的窃取用户信息攻击,所谓“跨站”,就是指入侵者在合法的网站里以某种方式构造恶意页面代码,使得浏览了该网站的用户在不知不觉中被带到入侵者设置的记录用户Cookie的页面中,众所周知,Cookie信息历来都是被视为敏感对象处理的,因为它可能包含用户隐私数据,如用户在某个站点的用户名和密码、私人信息等,这些数据如果被入侵者偷窃到,他就有办法将自己伪装成受害者的身份光明正大的混进被“跨站”了的站点里为所欲为,通常入侵者的重点都放在具有某些站点权限的用户身上,例如管理员,一旦管理员密码泄漏,后果将不堪设想。

“跨站”能引发互联网攻击的根本原因是浏览器不能很全面的判断并阻止用户的跨域访问,什么叫“跨域访问”呢?如果一个用户正在浏览的页面里有个框架或弹出窗口,而它们的内容是指向另一个站点的,这就是“跨域”,面对这种情况,浏览器正确的做法应该是提示用户可能发生的危害,并可能加以阻止,但是现实情况却无法完美的做到,许多用户不知道,其实浏览器的安全设置里早已提供了防止跨域的设置,只是默认设置为“启用”状态,为什么呢?如果你自行更改测试,就会明白了,如果你设置到“提示”状态,那么打开很多网页的时候,你会被许多次重复出现的跨域访问警告给闹个心情不佳,而如果你设置了“禁止”,那么好了,安全性上去了,可是你又会发现很多站点都显示异常了,这是因为,跨域实际上是无所不在的,像广告连接这种最常见的东西就已经属于跨域,如果这个功能被禁止,许多交互就无法完成了。而真正引发危机的,只是一部分使用了非法代码格式的跨域,棘手的是,这些代码是可以千变万化而又合理存在的,例如跨站的基本语句“document.cookie”,它本身是合理的,只是被放到了不合理的地方,但我们总不能因此就取消了这个语句的使用,因而厂商无法为其发布安全补丁,只能把希望寄托于站点的编写者身上,让他们在代码中增加对可能引发攻击的命令的过滤。

在很多时候,脚本(Script)都是作为网页与用户之间的交互大使存在的,对话框需要用脚本生成、消息框需要用脚本完成、进行一些数据运算处理也需要脚本完成,除外还有各种特效,脚本为网页的丰富多彩贡献了不小的力量。

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论