李雄偉,劉俊延,張 陽(yáng),陳開顏,劉林云,張 帆
(1.陸軍工程大學(xué)石家莊校區(qū),河北 石家莊 050003;2.航天系統(tǒng)部,北京 100094)
通過一些手段對(duì)不可獲取的程序源碼進(jìn)行分析并還原程序的運(yùn)行過程,可有助于理解程序內(nèi)部工作原理,例如蠕蟲、特洛伊木馬等病毒。由于通常使用保護(hù)技術(shù)等其他技術(shù)手段的限制,源代碼不得直接逆向讀取,分析者往往通過某些手段獲取程序的機(jī)器碼或者匯編指令。隨著逆向技術(shù)的不斷進(jìn)步,方法手段也趨于多元化。近年來新興的旁路分析方法(Side Channel Analysis)能夠繞過對(duì)密碼算法和數(shù)學(xué)等其他問題的分析,直接通過設(shè)備運(yùn)行時(shí)泄露的旁路信息分析問題。自從旁路分析方法被Kocher 提出以來,該方法得到了不斷的發(fā)展,并被廣泛應(yīng)用于破解密碼芯片的加密算法、逆向工程和硬件木馬檢測(cè)等領(lǐng)域。由于芯片在運(yùn)行時(shí),能夠通過時(shí)間、功耗、電磁等其他一些可檢測(cè)到的方式泄露信息,而對(duì)這些旁路信號(hào)進(jìn)行分析代價(jià)較小且不會(huì)對(duì)芯片的工作狀態(tài)產(chǎn)生影響,被攻擊者通常難以察覺。因此,通過旁路信號(hào)分析芯片執(zhí)行指令是一個(gè)非常有效的手段。
Kocher 等人在1999 年提出基于功耗的密鑰攻擊時(shí),就意識(shí)到利用旁路分析的密鑰攻擊方法能夠應(yīng)用于芯片執(zhí)行指令分析,但是利用旁路分析進(jìn)行芯片指令分析的研究卻非常少。文獻(xiàn)[9]通過對(duì)Java 智能卡進(jìn)行指令分析,驗(yàn)證了利用旁路信號(hào)對(duì)芯片原始代碼逆向分析的可行性,但只選取幾個(gè)特殊指令進(jìn)行分析,且識(shí)別率太低,未能成功構(gòu)建指令集模板庫(kù)。文獻(xiàn)[10]采用建立模板的旁路分析方法在AT89C52 芯片上進(jìn)行指令分析,其平均準(zhǔn)確率高于70%,但部分指令準(zhǔn)確率偏低,并且僅對(duì)111 條指令中的4 條單周期指令進(jìn)行了簡(jiǎn)單的分類測(cè)試。文獻(xiàn)[9-10]都沒有考慮指令的連續(xù)執(zhí)行情況(不獨(dú)立性)。文獻(xiàn)[11]結(jié)合差分功率分析和不同的線性特征提取算法進(jìn)行KeeLoq 密碼分析。測(cè)試數(shù)據(jù)的識(shí)別率為70.1%,真實(shí)代碼的識(shí)別率為40.7%。通過進(jìn)一步應(yīng)用隱馬爾可夫模型,實(shí)際代碼的結(jié)果提高到58%,實(shí)驗(yàn)測(cè)試數(shù)據(jù)的識(shí)別率與真實(shí)數(shù)據(jù)之間存在很大的差異。上述文獻(xiàn)中均利用功耗旁路信號(hào)并結(jié)合統(tǒng)計(jì)學(xué)進(jìn)行簡(jiǎn)單的指令信號(hào)分類,分析過程依靠人為建立字典或模板,效率和準(zhǔn)確率都較低。
本文采用電磁旁路信號(hào)對(duì)執(zhí)行代碼進(jìn)行逆向分析。由于微控制器由數(shù)百萬晶體管互連組成,其中的電荷移動(dòng)會(huì)產(chǎn)生變化磁場(chǎng),對(duì)電磁輻射進(jìn)行監(jiān)視能夠獲取設(shè)備處理相關(guān)的所有信息,該信道已經(jīng)被驗(yàn)證在密碼攻擊中非常有效,并且被攻擊者不會(huì)意識(shí)到此類攻擊。因此,研究人員更加傾向于利用電磁旁路取代其他旁路信號(hào)進(jìn)行分析。本文針對(duì)芯片在執(zhí)行不同指令時(shí)會(huì)產(chǎn)生不同電磁輻射的現(xiàn)象,對(duì)芯片的電磁輻射進(jìn)行探索性研究,并利用深度學(xué)習(xí)的手段實(shí)現(xiàn)輻射信號(hào)的指令分析。主要工作包含以下幾點(diǎn):
1)提出基于電磁旁路信號(hào)的芯片指令分析,無需對(duì)設(shè)備進(jìn)行修改且被攻擊者不易察覺。
2)對(duì)芯片工作狀態(tài)下產(chǎn)生的電磁輻射影響因素和規(guī)律進(jìn)行分析和實(shí)驗(yàn)探索。
3)采用分階段識(shí)別的方法,解決多周期指令與單周期指令分割時(shí)的困難,真正實(shí)現(xiàn)不同周期的連續(xù)指令分析。
4)利用深度神經(jīng)網(wǎng)絡(luò)的自主學(xué)習(xí)能力進(jìn)行特征學(xué)習(xí),指令恢復(fù)過程快速準(zhǔn)確且自動(dòng)化;并且采用DW 卷積,大幅減少模型訓(xùn)練時(shí)間。
相比于功耗等旁路信號(hào),電磁信號(hào)的信噪比更高,包含更多指令相關(guān)的信息。由于集成電路的硬件特性,可以認(rèn)為其工作狀態(tài)下的電磁信號(hào)是相對(duì)穩(wěn)定的。芯片工作時(shí),輻射信號(hào)會(huì)夾雜周圍環(huán)境的干擾,并且當(dāng)連續(xù)執(zhí)行指令時(shí),上一條指令會(huì)對(duì)下一條指令產(chǎn)生一定的影響。
式中:為恒定的常量部分,由芯片本身的工藝、布局布線、晶體振蕩等與執(zhí)行操作數(shù)據(jù)無關(guān)因素產(chǎn)生的;為被測(cè)設(shè)備所執(zhí)行操作相關(guān)的旁路信號(hào);為被測(cè)設(shè)備所處理數(shù)據(jù)相關(guān)的旁路信號(hào);為取指地址相關(guān)的旁路信號(hào);為噪聲信號(hào),服從正態(tài)分布;常量部分與芯片本身相關(guān),只要能夠克服噪聲信號(hào)、不同操作數(shù)據(jù)與地址對(duì)信號(hào)的干擾,就能通過旁路信號(hào)恢復(fù)芯片所執(zhí)行的指令。
以8051 單片機(jī)為例,芯片在工作時(shí),不斷地從存放程序的內(nèi)存中獲取指令并執(zhí)行。為了便于管理,通常把一條指令的執(zhí)行過程劃分為若干的階段,例如:取指令,存儲(chǔ)器讀、寫等。一條完整的指令一般包括:取指周期、間址周期、執(zhí)行周期、中斷周期,每一階段為一個(gè)機(jī)器周期。對(duì)于簡(jiǎn)單的單周期指令,指令取出到指令寄存器后被立即譯碼執(zhí)行,就不再需要其他的機(jī)器周期。而雙周期指令一般都是執(zhí)行與片外RAM 或I/O 接口有關(guān)的操作,周期劃分如圖1 所示。四周期指令較少,只有乘、除指令占用4 個(gè)機(jī)器周期。
圖1 雙周期指令
芯片中的時(shí)鐘周期由晶振決定,因此芯片的機(jī)器周期是固定的,即使指令的周期可能不同,但指令周期的時(shí)間一定為機(jī)器周期的數(shù)倍。
由于芯片中指令是按照順序執(zhí)行的,并且未知指令意味著無法知道其指令周期,因此,如何對(duì)指令信號(hào)進(jìn)行準(zhǔn)確的分割是一個(gè)關(guān)鍵點(diǎn)。本文構(gòu)建的芯片指令分析模型采用分步驟分類進(jìn)行,方案流程如圖2 所示。
圖2 旁路指令分析流程
首先,在網(wǎng)絡(luò)模型訓(xùn)練階段對(duì)所有匯編指令(包含單周期與多周期指令)的第一周期信號(hào)進(jìn)行深度神經(jīng)網(wǎng)絡(luò)模型1 訓(xùn)練(單周期指令只有一個(gè)機(jī)器周期)。由于多周期指令在第一周期的信號(hào)可能是一樣的(例如乘除指令),因此對(duì)2,4 周期指令信號(hào)分別訓(xùn)練出網(wǎng)絡(luò)模型2,3 是必要的。然后,在指令恢復(fù)階段截取機(jī)器周期長(zhǎng)度信號(hào)進(jìn)行分類,先將其放入模型1 中進(jìn)行分類,如果是單周期指令直接恢復(fù)成功;如果為多周期指令則放入神經(jīng)網(wǎng)絡(luò)模型2,3 中進(jìn)一步分類,每恢復(fù)一條指令就按照指令周期長(zhǎng)度向后推,隨后恢復(fù)下一條指令。應(yīng)當(dāng)注意的是,在這樣的狀況下,如果上一條指令逆向錯(cuò)誤并且與真實(shí)指令的周期不同,那么在其后面的連續(xù)指令都會(huì)因?yàn)殄e(cuò)位而恢復(fù)失敗。指令恢復(fù)的流程描述如下:
算法1:指令恢復(fù)算法
輸入:神經(jīng)網(wǎng)絡(luò)模型model1,model2,model3;旁路信號(hào)x;
輸出:指令分析結(jié)果;
卷積神經(jīng)網(wǎng)絡(luò)不僅在圖像識(shí)別領(lǐng)域成效顯著,也常被應(yīng)用于分析時(shí)間序列的數(shù)據(jù)。本文構(gòu)建的指令分析模型一共包含三個(gè)神經(jīng)網(wǎng)絡(luò)模型,其中第一個(gè)網(wǎng)絡(luò)模型的分類最重要,它要準(zhǔn)確地學(xué)習(xí)所有指令,一旦網(wǎng)絡(luò)1分類錯(cuò)誤,可能導(dǎo)致后續(xù)指令識(shí)別錯(cuò)誤。為了實(shí)現(xiàn)高效準(zhǔn)確的指令分析,選取MobileNetV2 卷積網(wǎng)絡(luò),并在其基礎(chǔ)上修改為本文使用的網(wǎng)絡(luò)模型1,將原本用于圖像特征提取的卷積層換為處理時(shí)序信號(hào)的DW 卷積,并根據(jù)訓(xùn)練樣本的規(guī)模適當(dāng)減少網(wǎng)絡(luò)層數(shù)和修改參數(shù)結(jié)構(gòu),以適用于上述問題的應(yīng)用場(chǎng)景。搭建的網(wǎng)絡(luò)模型1 結(jié)構(gòu)及參數(shù)如表1 所示。
表1 網(wǎng)絡(luò)模型1 結(jié)構(gòu)及參數(shù)
表1中:為輸出特征的Channel;是Bottleneck 的重復(fù)次數(shù);是Bottleneck 中的步距,僅針對(duì)第一層,其他層為1。加入Droupout 層的意義在于防止過擬合提升模型泛化能力,可以理解為在數(shù)據(jù)中加入了高斯噪聲;Bottleneck 為倒殘差結(jié)構(gòu),該結(jié)構(gòu)的存在能夠讓網(wǎng)絡(luò)層數(shù)更深而不至于梯度彌散,兩種結(jié)構(gòu)如圖3 所示。
圖3 兩種倒殘差結(jié)構(gòu)
該網(wǎng)絡(luò)中Conv 為普通的卷積層結(jié)構(gòu),而DW 卷積(Depthwise Convolution)則與普通的卷積不同,它的引入能極大地減少計(jì)算機(jī)的運(yùn)算量和神經(jīng)網(wǎng)絡(luò)參數(shù)數(shù)量,使得神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和預(yù)測(cè)時(shí)間大幅減少。DW 卷積和傳統(tǒng)卷積之間的差異如圖4 所示。
圖4 傳統(tǒng)卷積與DW(Depthwise)卷積
與傳統(tǒng)的卷積結(jié)構(gòu)不同,DW 卷積的每個(gè)卷積核只負(fù)責(zé)與輸入特征矩陣的一個(gè)Channel 進(jìn)行卷積運(yùn)算,再得到輸出。這種卷積能夠大量減少網(wǎng)絡(luò)的參數(shù),從而加快運(yùn)算效率。用于訓(xùn)練較少的2,4 周期指令的模型2 和3,可以設(shè)計(jì)結(jié)構(gòu)更為簡(jiǎn)單的網(wǎng)絡(luò)模型而無需過于深層的復(fù)雜網(wǎng)絡(luò)結(jié)構(gòu)。本文實(shí)驗(yàn)搭建的網(wǎng)絡(luò)模型2,3 結(jié)構(gòu)的參數(shù)如表2 所示。
表2 網(wǎng)絡(luò)模型2,3 結(jié)構(gòu)的參數(shù)
本文采用STC89C52RC 芯片作為實(shí)驗(yàn)對(duì)象,選取針型探頭(RF-B 3-2)采集輻射信號(hào)。該類型探頭是全向采集信號(hào)的,通常被用來采集PCB、IC、電線等設(shè)備的輻射信號(hào)。采用USB 數(shù)據(jù)線連通示波器與計(jì)算機(jī),通過LabVIEW 程序控制示波器進(jìn)行信號(hào)采集,并將采集到的信號(hào)傳入計(jì)算機(jī)保存。實(shí)驗(yàn)環(huán)境搭建如圖5 所示。
圖5 實(shí)驗(yàn)環(huán)境
集成電路運(yùn)行時(shí)輻射的電磁信號(hào)受到的影響因素眾多,包括指令間的相互影響、操作數(shù)據(jù)不同的影響和環(huán)境噪聲干擾等,這些因素將導(dǎo)致最終采集到的信號(hào)并不一定呈現(xiàn)預(yù)期效果。本文通過STC89C52RC 芯片進(jìn)行實(shí)驗(yàn),對(duì)芯片電磁輻射規(guī)律進(jìn)行研究。
1)不同種類指令的信號(hào)差異會(huì)在信號(hào)的波峰處非常明顯,并且連續(xù)指令之間會(huì)造成一定的影響。圖6 為采集到的STC89C52RC 連續(xù)執(zhí)行4 條單周期指令旁路信號(hào),芯片首先執(zhí)行1 條A 指令,然后是幾條相同的指令B。圖中可觀察到,指令A(yù) 與指令B 的信號(hào)差異主要在橢圓形標(biāo)記處;并且在圓形標(biāo)記處可以觀察到,在執(zhí)行A 指令后,B指令會(huì)在第一個(gè)振蕩周期波峰與B,B不同。
圖6 連續(xù)執(zhí)行的4 條指令
8051 單片機(jī)的一個(gè)機(jī)器周期的電磁信號(hào)內(nèi)有24 個(gè)波峰,不同指令的信號(hào)差異會(huì)體現(xiàn)在其中若干個(gè)波峰處,盡管連續(xù)指令之間會(huì)產(chǎn)生一定影響,但一般只會(huì)影響到下一條指令的前1~2 個(gè)波峰。
2)同一匯編指令中所執(zhí)行的操作數(shù)據(jù)不同,也會(huì)對(duì)輻射的信號(hào)產(chǎn)生一定影響,圖7為執(zhí)行MOV A,#Data指令時(shí)不同操作數(shù)Data={100,300,500,700}對(duì)應(yīng)的旁路信號(hào)。
圖7 不同操作數(shù)的指令
對(duì)執(zhí)行不同操作數(shù)的指令采集50 條旁路信號(hào)并取平均值,以減少隨機(jī)干擾對(duì)試驗(yàn)效果的影響。由圖7 可知,相比于執(zhí)行不同的指令,操作數(shù)據(jù)的差異對(duì)信號(hào)的影響十分微小。選取一個(gè)信號(hào)差異拐點(diǎn)處局部放大,觀察到旁路信號(hào)與操作數(shù)據(jù)存在正相關(guān)關(guān)系。
3)即使保證執(zhí)行相同的指令和相同的操作數(shù)據(jù),旁路信號(hào)仍然會(huì)受到取指地址的影響。對(duì)采集2 條存儲(chǔ)于不同地址的MOV A,#Data 指令執(zhí)行時(shí)的旁路信號(hào)進(jìn)行分析,結(jié)果與圖7 情況類似,兩者的信號(hào)在波峰處幾乎重合。
經(jīng)過上述3 個(gè)實(shí)驗(yàn)的分析可知,不同指令之間的信號(hào)差異與不同數(shù)據(jù)、不同取指地址之間信號(hào)體現(xiàn)出來的形式是不一樣的,并且差異的量級(jí)也明顯不同。不同指令的信號(hào)差異在信號(hào)波峰處體現(xiàn)十分明顯,而不同操作數(shù)據(jù)和不同取指地址的差異只在部分的拐點(diǎn)或波峰處存在較小差異。本文采用神經(jīng)網(wǎng)絡(luò)進(jìn)行特征提取,利用其自主學(xué)習(xí)能力實(shí)現(xiàn)對(duì)指令相關(guān)特征的著重學(xué)習(xí),而過濾掉其他無關(guān)的影響因素,避免人為選取有效點(diǎn)和建立模板等繁瑣步驟。
8051 系列芯片一共有111 條匯編指令,由于篇幅限制,本文選取10 條具有代表性的指令進(jìn)行實(shí)驗(yàn),如表3所示,其中包括4 條單周期指令、4 條雙周期指令、2 條四周期指令,每條指令采集500 條信號(hào),一共5 000 條信號(hào)。直接從這5 000 條樣本中挑選部分?jǐn)?shù)據(jù)對(duì)模型進(jìn)行測(cè)試是不科學(xué)的,其訓(xùn)練結(jié)果必然出現(xiàn)在實(shí)驗(yàn)環(huán)境中準(zhǔn)確率虛高,而在復(fù)雜的真實(shí)環(huán)境中卻表現(xiàn)一般的現(xiàn)象。因?yàn)槊織l指令的信號(hào)采集環(huán)境大致相同,而且也無法體現(xiàn)出指令連續(xù)執(zhí)行的實(shí)際情形。訓(xùn)練和測(cè)試數(shù)據(jù)采集按照以下原則:
1)訓(xùn)練樣本:為了提升網(wǎng)絡(luò)的泛化性,使其在實(shí)際應(yīng)用中表現(xiàn)良好,需要采取一定的措施保證訓(xùn)練樣本多樣化。樣本多樣化手段包括:
①信號(hào)采集前在程序中均勻地設(shè)置不同的操作數(shù)據(jù)和不同的取指地址;
②信號(hào)采集時(shí)刻意控制電磁探針在不同的空間位置進(jìn)行采集,或者給予隨機(jī)變化的干擾環(huán)境(溫度或干擾磁場(chǎng))。
2)測(cè)試集:為了真實(shí)反映模型的實(shí)際解決問題能力,測(cè)試集數(shù)據(jù)應(yīng)當(dāng)另行采集,體現(xiàn)出實(shí)際情況的不確定性。本文選取表3 中的10 條指令隨機(jī)組合,按照訓(xùn)練樣本采集的原則進(jìn)行測(cè)試樣本的信號(hào)采集。
表3 選取指令
對(duì)230 條9 μs長(zhǎng)的連續(xù)指令信號(hào)(共包含上述10 條指令各100 條)進(jìn)行逆向識(shí)別,230 條連續(xù)指令信號(hào)成功逆向192 個(gè),逆向失敗的38 個(gè)信號(hào)中,12 個(gè)因周期匹配錯(cuò)誤被跳過。在230 條連續(xù)指令信號(hào)中,單個(gè)指令準(zhǔn)確率如表4 所示。
表4 實(shí)驗(yàn)結(jié)果
實(shí)驗(yàn)結(jié)果顯示,盡管在分析連續(xù)執(zhí)行指令的背景下,第10 種分類情況的準(zhǔn)確率遠(yuǎn)高于文獻(xiàn)[10]中同為8051 內(nèi)核芯片4 指令的分類。個(gè)別指令準(zhǔn)確率較低,一方面是因?yàn)樵撝噶钆c其他類型指令信號(hào)差異過??;另一方面是由于連續(xù)執(zhí)行指令時(shí),后面執(zhí)行的指令會(huì)受到前面指令的干擾。
本文結(jié)合旁路分析和神經(jīng)網(wǎng)絡(luò),對(duì)芯片的連續(xù)指令信號(hào)逆向分析展開研究。針對(duì)芯片電磁輻射的影響因素和規(guī)律進(jìn)行分析和實(shí)驗(yàn)探索,驗(yàn)證利用芯片輻射進(jìn)行指令分析的可行性。通過對(duì)STC89C52RC 芯片進(jìn)行基于電磁旁路信號(hào)的連續(xù)指令恢復(fù)實(shí)驗(yàn),證明了基于電磁旁路信號(hào)和神經(jīng)網(wǎng)絡(luò)的芯片逆向分析的可行性和有效性。未來的工作包括:對(duì)原始信號(hào)進(jìn)行初步特征提取和篩選,改善算法,以進(jìn)一步提升指令分析模型的魯棒性,保證在不同的信號(hào)采集環(huán)境下仍有較高的準(zhǔn)確率。