武汉大学2023国际汽车科技与设备发展研讨会:唐明:计算机软件中的缺陷发掘和探测
2023年8月21-24日,“2023年度国际国内汽车科技与设备发展研讨会”在苏州盛大开幕,会议将在江苏省工信部、苏州市、中国车辆工程研究所共同举办。本次论坛的主题是“装备夯实基础,技术引领未来”,邀请了政府领导、行业院士、企业高层、技术专家等,对新技术、新装备、新生态进行了全面地探讨,以此来促进技术和产业的发展,进一步巩固质量强国之基,为汽车强国战略提供更多的服务。
武汉大学计算机安全学院博士生导师、计算机安全学院教授唐明教授在7月23号举行的“车载芯片和安全技术”研讨会上,以《处理器漏洞挖掘与检测》为题进行了一场非常出色的讲座。下面是他的讲话:
唐明,武汉大学计算机安全学院博士生导师
下面是他的讲话:
大家好,我是来自武汉大学的唐明,非常高兴能够出席本次研讨会,谢谢雷总的盛情相邀,今天我将与您共同探讨处理器的安全性问题。我今日所引述的芯片安全性是针对一般的芯片,之前许多高手都在谈论 MCU,在末尾能有机会简要地谈一谈特殊芯片与 MCU类似的工作。
本研究共分两个方面:一是针对已有的一般处理程序的泄露级攻击,二是针对本研究小组在泄露级攻击的基础上,对新的漏洞进行挖掘,检测,并提出相应的防御方法。
一、当前处理器的主要泄露点
目前,主要的处理器安全威胁可划分为三类。第一种是隐藏通道,下面用图表来解释隐藏通道的基本原理。在处理器的内部,一般被分成了两块,一块是最高级别的,一块是最低级别的。在各个领域中执行不同的处理程序。
在高安全区域,若有不进行破坏的恶意程序,仅截取私人密钥或网络安全中的某种隐私信息,则可与低安全区域的同伙共谋进行攻击,利用时间级的泄露,将信息按比特传送,这就是隐藏信道。
说明:在已有的处理器中,包含了某些 MCU中存在着许多的分区或者是资源,这些分区将会被不同的进程和线程所共用。如果一个过程对同一块空间进行了争夺,那么就会产生一种现象,即其中一个过程占用了这个空间,而另外一个过程则被阻止了。观察器可以检测自己在某个位置上所占用的时间,并由此确定目前传送的位元为0或1。
第二种是针对时域边通道,它是一种常规边通道。我们小组从2007年就开始研究常规旁通道,包含能耗,刚刚长安的李总就提出了常规旁通道的加密,或是对安全性的保护,或是对能耗,或是对电磁,或是对故障的保护。时间攻击也属于处理器领域中典型的一种泄露攻击,它包括两个方面,一个方面是因为代码本身的不平衡,从下面的例子中我们可以看出,如果现在的条件分支语句中 if的分支和 else的分支代码执行时间不一样,那么观察者可以判断你究竟是执行的是 if还是 else。当 if的判定条件,或者该分支语句的判定条件与秘密信息有关时,实际上就是泄露了机密信息,即在代码级别上的时间泄露。
最好的办法,就是利用芯片的体系结构,比如 Cache缓存之类的。目前的攻击模式,例子中使用的是 flush+ reload的三个步骤,攻击者、受害者、攻击者的入侵。首先,攻击者会在这里进行缓存,清理完所有的区域之后,受害者就会进来,受害者在读取数据的过程中,会将数据转移到缓存上,也就是L1、L2两个缓存上,因为攻击者已经清除了缓存,所以受害者的数据和代码肯定会被删除,然后被导入到缓存上。第三个步骤是攻击者入侵,攻击者通过扫描缓存地址来确定受害人在缓存中所用的是哪个地址。Cache中的地址,即使是在当前的安全处理器保护下,也与存储中的数据地址存在着一定的对应,其对应关系很有可能涉及到一些机密信息,尤其是涉及到密码芯片中的分组、常规加密,以及轻型加密中的私人密钥等,从而泄露了一些机密信息。
第三种攻击,也就是瞬态攻击,发生在2017年末,在2018年初,随着处理器安全技术的发展,人们开始关注这一技术,并将其推广到了一个热门的研究领域,首先,它是在 intel的处理器中被发现的,一般的程序在运行的过程中都会有一种特权,那就是只有对自己存储在内存中的信息进行访问,而一旦发生瞬态攻击,我就可以越权读取这些信息。若可超越授权读取资料,则目前资讯管理所采用之一级或一级之隔离技术将完全无效。
这种类型的攻击有两个步骤,一个是在处理器内部有一个叫做回退的步骤,当它预测到执行出现了问题的时候,就会进行回退,而且回退的时间会比较长。第二种方法是基于隐藏通道,它要求所有的隐藏通道都要有一个共用的隐藏通道。
这是之前的五个鬼魂入侵,唯一的共同点就是必须要有一个后撤的要求,那就是必须要有一个资源共享。以 SpectreV1为例,在瞬时攻击中, BPs是最早被发现的,也就是在这个时候, BPs,也就是一个处理器中的一个分支。在一般的处理器中,转移预测是一种技术方法,也是一种可以大幅度提升性能的资源。这种微构造物的优点在于, CPU在到达一个分支时,不会被阻挡,因为它不会被阻止,因为它会按照上一次的跳转结果来进行操作。如果在一个分支之前始终是“是”,那么在接下来的时间里, CPU将会对“是”进行预测,并且将对“是”声明进行预测。
攻击者首先会欺骗分支预测,每个人都有自己的一套方法,他们会欺骗你说“是”,然后不断地说“是”,当你进入一个“否”的地方时,你自己都不知道,就会自动地说“是”,然后把你的信息和命令输入到 Cache里。在恢复的时候,会恢复受害人的资料,但是缓存并没有做对应的 flush操作,所以私人资料就留在了缓存里。攻击者有足够的实力,可以判断出这个问题的发生。
华为万总谈到了 OTA, OTA的情景更符合今日的主题,对于车内的芯片来说是否会出现问题呢?如果在一个芯片中使用了一个处理器芯片,也就是我刚刚提到的共享资源,在一个处理器中,无论是 MPU,还是通用处理器,都存在着一个公共资源,那么,当代码在执行的时候,就会在一个时间点上,将会有一个时间点,把这个时间点给我。是否正确地将在冲突进程中执行的所有编码的数据进行了分离?实际上为芯片安全找到新场景,或者说在汽车芯片中有一个新的安全问题。
二、本小组在处理程序上的工作
一是我们研究的商业级处理器,主要是英特尔、 AMD和 ARM,右边这张是英特尔经典的微架构,有两处位于前端,一处位于运算区,一处位于缓冲区,另一处位于缓冲区和内存区域。首先,对于我们而言,市面上那些对我们而言彻头彻尾的黑色核心芯片,可以磨练我们的安全性。第二,它可以无视已有的保护措施,任何商业芯片公司都会在程序中添加新的程序,只要程序中添加了新的程序,程序就会自动关闭。更关键的是,我们的主要工作是对后续的防御和测试,因此,我们首先要将这些弱点挖掘出来,并且在弄清楚这些弱点出现的原因和机制之后,再进行相应的防御和测试。
这里仅举一例,即前面的缺陷,它与英特尔的译码处理器之间存在着显著的时间差。这两个程序的指令数量和类型,都是一样的,但执行的次序却不一样。如果执行的次序不一样,则会导致多个宏集的数量也不一样,从而导致多个宏集的执行速度也不一样。通过这个差异,我们可以恢复一些敏感的信息,这个就是我们挖掘的缺陷之一。
综上所述,这五个弱点,都是可以突破防御的。第二种方法适用于包含签署协议的对称性私有密钥恢复或不对称的保密密钥恢复两种方法。第三个特点,就是把几个不同的 Spectre攻击变成了变异的,这就是指已有的英特尔或 AMD的芯片都无法抵御前面的攻击。
第二项重要的工作就是完成处理程序的保护。
第一个方面,就是能量消耗方面的防御,就像我们之前提到的,微处理器和汽车电子系统中的晶片,都是用来防御普通晶片的,而我们正在研究的,就是如何防御晶片上的能量消耗。这部分工作将基于开放源码处理器,对已有的开放源码处理器增加对常规侧通道的保护。事实上,如果出现了旁路通道泄露,那么就会出现一个问题,那就是命令会被反向读取,而不只是数据恢复,还有一些命令会被反向读取。我们做的是一个插件,在这张图的下方写了一个 ESM,这个安全插件在不破坏原来处理器流水工具的前提下,将其插入必要的工艺内部,通过对其进行参数配置,实现对能耗的攻击,这样就可以大大地减少对现有芯片的修改周期,并在满足期望的安全要求的前提下,将其插入其中。
这是一个节能保护的作用图谱,它收集了电力系统的功率、电磁波等数据,并包含了系统的参数设置。尽可能地不去移动最初的设计箱,从商业型处理器的角度去看,也是另一种思路。
第二种保护措施是对移动平均线的保护措施,例如缓存就是一个很大的保护措施,我们目前也正在进行这个措施。对缓存对应的保护是在微机体系结构层面上的保护,有针对瞬态和时间两种类型的攻击。
第三种,就是生产 RISCV轻型核心,其中就有高速核心, RISCV现在主要用于物联网,而不是用于服务器,所以国内的芯片,都会采用自己的轻型核心和高速核心,因为轻型核心的要求比较高。
这个测试平台,一共可以分成三个方面,一个是对代码的测试和修复,这个测试的动机来自于这个情况,许多软件公司在开发自己的程序的时候,不能对处理器和芯片进行改动,只能购买外部的芯片。那么,如果目前的代码是在英特尔上运行的,以后再移植到 ARM上,不管是哪个版本,都不会被之前的那个缺陷所破坏。第二种情况,就是在 OTA的情况下,你想要从 OTA中下载一个软件,那么这个软件会被发现吗?是否会有新的程式进入到原本的程式中,或会对其程式产生危险?这是纯粹的密码级测试,在这种测试中,你可以看出,在确定目标位置之后,它会对目前密码的测试结果进行保护,所以密码是比较安全的。
这是一个简单的接口,其中包含了测试,在测试的时候,你可以在测试的时候,对现有的系统进行一些微构架的设置,你可以选择任何一种系统,哪怕是国产系统。侦测到程式码后,将会找出程式码,编入索引,程式码修正。
电路层,这是在 MCU的情况下,在传统的通道中,会有能量消耗,会有故障,会有电磁,所以,在这种情况下,我们可以通过电路层来探测,然后再进行安全保护,但是,在这种情况下,我们真的可以保证我们的安全吗?这是一个不确定的问题,必须要有一个形式上的证明。一是要做一个形式上的测试,看看这个程序和程序的安全性,二是要做一个测试,比如 RKL级别,网表级别,甚至更高级别,然后再做一个测试,看看这个程序有没有问题。最关键的是找到泄露点,找到泄露点后,设计师就能找到泄露点,然后自己动手修补。相比于其他国家的测试手段,他们只是给你测试的结果,而不是给你解释问题所在。
第三个测试平台,就是为了发现我的系统中,有什么缺陷。微结构类型,包括资源分配,代码等,都是在这种平台上,最后可以实现对一般的处理器的泄露检测和定位。
总的来说,整支队伍的工作都遵循着一个层级:进攻,防守,测试,设计。攻击,防御,测试是信息安全中最重要的几个方面,其中攻击包括对计算机的漏洞挖掘,攻击方式,防御方式,芯片级新型攻击的设计。防护措施包括对能量消耗的防护措施、对时间的防护措施和对失效的防护措施。检验类别的工作包含了微架构层面,运行程式层面,电路层面,检验各种应用情形。最后一个就是开源处理器设计,也许我们可以在处理器点上朝着国产化方向往下推进一步,我们也推出自己的安全核、安全部件。
相关文章: