今天,几乎所有桌面和大多数移动操作系统和设备都支持某些版本的 OpenGL。我想知道这对安全的影响:
- 在许多情况下,GPU 可以完全且不受限制地访问主内存(用于集成图形设备)或至少是视频 RAM,其中也可能存储敏感信息(想想合成窗口管理器或硬件加速的 Web 浏览器)。
- 在一些实现中,OpenGL 客户端通过直接将数据和命令写入共享内存来与 GPU 通信。
- 只有最近的 GPU 似乎支持内存虚拟化,即便如此,目前也只有一些驱动程序实现正在使用它。
- WebGL 要求对新分配的缓冲区对象进行零初始化;我怀疑这意味着标准 OpenGL 中不需要这样做。这是否意味着理论上可以在视频内存中分配缓冲区并读取潜在的安全敏感数据?
那么是谁或什么让我无法编写一个着色器程序来读取视频中的数据,甚至是不属于我的主存储器?
我在 Linux 图形系统中找到了有关当前事务状态的演示文稿,其中提到对 GPU 的命令要么由内核验证,要么在 GPU 上使用虚拟内存来分隔用户。
对于其他操作系统,尤其是移动操作系统,例如 Android,其中的各个应用程序都被强沙盒化,但几乎可以无限访问 OpenGL,这是否也是如此?该演示文稿中甚至特别提到了 Tegra 2,它允许驱动程序的用户潜在地无限访问内存。