李 揚(yáng) 戴紫彬 李軍偉
(信息工程大學(xué) 河南 鄭州 450001)
代碼重用攻擊[1]作為一種新型軟件攻擊,已嚴(yán)重威脅到嵌入式設(shè)備的安全。針對(duì)代碼重用攻擊,許多檢測(cè)方案將硬件監(jiān)控單元集成在處理器的流水線中[2-5],將檢測(cè)所需的信號(hào)從不同流水線階段轉(zhuǎn)發(fā)到硬件監(jiān)控單元,硬件監(jiān)控單元利用這些信號(hào)檢測(cè)控制流的完整性,一些方案是在被測(cè)系統(tǒng)的指令集中擴(kuò)展特殊指令來(lái)完成檢測(cè)[6-9],這些方案都需要改動(dòng)處理器流水線。但是在一些特殊場(chǎng)景,并不能通過修改處理器流水線部署安全機(jī)制,例如某些第三方處理器供應(yīng)商禁止修改處理器內(nèi)部邏輯,或者修改處理器內(nèi)部邏輯會(huì)耗費(fèi)較高的成本。這時(shí)許多方案利用現(xiàn)有的調(diào)試接口監(jiān)視程序的行為,這些方案符合SoC的設(shè)計(jì)規(guī)則,能夠以低成本實(shí)現(xiàn)。
目前,已有眾多學(xué)者在不修改處理器結(jié)構(gòu)的基礎(chǔ)上,提出了檢測(cè)方案。Corey等[10]利用性能計(jì)數(shù)器計(jì)數(shù)結(jié)果之間的數(shù)學(xué)關(guān)系,建立模型來(lái)區(qū)分正常程序和惡意程序,但是建模過程復(fù)雜,檢測(cè)精度較低;Wang等[11]將檢測(cè)代碼固化在Boot ROM中,在加載固件時(shí)檢測(cè)代碼重用攻擊,能夠確保固件執(zhí)行的完整性,但是不能夠保證應(yīng)用程序執(zhí)行的完整性?,F(xiàn)有的利用性能計(jì)數(shù)器檢測(cè)代碼重用攻擊的方案基本都是純軟件實(shí)現(xiàn),需要借助軟件工具在可執(zhí)行文件中插樁檢測(cè)代碼。除了利用性能計(jì)數(shù)器,許多方案利用調(diào)試接口部署檢測(cè)策略,Lee等[12]觀測(cè)到ARM CoreSight調(diào)試器能夠生成的控制流跟蹤信息僅僅包括間接分支目標(biāo)地址,為了部署硬件影子堆棧,還需要獲取分支類型和源地址,為此,通過離線分析二進(jìn)制文件生成需補(bǔ)充的元數(shù)據(jù)。Lee等[13]通過ARM的核心調(diào)試接口CDI(Core Debug Interface)實(shí)施跟蹤檢測(cè),CONVERSE使用IEEE-ISTO Nexus 5001標(biāo)準(zhǔn)調(diào)試接口部署檢測(cè)策略[14]。利用調(diào)試架構(gòu)檢測(cè)通常需要補(bǔ)充元數(shù)據(jù),并且容易產(chǎn)生跟蹤丟失。此外,對(duì)設(shè)備調(diào)試接口規(guī)范的屬性具有依賴性,例如CDI作為高級(jí)調(diào)試接口較少在低端嵌入式設(shè)備中使用。
本文將性能計(jì)數(shù)器檢測(cè)方法與調(diào)試接口檢測(cè)方法相結(jié)合,提出一種面向代碼重用攻擊檢測(cè)的安全調(diào)試架構(gòu),制定了函數(shù)級(jí)檢測(cè)方案,能夠在不修改處理內(nèi)部邏輯、不插樁的前提下完成檢測(cè),克服了現(xiàn)有技術(shù)的不足。
代碼重用攻擊利用漏洞改變程序在內(nèi)存中原有代碼、執(zhí)行順序來(lái)達(dá)到攻擊的目的。代碼重用攻擊通常通過緩存溢出部署,通過覆蓋返回地址或其他參數(shù)重定向控制流,鏈接具有不同功能的短指令片段完成惡意操作。本文假設(shè)攻擊者能夠反匯編庫(kù)文件和可執(zhí)行文件,能夠查找到可被用于構(gòu)建攻擊的短指令片段,假設(shè)用于編寫應(yīng)用程序的高級(jí)語(yǔ)言中存在可被攻擊者利用的漏銅。這些漏洞是廣泛存在的,這也是代碼重用攻擊種類多、防御困難和發(fā)展迅速的主要原因。同時(shí)假設(shè)加載進(jìn)內(nèi)存的代碼不可修改,數(shù)據(jù)不可執(zhí)行,例如系統(tǒng)受到NX(No eXecute)機(jī)制的保護(hù)[15],能夠防御代碼注入攻擊[16]。
代碼重用攻擊能夠利用程序漏洞修改基本塊末尾條件分支指令的條件變量,在程序控制流圖CFG(Control Flow Graph)有效路徑之內(nèi)改變執(zhí)行方向,如圖1中虛線a所示;或改變循環(huán)執(zhí)行的次數(shù),如圖中1虛線b所示,例如LOP(Loop Oriented Programming)攻擊[17];此外,代碼重用攻擊能夠通過修改基本塊末尾代碼指針,執(zhí)行不在程序控制流圖有效路徑限定內(nèi)的非法路徑,如圖中1虛線c所示,例如ROP(Return Oriented Programming)攻擊[18]和JOP(Jump Oriented Programming)攻擊[19]。
圖1 代碼重用攻擊分類
在SoC中集成基礎(chǔ)調(diào)試架構(gòu),能夠深入了解執(zhí)行軟件的系統(tǒng),掌握軟件在芯片上具體的執(zhí)行情況。一個(gè)高效強(qiáng)大的調(diào)試系統(tǒng)可以大大縮短系統(tǒng)的開發(fā)周期?,F(xiàn)今異構(gòu)多核設(shè)計(jì)給軟件開發(fā)人員帶來(lái)了新的挑戰(zhàn),跨多個(gè)CPU和硬件加速器執(zhí)行并發(fā)軟件、復(fù)雜的I/O接口交互和嚴(yán)格的實(shí)時(shí)要求是新常態(tài),由此產(chǎn)生許多新型漏洞,例如競(jìng)爭(zhēng)條件、死鎖和嚴(yán)重的性能降級(jí)。查找此類錯(cuò)誤,斷點(diǎn)調(diào)試已不適用,因?yàn)樵O(shè)置斷點(diǎn)會(huì)干擾不同執(zhí)行線程之間的時(shí)間關(guān)系,發(fā)生“探測(cè)效應(yīng)”,導(dǎo)致原始問題的消失。這些問題也會(huì)干擾對(duì)代碼重用攻擊的檢測(cè)。為了解決以上問題,現(xiàn)有的調(diào)試架構(gòu)基本都支持非侵入式的跟蹤調(diào)試,將觀察結(jié)果傳輸?shù)狡?,然后在片外重建程序流并分析程序行為?/p>
目前大多數(shù)芯片供應(yīng)商提供的基礎(chǔ)調(diào)試架構(gòu)主要遵循兩種規(guī)范:ARM CoreSight[20]或NEXUS 5001(官方稱為“IEEE-ISTO 5001”)[21],都支持運(yùn)行控制調(diào)試和跟蹤調(diào)試。但是這兩種規(guī)范都不是開源的,需要支付費(fèi)用才可以使用,這阻礙了增強(qiáng)調(diào)試架構(gòu)功能的研究。
開源調(diào)試架構(gòu)OSD(Open SoC Debug)的出現(xiàn)解決了這個(gè)問題[22]。OSD是一項(xiàng)完全開源的規(guī)范,無(wú)需任何委員會(huì)成員資格或支付許可使用費(fèi),任何人都可以自由分享和修改規(guī)范本身,以及出于任何目的創(chuàng)建和分發(fā)規(guī)范的實(shí)現(xiàn)。OSD是一種可擴(kuò)展的模塊化規(guī)范,如圖2所示,規(guī)范中定義了具有不同功能的調(diào)試模塊組件:
(1) SCM SCM(Subnet Control Module)主要用于提供系統(tǒng)信息,例如調(diào)試網(wǎng)絡(luò)中調(diào)試模塊的數(shù)量,子網(wǎng)絡(luò)編號(hào)和支持調(diào)試數(shù)據(jù)包的大小。其還能夠復(fù)位子網(wǎng)絡(luò)或復(fù)位處理器。
(2) CDM CDM(Core Debug Module)主要用于運(yùn)行控制調(diào)試,調(diào)試前需要掛起處理器,調(diào)試過程中,能夠通過訪問處理器中的特殊寄存器控制處理器的運(yùn)行,這些特殊寄存器中包括了性能計(jì)數(shù)器的使能寄存器、復(fù)位寄存器和計(jì)數(shù)寄存器。調(diào)試結(jié)束后,解除處理器的掛起。
(3) CTM CTM(Core Trace Module)主要用于跟蹤模式(機(jī)器模式和用戶模式)的更改和函數(shù)的執(zhí)行。CTM通過跟蹤調(diào)用指令和返回指令的執(zhí)行,以及這些指令的PC指針值(內(nèi)存地址),在elf可執(zhí)行文件中查找指令位置后,能夠跟蹤函數(shù)的調(diào)用和返回。
(4) MAM MAM(Memory Access Module)提供訪問系統(tǒng)內(nèi)存的接口,與CDM配合使用。
(5) HAM HAM(Host Authentication Module)主要用于令牌匹配和身份認(rèn)證。調(diào)試架構(gòu)會(huì)將系統(tǒng)內(nèi)部信號(hào)暴露,為了防止攻擊者濫用調(diào)試架構(gòu),需要經(jīng)過HAM的認(rèn)證,主機(jī)接口模塊才能夠與HAM以外的調(diào)試模塊通信。
圖2 OSD調(diào)試架構(gòu)
OSD遵循IP復(fù)用技術(shù),通過復(fù)用OSD規(guī)范中的組件、接口和軟件工具,能夠完成定制設(shè)計(jì)。OSD的開源特性也使其非常具有競(jìng)爭(zhēng)力,未來(lái)必然會(huì)被廣泛使用,所以本文以O(shè)SD為基礎(chǔ)調(diào)試架構(gòu)設(shè)計(jì)一款面向代碼重用攻擊檢測(cè)的安全調(diào)試架構(gòu)。
性能計(jì)數(shù)器幾乎被集成在所有的主流處理器中,本質(zhì)是一組特殊寄存器,能夠在處理器運(yùn)行程序的過程中,對(duì)處理器內(nèi)部某些硬件相關(guān)的動(dòng)作進(jìn)行計(jì)數(shù),配合處理器外部調(diào)試接口,設(shè)立時(shí)間斷點(diǎn),可以獲得處理器的性能參數(shù)。性能計(jì)數(shù)器通常被用于硬件系統(tǒng)的性能評(píng)估和低功耗優(yōu)化。
本文將性能計(jì)數(shù)器用于安全檢測(cè),是基于現(xiàn)代RISC處理器中提供的性能計(jì)數(shù)器基本都能夠?qū)崿F(xiàn)實(shí)時(shí)的事件響應(yīng)和精確無(wú)漏的采樣。本文通過性能計(jì)數(shù)器與調(diào)試架構(gòu)的配合,利用性能計(jì)數(shù)器在執(zhí)行正常程序和異常程序產(chǎn)生計(jì)數(shù)結(jié)果的差異,檢測(cè)代碼重用攻擊。本文選用具備嵌入式設(shè)備典型特征的PULPino SoC平臺(tái)作為實(shí)驗(yàn)平臺(tái)[23],如表1所示,PULPino中RISC處理器性能計(jì)數(shù)器能夠?qū)κ畟€(gè)事件進(jìn)行計(jì)數(shù),計(jì)數(shù)結(jié)果分別存儲(chǔ)在名稱為PCCR0-PCCR10的寄存器中。
表1 計(jì)數(shù)寄存器的名稱及描述
利用性能計(jì)數(shù)器檢測(cè)代碼重用攻擊分為離線階段和在線階段,離線階段收集并存儲(chǔ)檢測(cè)點(diǎn)正常的性能事件值,在線階段跟蹤程序的執(zhí)行,執(zhí)行到檢測(cè)點(diǎn)時(shí),通過比較實(shí)際性能事件值與正常性能事件值判斷是否遭受到攻擊。為了有效檢測(cè)代碼重用攻擊,需要解決以下四方面的問題:
(1) 性能事件的選擇 代碼重用攻擊不會(huì)明顯影響所有的性能事件,為了有效區(qū)分正常程序和異常程序的執(zhí)行,需選擇合適的性能事件。通常實(shí)施代碼重用攻擊,首先會(huì)通過緩存區(qū)溢出劫持控制流,覆蓋程序中原有的局部變量,若變量為分支判定條件,則會(huì)使程序偏離原有的執(zhí)行路徑,從而影響程序中采取的條件分支指令數(shù)BTAKEN。又因?yàn)榇a重用攻擊的shellcode是由連續(xù)的以返回指令、跳轉(zhuǎn)指令或分支指令結(jié)尾的短指令片段組成,在完成惡意操作之前,無(wú)條件跳轉(zhuǎn)的指令數(shù)JUMP和分支指令數(shù)BRANCH會(huì)明顯增加。此外,由于代碼重用攻擊的配件分散在整個(gè)內(nèi)存空間,不具備空間局部性,分支預(yù)測(cè)的成功率大大降低。因此,本文還選取等待取指的時(shí)鐘周期數(shù)IMISS來(lái)檢測(cè)代碼重用攻擊。
(2) 收集性能事件值的粒度 性能計(jì)數(shù)器在實(shí)際運(yùn)用中,即使沒有被攻擊,執(zhí)行相同代碼也會(huì)出現(xiàn)不同的性能計(jì)數(shù)值,這是由于各個(gè)性能事件發(fā)生的次數(shù)會(huì)受多種不確定因素的影響,例如程序被加載到內(nèi)存不同的位置執(zhí)行,程序中產(chǎn)生了隨機(jī)數(shù)或計(jì)數(shù)過程中產(chǎn)生噪聲,都會(huì)造成計(jì)數(shù)結(jié)果的不同。
代碼重用攻擊的shellcode通常由100多條指令組成,對(duì)性能事件值的影響通常集中在完成惡意操作前,因此將整個(gè)應(yīng)用程序作為計(jì)數(shù)單位,產(chǎn)生的誤差較大。同一函數(shù)內(nèi)的指令種類差異較小,性能事件值變化較小,如果受到攻擊,將會(huì)產(chǎn)生明顯差異,因此本文以函數(shù)粒度收集性能事件值。
(3) 觸發(fā)檢測(cè)的時(shí)機(jī) 如果在每次調(diào)用函數(shù)前都執(zhí)行檢測(cè),則檢測(cè)效率低。通過研究發(fā)現(xiàn),無(wú)論是哪種代碼重用攻擊,最終都要利用操作系統(tǒng)提供的執(zhí)行命令、訪問文件和網(wǎng)絡(luò)通信等功能,才能達(dá)到控制系統(tǒng)或竊取敏感信息的目的。本文將系統(tǒng)調(diào)用前的一個(gè)函數(shù)作為敏感函數(shù)進(jìn)行檢測(cè),定義敏感函數(shù)集并監(jiān)控程序的執(zhí)行,在調(diào)用系統(tǒng)函數(shù)前,檢測(cè)性能事件值是否存在異常。
(4) 檢測(cè)閾值的確定 如上所述,性能事件值會(huì)受到多種干擾因素的影響,并不是一個(gè)確定值,需要通過統(tǒng)計(jì)分析,確定性能計(jì)數(shù)值的正常范圍,在正常范圍之外的計(jì)數(shù)結(jié)果視為系統(tǒng)遭受攻擊。本文借助“盒須圖”統(tǒng)計(jì)模型來(lái)確定檢測(cè)閾值。
面向代碼重用攻擊檢測(cè)的安全調(diào)試架構(gòu)以O(shè)SD為基礎(chǔ)設(shè)計(jì)得到,但不代表本設(shè)計(jì)適用范圍局限,大多數(shù)調(diào)試規(guī)范都具備與OSD一樣的功能,本設(shè)計(jì)同樣適用于其他調(diào)試規(guī)范。此外,開源調(diào)試規(guī)范OSD功能全面,與現(xiàn)有的商用調(diào)試規(guī)范相比,具有強(qiáng)大的市場(chǎng)競(jìng)爭(zhēng)力,未來(lái)OSD會(huì)得到廣泛使用,本文研究增強(qiáng)了OSD的功能,研究具有前瞻性,未來(lái)用戶可根據(jù)需要在OSD中添加檢測(cè)代碼重用攻擊的組件。同時(shí),本文選擇的PULPino SoC具備嵌入式設(shè)備的典型特征,PULPino結(jié)構(gòu)簡(jiǎn)單,其性能計(jì)數(shù)器跟蹤的事件類型,大多數(shù)嵌入式設(shè)備都能夠跟蹤。因此本文利用性能計(jì)數(shù)器執(zhí)行檢測(cè)的方案也適用于其他設(shè)備。
圖3為安全調(diào)試架構(gòu)的總體架構(gòu),圖左側(cè)為被測(cè)SoC系統(tǒng)。本文在原有OSD基礎(chǔ)調(diào)試架構(gòu)中添加了ATM(AXI Trace Module)和TDMCU(Trace Detecting Micro Controller Unit),如圖3陰影部分所示。在對(duì)OSD的研究過程中,發(fā)現(xiàn)沒有跟蹤總線的調(diào)試模塊。片上系統(tǒng)訪存操作都需要訪問總線,通過ATM引出的總線信號(hào),可以檢測(cè)到非授權(quán)訪問,用于防御代碼重用攻擊的部署。TDMCU用于跟蹤檢測(cè)敏感函數(shù)的性能事件值是否異常,可用于檢測(cè)代碼重用攻擊的實(shí)施。
圖3 安全調(diào)試架構(gòu)總體架構(gòu)
代碼重用攻擊者能夠利用內(nèi)存泄漏,從內(nèi)存中查找和定位用于構(gòu)建攻擊的短指令片段。內(nèi)存中數(shù)據(jù)和指令具有極大的關(guān)聯(lián)性,真正控制指令執(zhí)行的還是數(shù)據(jù),攻擊者利用程序漏洞對(duì)控制轉(zhuǎn)移指令的目標(biāo)地址和條件分支指令的條件進(jìn)行篡改,使程序不按照原始路徑執(zhí)行。
在攻擊模型假設(shè)中已分析到,攻擊者能夠注入數(shù)據(jù)的地方只能是普通數(shù)據(jù)段和地址段,但是由于普通數(shù)據(jù)段和地址段在內(nèi)存中存儲(chǔ)的方式?jīng)]有差別,空間上沒有分離,這就給攻擊者篡改的機(jī)會(huì),導(dǎo)致代碼重用攻擊的發(fā)生。內(nèi)存訪問控制能夠防止越界訪存,有效防御了代碼重用攻擊。執(zhí)行內(nèi)存訪問控制需要從總線中提取訪存信號(hào),ATM為跟蹤AXI總線上的信號(hào)提供了接口,為執(zhí)行內(nèi)存訪問控制提供了便利。如圖4所示為ATM、AXI總線和內(nèi)存訪問控制模塊三者之間的關(guān)系,ATM能夠?qū)XI總線上的信號(hào)進(jìn)行行為分析,判斷當(dāng)前訪問的讀或?qū)懶袨椋⒏櫟降目偩€信息以數(shù)據(jù)包的形式發(fā)送到Debug接口,內(nèi)存訪問控制模塊從Debug接口接收信息,并執(zhí)行邊界檢查,一旦發(fā)現(xiàn)越界訪存,利用調(diào)試接口中的BREAK功能立即停止設(shè)備的運(yùn)行。本文重點(diǎn)研究檢測(cè)代碼重用攻擊,因此不對(duì)內(nèi)存訪問控制模塊進(jìn)行介紹。
圖4 ATM、AXI總線和內(nèi)存訪問控制模塊的關(guān)系
調(diào)試架構(gòu)中的組件能夠從片上系統(tǒng)內(nèi)部提取用于執(zhí)行檢測(cè)策略的內(nèi)部信號(hào),性能計(jì)數(shù)器能夠跟蹤記錄程序執(zhí)行過程中各個(gè)事件類型發(fā)生的次數(shù)。安全調(diào)試架構(gòu)的工作原理是:在系統(tǒng)功能模式下,利用調(diào)試架構(gòu)在程序運(yùn)行過程中的特定時(shí)機(jī)獲取性能事件值,將實(shí)時(shí)獲取的性能事件值與離線分析正常的參照性能事件值進(jìn)行比較,從而達(dá)到檢測(cè)攻擊的目的。TDMCU作為安全調(diào)試架構(gòu)的核心,控制整個(gè)檢測(cè)過程的進(jìn)行,其主要功能包括:
(1) TDMCU與被測(cè)系統(tǒng)通信,通過配置OSD中的CTM,TDMCU能夠從CTM接收跟蹤數(shù)據(jù)包,跟蹤程序中函數(shù)的執(zhí)行,當(dāng)發(fā)現(xiàn)執(zhí)行到敏感函數(shù)入口時(shí),TDMCU通過配置OSD中的CDM復(fù)位CPU的性能計(jì)數(shù)器,該過程需要掛起CPU。然后解除CPU掛起,繼續(xù)執(zhí)行程序,性能計(jì)數(shù)器開始計(jì)數(shù)。
(2) TDMCU跟蹤函數(shù)的執(zhí)行,當(dāng)發(fā)現(xiàn)執(zhí)行到敏感函數(shù)出口時(shí),控制CDM掛起CPU,并讀取性能計(jì)數(shù)器的值。
(3) 將讀取的性能事件值與預(yù)存的性能事件值進(jìn)行比較,如果滿足閾值要求,則解除CPU掛起,繼續(xù)執(zhí)行程序;如果不滿足閾值要求,配置OSD產(chǎn)生BREAK停止設(shè)備的運(yùn)行。
本文設(shè)計(jì)充分利用了調(diào)試架構(gòu)的跟蹤、訪存、通信和BREAK等功能,通過TDMCU的控制,在不修改處理器和不插樁的前提下,完成對(duì)運(yùn)行在系統(tǒng)上程序的代碼重用攻擊檢測(cè)。OSD的調(diào)試接口中包含一個(gè)FIFO存儲(chǔ)器,在TDMCU讀取跟蹤信息之前,F(xiàn)IFO能夠緩存跟蹤信息。如果沒有足夠快地讀取信息,F(xiàn)IFO會(huì)被填滿,導(dǎo)致跟蹤信息的丟失。雖然OSD能夠?qū)G失的數(shù)據(jù)包進(jìn)行計(jì)數(shù),當(dāng)能夠再次傳輸數(shù)據(jù)時(shí),發(fā)送代表溢出的數(shù)據(jù)包,但是包中不含有跟蹤信息,無(wú)法進(jìn)行檢測(cè)。TDMCU從FIFO提取跟蹤數(shù)據(jù)包的速率受到被測(cè)系統(tǒng)執(zhí)行函數(shù)的速率、FIFO存儲(chǔ)深度和調(diào)試接口位寬等因素的影響。為了分析跟蹤丟失的情況,定義以下變量:
Rb:被測(cè)系統(tǒng)執(zhí)行函數(shù)的最大速率。這取決于被測(cè)系統(tǒng)上運(yùn)行的程序和被測(cè)系統(tǒng)中處理器的工作頻率。
B:調(diào)試接口的位寬。OSD調(diào)試接口的位寬為16位,所以稱OSD的調(diào)試字為16位。TDMCU能夠通過調(diào)試接口從FIFO中提取數(shù)據(jù)。
Re:TDMCU從FIFO提取跟蹤信息的最大速率。
Rp:TDMCU處理跟蹤信息的平均速率。TDMCU的功能包括復(fù)位性能計(jì)數(shù)器和讀取比較性能事件值,因此Rp被定義為平均速率,Rp取決于TDMCU的工作頻率和采用的檢測(cè)方法,例如需要比較的性能事件值個(gè)數(shù),個(gè)數(shù)越多,速率越小。
定義TDMCU工作的最大速率為Rf=min(Re×B,Rp)。即TDMCU的工作速率受提取速率和處理速率的限制。綜上可得,分支丟失速率Rdrop存在式(1)的關(guān)系。當(dāng)Rf>Rb時(shí),不會(huì)產(chǎn)生跟蹤丟失的情況;其他情況時(shí),Rdrop與Rb呈線性關(guān)系。為了防止跟蹤丟失,Rf應(yīng)大于Rb,Rf中的B為固定值,所以應(yīng)提高Re和Rp,即TDMCU的工作頻率應(yīng)大于處理器的時(shí)鐘頻率。
(1)
實(shí)驗(yàn)的硬件平臺(tái)為Zedboard開發(fā)板,在開發(fā)板FPGA部分搭建了如圖3所示的硬件結(jié)構(gòu),整個(gè)硬件系統(tǒng)包括PULPino和安全調(diào)試架構(gòu),PULPino為32位系統(tǒng)。安全調(diào)試架構(gòu)中的ATM和TDMCU采用Verilog硬件描述語(yǔ)言編寫,TDMCU位寬為32位。實(shí)驗(yàn)的軟件部分為FreeRToS實(shí)時(shí)操作系統(tǒng)。系統(tǒng)選用C Tuning套件中的程序作為測(cè)試?yán)蘙24],并利用測(cè)試?yán)讨械拇a構(gòu)建代碼重用攻擊,在實(shí)驗(yàn)平臺(tái)上執(zhí)行正常測(cè)試?yán)毯桶舻睦?,?yàn)證設(shè)計(jì)的功能。
實(shí)驗(yàn)結(jié)果顯示,安全調(diào)試架構(gòu)能夠檢測(cè)到模擬構(gòu)建的多種代碼重用攻擊,達(dá)到設(shè)計(jì)預(yù)期的功能。在65 nm工藝庫(kù)下,使用Design Compiler綜合工具對(duì)PULPino中的CPU、安全調(diào)試架構(gòu)中的ATM和TDMCU進(jìn)行了綜合分析,其等效門數(shù)和頻率結(jié)果如表2所示。由表可見ATM和TDMCU等效門總數(shù)比CPU小,因此當(dāng)ATM和TDMCU被添加進(jìn)整個(gè)SoC時(shí),產(chǎn)生的資源開銷在可接受的范圍之內(nèi)。由于本文選擇了4個(gè)性能事件進(jìn)行檢測(cè),所以復(fù)位性能計(jì)數(shù)器會(huì)使被測(cè)系統(tǒng)產(chǎn)生6個(gè)時(shí)鐘周期的延遲。TDMCU的工作頻率是被測(cè)系統(tǒng)工作頻率的兩倍多,不會(huì)出現(xiàn)跟蹤丟失的情況,確保每個(gè)敏感函數(shù)都能夠得到檢測(cè)驗(yàn)證,但是檢測(cè)性能事件值會(huì)使被測(cè)系統(tǒng)產(chǎn)生8個(gè)時(shí)鐘周期的延遲。雖然本設(shè)計(jì)會(huì)產(chǎn)生延遲,但是相對(duì)于利用軟件工具對(duì)程序插樁來(lái)檢測(cè)代碼重用攻擊所花費(fèi)的時(shí)間,本設(shè)計(jì)能夠節(jié)省較高的檢測(cè)和開發(fā)成本。
表2 ASIC綜合結(jié)果
為了驗(yàn)證代碼重用攻擊對(duì)選擇的性能事件影響較大,而對(duì)其他事件影響較小,還進(jìn)行了對(duì)比實(shí)驗(yàn)。圖5為執(zhí)行正常例程和包含代碼重用攻擊的例程收集到的性能事件值,結(jié)果以盒須圖表示。BTANEN和BRANCH為本文選擇的性能事件值,CYC和LD為隨機(jī)選擇的其他事件。盒須圖的縱坐標(biāo)為性能事件值,橫坐標(biāo)包含樣本“1”和 “2”。樣本“1”表示執(zhí)行正常例程時(shí)收集的性能事件值,樣本“2”表示執(zhí)行包含代碼重用攻擊的例程時(shí)收集的性能事件值。由圖可見,本文選擇的性能事件值能夠明顯區(qū)分正常例程和包含攻擊例程的執(zhí)行狀況,而對(duì)于隨機(jī)選擇的性能事件,在執(zhí)行正常例程和包含攻擊的例程時(shí),計(jì)數(shù)結(jié)果有重疊的區(qū)域,因此不能夠用來(lái)區(qū)分程序的執(zhí)行狀況。
圖5 代碼重用攻擊對(duì)不同性能事件的影響
本文提出了面向代碼重用攻擊檢測(cè)的安全調(diào)試架構(gòu),設(shè)計(jì)了總線跟蹤模塊ATM和檢測(cè)跟蹤微控制單元TDMCU,研究了基于性能計(jì)數(shù)器的函數(shù)級(jí)代碼重用攻擊檢測(cè)方法,包括離線收集正常的性能事件值。通過配置TDMCU,在運(yùn)行過程中自動(dòng)檢測(cè)程序是否遭受代碼重用攻擊,并且無(wú)需修改處理器內(nèi)部邏輯和對(duì)程序進(jìn)行插樁。目前的設(shè)計(jì)僅支持檢測(cè)單核系統(tǒng),下一步計(jì)劃利用通用基礎(chǔ)調(diào)試架構(gòu)中可擴(kuò)展的模塊化屬性,使設(shè)計(jì)的安全調(diào)試架構(gòu)支持多核系統(tǒng)的代碼重用攻擊檢測(cè)。