WebGL. :浏览器剥削的新维度

WebGL. 是一个新的Web标准,用于浏览器,旨在将3D图形带到Internet上的任何页面。最近在Firefox 4和Google Chrome中默认启用了它,并且可以在最新的Safari构建中打开。背景人对研究影响安全景观的新领域具有持续兴趣。我们发现:

1. WebGL的规范和实施已确定许多严重的安全问题。
2.这些问题可以允许攻击者通过Web浏览器提供恶意代码,允许攻击GPU和图形驱动程序。通过WebGL对GPU的这些攻击可以使整个机器无法使用。
另外,将其他危险带有WebGL,将用户提供’风险的数据,隐私和安全性。
4.这些问题是WebGL规范所固有的,并且需要重大的架构变更,以便在平台设计中进行修复。从根本上,WebGL现在允许来自Internet的完整(完成)程序到达图形驱动程序和图形硬件,这些硬件在所谓的计算机(内核模式)中操作的内容。
5.默认启用WebGL的浏览器将其用户危及这些问题。

WebGL.
在Web的整个历史中,已经有一个驱动器允许更大的Web内容中的交互性和表现力。从初始FILAYS开始脚本,通过支持HTML5功能,默认情况下在浏览器中提供了越来越复杂的HTML5功能,越来越复杂的初始化。

在现代浏览器的演变中的每个阶段,现有的安全宗旨必须重新评估,以确保新功能不会打开任何严重的攻击向量。作为一个例子,在介绍脚本之前,恶意页面没有简单的机制来访问另一个站点’■内容;因此,不需要实现同样的策略。浏览器早期在浏览器的早期制作的安全决策可能不再适用于现代进步,特别是关于内容的跨域访问的人。

虽然数据盗窃是严重问题,但在引入新技术时,浏览器的完整性也应不会被遗忘。有时候福利可能被证明是更加诅咒。作为示例,使用二进制浏览器 - 插件支持(例如ActiveX或Netscape插件应用程序编程接口)。支持使第三方非常容易扩展浏览器的功能,并为网页提供可调用的接口。这又打开了浏览器的攻击面,以潜在的代码语音,其中一些几乎肯定是错误的。然后,它可能难以确保平台的浏览器难以保护平台,因为它甚至可能甚至没有他们的代码,这是一个问题的代码,导致这种乐队辅助辅助装置’s杀戮和firefox’S插件检查器阻止或通知用户可能需要更新。最后,使用这种广泛的本土内容的唯一安全方法可能不是首先拥有它,但目前的一般共识是胜任越大的安全风险。

这导致了这个博客文章的主题WebGL。如果你还没有听到你的话几乎肯定会很快。 WebGL.’目标是将OpenGL派生3D API引入浏览器,可通过任何想要使用它的任何网页访问的JavaScript。最近发布的Mozilla Firefox 4浏览器默认支持支持,如Google’自版本9和Safari(WebKit)5以来的Chrome浏览器。

这本身就不应该是争议的,然而,它的实施方式,与当前的PC和图形处理器架构的方式耦合的方式导致了一些质疑方法的安全性。背景信息对规范中可能存在的安全问题进行了一些初步调查,从而导致对支持平台目前是否应该在支持平台上进行的问题,以及其益处实际上超过其风险。

快速概述3D图形管道

图形管道简单图

在最低级别的是图形处理器(GPU)硬件本身,这不一定实现任何特定的API(几乎肯定是制造商开发的专有接口),但它应该至少支持编程API所期望的所有功能等级。几乎所有现代3D硬件都包含各个可编程单元(通常称为着色器),这些单元可以通过用户模式进程单独编程。着色器代码的本机格式通常特有于硬件供应商;然而,存在常用语言以允许开发跨平台代码。

在硬件上方的是一个驱动程序,它倾向于在操作系统上的内核模式中运行;其工作是处理低级硬件方面,并提供通过操作系统的其他组件可以访问GPU的标准化接口(例如WDDM)。

接下来是调度,这可以在多个不同的位置实现,例如在内核驱动程序本身,由OS或完全在用户模式下。其责任是分享在同一台机器上运行的各个程序之间的GPU访问。在更传统的环境中,这是不必要的,因为只有一个应用程序(例如窗口管理器)实际上需要一次直接访问GPU。在3D场景中,要求直接访问着色器和内存以上载纹理和几何形状意味着必须适当地管理。

堆栈中的最终部分是接口库,它是用户进程访问图形库的主要路由。这是最终抽象级别,从可能的任何硬件特定功能中删除。公共接口库是Direct3D(也具有一些内核功能)和跨平台OpenGL。它们提供API以创建要显示的3D几何,编译器将着色器程序转换为GPU的更合适的表示,并管理分配和将纹理信息上传到视频卡内存。

WebGL. 的麻烦
基于简化描述,可以进入目前WebGL指定,设计和实现的方式的问题。如果您绘制了位图,传统浏览器内容通常不会直接访问任何形式的硬件,它将在浏览器中的某些代码处理,该代码负责绘制位图。然后,这可能会将其委托给OS组件,这将执行绘图本身。虽然这种区别在所有流行浏览器中引入了2D图形加速度的稍微模糊,但仍然是GPU的实际功能的情况下,没有直接接触到网页。突出的事实是内容很容易验证,具有相对于内容的可测量的渲染时间,并且通常包含很少的可编程功能(至少哪个将暴露于图形硬件)。

另一方面,WebGL凭借其功能要求,可以访问图形硬件。编写着色器代码,虽然未编写GPU的母语,但被编译,上传然后在图形硬件上执行。渲染中等复杂几何形状的渲染时间可能很难从原始数据提前确定,因为在没有首先渲染的情况下难以产生准确的值;经典的鸡肉和鸡蛋问题。此外,一些数据可能很难验证,并且在WebGL实现的控制中难以强制执行安全限制。

这可能不是这样一个问题,除了当前硬件和图形管道实现不是设计为可用或维护安全边界的事实。一旦将显示列表放在GPU上,调度程序可能很难停止它,至少在不导致显而易见的,系统范围的视觉损坏和稳定性。通过仔细制作内容,可以严重影响操作系统’绘制用户界面或更糟的能力。在验证所有内容和维护安全边界时,难以对系统和用户数据的完整性产生潜在影响。

到目前为止,图形硬件避风港的制造商’真的需要担心他们的产品的不可信任用例。当然,即使对于本机计划,仍然会考虑完整性和拒绝服务,但开发商通常会有既得利益,以确保其计划不会引起问题。恶意演员需要说服某人安装他们的坏代码,在此时攻击图形硬件可能是最少的用户’担心。图形驱动程序通常不会用安全性写入其主要焦点,性能可能是最关键的。保安费用在人数和货币术语中取得了大量金额,似乎对制造商来说似乎很少激励他们的产品(可能是以牺牲性能为代价)来支持其当前形式的WebGL。

即使确定了安全问题,尚不清楚大型GPU制造商采用的补丁策略是什么。搜索ATI或NVIDIA的安全焦点只会产生一些公开披露的漏洞(约会返回2008); Google搜索相关安全公告也没有提出任何信息。考虑到司机和硬件互动的复杂性似乎很难相信,他们的软件中从未如此需要进行的可利用错误,这需要立即进行补救。

当然,通过对OEM产品的典型限制可能无法帮助修补局部,尤其是笔记本电脑。通常在这些情况下,GPU制造商提供的参考驱动程序被阻止从安装在笔记本电脑上安装,使任何安全更新都更难以部署。

在WebGL的开发期间,似乎支持它的所有浏览器供应商都遇到了某些驱动程序的问题,某些驱动程序完全不稳定或崩溃。目前为此工作似乎是驾驶员黑名单(或在Chrome中’在Windows XP上没有在Windows XP上运行WebGL的情况)。这似乎并不是一个非常有权的方法长期。

拒绝服务
拒绝服务的风险是WebGL面临的最众所周知的安全问题之一,尤其是因为甚至在当前标准文档中记录。基本上由于几乎直接访问WebGL API具有图形硬件,可以创建着色器程序或一组复杂的3D几何,这可能导致硬件花费大量的时间渲染。当唯一受影响的组件是浏览器进程时,很容易差异化客户拒绝服务攻击(已经有许多方法已经进行了这样的方式),但在这种情况下,攻击可以完全阻止用户能够访问其计算机相当严重。

在某些情况下,上下文已经观察到操作系统崩溃(即蓝屏死亡)。这些崩溃可能是良性的(从剥削性意识)到驱动程序代码导致可能导致的潜在可利用条件的情况。目前尚无进一步披露实际利用漏洞的详细信息或用于生成它们的代码。

在这方面,Windows 7和Vista似乎略微发挥,如果GPU锁定大约2秒钟,操作系统将强制重置它。这将在此重置期间停止所有应用程序使用任何3D图形。然而,这些操作系统也有最大限度的限制,在内核将迫使错误检查(蓝屏的死亡屏幕)之前,在短时间窗口中可能发生多少次。

当然,因为它是一个已知的问题,有努力减轻它,例如 角度项目 包括一个着色器验证器,以消除在Firefox 4和Chrome中使用的简单无限环路盒。此验证可能会阻止所有通向拒绝服务的情况,尤其是当您可以创建唐的大几何和着色器时’T包含循环,但仍然需要大量的时间来执行。

此时,提供概念证据似乎是合理的;但是,由于Khronos在WebGL SDK中提供一个,因此不需要写一个。已发现此页面完全锁定OSX上的桌面,可靠地崩溃XP机器,并导致GPU在Windows 7上重置。

跨域图像盗窃
文档对象模型规范和JavaScript的浏览器处理中的一个基本安全界限是域边界。这是为了防止从Say,www.evil.com提供的内容能够在www.mybanking.com上访问经过身份验证/可信资源。是否允许在此边界中访问内容,非常依赖于正在访问的资源类型。这有时被称为“Right to Embed” vs. “Right to Read”。例如,它是完全可以接受的,因为底层的API从未给您读取实际内容的机制(图像尺寸的外部,以及加载的成功或失败的指示),这是完全不可接受的。另一方面,尝试使用XMLHTTTPREQUEST对象将内容从域中拉出内容(因此,通常不允许您提供访问原始数据)。

在引入之前“Canvas’在HTML5中标准化的元素没有许多选项窃取图像十字域的原始数据。打击这个,一个“origin-clean’国旗是实施的。此标志最初将设置为true,并且如果在画布上使用任何横域图像或内容,则设置为false。一旦“origin-clean’标志是假的,你不能再打电话给API,如“toDataURL’提取图像内容。

WebGL. API建于顶部“Canvas’元素和因此扩展了旗帜的概念,也包含跨域纹理的使用。除了一个略微问题之外,这将是它的结束。如已经关于拒绝或服务的讨论,可以导致着色码和几何图绘制以取得非凡的时间。着色器可以直接访问的资源之一是纹理的像素数据,一旦它到达着色代码,它就不再具有任何原点概念。因此,即使我们无法直接读取它们,也可以开发定时攻击以提取像素值。这可以通过改变着色器根据像素的颜色或亮度来改变着色器运行的时间来完成,并测量绘图过程在JavaScript中的时间。这是安全领域中的标准攻击技术,尽管它最常用于破坏加密系统。与WebGL相关的,它已经在公共邮件列表中提到,这可能是一个问题。

当然,攻击者甚至可能无法提取图像的整个像素数据以便使用。例如,它可用于将跨域图像与另一已知图像进行比较,返回一个简单的真或假值。作为示例,想象一个网站,它在固定URL上返回概要文件,由存储在浏览器中的会话cookie确定的内容。攻击者可能能够将该跨域图像与已知的配置文件图片列表进行比较,以识别特定特定人员使用恶意站点的时间。

因此,作为我们对WebGL的调查的一部分,已经开发出概念验证以证明攻击实用(如果有点慢)。访问PoC去这里。它已经在Firefox 4和Chrome 11上进行了测试,在Windows XP,Windows 7和Mac OSX上。它在Firefox中最适合。应该注意的是,上下文不包含页面上捕获的任何数据,所有内容都在客户端上完成。对于那些没有WebGL的机器或浏览器的人来说,这里还有一个短视频。

显示图像捕获的阶段的流程图

这是我们认为只能通过改变WebGL规范中的跨域图像访问的性质来修复的东西。可以通过阻止所有跨域图像或使用类似的东西来实现 结束 仅允许从某些域访问要访问的特定图像内容。

结论
基于此有限的研究背景,不相信WebGL真的准备好进行大规模使用情况,因此上下文建议用户和公司IT管理者认为在其Web浏览器中禁用WebGL。

虽然肯定是在Web上提供高性能3D内容的需求,但是WebGL已指定的方式不够考虑到安全性支持的基础架构。这是通过引入验证层和驱动程序黑集名单来减轻潜在的安全问题的方法中的显而易见的;然而,这仍然推动了在硬件制造商上保护WebGL的大部分责任。也许最好的方法是在与这些问题中设计一个关于3D图形的规范。

分享这个