2023年8月21日-24日,由工业和信息化部装备工业发展中心、江苏省工业和信息化厅、苏州市人民政府以及中国汽车工程研究院股份有限公司联合主办的“2023汽车技术与装备发展论坛”于苏州隆重召开。本届论坛以“装备夯实根基•技术引领未来”为主题,邀请政府领导、行业院士、企业高层、技术专家,围绕新技术、新装备、新生态展开深入研讨,以推动技术及产业发展,夯实质量强国之基,服务汽车强国战略。其中,在8月23日举办的“汽车芯片与安全技术”专题论坛上,武汉大学网络安全学院教授、博士生导师唐明女士发表了主题为《处理器漏洞挖掘与检测》的精彩演讲。以下内容为现场演讲实录:
(资料图片)
武汉大学网络安全学院 教授、博士生导师 唐明
以下内容为现场演讲实录:
唐明:大家好,我是武汉大学唐明,感谢雷总邀请,很荣幸参加这个论坛,我分享的内容是处理器安全。我今天介绍的处理器安全指的是通用的处理器,刚才很多专家讲MCU,最后有时间可以简单分享一下专用处理器和MCU的相似工作。
报告分为两部分:介绍现有通用处理器的泄漏级攻击、基于泄漏级攻击介绍我们团队关于新型漏洞挖掘、检测和相应防护措施。
一、处理器现有主流泄漏漏洞
现有主流处理器攻击分为三种攻击。第一种攻击类型是隐蔽信道,用简单图示说明一下隐蔽信道的大致原理。处理器内部大致分为两个区域,按照等级划分,一个区域是高安全等级,另一个区域是低安全等级。不同的进程和线程运行在不同区域中。
如果高安全区域存在不进行破坏的恶意代码,只是截取秘密信息比如说私钥或者网络安全中的某些隐私信息,可以和低安全区域的协作者合谋攻击,通过时间级的泄漏将信息按比特传递出去,这就是隐蔽信道。
图示简单解释一下,现有处理器内部包括一些MCU内部有很多区域或资源是共享的,不同进程和线程会共享区域。当进程竞争相同区域时,会出现一个进程使用该区域,另一个进程阻塞的情况。观测者可以通过测试自身使用该区域的时间来判断该区域是否被竞争,从而判定当前传输的比特是0还是1.
第二种攻击类型是指时间侧信道,是传统侧信道的一种。我们团队在2007年开始做传统侧信道,包括能耗,刚才长安汽车李总介绍了传统侧信道的密码安全芯片或者安全芯片中的能耗、电磁、故障。时间攻击也是处理器领域中典型的一类泄露攻击,包含两部分,一部分是由于代码自身的不平衡,现在的举例中可以看到,如果现在的条件分支语句中if的分支和else的分支代码执行时间不同的话,观测者可以判定你到底是执行的是if还是else?如果if判断条件或者这个分支语句的判断条件是和秘密信息相关的,其实是泄漏了秘密信息本身,这是代码级的时间泄漏。
更隐蔽方式是基于处理器微架构资源,典型的处理器内部来看就是cache高速缓存,或者这类共享存储资源。现在的攻击模式上举例用的是Flush+reload攻击模式,三步模式,攻击者、受害者、攻击者的进入方式。首先攻击者进入cache,打扫干净战场后受害者进入,受害者访问数据的时候会使得受害者的数据从内存进入到cache中,比如进入L1 cache或者L2 cache中,之前攻击者把cache清掉了,意味着受害者的数据、代码一定会是miss状态,一定会导到cache里面去。第三步攻击者进入,攻击者把cache地址扫一遍就知道受害者使用了cache中的哪一个地址。cache中的地址,即便是现有安全处理器防护中,和数据在内存中的地址之间都会有映射关系,这个映射关系很有可能是和秘密信息有关的,特别是跟密码芯片里加密算法里的分组和传统加密,包括轻量加密中的私钥直接相关,以这种方式泄漏执行过程中的秘密信息。
第三种攻击类型暂态攻击,是2017年底2018年初,处理器安全进入大家视线成为热点研究领域的推动,最初发现是在intel的处理器里面发现的,正常的程序在运行的时候有一个权限隔离,只能访问自己在内存中的地址中的内容,但是如果出现了暂态攻击,我可以越权读到数据。如果能够越权读到数据,现有信息管理中的权限访问一类或者隔离技术就全部失效了。
这类攻击有两个动作,第一个动作在处理器内部有所谓的回退,预测执行发生错误的时候要进行回退,回退时间比正常时间要长。第二个依赖于隐蔽信道,需要在处理器中有共享隐蔽信道资源,两着相加就可以展开攻击。
这个是幽灵攻击目前为止的五个版本,他们的共性就是都有回退和共享资源这两个条件。用Spectre V1例子简单说明,暂态类攻击里第一次提出暂态类攻击就是用BP,即处理器内部的分支预测。处理器的分支预测在通用处理器中是对于性能极大提高的技术手段或者资源。这个微架构资源带来的好处是,CPU运行到分支是不需要阻塞等待分支判断语句计算完成,而是根据以往的跳转结果预测执行。如果一个分支前面一直走的yes,下一次CPU就会预测走yes,并预测执行yes语句。
攻击者会先骗掉分支预测器,分支预测是大家共享的,进来先骗你走yes,不停地走yes,受害者进来的时候可能是走no的,但是没有意识到,自动预测走yes,并将受害者的数据和指令送入cache中。回退的过程中会将受害者的数据进行回退,但cache没有进行相应的flush,导致私密数据在cache中留下了痕迹。这种情况从信息安全角度攻击者有相当能力读出来。
华为万总讲到OTA,OTA场景比较适合今天的话题,在处理器中对汽车芯片会不会有问题?芯片里如果用到处理器芯片或者刚才讲到的共享资源,在处理器不管是MPU还是通用处理器中,如果有共资源,当代码在执行过程中可能会实时下载程序进来,这些程序和当前正在运行的程序有没有可能竞争资源?竞争过程中所有代码运行数据有没有适当或者隔离?实际上为芯片安全找到新场景,或者说在汽车芯片中有一个新的安全问题。
二、我们团队处理器上主要工作
一是漏洞挖掘,我们做的是商用处理器,以intel、AMD和arm芯片为主体,右侧的是intel的典型微架构图,前端资源上挖了两个漏洞,执行单元上挖了一个单元漏洞,在cache和存储相关单元挖了两个漏洞。挖漏洞的目的有几个,一是商用处理器对我们来说完全黑核的芯片,对我们安全能力的锻炼。第二是可以绕过现有防护,不管是哪一家商用处理器公司在漏洞挖出来后会打补丁,如果能够挖出新漏洞,实际上原有补丁是失效的。更重要的是我们团队主题工作是放在后面的防和测上,所以我们必须要先挖漏洞,在了解漏洞存在的原因和机理情况下,做相应防护和检测。
只介绍其中一个洞,这个洞是前端漏洞,在intel处理器的解码处理器环节有明显时间差异。中间一张图是两段代码,这两段代码中指令的数量、种类,相同指令的种类和数据完全相同,只是执行顺序不同。当执行顺序不同的时候,宏融合的次数会不同,使得执行时间不同。利用这种不同可以还原正在执行这一段指令中的某些敏感数据,这是挖的其中一个漏洞。
总结,所有团队挖出来的5个漏洞里可以绕过现有防护。第二个应用在不同体制加密算法中,无论是是对称的私钥还原,还是非对称的协议包括签名协议的私钥还原。第三个功能,做了若干种不同Spectre攻击的变种式攻击,意味着现有的intel处理器或者AMD处理器打的补丁不能抵抗先行的攻击。
第二个主要工作是做处理器防护。
第一个内容是抗功耗的攻击,跟前面说的MCU、汽车电子里用的芯片,在MCU的环节下,安全芯片对抗的传统侧信道攻击一个概念,我们现在也在做传统密码芯片的安全防护点。这一块的工作是在开源处理器进行的,在开源现有处理器上加一些抗传统侧信道的防护。实际上处理器内部的侧信道泄漏带来了另外一个问题,指令可能会被逆向出来,不仅是数据还原,有可能指令会被逆向。我们做的是一个插件,这张图下面写了一个ESM,这个安全插件在不破坏原有处理器流水工具条件下插在必要工序内部,通过参数配置实现功耗的攻击,可以极大缩短现有芯片的修改周期,同时达到预期的安全要求。
这是能耗防护的效果图,采集功耗信息和电磁信息包括参数配置。尽量不动原来的设计盒,从商用处理器的角度和设计角度来说是换一种方式。
第二类防护是在MA层面防护,比如cache是一大类,我们现在也在做BP。关于cache相应防护做微架构层次的防护,时间类的或者暂态类的攻击。
第三类是做RISCV轻量核包括高速核,RISCV目前还是应用于IOT领域,在跟intel处理器在服务器领域不太一样,国产处理器安全设计点上推自己的轻量核和高速核,轻量核需求更大。
检测平台,分为三部分,第一部分是代码级检测及修复,这部分的原动力来源于这样的场景,有很多软件公司在开发自己程序的时候没有办法动处理器,没有办法动芯片,必须买外面的芯片。在这种情况下,现在的代码假设在intel上执行将来迁移到arm上去,无论是哪一种,代码有没有可能受到刚才的漏洞的攻击?第二种是OTA场景里,如果要下载一个程序进来,下载的程序需不需要进行检测?进来的程序有没有可能对原来程序或者控制类的代码造成威胁?这是纯代码级别检测,这类检测中可以看到,除了检测以外,检测定位完毕以后会对当前代码检测结果自动做防护添加,代码是相对安全的。
这是简要的界面介绍,包括检测,检测过程中对当前的微架构进行配置,使用什么样的微架构都可以,包括国产的也可以。检测后会对代码进行定位、索引、代码修复。
电路级别,这个是MCU场景下的,因为做传统侧信道有能耗、故障、电磁,这一级的攻击里或者电路级检测,自己做安全防护,实际上安全防护做芯片中是否一定能够达到安全性?是不确定的,需要进行形式化验证,这是基于信息安全密码学思路往下走。一是要作形式化验证,安全方案和代码给我之后论证是否足够安全,第二设计比如说RKL级别、网表级别或者更低的给我之后要进行检测和预判是不是可能有问题。最重要的是泄漏定位工作,定位完毕之后可以帮助设计者知道问题出在哪里,可以给你做修复也可以手工做修复。比单纯的同类型的国际上的检测方法和工具,他只告诉你检测结果,不告诉你问题在哪里,我们试图解决这样漏洞的差异。
第三个平台,针对微架构漏洞进行检测,这个点是我的微架构里到底哪些类型的漏洞?微架构种类包括资源分配、代码所有的内容都集中在这样的平台上,最终可以进行通用的处理器的泄漏检测定位。
总结,整个团队工作是按照一个层次走:攻、防、测、设计。攻、防、测是信息安全的主要领域,攻来说处理器的攻击包括漏洞挖掘、攻击方法、防护方法、芯片级新型攻击设计。防护包括能耗、时间、故障的防护。检测类工作包括微架构层次、运行代码级、电路级,不同应用场景下的检测。最后一个是开源处理器设计,也许我们可以在处理器点上朝着国产化方向往下推荐一步,我们也推出自己的安全核、安全部件。
以上就是我的所有介绍内容,谢谢大家!
(本文根据现场速记整理,未经演讲嘉宾审阅)