李雄伟,刘俊延,张 阳,陈开颜,刘林云,张 帆
(1.陆军工程大学石家庄校区,河北 石家庄 050003;2.航天系统部,北京 100094)
通过一些手段对不可获取的程序源码进行分析并还原程序的运行过程,可有助于理解程序内部工作原理,例如蠕虫、特洛伊木马等病毒。由于通常使用保护技术等其他技术手段的限制,源代码不得直接逆向读取,分析者往往通过某些手段获取程序的机器码或者汇编指令。随着逆向技术的不断进步,方法手段也趋于多元化。近年来新兴的旁路分析方法(Side Channel Analysis)能够绕过对密码算法和数学等其他问题的分析,直接通过设备运行时泄露的旁路信息分析问题。自从旁路分析方法被Kocher 提出以来,该方法得到了不断的发展,并被广泛应用于破解密码芯片的加密算法、逆向工程和硬件木马检测等领域。由于芯片在运行时,能够通过时间、功耗、电磁等其他一些可检测到的方式泄露信息,而对这些旁路信号进行分析代价较小且不会对芯片的工作状态产生影响,被攻击者通常难以察觉。因此,通过旁路信号分析芯片执行指令是一个非常有效的手段。
Kocher 等人在1999 年提出基于功耗的密钥攻击时,就意识到利用旁路分析的密钥攻击方法能够应用于芯片执行指令分析,但是利用旁路分析进行芯片指令分析的研究却非常少。文献[9]通过对Java 智能卡进行指令分析,验证了利用旁路信号对芯片原始代码逆向分析的可行性,但只选取几个特殊指令进行分析,且识别率太低,未能成功构建指令集模板库。文献[10]采用建立模板的旁路分析方法在AT89C52 芯片上进行指令分析,其平均准确率高于70%,但部分指令准确率偏低,并且仅对111 条指令中的4 条单周期指令进行了简单的分类测试。文献[9-10]都没有考虑指令的连续执行情况(不独立性)。文献[11]结合差分功率分析和不同的线性特征提取算法进行KeeLoq 密码分析。测试数据的识别率为70.1%,真实代码的识别率为40.7%。通过进一步应用隐马尔可夫模型,实际代码的结果提高到58%,实验测试数据的识别率与真实数据之间存在很大的差异。上述文献中均利用功耗旁路信号并结合统计学进行简单的指令信号分类,分析过程依靠人为建立字典或模板,效率和准确率都较低。
本文采用电磁旁路信号对执行代码进行逆向分析。由于微控制器由数百万晶体管互连组成,其中的电荷移动会产生变化磁场,对电磁辐射进行监视能够获取设备处理相关的所有信息,该信道已经被验证在密码攻击中非常有效,并且被攻击者不会意识到此类攻击。因此,研究人员更加倾向于利用电磁旁路取代其他旁路信号进行分析。本文针对芯片在执行不同指令时会产生不同电磁辐射的现象,对芯片的电磁辐射进行探索性研究,并利用深度学习的手段实现辐射信号的指令分析。主要工作包含以下几点:
1)提出基于电磁旁路信号的芯片指令分析,无需对设备进行修改且被攻击者不易察觉。
2)对芯片工作状态下产生的电磁辐射影响因素和规律进行分析和实验探索。
3)采用分阶段识别的方法,解决多周期指令与单周期指令分割时的困难,真正实现不同周期的连续指令分析。
4)利用深度神经网络的自主学习能力进行特征学习,指令恢复过程快速准确且自动化;并且采用DW 卷积,大幅减少模型训练时间。
相比于功耗等旁路信号,电磁信号的信噪比更高,包含更多指令相关的信息。由于集成电路的硬件特性,可以认为其工作状态下的电磁信号是相对稳定的。芯片工作时,辐射信号会夹杂周围环境的干扰,并且当连续执行指令时,上一条指令会对下一条指令产生一定的影响。
式中:为恒定的常量部分,由芯片本身的工艺、布局布线、晶体振荡等与执行操作数据无关因素产生的;为被测设备所执行操作相关的旁路信号;为被测设备所处理数据相关的旁路信号;为取指地址相关的旁路信号;为噪声信号,服从正态分布;常量部分与芯片本身相关,只要能够克服噪声信号、不同操作数据与地址对信号的干扰,就能通过旁路信号恢复芯片所执行的指令。
以8051 单片机为例,芯片在工作时,不断地从存放程序的内存中获取指令并执行。为了便于管理,通常把一条指令的执行过程划分为若干的阶段,例如:取指令,存储器读、写等。一条完整的指令一般包括:取指周期、间址周期、执行周期、中断周期,每一阶段为一个机器周期。对于简单的单周期指令,指令取出到指令寄存器后被立即译码执行,就不再需要其他的机器周期。而双周期指令一般都是执行与片外RAM 或I/O 接口有关的操作,周期划分如图1 所示。四周期指令较少,只有乘、除指令占用4 个机器周期。
图1 双周期指令
芯片中的时钟周期由晶振决定,因此芯片的机器周期是固定的,即使指令的周期可能不同,但指令周期的时间一定为机器周期的数倍。
由于芯片中指令是按照顺序执行的,并且未知指令意味着无法知道其指令周期,因此,如何对指令信号进行准确的分割是一个关键点。本文构建的芯片指令分析模型采用分步骤分类进行,方案流程如图2 所示。
图2 旁路指令分析流程
首先,在网络模型训练阶段对所有汇编指令(包含单周期与多周期指令)的第一周期信号进行深度神经网络模型1 训练(单周期指令只有一个机器周期)。由于多周期指令在第一周期的信号可能是一样的(例如乘除指令),因此对2,4 周期指令信号分别训练出网络模型2,3 是必要的。然后,在指令恢复阶段截取机器周期长度信号进行分类,先将其放入模型1 中进行分类,如果是单周期指令直接恢复成功;如果为多周期指令则放入神经网络模型2,3 中进一步分类,每恢复一条指令就按照指令周期长度向后推,随后恢复下一条指令。应当注意的是,在这样的状况下,如果上一条指令逆向错误并且与真实指令的周期不同,那么在其后面的连续指令都会因为错位而恢复失败。指令恢复的流程描述如下:
算法1:指令恢复算法
输入:神经网络模型model1,model2,model3;旁路信号x;
输出:指令分析结果;
卷积神经网络不仅在图像识别领域成效显著,也常被应用于分析时间序列的数据。本文构建的指令分析模型一共包含三个神经网络模型,其中第一个网络模型的分类最重要,它要准确地学习所有指令,一旦网络1分类错误,可能导致后续指令识别错误。为了实现高效准确的指令分析,选取MobileNetV2 卷积网络,并在其基础上修改为本文使用的网络模型1,将原本用于图像特征提取的卷积层换为处理时序信号的DW 卷积,并根据训练样本的规模适当减少网络层数和修改参数结构,以适用于上述问题的应用场景。搭建的网络模型1 结构及参数如表1 所示。
表1 网络模型1 结构及参数
表1中:为输出特征的Channel;是Bottleneck 的重复次数;是Bottleneck 中的步距,仅针对第一层,其他层为1。加入Droupout 层的意义在于防止过拟合提升模型泛化能力,可以理解为在数据中加入了高斯噪声;Bottleneck 为倒残差结构,该结构的存在能够让网络层数更深而不至于梯度弥散,两种结构如图3 所示。
图3 两种倒残差结构
该网络中Conv 为普通的卷积层结构,而DW 卷积(Depthwise Convolution)则与普通的卷积不同,它的引入能极大地减少计算机的运算量和神经网络参数数量,使得神经网络的训练和预测时间大幅减少。DW 卷积和传统卷积之间的差异如图4 所示。
图4 传统卷积与DW(Depthwise)卷积
与传统的卷积结构不同,DW 卷积的每个卷积核只负责与输入特征矩阵的一个Channel 进行卷积运算,再得到输出。这种卷积能够大量减少网络的参数,从而加快运算效率。用于训练较少的2,4 周期指令的模型2 和3,可以设计结构更为简单的网络模型而无需过于深层的复杂网络结构。本文实验搭建的网络模型2,3 结构的参数如表2 所示。
表2 网络模型2,3 结构的参数
本文采用STC89C52RC 芯片作为实验对象,选取针型探头(RF-B 3-2)采集辐射信号。该类型探头是全向采集信号的,通常被用来采集PCB、IC、电线等设备的辐射信号。采用USB 数据线连通示波器与计算机,通过LabVIEW 程序控制示波器进行信号采集,并将采集到的信号传入计算机保存。实验环境搭建如图5 所示。
图5 实验环境
集成电路运行时辐射的电磁信号受到的影响因素众多,包括指令间的相互影响、操作数据不同的影响和环境噪声干扰等,这些因素将导致最终采集到的信号并不一定呈现预期效果。本文通过STC89C52RC 芯片进行实验,对芯片电磁辐射规律进行研究。
1)不同种类指令的信号差异会在信号的波峰处非常明显,并且连续指令之间会造成一定的影响。图6 为采集到的STC89C52RC 连续执行4 条单周期指令旁路信号,芯片首先执行1 条A 指令,然后是几条相同的指令B。图中可观察到,指令A 与指令B 的信号差异主要在椭圆形标记处;并且在圆形标记处可以观察到,在执行A 指令后,B指令会在第一个振荡周期波峰与B,B不同。
图6 连续执行的4 条指令
8051 单片机的一个机器周期的电磁信号内有24 个波峰,不同指令的信号差异会体现在其中若干个波峰处,尽管连续指令之间会产生一定影响,但一般只会影响到下一条指令的前1~2 个波峰。
2)同一汇编指令中所执行的操作数据不同,也会对辐射的信号产生一定影响,图7为执行MOV A,#Data指令时不同操作数Data={100,300,500,700}对应的旁路信号。
图7 不同操作数的指令
对执行不同操作数的指令采集50 条旁路信号并取平均值,以减少随机干扰对试验效果的影响。由图7 可知,相比于执行不同的指令,操作数据的差异对信号的影响十分微小。选取一个信号差异拐点处局部放大,观察到旁路信号与操作数据存在正相关关系。
3)即使保证执行相同的指令和相同的操作数据,旁路信号仍然会受到取指地址的影响。对采集2 条存储于不同地址的MOV A,#Data 指令执行时的旁路信号进行分析,结果与图7 情况类似,两者的信号在波峰处几乎重合。
经过上述3 个实验的分析可知,不同指令之间的信号差异与不同数据、不同取指地址之间信号体现出来的形式是不一样的,并且差异的量级也明显不同。不同指令的信号差异在信号波峰处体现十分明显,而不同操作数据和不同取指地址的差异只在部分的拐点或波峰处存在较小差异。本文采用神经网络进行特征提取,利用其自主学习能力实现对指令相关特征的着重学习,而过滤掉其他无关的影响因素,避免人为选取有效点和建立模板等繁琐步骤。
8051 系列芯片一共有111 条汇编指令,由于篇幅限制,本文选取10 条具有代表性的指令进行实验,如表3所示,其中包括4 条单周期指令、4 条双周期指令、2 条四周期指令,每条指令采集500 条信号,一共5 000 条信号。直接从这5 000 条样本中挑选部分数据对模型进行测试是不科学的,其训练结果必然出现在实验环境中准确率虚高,而在复杂的真实环境中却表现一般的现象。因为每条指令的信号采集环境大致相同,而且也无法体现出指令连续执行的实际情形。训练和测试数据采集按照以下原则:
1)训练样本:为了提升网络的泛化性,使其在实际应用中表现良好,需要采取一定的措施保证训练样本多样化。样本多样化手段包括:
①信号采集前在程序中均匀地设置不同的操作数据和不同的取指地址;
②信号采集时刻意控制电磁探针在不同的空间位置进行采集,或者给予随机变化的干扰环境(温度或干扰磁场)。
2)测试集:为了真实反映模型的实际解决问题能力,测试集数据应当另行采集,体现出实际情况的不确定性。本文选取表3 中的10 条指令随机组合,按照训练样本采集的原则进行测试样本的信号采集。
表3 选取指令
对230 条9 μs长的连续指令信号(共包含上述10 条指令各100 条)进行逆向识别,230 条连续指令信号成功逆向192 个,逆向失败的38 个信号中,12 个因周期匹配错误被跳过。在230 条连续指令信号中,单个指令准确率如表4 所示。
表4 实验结果
实验结果显示,尽管在分析连续执行指令的背景下,第10 种分类情况的准确率远高于文献[10]中同为8051 内核芯片4 指令的分类。个别指令准确率较低,一方面是因为该指令与其他类型指令信号差异过小;另一方面是由于连续执行指令时,后面执行的指令会受到前面指令的干扰。
本文结合旁路分析和神经网络,对芯片的连续指令信号逆向分析展开研究。针对芯片电磁辐射的影响因素和规律进行分析和实验探索,验证利用芯片辐射进行指令分析的可行性。通过对STC89C52RC 芯片进行基于电磁旁路信号的连续指令恢复实验,证明了基于电磁旁路信号和神经网络的芯片逆向分析的可行性和有效性。未来的工作包括:对原始信号进行初步特征提取和筛选,改善算法,以进一步提升指令分析模型的鲁棒性,保证在不同的信号采集环境下仍有较高的准确率。