过去,网站的内容大多是静态的。随着HTML5的流行,Web应用进入一个崭新阶段,内容的动态化和实时共享让阻拦不良内容或恶意软件变得更加复杂,公司和个人的重要信息也被暴于极为危险的网络环境之下,对于网站安全建设来说,无异于在伤口上撒上了一把盐。
天融信曾在年初发表过一篇《网站安全建设指南》,里面分析了网站安全建设的思路和注意事项。面对越来越多的Web应用,网站安全建设仍然面临着种种困难。据 Gartner 调查,信息安全攻击有 75% 都是发生在 Web 应用层而非网络层上。同时,2/3的Web站点都相当脆弱,易受攻击。可以说,绝大多数企业将大量的投资花费在网络和服务器的安全上,没有从真正意义上保证 Web 业务本身的安全,才给了黑客可乘之机,让网站安全饱受威胁。根据天融信阿尔法实验室的分析,Web页面注入漏洞和跨站脚本漏洞等威胁,已经成为未来安全建设的最大挑战。
目前,基于Web的应用已经成为一道通往互联网的必经之门,其中浏览器好比一个盛满互联网五光十色的博大容器,当用户在打开探秘互联网的大门,在这个容器中享受饕餮大餐时,是否已经意识到自己已经身处危险之中?随着支持HTML5浏览器的不断增多,以Chrome、IE、Firefox、Safari、Opera为代表的现代浏览器让网站安全建设不断接受着安全挑战。下面,我们就来分析一下那些基于Web应用威胁网站安全的罪魁祸首,并借此希望在天融信《网站安全建设指南》的基础上,更全面的思索网站安全建设的思路。
网站敌人之一:URL地址栏欺骗
用户每天通过点击URL地址浏览互联网上百上千页面。浏览一个页面,其实就是简单的两个步骤:
1鼠标移动到页面上想要去的URL地址链接,此时状态栏会显示URL链接的地址;
2点击URL链接,浏览器页面会导航到你想去的页面,并且在地址栏中显示这个链接。
这个被用户看似最简单最普通的浏览页面的两个步骤,用户是否思考过以下四个问题:
(1)状态栏中显示的URL地址,是目标URL地址吗?
(2)地址栏中显示的URL地址,是目标URL地址吗?
(3)地址栏中显示的URL地址和导航后的页面对应吗?
(4)拖动URL地址到地址栏,会导航到目标URL地址吗?
我们带着这些问题往下看。从你点击到成功加载页面,就是短短的1秒钟时间,这1秒就足够进行URL地址栏欺骗了。
URL地址栏欺骗,可以分两类,一个是点击URL地址,一个是拖放URL地址。现代浏览器都可以使用onclick事件以及鼠标事件onmouseup,onmousedown来实现点击欺骗。其次,各个浏览器对URL编码解析的差异,也会导致欺骗的发生。另一方面,拖拽一个地址到地址栏的时候,我们可以使用拖放函数ondragstart和event.dataTransfer.setData方法,把拖放的地址内容替换掉,这样也就完成了欺骗。
网站敌人之二:URL状态栏欺骗
现代浏览器状态栏的设计方式,和以前比较起来有很大的变化。以前的状态栏是以一个浏览器独立模块固定在浏览器最下端的。而现代浏览器状态栏的设计方式则不同。
这种状态栏设计最明显的变化是,当你把鼠标放在链接上时,状态栏才会出现,鼠标离开时,状态栏将会消失。这样的呈现方式逻辑上会存在一个问题,最左下角的这块区域,既是状态栏显示区域又是页面显示区域。视觉上给我们的呈现效果就是状态栏在页面区域的左下角显示。因此我们就可以使用脚本模拟状态栏,进而实施状态栏欺骗。
那么现代浏览器状态栏这种有阴影有圆角的外形,从技术角度看是否能够用脚本实现?答案是肯定的。在CSS3中增加了圆角(box-shadow)和阴影(border-radius)的方法实现。未来如果出现类似于模块区域越界到页面的情况,我们同样可以使用脚本进行伪造欺骗。关于这种攻击方式,天融信公司通过与微软、谷歌、火狐的讨论,一致认为这确实是一个问题,但并不至于造成更大的安全风险,所以也暂时不想更改这种浏览器状态栏的处理方式。虽然浏览器厂商都没有明确表示这是一个漏洞,但Bugtraq还是收录了天融信阿尔法实验室发现的三个漏洞。
漏洞的信息如下:
Microsoft Internet Explorer CSS Handling Status Bar Spoofing Vulnerability
Bugtraq ID: 47547
Google Chrome CSS Handling Status Bar Spoofing Vulnerability
Bugtraq ID: 47548
Mozilla Firefox CSS Handling Status Bar Spoofing Vulnerability
Bugtraq ID: 47549
网站敌人之三:页面标签欺骗
浏览器从单页面,变成多页多窗口显示可以说是设计理念上的飞跃。现代浏览器都已经支持多窗口这种模式,而且在每一个窗口顶端都会有一个页面标签。当打开多个页面窗口时,页面标签上的logo和标题可以指引我们想要去的网站。
这种页面标签的指引方式,使得标签欺骗成为可能。这种欺骗方式最早是由国外安全人员提出,他们把这种欺骗称之为Tabnabbing。
现在来简单介绍一下,页面标签欺骗原理:
(1)用户打开很多网站页面窗口浏览器网站,这其中就包括攻击者制作的一个恶意攻击页面。
(2)当这个攻击页面检测用户不在浏览这个页面,也就是说长时间内失去了焦点。
(3)攻击页面自动篡改标签的logo,页面标题,和页面本身。比如全都改成Gmail的。
(4)当用户浏览了一圈,由于视觉欺骗,发现有Gmail的logo。而且通过上面的介绍我们知道,多页面多窗口的特点使得用户要寻找页面只能通过标签上的logo和标题去分辨。
(5)用户欣然的点开标签为Gmail的这个页面,进去后除了URL地址不是Gmail外,其他所有都是Gmail的内容。视觉上的盲区,再次使得用户可能忽略地址栏中的URL,下意识的认为这是一个正常的Gmail登录页面。进而进行登录操作,这样账户密码就被盗了,登录成功后再转向到真的Gmail页面。
以上五点就是页面标签欺骗的整个过程。现在Chrome、Firefox浏览器都会受到这种攻击的影响。
网站敌人之四:页面解析欺骗
这里所说的页面解析欺骗,主要是由于浏览器处理多个函数竞争发生逻辑上的错误。导致浏览器URL地址栏已经导航到一个URL地址,但实际页面却没有加载响应的页面。
通常情况下,导致这种页面欺骗是由于导航函数和对话框函数或写页面函数之间的阻塞。例如window.open()和alert(),window.open()和document.write()。例如这个漏洞可以导致,当URL导航到google.com的时候,页面却被改写了。
天融信阿尔法实验室通过研究发现,国内的QQ浏览器和搜狗浏览器曾存在这样的漏洞,现在这个漏洞已经得到了修复。
这种攻击方式,可以实现域上面的欺骗,发动钓鱼攻击。当传统的钓鱼方式更容易被用户识别的时候,这种利用浏览器漏洞进行的钓鱼可能会成为一种趋势。
网站敌人之五:扩展插件攻击
现在的浏览器不像早期是铁板一块,基本都可以进行扩展和定制。除了Adobe flash,Java等这些主流插件外,各个浏览器都在扩充自己的插件平台。通过扩展,可以辅助阅读,有翻译文字,过滤广告,调试页面,标签管理,批量下载,主题更换等等,形形色色,包罗万象。那么这么多插件扩展,用户是否知道自己的浏览器中装了哪些插件呢?对于企业来说,是否有部署检测员工浏览器插件更新呢?据国外有关统计,在浏览器上发生的安全风险中,80%来自于插件扩展。
关于插件上面的安全问题,可以分为两方面来说。其一,本身这个浏览器插件就是恶意插件,就是攻击者为了攻击用户制作的一个恶意插件,这种插件作为浏览器的扩展部分可以通过js脚本访问DOM操作,这就有可能获取用户的信息,比如历史记录,密码等。其二,就是浏览器插件本身就正常插件。但这种插件自身出现了漏洞问题,比如在Adobe Acrobat Reader Plugin <= 7.0.x中,出现XSS问题http://[host]/[filename].pdf#[some text]=javascript:[code]。另外就是这个是正常插件,而且也没有漏洞问题,但它加载的程序却有漏洞问题,比如Flashback,60W Mac僵尸,本身java插件没有问题,但利用java插件加载的恶意java程序,可以利用java的一个漏洞获取系统权限。
关于插件方面的防御,天融信认为可以从两方面来考虑。一个是用户方面,不要安装任何未知的插件,并且卸载掉浏览器中已经安装的未知插件。对于已经插件,时常的检测更新,这里推荐两种检测更新的方式,一个是火狐官方提供的在线检查插件,适合任何浏览器,另一个是Qualys Inc.(科力斯)公司提供的在线检查插件服务。这两个检测方式都可以列举出来你浏览器的插件情况。另一方面就是浏览器厂商方面,当插件安装时应该有提示,说明这个插件都有哪些权限;另一点就是制定更加严格的插件审核机制,防止恶意插件获取用户隐私。当然浏览器的沙箱机制,能够很好的解决这些问题。
随着HTML5的发展,很多插件将会渐渐退出历史舞台,比如:IOS、WindowsPhone一开始就不支持Flash。去年Adobe放弃移动平台上Flash开发,全面转向HTML5开发。浏览器大战,也是插件大战,浏览器厂商的目标都想把浏览器向平台转化,第一步就是要先插件扩展做成平台模式。但现在浏览器都是插件扩展各自为战,而且很多插件间都会出现不兼容的问题,统一的插件平台什么时候才能到来呢?这一切只有等待HTML5去解决了。
网站敌人之六:本地存储攻击
HTML5提供了一种新的本地存储方式,这种存储方式是什么样的呢?我们来看一看,现在各大浏览器都已经支持了这种存储方式接口。这种存储方式使用HTML5提供的新函数localStorage()进行存储数据,存储的默认大小是5M,经过我的测试发现除了Opera使用base64加密外,Chrome,IE,Firefox,Safari浏览器都是明文存储。其实base64非常容易解密,所以可以认为现代的浏览器对于这种方式基本都是明文存储。根据HTML5存储方式的这新特性,我们应该注意哪方面的安全呢?天融信阿尔法实验室认为应该从六方面注意:
(1)不可替代Cookie
浏览器支持了使用HTTPONLY来保护Cookie不被XSS攻击获取到。而localStorage存储没有对XSS攻击有任何的抵御机制。一旦出现XSS漏洞,那么存储在localStorage里的数据就极易被获取到。
(2)不要存储敏感信息
上面已经提到,基本都是明文存储。
(3)严格过滤输入输出
在某些情况下,在通过在localStorage存储中写入或读取数据的时候,如果数据没有经过输入输出严格过滤,那么极易可能这些数据被作为HTML代码进行解析,从而产生XSS攻击。
(4)容易遭到跨目录攻击。没有路径概念,容易遭到跨目录攻击。
(5)容易遭到DNS欺骗攻击。
(6)恶意代码栖息的温床。因为存储空间大了,恶意代码有可能使用这种方式存储。
网站敌人之七:绕过浏览器安全策略
现代浏览器有很多安全策略来防止恶意攻击。每每浏览器出来新的安全策略,攻击者就会想着法的去突破它绕过它。浏览器安全策略很多,在这里挑选几个典型的浏览器安全策略,看看这些安全策略是如何被绕过的。这其中包括绕过XSS过滤器,绕过同源策略,绕过Httponly,绕过点击劫持防御,绕过沙箱。
(1) 绕过XSS过滤器
虽然XSS攻击越来越多,IE8+,Chrome4+,Safari5+,FF(noscript)都在浏览器中嵌入了XSS过滤器。这样在攻击者进行XSS攻击的时候,浏览器可以自动把XSS代码过滤掉。这样就减少了一些安全风险。
绕过XSS过滤器,主要方式是通过代码变形,比如
双参数:p1=
注释:
自动闭合:
UTF-7: +ADw-script+AD4
data URIs: data:[mediatype][;base64],data
更多的方法可以参看ha.ckers.org/xss.html,html5sec.org
(2)绕过同源策略
同源指的是同主机,同协议,同端口。简单地说就是要求动态内容(例如,JavaScript或者VBScript)只能阅读与之同源的那些HTTP应答和cookies,而不能阅读来自不同源的内容。绕过同源策略,有的是在授权模式下绕过,有的就是属于非法绕过。
通常情况以下几种方式可以进行跨域操作,1在Flash&Silverlight中crossdomain.xml写入允许跨域的网站。2 HTML5中的Postmessage,CORS两种方法,提供了两种新的跨域操作。3 DragAndDropJacking,拖放操作是不受同源策略限制的。4另外由于浏览器自身特性缺陷导致跨域,比如一些扩展插件接口权限粒度过大等等都可能导致跨域操作。
(3)绕过Httponly。
Httponly是浏览器为了保护cookie在XSS攻击不被js脚本获取的一种方法。这里介绍Apache httpOnly Cookie Disclosure从而绕过Httponly包含的一种方法。在Apache中如果cookie的内容大于4K,那么页面就会返回400错误。返回的数据就会包含cookie内容。攻击的方法是找到一处XSS漏洞,设置大于4K的cookie。apache报错后,从中筛选出cookie数据发送到攻击者服务器上。这样我们就成功的绕过了httponly的保护。
(4)绕过X-Frame-Options
自从Clickjacking这种攻击技术2008年出现后,从其技术发展阶段上分析,可以分为点击劫持(Clickjacking)、拖放劫持(Drag&Drop jacking)和触摸劫持(Tabjacking)三个阶段。这三种劫持手段已经构成了浏览器前端劫持体系。主要的技术实现手段是隐藏层+Frame包含。为了防御这种攻击,浏览器加入了X-Frame-Options头部,用来判断页面是否可以被Frame包含。如果我们脱离了Frame这种方法,而且还能实现点击劫持的这种攻击效果,就算是我们绕过了X-Frame-Options这种防御方式。这种方法还是有的,我们构造多个页面,使用history.forward(),history.back()使页面在设计好的模式下迅速的切换进而劫持用户的点击。详细的过程可以参看,http://lcamtuf.coredump.cx/clickit/。此攻击方式设计复杂,且需高交互。
(5)绕过沙箱
浏览器沙箱技术是有效保护用户不被木马病毒侵犯的一种方法。虽然在过去三年的Pwn2Own大会上,Chrome是唯一 一个没有被攻破的浏览器,但Chrome沙箱并不是不可以突破。在Pwn2Own 2012 黑客花费了6个不同类型的bug,成功的突破了沙箱。我们假设一个月发现一个bug,6个就是半年,然后再试着突破沙箱。所以绕过沙箱将越来越难,不然google也不会把奖金提升的越来越高,成功突破沙箱执行代码可以获得最高6万美金的奖励。
网站敌人之八:隐私安全
现在互联网更加注重个人隐私。现代浏览器也考虑到这方面的问题,提供了隐身模式,在隐身模式中本地Cookie,搜索记录,临时文件等不会被记录,但书签被记录,网站服务器也会记录用户的访问痕迹。现代浏览器随着功能的增多,很多情况都会自动收集一些本地信息上传到服务器,这些信息就极易可能涉及到个人隐私。包括地理位置,崩溃报告,同步功能,在线翻译,语音输入,自动更新,各种插件扩展……。那么浏览器厂商也意识到了,这种自动收集信息行为,有可能会让用户觉得自己隐私泄漏。所以每个浏览器在其官方页面都有隐私声明,来告知用户浏览器会自动收集哪些本地信息,这些信息是否会涉及到用户隐私等等。那么浏览器收集的信息内容一旦超越了自身的隐私声明范围,就用可能是一种隐私泄漏行为。所以这些隐私声明对浏览器厂商和用户来说都非常有意义。
网站敌人之九:安全特性差异化
现代浏览器从功能上和模式上都没有一个成型标准,使得各大浏览器厂商都根据自己的想法在做浏览器。这也使得浏览器产生很多差异性。现代浏览器主要有以下几个差异:HTML5支持,虽然现在HTML5标准还没有正式发布,但能更多更全的支持HTML5标准,已经成为判断一个浏览器优略的准则。URL编码差异,更多的编码解析差异可以看谷歌发布的浏览器安全手册,从2008年发布以来,现在还在持续更新着。安全特性支持,对防御攻击而加入的安全策略也不尽相同。我们愿意相信浏览器的这些差异性是良性的,这可以使得各个浏览器互相学习模仿彼此的长处和优势,更好的促进了浏览器的发展。但这些差异让网站安全建设策略必须将各个浏览器的特点都考虑进来,这无疑加大了网站安全建设的难度。
结束语
随着天融信阿尔法实验室孜孜不断的深入研究,网络安全风险正不断展现在用户面前,天融信针对这些发现,也在积极进行着安全防御,为广大网络用户和企业提供无忧的网络应用环境,为网站安全建设添砖加瓦。