WebGL 的安全问题

By Jake Edge
May 25, 2011
WebGL vulnerabilities
翻译:李凯

最近的报道强调指出,在WebGL中某些现存以及潜在的安全漏洞正在被广泛传播。显然,这种允许网页内容与复杂的3D图像硬件之间互操作的新特征很会导致一系列的问题。该特性肯定会在浏览器上全面支持,事实上已经有几个浏览器已经具备了这个功能。

WebGL是一种底层的3D图像API,该API基于目前多数3D图像卡库采用的OpenGL ES 2.0标准。支持WebGL的浏览器,JavaScript 控制的 canvas元素将可以被硬件加速显示。对网页浏览器而言,无论是玩游戏还是探索三维景观,当然也包括大量其他的用途,WebGL都将会是一种非常受欢迎的扩展。但是,允许互联网中的内容与复杂的硬件进行交互很可能会导致一些安全问题。

典型的图形硬件是由通过驱动连接的一个或多个图形处理器组成的。驱动提供了与高层库之间的某些标准化接口,这些高层库采用了诸如OpenGL之类的图像标准。为了给图像程序员提供更多的灵活性,把特定处理模型以库方式提供的称为shaders。shaders是用来对复杂的图形处理进行渲染,图形库和驱动把那些程序转换为硬件中的GPU运算。

本质上,那意味着恶意网站可以编写出运行在用户硬件上的semi-arbitrary程序。仅仅这一点就应该足够让我们停下来好好考虑考虑安全的问题了。例如一个恶意的shaders可能完全控制了图形硬件,从而破坏任何试图写入到显示器的东西(如其它窗口)。在最糟糕的情况下,这可能会导致用户不得不重新启动图像硬件。

上述拒绝服务可能是极其恼人的,但并不会直接影响桌面的安全问题。它不会泄露用户数据到恶意网站,尽管它可能会由于用户的某些行为而导致数据丢失。这有点像某些恶意的JavaScript,比如无限循环程序,可锁住一个浏览器(但一般不是整个桌面)。现代浏览器把每个标签作为一个独立的进程运行,(例如Chromium就是这么干的,Firefox正在朝这个方向努力)这在很大程度上限制了类似JavaScript问题。

但是这并不是Context(一个英国安全咨询公司)报道概述的唯一的问题。潜在的问题是跨域的图片偷窃。当canvas元素包含跨域的内容,且声明一幅图像来源于其他网站时,有一个“origin-clean“标志将会在浏览器中被清除掉,这样做是用来避免通过JavaScript函数从外域提取图像数据。然而,恶意的canvas元素可以创造shaders从而很容易泄漏影像内容。

这种袭击依赖于一种通过时序分析提取加密密钥的技术。通过计算shaders描绘一个像素的“亮度”要花多长时间,JavaScript可根据该值再生图像。这是一个复杂的攻击,并且要找到真正使用它的exploit有些复杂,但这正好是跨域的一个缺陷。

Mozilla 的黑客 JP Rosevear 认为跨域的图片信息盗窃是一个真实的威胁,即使实践中很难找到漏洞。"While it is not immediately obvious that it can be exploited in a practical attack right now, experience in security shows that this is a matter of when, not if." 他对此的建议是 CORS 草案(cross-origin resource sharing),即让站点明确哪些外域可以包括它们的内容。

防止拒绝服务问题更加的麻烦。唯一真正防御恶意shaders的方法是用审查shaders代码。所以Rosevear建议在需要展示WebGL内容前进行用户确认。

也有一些在硬件层面上努力着试图处理拒绝服务的问题。GL_ARB_robustness(和GL_ARB_robustness_2),是硬件制造商用来检测这些问题和当出现问题时重启硬件的一种机制。但就像Context的FAQ里所说,这可能并不是真正解决问题的办法:

  1. 重置图形卡和驱动应该被看作是当发生异常情形时,维持OS稳定性的辅助手段,并不是一种用来保障用户免受恶意代码的机制。重置图形卡并不能保证整个操作的顺利进行,图形子系统的用户需要正确地处理这一事件。图形攻击需要确保在防范另一个应用程序滥用硬件资源前,任何的硬件资源都可以被重建。这一行为不能直接引起拒绝服务,却仍然可以间接影响整个系统和运行在上面的应用程序。

从安全角度来说,在系统硬件上允许运行从任意网站上发送来的代码,永远是有问题的。Rosevear 指出 WebGL 组件应该分成若干部分以提供必要的隔离: "Nevertheless, claims of kernel level hardware access via WebGL are speculative at best since WebGL shaders run on the GPU and shader compilers run in user mode." That assumes that the libraries and drivers don't have exploitable bugs of their own, of course. 正如Rosevear指出,“对[WebGL的]重大攻击是可能的”。这显然是值得关注的一个领域。

Topic: sohulinux