天融信发布HTML5安全报告 八大威胁引发关注
HTML5是万维网联盟(W3C)发布的新一套渲染网页标准,在给全球互联网带来更多功能的同时,HTML5也引来了黑客们的兴趣,黑客们现在可以更多地对HTML5和JavaScript发动恶意攻击,甚至比以往任何时候都要容易。比如,谷歌Chrome、Safari、Firefox和Opera等浏览器基于HTML5所部署的离线应用程序缓存功能就很容易受到黑客攻击。而HTML5的WebSocket技术向浏览器提供了一种网络通信协议,也可以被用做秘密的后门通信。
技术的发展与变革已经不能靠单一的某项技术来推动,如同HTML5一样,它的新使命是将Web带入一个成熟的应用平台,所以HTML5并不是简单的HTML标签的升级,而是涵盖了各种新的JS API函数,比如本地存储、拖放操作、地理定位、视频、音频、图像、动画等。同时,HTML5平台下CSS3的完善也使得WEB前端的表现力更加活跃。那么由此,我们可以把HMTL5平台下的新安全风险分为三方面:HTML+JS+CSS。这些风险已经逐渐开始得到了业内人士的关注。
本月刚刚结束的“2011年中国计算机网络安全年会”除了探讨 “移动互联网安全"、“网络安全技术前沿”、“通信基础设施安全”、“地下经济和网络犯罪”等话题外,最引人瞩目的话题无疑要属于“HTML5安全威胁”。天融信资深安全专家徐少培代表天融信在会上首次正式发布了HTML5安全威胁报告。可以预见,HTML5安全威胁论未来将成为业界最为关注的安全话题之一。下面我们就一一看看这些风险到底是怎样的。
1、新标签和新属性绕过黑名单策略
HTML5带给人们最明显的变化就是增加了新的标签和新的标签属性,这些新标签给以黑名单策略做防护的设备带来了不小的冲击力,就是可以直接绕过黑名单策略。在WEB防护上我们经常使用黑名单策略来进行对XSS的防护,比如在WEB脚本程序中使用黑名单或在WAFS(比如modsecurity)等网络设备中使用。黑名单经常使用PCRE对标签和属性进行正则匹配。那么攻击者可以使用新标签和属性直接绕过黑名单策略发起攻击。能够执行XSS脚本的标签有语音标签和视频标签,<video>和<audio>。属性formaction,onformchange,onforminput,autofocus。
2、隐藏URL中的恶意代码
在URL跨站攻击中,为了欺骗用户去点击,会使用短网址技术隐藏URL中的恶意代码,比如使用http://bit.ly/对包含有跨站代码的URL进行短网址变换。但这时候问题来了,虽然进行了短网址变换,隐藏了URL参数后的恶意代码,但用户点击后浏览器的URL地址栏中还是会出现恶意代码。对于这种攻击来说,短地址技术隐藏了一半。那么另一半我们可以使用新方法pushState()来实现对恶意代码的隐藏,HTML5中新加入了两个新方法pushState()和replaceState(),我们可以使用pushState进行无页面刷新更改当前URL,而这个URL只要是和原来的URL同域就可以。
3、拖放劫持攻击的崛起
可以把拖放劫持定义为,点击劫持技术(Clickjacking)+HTML5拖放事件。点击劫持攻击刚被提出来的时候,其在隐藏框中的操作只涉及到鼠标点击操作。然而单纯的点击劫持攻击范围有所限制。拖放劫持模式将劫持的用户操作由单纯的鼠标点击扩展到了鼠标拖放行为。在现在的WEB应用中,有大量的需要用户采用鼠标拖放完成的操作(例如一些小游戏等),而且用户也常常在浏览器中使用“鼠标拖放”操作来代替复制和粘贴。因此“拖放操作劫持”大大扩展了点击劫持的攻击范围。不仅如此,在浏览器中拖放操作是不受“同源策略”限制的,用户可以把一个域的内容拖放到另外一个不同的域。简单地说,就是用户可以将某一个浏览器页面中的内容拖放到另外一个浏览器的页面中,也可以通过在某个浏览器页面中的拖放操作实现对其他浏览器页面内容的读写功能。这样的效果是上一代“点击劫持”无法做到的。因此,突破同源策略限制的“拖放劫持”可以演化出更为广泛的攻击形式,突破很多种防御。例如:可以通过劫持某个页面的拖放操作实现对其他页面链接的窃取,这些链接中可能会有session key,token,password等敏感信息;或者可以把其他浏览器中的页面内容拖拽到富文本编辑模式中,这样就能够看到页面源代码,而这些HTML源代码中可能会有type="hidden"等敏感信息。前段时间大家熟知的“Cookiejacking”就是利用拖放劫持技术来发起的攻击。
4、本地存储存在的安全隐患
HTML5通过使用localStorage进行本地存储,每个域的存储数据默认是5M,比起Cookie的4K存储要大很多。对于本地存储,存在一下几点安全隐患。
(1)不宜使用localStorage来代替cookie做身份验证。cookie有HTTPONLY的保护,而localStorage没有任何保护机制,一旦有XSS漏洞使用localStorage存储的数据很容易被获取。
(2)localStorage是采取明文存储,如果用户不主动删除,数据将永久存在。
(3)本地存储容易遭到DNS欺骗攻击。
(4)localStorage存储没有路径概念,容易遭到跨目录攻击。
(5)5M的存储空间,攻击者可以把蠕虫的shellcode代码存储在本地。
5、HTML5的两个跨源请求方法
HTML5中增加了两个重要的跨源通讯模块,跨文档消息通讯和XML HttpRequest Level2。跨文档消息通讯把postMessage API定义为发送消息的标准方式。在处理跨文档通讯消息时,要注意以下几个安全问题。首先严格验证每个消息的源头,其次即使来源可信,也应该像对待外部输入一样仔细检测过滤。最后就是永远不要对来自第三方的字符串求值。
XMLHttpRequest Level2通过CORS(Cross Origin Resource Sharing,跨源资源共享)实现了跨源的XMLHttpRequests。如果服务器决定允许返回请求,则会在HTTP返回头中加入Access-Control-Allow-Origin: *。如果使用*号则表示任何主机的请求都可以得到返回数据。这样做是很危险的。其次,也不要使用Origin header去做访问控制,使用第三方工具很容易绕过。最后,最好先判断源然后再去进行下面的流程处理,这样可以多少避免恶意的CORS请求,防止服务器遭受DDOS攻击。
6、HTML5僵尸网络
使用HTML5 Web Workers可以让Web应用程序具备后台处理能力,而且对多线程支持非常好。通过CORS可以发起跨源的XMLHttpRequest请求,CORS的安全策略仅仅在于是否允许得到服务器返回数据,但发送的请求服务器都会进行处理。这两种HTML5的新方法组合起来就可以造就HTML5僵尸网络。设想用户打开也一个网页,但网页的后台正在疯狂的进行数据操作,如不停的在向一台服务器发送POST请求,或进行着某些运算。也就是说用户打开网页的那一刻,不知不觉中就已经成为HTML5僵尸网络中的一员。
7、地理定位暴露你的位置
HTML5的Geolocation API,允许用户在Web应用程序中共享他们的位置,使其能够享受位置感知服务。HTML5 Geolocation规范提供了一套保护用户隐私的机制,除非得到用户明确许可,否则不可能获取位置信息。但用户如果在网页中使用地理定位服务,那么就用可能泄漏用户地理位置的危险。因为如果这个网页中被攻击者加入了劫持代码,那么用户地理位置的经纬度就会被攻击者获取。
8、CSS3增加了UI攻击风险
随着HTML5应用平台下CSS3的引入,使得WEB前端的表现能力更加活跃,圆角,阴影,旋转等等技术更将 CSS 带到前所未有的高度。然而,从另一角度来看,攻击者也可以使用CSS3的这些新技术去伪造出浏览器模块,进而发动UI攻击。这样的攻击方式已经出现,我发现
虽然HTML5时代并未真正到来,但是网络安全向来讲究未雨绸缪。在HTML5引发安全灾难之前,引发足够的重视,做好防范工作也是十分必要的。希望通过以上八点威胁分析,可以引起业界的广泛关注,及早打算。这方面,天融信再一次走在了业界前列,针对HTML5可能引发的安全风险,天融信在2010年就开始着手研究对策。目前,天融信在前端硬件上提供了针对Web的防护解决方案,可以避免用户网络因为HTML5而遭受损失。