Stealing Webpages Rendered on Your Browser by Exploiting GPU Vulnerabilities

论文主要针对GPU memory可能存在的data exfiltration提出攻击。

论文的主要贡献有以下两点

  • in-depth security analysis,认为computing APIs有以下问题
    • do not clear newly allocated memory pages
    • have memory types that programmers cannot delete
    • have in-core memory without security mechanisms
  • 实现effective攻击

intro

graphics APIs主要用于图形计算,比如DirectX和OpenGL computing APIs主要用于普通计算,比如financial, medical, weather data analyses, database query optimizations, packet routing, intrusion detection, cryptographic engines

graphics APIs和computing APIs主要有三点不同

  • computing允许不同用户share GPU,graphics只支持同一时间的一个用户
  • computing能够自己管理内存,graphics由GPU drivers管理

background

  • GPU architecture
  • GPU computing models
  • OpenGl and textures
  • security concerns
    • new allocation的时候GPU memory并不会主动清零
    • 有一些敏感的内存,既不能被用户delete,也不会被GPU自己delete
    • 一个CU上的threads可以访问别的CU上的local和private memories

system and attack models

victim是一个用graphics的normal user。attacker是一个用computing APIs的normal user。

Disclosing GPU memory

Basic Attack

通过执行一个基本的攻击,试图在受害者的GPU上下文终止后读取整个全局内存,从而确定目前的GPU有未初始化的内存问题。

Overview of Advanced Attacks

提出两种攻击: 上下文结束(EoC)攻击和内核结束(EoK)攻击在不同时刻窃取数据。

The EoC attack dumps all GPU memory after the victim frees its memory (Figure 3b).

The EoK attack steals the local and private memories of the victim’s kernel right after the victim’s kernel terminates (Figure 3c).

End-of-Context (EoC) Attack

英伟达GPU提供了检查GPU可用内存和总内存大小的功能,如cudaMemGetInfo()。通过使用这些函数不断检查可用内存大小的变化,攻击者可以辨别受害者程序是否销毁了其GPU上下文。

攻击者可以通过利用内存使用历史了解受害者何时开始使用GPU、分配和删除全局内存以及退出GPU。如果受害者不再使用GPU,攻击者会试图转储GPU的整个全局内存。

减少分析空间:我们建议采用一种技术来减少内存转储的分析空间,因为(1)通常的受害者程序只使用全局内存的一小部分,(2)调查全局内存的几个千兆字节需要不必要的努力。我们的技术是在受害者来之前用足够长的二进制序列填充全局内存,并在分析全局内存转储时忽略这些序列。

多租户:算法1中的EoC攻击在多个受害者连续使用GPU的情况下不起作用。为了解决这个问题,我们修改了该攻击以处理多个受害者(算法2)。每当可用的GPU内存大小增加时,该算法试图分配所有可用的内存以获得最近处理的内存。该算法通过启动一个内核来验证最近的内存去分配是否是由于破坏了GPU上下文而避免了开销。这可以通过检查去分配的内存是否包括指令(例如,0x85800000001c3c02,这是英伟达Kepler GPU的NOP指令)。最后,该算法将含有指令的内存复制到主机上,并在释放内存之前用一个假值填充,以避免重复检测相同的指令。

End-of-Kernel (EoK) Attack

这种攻击的主要目标是存储在每个CU本地内存和每个PE私有内存中的频繁访问数据。 例如,libgpucrypto,一个SSLShader[12]的密码学库,将秘密密钥、AES S-box以及RSA的p和q值加载到本地和私有内存中,以提高性能。 如果受害者程序在每次内核执行结束时没有清除本地和私有存储器,攻击者就可以轻易地读取数据。

英伟达GPU的L1数据缓存:EoK攻击也可以获取保存在NVIDIA GPU的L1数据缓存中的敏感数据。英伟达GPU利用其每个CU的部分本地内存作为全局内存的L1数据缓存。程序员可以灵活地配置本地内存和L1数据缓存的大小。 本地内存为16KB,L1数据缓存为48KB,反之亦然。然而,这种配置允许攻击者读取受害者程序的L1数据高速缓存所使用的32KB重叠区域。

多个受害者:EoK攻击的局限性在于,它只能读取在攻击内核之前使用GPU的受害者内核的本地和私有存储器。这意味着,当多个受害者程序竞争使用GPU时,攻击内核只能看到他们保存在本地和私有存储器中的一个数据。

INFERRING WEB BROWSING HISTORY FROM GPUS

为了证明我们的攻击不仅具有高度的适用性,而且对GPU及其用户都是至关重要的威胁,我们必须攻击一个真正的程序,即(1)使用GPU的API,(2)处理敏感数据,以及(3)流行的程序。最近的网络浏览器,如Chromium和Firefox,满足所有的要求。(1)它们使用图形API进行高效的网页渲染,(2)它们处理用户的私人数据,如浏览历史,以及(3)它们非常流行。因此,我们选择它们作为我们的攻击目标,并在下一节讨论其结果。

最近的网络浏览器,如Chromium和Firefox,支持GPU加速的网页渲染,所以我们预计渲染的网页纹理可能会留在GPU内存中。我们的推理攻击将GPU内存转储与已知的网页转储或已知的网页快照相匹配,以推断出受害者用户访问过哪些网页。

后面是一些具体的攻击,没看