一种面向分支预测攻击的微体系结构级安全防护方法
【技术领域】
[0001]本发明涉及属于微处理器设计及信息安全领域,特别是涉及一种微体系结构级安全防护方法。
【背景技术】
[0002]在日常生活中,我们广泛使用现代通用计算机,进行支付、购物等相关业务,但传统的密码系统只是从数学算法的角度来评估密码系统的安全性,例如,在1024-bit下的RSA、256-bit下的ECC或者对称密码算法中的AES、DES等。然而,随着集成电路发展水平的迅猛发展,目前对于密码算法的攻击,不仅是对密码算法本身提出破解,也会在密码算法执行的过程中,通过一定手段抽取出有效的信息,破解密钥。后者一般称作侧信道攻击(Side-Channel Attack)。攻击者往往不从密码算法的本身进行攻击,而是从密码系统运行时,所泄露出来的侧信道信息如功耗差异、加密时间差异和电磁差异等,来进行相关的信息分析,得出与加密过程中密钥的关系,通过一定处理,恢复出密钥,达到破解目的。
[0003]目前,侧信道攻击基于不同的攻击方式可以分为:错误攻击(FaultAttacks,FA)、时间攻击(TimingAttacks, TA)、能量攻击(PowerAnalysis attacks,PA)、电磁攻击(ElectromagneticAttacks,EMA)以及其他的基于福射、频率、声音等攻击。但在早期,大多数人认为侧信道攻击一般只针对于简单的体系结构下的特定芯片,如智能卡,而不能攻击复杂的通用处理器(intel,AMD等)。原因在于在实施攻击时,需要分辨或者采样系统的某些侧信道信息,如功耗,执行时间等,但在复杂的通用计算机系统中,由于多线程、超线程等技术的存在,使得这些侧信道信息存在很多噪声,很难准确抓取。直到2005年,D.Brumle等人提出很大程度上区别于传统意义上的侧信道攻击,Timing Attack(时间攻击)并成功攻击了一个Web服务器。此种攻击并不需要对目标机(受攻击方)进行干涉或者实地测量侧信道信息,所以更具有威胁性。后来通过越来越多研究人员发现,Timing Attack可以通过网络有效获取远程服务器上的敏感信息。逐渐发展出近几年一种新型的侧信道攻击方式--微体系结构分析攻击(MA,Micro-Architecture Analysis Attack),并对现代的通用计算机产生了安全威胁。其主要攻击原理是在通用处理器中利用进程间共享的体系结构中的公共模块如D_cache、I_cache和分支预测单元(Branch predator Unit,BPU)等,通过“合理”的方式巧妙的设计攻击流程,控制公共模块占用情况,并通过侧信道信息的抓取,分析,得出密钥达到攻击目的。其中,Onur Aclicmez等人提出的分支预测分析攻击,能够有效的针对现代通用器中必不可少的分支预测单元,通过注入间谍进程,分析出分支预测单元中的重要组成部分BTB (Branch Target Buffer,分支地址缓存)的使用情况,从而破除有密钥依赖分支语句的密码算法,如RSA,ECC等。
[0004]近年来针对微体系结构分析攻击,特别是分支预测分析攻击,也提出了一些相应的防护方法。例如G1vanni Agosta等人提出了对应的软件的防护策略:避免在密码程序中使用和密钥相关的分支语句或者将与密钥相关的分支语句用间接跳转替换,从而达到抗攻击的目的,但此策略只能以损失程序的性能为代价。再如Onur Aclicmez等人通过分支预测分析成功攻破了二进制下的欧几里得求逆算法,极大地扩展了分支预测分析攻击的范围,从而基本所有使用扩展欧几里得算法求逆的密码算法,都很有可能受到分支预测分析攻击的威胁,所以他们建议不使用此算法,来避免受到攻击。目前的抗分支预测分析攻击主要都是基于软件的方法,通过修改密码程序流程达到防护目的,但这样的方法存在一些问题:首先,增加程序员编程的要求。程序设计人员需要很好理解分支预测攻击以及其软件防护策略才能设计出抵抗分支预测分析攻击的程序;其次,降低了程序性能。软件防护策略需要通过避免条件分支的方法,如间接跳转,来达到保护目的,这往往会牺牲程序的性能,同时,有的复杂分支语句不容易使用替代方法消除;最后,增加了程序维护成本,大量没有进行防护的程序需要重构以达到防攻击的目的。
【发明内容】
[0005]基于上述现有技术存在的问题,本发明提出了一种面向分支预测攻击的微体系结构级安全防护方法,首次提出微体系结构的硬件防护方法来有效抵御此种攻击。在防护过程中,将使用记录表动态识别系统运行中的间谍进程,并立即激活对应的防护策略;在BTB中,最近访问的关键分支语句将被强行加锁,阻止间谍进行对其进行替换,破坏攻击条件,达到有效防护的目的。
[0006]本发明公开了一种面向分支预测攻击的微体系结构级安全防护方法,首该方法包括以下步骤:先进行间谍进程识别;然后对识别的间谍进程实现基于加锁的防护,其中:
[0007]所述间谍进程识别的流程包括:对某一分支进行BTB搜寻,获得所有命中分支且合法的对应进程;触发计算所有进程对BTB的占有率;分析该BTB占有率是否超过了阈值;如果计算出的BTB占有率没有超过阈值,那么说明该进程不是间谍进程;如果超过阈值,那么说明此进程非常有可能是间谍进程,标志着此进程对于BTB的访问将会受到限制;当进程退出或者挂起时,不再记录进程对于BTB的占用情况;
[0008]所述对识别的间谍进程实现基于加锁的防护的流程包括:在更新BTB之前,首先检查间谍进程记录表;准备更新的分支的进程是否属于间谍进程;如果进程不是间谍进程,那么判断将要替换的BTB行是否被加锁,;如果将要替换的BTB行没有被加锁,那么将采取正常的替换策略,即普通更新BTB,;如果该BTB行被加锁了,那么就需要比较准备更新BTB的分支所属的进程是否与将要被替换的BTB行中的进程相同;如果相同,说明是同一个进程对BTB行进行更新,那么允许更新BTB ;如果不相等,即另一个进程的分支,判断是否满足tid==btb.tid(该进程的进程号是否与BTB中所存储的某个进程号相同)?如果是,则允许更新BTB,准备更新BTB表;否则,将被禁止更新BTB表,并跳过BTB的更新。
[0009]本发明能够确保面向分支预测分析攻击的微体系结构级防护方法的安全性;对通用处理器性能(例如CPI)的影响非常小,甚至对于整体的CPI具有平均0.12%的提升。
【附图说明】
[0010]图1为间谍进程记录表结构示意图;
[0011]图2为间谍进程识别流程图;
[0012]图3为基于加锁防护方法的BTB表项示意图;
[0013]图4为基于加锁的防护方法流程图;
[0014]图5为无防护方法条件下基于分支预测分析攻击的BTB更新情况示意图;
[0015]图6为微体系结构级分支预测攻击防护方法保护下BTB更新情况示意图;
[0016]图7为添加分支预测攻击防护方法前后CPU性能的比较结果示意图;
[0017]图8为Mibench标准测试程序的BTB占用率比较结果示意图;
[0018]图9为本发明整体流程图。
【具体实施方式】
[0019]下面将结合附图对本发明的【具体实施方式】进行详细描述,这些实施方式若存在示例性的内容,不应解释成对本发明的限制。
[0020]微体系结构级别安全防护方法只对通用处理器底层硬件结构进行改变,对于密码程序开发人员完全透明,编程人员不需要了解任何处理器底层细节及分支预测分析攻击的细节,即可保障密码程序的安全运行。
[0021]1、间谍进程的动态识别
[0022]在基于分支预测分析的攻击中,间谍进程总是尝试覆盖掉所有的BTB表项,以确保密码进程的关键分支被替换掉,这样在再一次运行间谍进程时,根据检查出的时间差进行攻击。间谍进程对BTB的完全覆盖将导致其对于BTB的占用率非常高。但是在进行分支预测单元(Branch Predict1n Unit, BPU)的设计时,通过基准程序的验证,绝大部分正常进程对BTB的占用率的确不高。由于间谍进程与正常进程对间谍进程识别过程中,为了与预设于BTB占有率的不同,那么可以根据BTB的占有率的高低就将两者进行有效区分。根据此特征,本发明设定一个用于识别某进程是否为间谍进程的阈值,当某个进程BTB占有率大于此阈值时,其被识别为间谍进程,否则认为是正常进程。此阈值将在