国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于返回地址簽名的控制流攻擊檢測方法

2020-12-23 06:30余云飛汪鵬君張躍軍張會紅張海明
關(guān)鍵詞:堆棧攻擊者指令

余云飛, 汪鵬君,2, 張躍軍, 張會紅, 張海明

(1. 寧波大學(xué)電路與系統(tǒng)研究所,浙江 寧波 315211;2. 溫州大學(xué)電氣與電子工程學(xué)院,浙江 溫州 325035)

微電子技術(shù)、物聯(lián)網(wǎng)技術(shù)和大數(shù)據(jù)技術(shù)的發(fā)展,使得嵌入式系統(tǒng)已經(jīng)成為各個領(lǐng)域中不可或缺的角色,其在日常生活、工業(yè)生產(chǎn)、交通運輸、移動支付等領(lǐng)域發(fā)揮越來越重要的作用,然而它們在通過網(wǎng)絡(luò)進行數(shù)據(jù)交換、軟件更新、對話的同時,也為攻擊者提供了攻擊通道。近年來控制流攻擊事件不斷發(fā)生,如 2017 年 5 月,WannaCry 勒索病毒利用 TCP445端口漏洞將系統(tǒng)控制流篡改到惡意代碼處,進而實施了控制流攻擊,造成至少150 個國家和地區(qū)受到攻擊,嚴重影響金融、能源、醫(yī)療等行業(yè)的正常運行。相比于木馬攻擊、旁道攻擊、反向工程等硬件載體攻擊,控制流攻擊具有有效性高、可行性強以及與其他攻擊模式兼容等特性,因此防御控制流攻擊,保障嵌入式系統(tǒng)的安全性已經(jīng)成為當前各領(lǐng)域的迫切需求。

由于控制流攻擊的危害性巨大,許多防御控制流攻擊的方法相繼被提出。文獻[1]提出利用控制流完整性(Control Flow Integrity, CFI)檢測異??刂屏?,通過在每一條分支指令中插入驗證碼,以檢測不合法的控制流變化;文獻[2]提出粗粒度CFI 檢查,使用較少的驗證碼檢查CFI 的合法性,降低了性能開銷;文獻[3]提出一種基本塊級的細粒度CFI 檢查,解決了粗粒度CFI 檢查安全性不高的問題;文獻[4]在分析增強內(nèi)容敏感和字段敏感指針的基礎(chǔ)上,提出細粒度的CFI 檢測方法,保證了操作系統(tǒng)內(nèi)核的完整性;文獻[5]提出了一種新的硬件輔助CFI 框架,該框架使用功能標簽方法和有效標簽的狀態(tài)模型實施細粒度CFI 策略,提高了安全性;文獻[6]采用影子內(nèi)存保存機制備份控制流信息,確保控制流轉(zhuǎn)移的合法性;文獻[7]利用線性加解密方式驗證控制流轉(zhuǎn)移前后的一致性,從而保證控制流的正確性;文獻[8-10]利用硬件電路的安全性實施控制流完整性檢查,達到防御控制流攻擊的目的。上述方法基本上是基于CFI,而CFI 分為粗粒度CFI 和細粒度CFI,粗粒度CFI 是將一組類似或相近類型的目標歸到一起進行檢查,由于檢查粒度不夠細,攻擊者依然可以利用指令配件繞過防御機制實施攻擊,致使安全性降低。而細粒度則是嚴格控制每一個間接轉(zhuǎn)移指令的跳轉(zhuǎn)目標,雖然緩解了粗粒度的安全性局限,但是由于實施細粒度檢查要求嚴格控制每一個間接指令的轉(zhuǎn)移目標,因而引入了過大的性能開銷,而且細粒度CFI 的安全性依賴于所構(gòu)建的控制流圖(Control Flow Graph, CFG)的準確性,但是構(gòu)建十分精確的CFG 是非常困難的,所以依然會造成安全性問題。

鑒于此,控制流攻擊的重要一步就是通過內(nèi)存漏洞修改堆棧中的返回地址進而實施返回動態(tài)庫函數(shù)攻擊(Return_Into_Libc, RIL)、面向返回編程攻擊(Return Oriented Programming, ROP)等類型的控制流攻擊。通過檢測返回地址是否被篡改,以有效檢測控制流攻擊。由于該方法不需要通過線下分析獲取CFG 圖,避免了因控制流圖不完備的漏報問題,進而提高安全性。基于以上分析,本文通過對控制流攻擊原理的研究,提出了一種基于返回地址簽名檢測控制流攻擊的方法。該方法利用MD5 算法[11]的不可逆性,為加密后的壓棧返回地址與出棧返回地址分別生成唯一的簽名值,通過比較壓棧地址簽名值與出棧地址簽名值,達到檢測返回地址有無被修改的目的,保證了控制流跳轉(zhuǎn)目標的合法性。

1 控制流攻擊原理

控制流劫持大部分是通過內(nèi)存漏洞篡改返回地址來達到目的,它是實現(xiàn)RIL、ROP 等類型控制流攻擊的重要手段。攻擊者通過劫持程序的控制流,使程序的運行邏輯違背程序原本的設(shè)計目標,進而控制整個系統(tǒng)行為,產(chǎn)生巨大安全危害。實施控制流攻擊的重要一步就是劫持程序控制流,而劫持控制流主要利用兩種攻擊:堆棧溢出攻擊與格式化字符串攻擊。

1.1 堆棧溢出攻擊

堆棧是一段連續(xù)分配的有限內(nèi)存空間,每當一個函數(shù)調(diào)用發(fā)生時,堆棧將被依次壓入?yún)?shù)、返回地址、基址指針等數(shù)據(jù)。當函數(shù)對已分配的內(nèi)存寫入超出其本身的容量時,就會造成數(shù)據(jù)的溢出,溢出的數(shù)據(jù)可以覆蓋原有數(shù)據(jù)。攻擊者可以利用此溢出篡改堆棧中原有的返回地址,進行控制流劫持,并將其導(dǎo)向惡意代碼shellcode 處,實施控制流攻擊。如圖1所示,攻擊者用起始地址A 覆蓋堆棧中的返回地址,而起始地址A 指向惡意代碼或指令片段,當系統(tǒng)執(zhí)行地址A 處的代碼或指令片段時,控制流攻擊即被實施。

圖 1 堆棧溢出攻擊Fig. 1 Stack overflow attack

1.2 格式化字符串攻擊

格式化字符串漏洞產(chǎn)生的根本原因是未過濾用戶輸入。當輸入數(shù)據(jù)傳遞給某些執(zhí)行格式化操作的函數(shù)時,攻擊者即可利用“%s”和“%x”篡改堆棧的數(shù)據(jù),還可通過“%n”來讀取和寫入任意地址,從而導(dǎo)致任意代碼讀寫。當printf 在輸出格式化字符串時,隨即維護一個內(nèi)部指針,遇到“%”時,printf 期望其后跟隨格式字符串,因此內(nèi)部字符串會遞增以獲取格式控制符的輸入值。然而printf 不確定堆棧上是否放置了正確數(shù)量的變量使其運行,如果沒有正確變量供其操作,而指針繼續(xù)按正常情況下遞增,就會引起越界訪問,甚至可以利用“%n”任意對返回地址讀取和寫入。

2 返回地址簽名法檢測控制流攻擊

通過對控制流攻擊原理的研究與分析,并且針對現(xiàn)有防御手段的不足,本文提出了基于返回地址簽名法檢測控制流攻擊,整體框架如圖2 所示。在返回地址被壓入堆棧后,攻擊者通過堆棧溢出或格式化字符串攻擊篡改堆棧中的返回地址,進行控制流的劫持。為檢測返回地址的合法性,在系統(tǒng)執(zhí)行程序調(diào)用指令call 時,首先利用偽隨機數(shù)發(fā)生器電路產(chǎn)生密鑰K 與壓棧返回地址進行異或操作,將異或后的返回地址作為MD5 算法的輸入值,以此避免簽名算法的輸入值與返回地址直接關(guān)聯(lián)。利用MD5 算法的不可逆性為異或后的壓棧返回地址生成唯一的簽名值并存儲在壓棧簽名寄存器中,然后在系統(tǒng)執(zhí)行程序返回指令ret 時,使用相同方法,為出棧返回地址生成唯一的簽名值,最后將壓棧地址簽名值與出棧地址簽名值送入到地址比較器中,根據(jù)簽名值的比較結(jié)果判斷返回地址有無受到篡改,進而達到檢測控制流攻擊的目的。

圖 2 檢測控制流攻擊整體框圖Fig. 2 Overall block diagram of detecting control flow attacks

2.1 偽隨機數(shù)發(fā)生器

為避免攻擊者使用暴力攻擊或查表法破譯MD5簽名算法而直接獲取正確返回地址,利用線性反饋移位寄存器(Linear Feedback Shift Register, LFSR)電路實現(xiàn)偽隨機數(shù)發(fā)生器[12],產(chǎn)生128 位密鑰K,經(jīng)過Design compiler 綜合,在TSMC 65 nm 工藝下平均功耗為0.527 mW,產(chǎn)生的隨機數(shù)可通過NIST 測試。該隨機數(shù)存儲在專門的密鑰寄存器中且僅限于調(diào)用指令call 與返回指令ret 訪問,其他指令禁止訪問。此密鑰用于返回地址進行異或操作,即使攻擊者通過暴力攻擊獲取正確的MD5 算法輸入值,也不能直接得到正確的返回地址。偽隨機數(shù)發(fā)生器如圖3 所示,由n 個D 觸發(fā)器和若干個異或門組成。其中g(shù)n為反饋系數(shù),取值為0 或1,取0 時表明不存在該反饋回路,取1 時表明存在該反饋回路,n 個D 觸發(fā)器最多可以提供2n-1 個狀態(tài)。

2.2 MD5 簽名算法

為確保生成返回地址簽名值的隨機性和不可逆性,利用MD5 算法的不可逆性為壓棧、出棧的加密返回地址生成唯一的隨機簽名值。MD5 算法是一種典型的消息認證算法,經(jīng)過一系列運算,它可將任意長度的消息壓縮為128 位的摘要。MD5 算法的運算框圖如圖4 所示,具體運算過程如下:

(1)補位。若初始數(shù)據(jù)的長度沒有達到512 的整數(shù)倍,系統(tǒng)將會在消息的低位處用一個1 和若干個0 進行補齊。

(2)初始化緩沖器。MD5 有 4 個 32 位的被稱作鏈接變量的整數(shù)參數(shù)A、B、 C、D, 對其設(shè)置初始數(shù)據(jù)。

(3)非線性輪運算。MD5 算法規(guī)定了4 個非線性操作函數(shù):

其中:&為與;|為或;~為非; ∧ 為異或。利用以上 4 種操作,生成4 個重要的計算函數(shù)。4 個中間變量a、b、c、d,賦值:a=A, b=B, c=C, d=D。接著執(zhí)行 4 輪主循環(huán),每一輪完成16 次運算,每輪用到一個非線性函數(shù),每次操作需要對a、b、c 和 d 中的3 個變量完成一次非線性運算,并更新對應(yīng)的變量數(shù)據(jù)。

(4)數(shù)據(jù)輸出。處理完所有512 位的分組后,得到一組新的 A、B、C、D 的值,將這些值按 A、B、C、D 的順序級聯(lián),得到MD5 簽名值。

2.3 返回地址簽名值計算

根據(jù)上述方案,利用MD5 算法為返回地址生成簽名值,經(jīng)分析得到壓棧返回地址、出棧返回地址簽名值計算公式如下:

圖 3 偽隨機數(shù)發(fā)生器Fig. 3 Pseudo-random number generator

圖 4 MD5 算法框圖Fig. 4 MD5 algorithm block diagram

其中:PRNG_K、push_addr、encry_push_addr、sig_push_addr、pop_addr、encry_pop_addr、sig_pop_addr分別為偽隨機數(shù)電路產(chǎn)生的密鑰、壓棧返回地址、加密后的壓棧返回地址、壓棧地址簽名值、出棧返回地址、加密后的出棧返回地址、出棧地址簽名值。當執(zhí)行程序調(diào)用指令call 時,密鑰K 與壓棧返回地址進行異或操作,然后將異或后的返回地址作為MD5 算法的輸入值,得到壓棧地址的簽名值。同理,當執(zhí)行程序返回指令ret 時,生成出棧簽名值。

3 實驗例證與分析

為了驗證方案的有效性,以oc_8051 處理器為驗證平臺,通過修改oc_8051 處理器的源代碼,在處理器架構(gòu)中加入返回地址簽名模塊,實現(xiàn)處理器具有檢測控制流攻擊功能的目的,并進行波形仿真、簽名值隨機性測試、正確簽名值與錯誤簽名值漢明距離測試以及可用的控制流攻擊指令消除率測試等實驗。實驗環(huán)境包括:Intel Xeon(R) Dual-Core CPU 2.0 GHz、6 GB RAM 服務(wù)器,涉及的工具軟件包括:NClaunch、Matlab、以及 ROPGadget-master5.4。

3.1 檢測控制流攻擊的處理器硬件架構(gòu)

圖5 為將返回地址簽名電路應(yīng)用于oc_8051 處理器的硬件架構(gòu)圖。oc_8051 處理器工作流程分為5 個階段:取指、譯指、執(zhí)行、訪存、寫回。由于返回地址簽名電路的引入,當處理器處于譯指階段且譯指結(jié)果為程序調(diào)用指令call 時,將產(chǎn)生call_en 使能信號,觸發(fā)簽名電路生成壓棧地址簽名值。同理,當譯指結(jié)果為程序返回指令ret 時,處理器產(chǎn)生ret_en 使能信號,觸發(fā)簽名電路生成出棧地址簽名值,最后通過匹配壓棧地址簽名值與出棧地址簽名值達到檢測控制流攻擊的目的。若二者簽名值相匹配,處理器繼續(xù)執(zhí)行程序,反之,則立即停止程序。

3.2 處理器檢測控制流攻擊的工作流程

圖6 示出了具有檢測控制流攻擊功能處理器的工作流程,具體步驟如下:

(1)處理器處于譯指階段且指令譯碼結(jié)果為程序調(diào)用指令call 時,觸發(fā)偽隨機數(shù)發(fā)生器生成密鑰K,并將壓棧返回地址送入XOR 加密單元進行加密處理;

圖 5 檢測控制流攻擊的處理器硬件架構(gòu)圖Fig. 5 Hardware architecture diagram for detecting control flow attacks

圖 6 檢測控制流攻擊的處理器工作流程圖Fig. 6 Flow chart of detecting control flow attacks

(2)將加密后的壓棧返回地址作為MD5 簽名生成單元的輸入值,生成壓棧簽名值;

(3)指令譯碼結(jié)果為程序返回指令ret 時,將出棧返回地址送入XOR 加密單元進行加密處理;

(4)將加密后的出棧返回地址送入MD5 簽名生成單元,生成出棧簽名值;

(5)比較壓棧返回地址的簽名值與出棧返回地址的簽名值,若簽名值相同,則繼續(xù)執(zhí)行,反之立即停止執(zhí)行。

3.3 仿真波形

通過編寫測試激勵testbench,使壓棧地址與出棧地址不同,并使用NClanch 獲得仿真波形,如圖7 所示。其中ADDR_PUSH_R、ADDR_POP_R、PRNG_K、XOR_ADDR_PUSH、XOR_ADDR_POP、SIG_PUSH_R、SIG_POP_R、COMPARE_SIG 分別為壓棧地址寄存器、出棧地址寄存器、隨機數(shù)K 寄存器、加密壓棧返回地址寄存器、加密出棧返回地址寄存器、壓棧返回地址簽名值寄存器、出棧返回地址簽名值寄存器、簽名值比較信號。當出棧地址為0x043b,壓棧地址為0x0438 時,從仿真波形圖中虛線處可發(fā)現(xiàn),二者生成的簽名值不同,簽名值比較信號翻轉(zhuǎn),指示當前返回地址遭到惡意篡改,達到檢測控制流攻擊的目的。

3.4 返回地址簽名值及其相關(guān)性

表1 所示為7 組輸入不同返回地址得到的簽名值,經(jīng)過對簽名值的自相關(guān)性和互相關(guān)性分析,并使用Matlab 獲取簽名值的相關(guān)性分布圖。圖8 為同一組輸出數(shù)據(jù)的自相關(guān)性分布圖,圖9 為7 組不同輸出數(shù)據(jù)的互相關(guān)性分布圖,從圖中可知生成的地址簽名值具有良好的隨機性。

3.5 返回地址簽名值的漢明距離

圖10 所示為本方案假設(shè)表1 中的第一個返回地址為正確的出棧返回地址,其余為錯誤的出棧返回地址,經(jīng)過對其漢明距離的分析,得到正確返回地址與錯誤返回地址的漢明距離。漢明距離是用于表示兩個二進制字符串之間的差異的數(shù)字。設(shè)x 和y 是兩個相同長度的二進制序列,x 和y 之間的漢明距離d(x, y)是相應(yīng)符號不同的位數(shù),計算公式如下:

圖 7 仿真波形圖Fig. 7 Simulation waveform

表 1 返回地址簽名值數(shù)據(jù)輸出Table 1 Return address signature

圖 8 數(shù)據(jù)自相關(guān)性Fig. 8 Data autocorrelation

圖 9 數(shù)據(jù)互相關(guān)性Fig. 9 Data cross-correlation

圖 10 正確與錯誤地址簽名值之間的漢明距離Fig. 10 Hamming distance between correct and wrong signatures

其中,i=0,1,…,n-1。由圖 10 可得,128 位正確返回地址簽名值與錯誤返回地址簽名值之間的漢明距離均達到50%以上,錯誤簽名值與正確簽名值具有較大差異性,攻擊者很難通過對錯誤返回地址簽名值的分析得到返回地址的正確簽名值。

3.6 控制流指令消除率

攻擊者利用處理器在執(zhí)行call 或ret 指令時,對堆棧中的返回地址進行篡改,進而實施控制流攻擊。而由于處理器中引入了返回地址簽名電路,返回地址若受到惡意篡改會被立刻檢測出,因此攻擊者不能利用call 指令或ret 指令進行控制流劫持。使用ROPgadget 獲取控制流指令總數(shù)目并統(tǒng)計call 指令與ret 指令數(shù)目,計算call 指令與ret 指令數(shù)目在控制流指令總數(shù)目中的占比,即可得到控制流指令消除率。表2 示出了5 個不同測試程序下的控制流指令消除率,5 個測試程序中均含有緩沖區(qū)溢出漏洞和格式化字符串攻擊漏洞,攻擊者可利用漏洞進行控制流劫持。結(jié)果顯示攻擊者可利用的控制流指令平均消除率達到81.27%,有效消除了攻擊者可利用的控制流指令。

表 2 控制流指令消除率Table 2 Control flow instructions elimination rate

4 結(jié) 論

本文提出了一種基于返回地址簽名的控制流攻擊檢測方法。該檢測方法首先利用偽隨機數(shù)發(fā)生器產(chǎn)生密鑰K 與返回地址進行異或加密,然后將加密后的返回地址作為MD5 算法的輸入,利用MD5 算法的不可逆性分別為加密后的壓棧返回地址和出棧返回地址生成唯一的簽名值,最后根據(jù)出棧簽名值和壓棧簽名值是否匹配進行控制流合法性的檢測。通過實驗驗證了此方案的有效性,結(jié)果顯示當壓棧地址與出棧地址相異時,處理器可立即檢測出此時控制流不合法。雖然MD5 算法是已有算法且復(fù)雜度不高,然而得到返回地址的簽名值依然具有良好的隨機性,攻擊者可以利用的控制流指令平均消除率達到81.27%,可有效地檢測出因返回地址篡改而引起的控制流攻擊。

猜你喜歡
堆棧攻擊者指令
基于行為監(jiān)測的嵌入式操作系統(tǒng)堆棧溢出測試*
基于貝葉斯博弈的防御資源調(diào)配模型研究
基于 Verilog HDL 的多周期 CPU 設(shè)計與實現(xiàn)
《單一形狀固定循環(huán)指令G90車外圓仿真》教案設(shè)計
正面迎接批判
正面迎接批判
基于堆棧自編碼降維的武器裝備體系效能預(yù)測
一種航天器軟件進程堆棧使用深度的動態(tài)檢測方法
中斷與跳轉(zhuǎn)操作對指令串的影響
MAC指令推動制冷劑行業(yè)發(fā)展
霞浦县| 图木舒克市| 清镇市| 南投市| 凉山| 洛南县| 潞西市| 定南县| 右玉县| 金堂县| 甘孜县| 安顺市| 石景山区| 当涂县| 怀宁县| 莱西市| 辰溪县| 同仁县| 镇沅| 乌审旗| 沿河| 重庆市| 鱼台县| 鹤岗市| 新营市| 汨罗市| 曲沃县| 额济纳旗| 凤城市| 巴塘县| 新绛县| 双柏县| 龙胜| 公安县| 扶风县| 文安县| 齐河县| 龙泉市| 五常市| 唐海县| 巧家县|