与非网无需漏洞也能攻破:云计算FPGA的重大安全隐患( 二 )


这篇论文的全文和大会报告 , 已上传至知识星球“老石谈芯 - 进阶版” , 请于文末扫码进入星球查看 。
简单来说 , 攻击者可以在 FPGA 上实现一些消耗大量功耗的电路 , 由此会引发芯片上电压的下降 。 由于使用同一个 FPGA 的用户共享芯片上的供电网络 , 这种电压下降会波及到 FPGA 上其他用户的设计区域 。 值得注意的是 , 这种利用电压进行攻击的方式会无视多租户之间相互独立的逻辑区域 。
一旦电压下降过大 , 就会带来很多问题 。 其中最主要的问题 , 就是会造成电路延时的增加 。 这样一来 , 原本时序收敛的设计就不能满足时序 , 从而造成各种错误的功能和计算结果 。
例如 , 对于常见的加法运算来说 , 它的关键路径取决于最长进位传播(carry propagation)的时间 。 正因此 , FPGA 中内置了固化的进位链结构 , 以提高进位传播的速度 。 然而 , 一旦电路延时增加 , 可能会导致时钟沿到来时 , 加法的进位尚未完成传播 , 由此导致计算结果出现重大误差 。
下图就是一个行波进位加法器(Ripple Carry Adder)的例子 , 它计算四位二进制加法 1111 + 0001 时 , 应该得到二进制数 10000(十进制 16) , 但由于电压降低导致延时增加 , 使得进位未能传播到最高位 , 最终得到的结果是 00000 。
与非网无需漏洞也能攻破:云计算FPGA的重大安全隐患
本文插图
耗电单元(Power Waster)
可以看到 , 这种电压攻击的关键 , 就是在 FPGA 上实现某种可以消耗大量功耗的电路 。 数字电路的一个重要知识点是 , 动态功耗和所谓的开关速率(switch activity)呈线性相关 , 也就是下面这个公式中的 f 。 因此只要实现一个能高速进行状态切换的电路 , 就能消耗大量功耗 。
基于此 , 这种耗电模块事实上非常简单 , 可以直接用一阶环形振荡器实现 , 见下图 。
与非网无需漏洞也能攻破:云计算FPGA的重大安全隐患
本文插图
实验表明 , 当例化 28000 个这样的环形振荡器时 , 每个振荡器可以消耗 2.2mW 的功耗 , 并由此带来芯片上电压的迅速下降 。 在下图中可以看到 , 50 微秒之内 , 离这些耗电单元最近区域的电压(黑线)就由 1.1V 下降到 0.85V 左右 。 如果离耗电单元稍远 , 也会出现不同程度的电压下降 , 甚至在芯片的边缘部分也会受到波及 。
与非网无需漏洞也能攻破:云计算FPGA的重大安全隐患
本文插图
使用这种电压攻击的方法 , 除了可以对其他用户的电路功能造成破坏之外 , 还可以用来窃取其他用户的加密信息 。 例如 , Tessier 教授就展示了如何破解并获取 RSA 算法的私钥 。 简单来说 , 有一种名为中国剩余定理(CRT , 也称为孙子定理)的算法 , 在实现 RSA 计算时可以得到 4 倍的性能提升 。 然而 , 如果在这个过程中通过电压攻击的方法引入错误的计算结果 , 就会简单的反推出 RSA 的私钥 , 并且这个过程与 RSA 密钥长度无关 , 且只需要一次迭代就可以完成 。 这个过程的具体细节在本文不再赘述 , 有兴趣的读者可以在知识星球“老石谈芯进阶版”或微博与我互动讨论 。
与非网无需漏洞也能攻破:云计算FPGA的重大安全隐患
本文插图
《孙子算经》中的物不知数问题
FPGA 电压攻击的防治策略
如前文所述 , 这种基于大量耗电单元、并导致芯片电压下降和电路延时增加的攻击方式 , 会对使用 FPGA 的全部用户都造成影响 , 而且不受设计区域划分的限制 。 与之前介绍过的 StarBleed 漏洞不同 , 这种攻击方法并不利用 FPGA 芯片本身的设计缺陷 , 而是利用了 FPGA 的特点 , 大量例化耗电单元并实施攻击 。 因此这种方法理论上适用于任何 FPGA 。