Nvidia专业显卡的内存保护刚刚失守了。你受到影响吗?

Nvidia 专业显卡的内存保护被攻破了。你会受到影响吗?

二十一小时五十四分钟。这是去年从一个简单的程序出发,破坏一块 Nvidia 显卡内存所需的时间。

一分钟零六秒。这是现在所需的时间。

多伦多大学的团队在 8 月 25 日发表了这项研究,他们把这种攻击称为 GPUThor。而且它不只是更快:它还穿过了本来就应该阻止这种事情的保护机制。

一面编号储物柜组成的墙,一个机械臂反复敲打一扇关着的门,而旁边的储物柜自行打开,里面的卡片翻了过来

我敲这里,那里就翻转。整个攻击就藏在这句话里。

反复敲打一格,让旁边那格发生变化

首先得明白一件关于电脑内存的奇怪,而且有点让人窝火的事情。

一根内存条里有数十亿个微小的格子,按行排列,每个格子里放着一个零或一个一。它们挨得太紧了,以至于读取其中一个格子会在旁边的格子那里产生一点电扰动。读一次,没问题。但如果你连续快速地读取同一行几十万次,扰动很快就会累积起来,旁边那一行里的某个格子最终会自行改变数值。

这就是 Rowhammer。反复敲打一排内存,直到旁边那排撑不住为止。这个名字始于 2014 年,PC 内存一直都能受到这种攻击,而且从来没人真正知道该怎么修好它,因为问题不是软件 bug。这是物理现象。

问题在于,你没权读取邻居的内存。但你完全有权想读多少次自己的内存就读多少次。你在读取自己的内存时,损坏的却是邻居的内存。

会修复、放弃,或者修错的自动纠错器

针对这个问题,专业显卡内置了一种名为 ECC 的保护机制,也就是错误纠正码。这是一种自动纠错器:内存会额外存储一些信息,如果某个位发生了翻转,它就会察觉并将其恢复原状,不会让任何人注意到。

只是这个纠错器有非常明确的局限,而 GPUThor 就是从这里钻进来的。

一个字里的一个错误位,它会修复。一个字里的两个错误位,它能看出有问题,却不知道该恢复成什么,于是拒绝继续运行,机器也会停下来。三个错误位,那就最糟了:它以为自己识别出了一个错误,信心十足地进行修正,然后写入一个错误的值,还以为自己已经完成了工作。

三个纠错器缩略图:一个错误被修复,两个错误被放弃,三个错误被自信地错误修复

中间的情况会让机器崩溃。右边的情况才是应该让你睡不着觉的那种。

在公开发表的测试中,在保护机制启用的情况下,这种攻击制造了 387 个两位错误,也就是会让机器停下来的错误,以及 2 个三位错误,也就是被纠错器错误修复的错误。两个,看起来似乎少得可怜。这已经多出两个了:只要有一个出现在正确的位置就够了。

数字,因为它们很暴力

两块瓷砖对比了之前的攻击所需的 21 小时 54 分钟和 GPUThor 所需的 1 分钟 06 秒

同样的工作,去年的攻击和这次的攻击之间。这不是进步,这是换了一个类别。

之前针对这类显卡的攻击 GPUHammer,几乎要花二十二个小时才能制造出可利用的翻转。说白了,这算不上实际威胁:没人会让你在他的机器上运行一个可疑程序整整一天。

GPUThor 用一分多钟就能做到这一点,并且每 GB 内存可以产生 72,000 到 377,000 次位翻转。也就是说,根据测试的型号不同,这一数字是其前代产品的 4,548 到 23,597 倍。把一天缩短到一分钟,这已经不是同一个量级了。

如何从一次位翻转变成完整访问权限

一个随机翻转的位,本身只会让一次计算崩溃。这不是数据被偷了。

真正厉害的地方在别处。在显卡里,有一张表规定了哪个程序有权读取哪一块内存。这就是房子的平面图,上面标着门和锁。研究人员瞄准了这张特定的表,让其中正确的位发生翻转,把他们普通的程序变成了可以读取和写入任意位置的程序。从这里开始,他们就能在主机上打开完整的管理员访问权限。

换句话说,他们没有撬锁,而是修改了平面图,让自己的钥匙可以打开所有的门。

好吧,那你会遇到什么风险吗?

不会。我先直说这一点,免得有人卖什么奇迹解决方案。

首先,攻击者必须能够在你的机器上运行自己的程序,并且能够访问你的显卡。如果他已经做到这一步了,那你有比 Rowhammer 紧急得多的问题!

其次,受到影响的是工作站显卡,RTX A4000、A4500、A5000 和 A6000,并且使用的是一种特定的内存类型,GDDR6。在测试过的其他内存上,包括新款游戏显卡的内存,研究人员没有得到任何一次位翻转。顺便说一句,你的游戏显卡根本没有自动纠错功能,所以它甚至不是这里讨论的对象。

真正相关的用户,是那些按小时向托管商租用图形计算能力的人,或者是在同一台机器上让多个团队共享资源的人。在这种情况下,另一个人会在和你的代码相邻的地方,在同一套硬件上运行他的代码。这正是这些显卡本应确保安全的场景。

好消息,因为确实有一个

Nvidia 没有等到论文发表才采取行动。这个漏洞在 4 月 29 日被报告,厂商的公告在 8 月 21 日发布,也就是论文发表前四天。公告建议做四件事:启用系统的完整内存保护,启用防止一个设备读取另一个设备内存的隔离功能,监控显卡的错误计数器,以及不要让任意代码在一台关键机器上运行。

最后这一点对任何管理员来说都最有意思。这 387 次双位错误并不是悄无声息的:显卡会报告它们。一台机器突然开始成串地喷出内存错误,不一定是硬件老化了。也可能是有人正在敲隔壁的门。

还有这件事的根本意义,这其实更像是一个好消息:我们说的是一项完整发表的学术研究,有方法,有数据,也有局限性。研究人员寻找这个漏洞,是为了让它得到修复,而且在公开谈论它之前等了四个月。哪天这类研究停止了,并不意味着问题消失了。只是有人先找到了它,而他什么都不会发表。


来源

Join the conversation

You need an account to comment on this article. Creating one is free and takes under a minute.

  • The XMLTV file, free to download every day
  • Comment on articles and reply to other readers
  • Get an e-mail when an article you follow is updated

No comments yet.

Une erreur s'est produite. Cette application peut ne plus répondre jusqu'à ce qu'elle soit rechargée.Veuillez contacter l'auteur. Reload 🗙