来源 | 老石谈芯
头图 | CSDN付费下载自VCG
今年4月,来自德国的研究者表露了一个名为“StarBleed”的漏洞,当时引起了业内一片轰动。这种漏洞存在于赛灵思的Virtex、Kintex、Artix、Spartan 等全部7系列FPGA中。通过这个漏洞,攻击者可以同时攻破FPGA配置文件的加密(confidentiality)和鉴权(authenticity),并由此可以随意修正FPGA中实现的逻辑功能。更严重的是,这个漏洞并不能通过软件补丁的办法修复,一旦某个芯片被攻破,就只能通过改换芯片的办法修复。

漏洞的创造者于2019年9月将这个漏洞知会了赛灵思,并在第二天就得到了赛灵思的承认。根据赛灵思之前发布的财报,7系列FPGA贡献了公司35%的营收。这些FPGA被广泛用于通信设备、医疗、军工宇航等多个领域,而这些领域很多都须要系统有着很高的稳定性与安全性。因此,这次爆出的重大漏洞,对赛灵思及其客户带来较大的负面影响。
近年来,有关CPU的漏洞时有创造。例如在2018年初,险些全部主流的CPU厂商都被创造在其CPU产品中存在熔断(Meltdown)和幽灵(Spectre)漏洞。比较之下,FPGA的漏洞问题并不那么“常见”。在这篇文章中,老石将深入解析造成这个漏洞的技能缘故原由,并总结一些可行的应对方法与预防方法。
FPGA的紧张加密办法
随着FPGA在数据中央、通信根本举动步伐、AI加速、医疗设备、边缘打算等多个领域的广泛利用,针对FPGA安全性的研究在近年来逐渐成为学术界和工业界关注的热点之一。
与CPU、ASIC等芯片比较,FPGA芯片本身并不会完成任何逻辑功能,它只包含大量的可编程逻辑阵列,以及多少固化的IP核。FPGA系统功能的实现,基本完备取决于开拓者的逻辑设计。由于不同的设计者可以开拓不同的系统逻辑,这就使得相同的FPGA芯片可以广泛用于浩瀚不同的行业领域。常日来说,一个FPGA设计都是由很多IP组合而成,而这些IP才是FPGA设计中最有代价的部分。
为了将设计加载到FPGA中运行,唯一的办法便是通过一个所谓的“比特流(bitstream)”文件完成,业界也常日称之为系统映像。系统映像由FPGA设计软件自动天生,它包含了FPGA设计的全部信息,因此是FPGA加密环节的重中之重。
常日来说,比拟特流或系统映像文件的保护办法有两个层面,第一是加密,第二是鉴权。加密指的是利用特定算法比拟特流文件进行处理,将其转换成密文,使得个中的内容对外不可见。在赛灵思的7系列FPGA中,利用了CBC-AES-256算法进行比特流加密。
鉴权指的是对加密后的比特流文件进行身份验证,防止对其进行修改和删减,这类似于我们日常生活中的身份验证。如果比特流文件被修正,势必会导致缺点的鉴权结果。如果将这个比特流下载到FPGA中,会由于身份校验失落败而谢绝实行,从而避免被攻击的可能。在赛灵思的7系列FPGA中,利用了基于SHA-256的HMAC(散列认证码,Hash-based Message Authentication Code)方法进行鉴权。
可以想象,如果比特流的加密过程被破解,那么攻击者就可以读出比特流文件中的所有信息,从而进行反向工程、IP破解、信息网络等事情。如果鉴权过程被破解,那么攻击者就可以比拟特流文件进行任意修正,比如修正系统功能、木马注入等。以是说,这两种保护办法缺一不可。
只可惜,这次的StarBleed漏洞正好利用了这两种保护办法各自的短板,从而彻底破解比特流的加密和鉴权,并达到了完备掌握比特流和FPGA芯片的目的,可以说这个漏洞的毁坏性和潜在危害性极强。
StarBleed漏洞的详细攻击方法
全体攻击过程分为两大部分,第一是对加密的比特流文件进行破解,第二是获取鉴权密钥。
为了破解加密的比特流文件,攻击者利用了赛灵思FPGA里的一个分外的配置寄存器WBSTAR,这个寄存器原来保存了FPGA MultiBoot功能的起始地址,当启动FPGA时,就通过读取这个寄存器从片外非易失落性存储器找到映像文件。因此,当FPGA复位时,这个寄存器的内容是不会被抹掉的。
对加密比特流的破解过程分为5个步骤。
第一步,攻击者对一个合法的比特流文件进行了大略修改。详细来说,他须要修正比特流的一个32位字,将其改成对WBSTAR寄存器的写操作。写入的内容,便是比特流本身。
虽然比特流是加密的,但这个修改过程并没有想象中那么困难。由于Vivado天生的比特流文件的格式和很多内容是固定的,攻击者可以比拟不同的比特流文件,从而确定对WBSTAR寄存器操作命令的位置,然后对其进行修正即可。由于篇幅所限,这部分的详细的细节不再赘述,欢迎在知识星球或微博与老石进一步互换。
比特流数据构造,灰色部分是加密的内容
第二步,将修改后的比特流加载到FPGA里。此时,FPGA会比拟特流进行解密,并将一个32位字写入WBSTAR寄存器。值得把稳的是,这里写入的是已经解密的比特流内容!
第三步,加载完毕后,由于比特流发生了修正,因此校验失落败,并自动触发系统复位。
第四步,利用其余一个未加密的比特流文件,读取WBSTAR寄存器的内容。由于WBSTAR寄存器的分外性,它的内容不会随着复位而打消。因此,此时攻击者再利用其余一个未加密的比特流文件读取这个寄存器的内容,就可以得到解密后的FPGA比特流的32位内容了。这个未加密的比特流文件已开源,请在文末扫码进入知识星球查看。
第五步,手工复位,然后重复上述步骤,直到全体比特流都解密完成。
可以看到,攻击者利用了上面提到的鉴权过程晚于加解密过程这个毛病,通过“蚂蚁搬家”的办法完成了比拟特流的完备解密。最可怜的是,此时的FPGA本身也沦为了帮助解密的工具。这也阐明了为什么只能通过改换FPGA芯片才能修补这个漏洞。
下面的表格总结了不同的7系列FPGA的比特流大小,以及解密所须要的韶光。读出一个32位字大概须要7.9毫秒,那么破解一个Kintex FPGA的比特流就大概须要3小时42分钟。
接下来,就可以对鉴权过程进行破解了。这个过程相对大略,事实上,身份校验所需的HMAC密钥就存储在比特流文件中,并且未经其他额外的加密。这正是所谓的“答案就在谜面上”。以是只须要读取完全的比特流,就可以免费附赠HMAC密钥一枚。有了它,就可以任意修正比特流文件的内容,并重新打算身份校验。此外,攻击者乃至可以修正HMAC密钥本身。
综上所述,StarBleed漏洞正是利用了赛灵思7系列FPGA的两大设计毛病:
1. 身份校验发生在解密过程之后
2. 身份校验的密钥直接存储在加密后的比特流文件里,且无额外加密
通过StarBleed漏洞,攻击者破解了全系列的赛灵思7系FPGA,包括SAKURA-X板卡上的Kintex-7,Basys3板卡上的Artix-7等等。同时,攻击者还利用同样的事理攻击了6系FPGA,例如ML605板卡上的Virtex-6 FPGA,也能实现不完备破解。
防御方法
由于StarBleed漏洞直策应用了赛灵思7系列FPGA芯片的设计毛病,且攻击过程直接在加载映像文件时展开,因此不能利用软件补丁或固件升级的方法规避这个漏洞。目前唯一的修复方法只有改换芯片,赛灵思官方已经向研究者承认了这一点。
事实上,攻击者利用这种方法无法破解UltraScale或更新的FPGA系列。这解释上面所说的设计毛病已经在新型FPGA架构中得到了修复。例如,首先比拟特流文件进行鉴权,通过后再进行加载。
虽然除了换芯片外没有完备防御的方法,我们仍旧可以采取一些设计手段增加破解的本钱和繁芜度。一个常见的方法是在设计中增加额外的冗余逻辑,这些额外的部分并不影响逻辑功能,但会极大的提升设计的繁芜度,从而增加破解的韶光本钱。比如,在状态机中增加很多无用状态等等。
此外,还可以在板卡设计时封锁FPGA的配置端口,比如研究者利用的JTAG和SelectMAP端口等。事实上,在量产的FPGA设计中,该当也很少有暴露的JTAG端口。
同时,研究者还思考了如何尽早创造这类设计毛病和漏洞,而形式化方法便是一个很好的办理手段。设计者可以根据芯片的设计规约,建立形式化模型,并通过知足性验证(satisfiability)等办法对这个模型进行剖析和证明。老石在之前的文章《形式化芯片验证:救世主还是乌托邦》中,曾对形式化方法做过详细先容,有兴趣的读者可以看看。
结语
FPGA的安全性研究并非一个全新的课题。然而,传统的FPGA攻击方法都须要利用额外的物理设备或操作,实用性远不如此次爆出的StarBleed漏洞。
一旦FPGA被攻破,攻击者可以任意读取FPGA比特流的数据、IP内容等,并实现反向工程;也可以任意改变FPGA实现的逻辑功能,这使得FPGA所在的系统可能沦为攻击者的高性能“肉鸡”。由于FPGA能以40Gbps乃至更高的速率线速发送数据包,这使得大规模DDOS攻击变得“大略”。此外,攻击者也可以通过逻辑实现的办法,大幅提升芯片温度并对系统硬件进行不可逆的物理毁坏,等等。
可以说,这次的StarBleed漏洞给业界敲响了警钟,也将会提升人们对FPGA安全性的重视,并以此辅导未来的FPGA安全性设计。亡羊补牢,犹未晚也。
(注:本文仅代表作者个人不雅观点,与任职单位无关。)
☞Python 爬取周杰伦《Mojito》MV 弹幕,这个评论亮了!
☞墨奇科技汤林鹏:如何用 AI 技能颠覆指纹识别?
☞Mybatis 逆向工程利用姿势不对文档全被清空,一怒之下写了个插件……
☞趣谈程序员真喷鼻香定律:源码即设计
☞干货 | 大口语彻底搞懂 HBase RowKey 详细设计
☞热评 | 当心新基建热潮中的区块链项目烂尾