• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于硬件的動(dòng)態(tài)指令集隨機(jī)化框架的設(shè)計(jì)與實(shí)現(xiàn)

      2017-11-23 01:18:51杜三舒輝康緋
      關(guān)鍵詞:指令集內(nèi)核解密

      杜三,舒輝,康緋

      ?

      基于硬件的動(dòng)態(tài)指令集隨機(jī)化框架的設(shè)計(jì)與實(shí)現(xiàn)

      杜三,舒輝,康緋

      (信息工程大學(xué)數(shù)學(xué)工程與先進(jìn)計(jì)算國家重點(diǎn)實(shí)驗(yàn)室,河南鄭州 450001)

      針對(duì)現(xiàn)有的指令集隨機(jī)化方法存在從代碼段中剝離數(shù)據(jù)困難、靜態(tài)指令集隨機(jī)化密鑰固定和偽隨機(jī)數(shù)密鑰不安全等問題,設(shè)計(jì)并實(shí)現(xiàn)了基于硬件的動(dòng)態(tài)指令集隨機(jī)化框架(HDISR),通過在裝載程序時(shí)加密程序代碼,將指令集隨機(jī)化引入內(nèi)核層和應(yīng)用層的安全防護(hù),內(nèi)核使用單獨(dú)的內(nèi)核密鑰,不同的應(yīng)用程序使用不同的用戶密鑰。實(shí)驗(yàn)結(jié)果表明,HDISR能將代碼注入攻擊降級(jí)為拒絕服務(wù)攻擊,且額外硬件損耗少于2.57%,每兆字節(jié)代碼加密的啟動(dòng)延時(shí)0.31 s。

      代碼注入攻擊;指令集隨機(jī)化;動(dòng)態(tài)指令集隨機(jī)化;內(nèi)核

      1 引言

      常用的網(wǎng)絡(luò)應(yīng)用和操作系統(tǒng)不斷曝光內(nèi)存破壞類漏洞(如緩沖區(qū)溢出、懸空指針、格式字符串等),代碼注入攻擊能夠利用漏洞執(zhí)行惡意代碼,是網(wǎng)絡(luò)空間最常見的安全威脅之一[1]。作為移動(dòng)目標(biāo)防御(MTD,moving target defense)的重要組成部分,指令集隨機(jī)化(ISR,instruction set randomization)對(duì)程序使用的指令集進(jìn)行隨機(jī)化處理,而攻擊者無法得知當(dāng)前使用的指令集,構(gòu)造有效的漏洞利用程序,因此對(duì)代碼注入攻擊有很好的防御效果。

      指令集隨機(jī)化技術(shù)也可以保護(hù)腳本語言,通過隨機(jī)化標(biāo)準(zhǔn)的操作集,使注入的腳本無效,從而抵御SQL注入攻擊[2]和Javscript注入攻擊[3]等威脅。同時(shí),在程序混淆中使用指令集隨機(jī)化可以增加攻擊者逆向分析的難度[4,5],在硬件混淆中使用指令集隨機(jī)化能夠防止供應(yīng)鏈中注入的后門程序執(zhí)行[6]。與地址空間隨機(jī)化(ASLR,address space layout randomization)和數(shù)據(jù)執(zhí)行保護(hù)(DEP,data execution prevention)相比,指令集隨機(jī)化不僅能對(duì)抗代碼注入攻擊,還具有抗逆向能力,可以防止非授權(quán)代碼的執(zhí)行。

      2003年,Kc等[7]首次提出了對(duì)抗代碼注入攻擊的通用方法——指令集隨機(jī)化技術(shù),設(shè)計(jì)了基于Bochs仿真器的X86原型,驗(yàn)證了硬件實(shí)現(xiàn)指令集隨機(jī)化的可行性。Portokalidis等[8,9]提出了支持共享庫和全面防御未授權(quán)代碼執(zhí)行的指令集隨機(jī)化方法,使用不同的密鑰對(duì)不同的程序進(jìn)行隨機(jī)化處理。王奕森等[10]提出了基于編譯置換的指令集隨機(jī)化技術(shù),實(shí)現(xiàn)了操作碼層次的指令集隨機(jī)化,利用該技術(shù)實(shí)現(xiàn)了X86架構(gòu)下Windows系統(tǒng)程序的指令隨機(jī)化。上述基于軟件實(shí)現(xiàn)的指令集隨機(jī)化方法均采用靜態(tài)指令集隨機(jī)化,存在一系列問題,包括指令翻譯性能損耗大、攻擊翻譯軟件可以旁路繞過指令集隨機(jī)化防御、密鑰固定易遭到密鑰猜測(cè)攻擊[11]。

      針對(duì)上述問題,Papadogiannakis等[12]首次提出了動(dòng)態(tài)指令集隨機(jī)化方法,并設(shè)計(jì)了硬件支持的指令集隨機(jī)化系統(tǒng)ASIST,可以為內(nèi)核和用戶程序提供指令集隨機(jī)化支持。Sinha等[13]設(shè)計(jì)了Polyglot系統(tǒng),改進(jìn)了ASIST對(duì)頁共享技術(shù)支持的缺陷。上述基于硬件實(shí)現(xiàn)的指令集隨機(jī)化方法采用了動(dòng)態(tài)指令集隨機(jī)化,在程序崩潰之后使用新的隨機(jī)密鑰重新加密代碼,使已探測(cè)的密鑰值在程序重啟后無效,可以阻止密鑰猜測(cè)攻擊。但上述方法在實(shí)現(xiàn)時(shí)需要修改源碼和鏈接腳本來徹底分離代碼段與數(shù)據(jù)段,而從代碼段中分離數(shù)據(jù)困難;同時(shí)使用了軟件產(chǎn)生的偽隨機(jī)數(shù)密鑰,具有可重現(xiàn)性,如果攻擊者擁有足夠的計(jì)算能力, 可以破解偽隨機(jī)數(shù)加密,從而危及整個(gè)密碼應(yīng)用的安全[14,15]。

      針對(duì)現(xiàn)有方法的缺陷,本文提出了基于編譯結(jié)果比較的代碼區(qū)域信息生成方法,解決了從代碼段中分離數(shù)據(jù)困難的問題;提出了基于代碼區(qū)域信息的動(dòng)態(tài)指令集隨機(jī)化技術(shù),解決了靜態(tài)指令集隨機(jī)化密鑰固定的問題;在CPU中實(shí)現(xiàn)真隨機(jī)數(shù)密鑰生成,解決了軟件生成的偽隨機(jī)數(shù)密鑰安全性不高的問題;最后設(shè)計(jì)了基于硬件的動(dòng)態(tài)指令集隨機(jī)化框架(HDISR,hardware-based dynamic instruction set randomization),實(shí)現(xiàn)了內(nèi)核動(dòng)態(tài)指令集隨機(jī)化與多密鑰的應(yīng)用程序動(dòng)態(tài)指令集隨機(jī)化。

      2 HDISR總體框架

      HDISR總體框架如圖1所示,在CPU中增加了真隨機(jī)數(shù)密鑰生成模塊與指令翻譯模塊,前者產(chǎn)生內(nèi)核密鑰與用戶密鑰,后者選擇密鑰,解密讀入的指令;編譯器支持模塊通過基于編譯結(jié)果比較的代碼區(qū)域信息生成方法得到程序代碼段中指令的具體位置信息——代碼區(qū)域信息,與加密密鑰、選用的指令集隨機(jī)化方法(靜態(tài)指令集隨機(jī)化或者動(dòng)態(tài)指令集隨機(jī)化)組成特征信息,為內(nèi)核與應(yīng)用程序的指令集隨機(jī)化提供支持;在內(nèi)核啟動(dòng)與應(yīng)用程序裝載時(shí),根據(jù)編譯器提供的代碼區(qū)域信息,使用基于代碼區(qū)域信息的動(dòng)態(tài)指令集隨機(jī)化方法,加密內(nèi)核與應(yīng)用程序的代碼;引導(dǎo)程序在內(nèi)核加載到內(nèi)存后,根據(jù)內(nèi)核特征信息加密內(nèi)核代碼,同時(shí)切換CPU執(zhí)行模式為解密模式,實(shí)現(xiàn)內(nèi)核動(dòng)態(tài)指令隨機(jī)化;可執(zhí)行文件加載器裝載可執(zhí)行和可鏈接格式(ELF,executable and linkable format)文件時(shí),使用用戶密鑰加密ELF文件的代碼,在進(jìn)程上下文切換的同時(shí)更新用戶密鑰,實(shí)現(xiàn)多密鑰的應(yīng)用程序動(dòng)態(tài)指令集隨機(jī)化。

      HDISR的工作流程如下:CPU產(chǎn)生真隨機(jī)數(shù)密鑰,編譯器支持模塊生成代碼區(qū)域信息;根據(jù)代碼區(qū)域信息,引導(dǎo)程序使用內(nèi)核密鑰(KernelKey)加密內(nèi)核代碼,內(nèi)核使用用戶密鑰(UserKey)加密ELF文件的代碼;加密后的指令通過CPU中的指令翻譯模塊解密執(zhí)行。通過CPU、編譯器、引導(dǎo)程序、內(nèi)核和應(yīng)用程序的相互配合,HDISR將指令集隨機(jī)化引入內(nèi)核層與應(yīng)用層的安全防護(hù)。

      圖1 HDISR總體框架

      3 指令集隨機(jī)化支持

      3.1 CPU支持模塊

      為了解決軟件實(shí)現(xiàn)指令集隨機(jī)化存在的性能損耗大和軟件生成的偽隨機(jī)密鑰安全性不高等問題,HDISR在CPU上實(shí)現(xiàn)了真隨機(jī)數(shù)密鑰生成和指令翻譯,此外,設(shè)計(jì)了密鑰生成指令、CPU執(zhí)行模式切換指令、讀密鑰指令、寫密鑰指令,為內(nèi)核與應(yīng)用程序的動(dòng)態(tài)指令集隨機(jī)化提供支持。

      3.1.1 真隨機(jī)數(shù)密鑰生成

      指令集隨機(jī)化的安全性依賴于加密密鑰,而軟件生成的隨機(jī)密鑰依賴于初始化的種子,不能產(chǎn)生真隨機(jī)數(shù)。通過隨機(jī)物理現(xiàn)象中獲得隨機(jī)性,可以實(shí)現(xiàn)真隨機(jī)數(shù)發(fā)生器,產(chǎn)生具有不可預(yù)測(cè)性的隨機(jī)序列。本文采用基于振蕩器采樣的真隨機(jī)數(shù)生成方法,設(shè)計(jì)了真隨機(jī)數(shù)密鑰生成模塊,生成供指令集隨機(jī)化使用的密鑰。

      真隨機(jī)數(shù)發(fā)生器原理如圖2所示,利用D觸發(fā)器采樣一個(gè)周期固定的快振蕩器產(chǎn)生隨機(jī)序列。首先使用3個(gè)反相器組成的環(huán)形振蕩器作為噪聲源,產(chǎn)生自然抖動(dòng);然后以CPU的系統(tǒng)頻率作為采樣頻率s,使用D觸發(fā)器對(duì)環(huán)形振蕩器進(jìn)行采樣輸出;接著對(duì)3組環(huán)形振蕩器的采樣結(jié)果進(jìn)行異或,輸出真隨機(jī)數(shù)序列。此真隨機(jī)數(shù)發(fā)生器產(chǎn)生的隨機(jī)數(shù)序列通過了FIPS 140-1 Poker測(cè)試;最后使用有窮狀態(tài)機(jī),將產(chǎn)生的隨機(jī)數(shù)序列循環(huán)存入內(nèi)部寄存器。

      圖2 真隨機(jī)數(shù)發(fā)生器原理

      3.1.2 指令翻譯

      在HDISR框架中,內(nèi)核與應(yīng)用程序的加密指令需要解密后才能正確執(zhí)行。針對(duì)軟件實(shí)現(xiàn)指令翻譯存在性能損耗大和旁路繞過的問題,HDISR在CPU中實(shí)現(xiàn)指令翻譯。在取指令階段與譯碼階段之間加入指令翻譯模塊,對(duì)讀入的指令去隨機(jī)化,將翻譯后的指令送入譯碼階段,保證指令的正常執(zhí)行。

      指令翻譯原理如圖3所示,其中,KernelKey和UserKey由真隨機(jī)數(shù)密鑰生成模塊產(chǎn)生,存放在自定義的內(nèi)部寄存器、內(nèi)核密鑰寄存器與用戶密鑰寄存器。特權(quán)模式(Supervisor)位指示當(dāng)前執(zhí)行指令的特權(quán)模式,為L(zhǎng)inux系統(tǒng)的特權(quán)模式提供支持。根據(jù)Supervisor位判斷指令的特權(quán)模式,從而選擇用戶密鑰或內(nèi)核密鑰作為解密密鑰解密當(dāng)前執(zhí)行的指令。在OpenRisc處理器中,特殊寄存器SR中的SM位作為Supervisor位。當(dāng)SM為1時(shí),表示當(dāng)前執(zhí)行指令處于內(nèi)核模式;當(dāng)SM為0時(shí),表示當(dāng)前執(zhí)行指令處于用戶模式。在取值階段讀入指令后,指令翻譯的處理流程如下。

      圖3 指令翻譯原理

      1) 取出指令后,根據(jù)選擇信號(hào)判斷當(dāng)前指令是否需要解密。

      ①如果不需要,直接執(zhí)行步驟2)。

      ②否則,根據(jù)指令的Supervisor位,選擇解密密鑰。

      a) 如果Supervisor等于0,當(dāng)前指令處于用戶模式,選擇UserKey作為解密密鑰,解密指令。

      b) 否則,當(dāng)前指令處于內(nèi)核模式,選擇KernelKey作為解密密鑰,解密指令。

      2) 送入譯碼階段,保證指令的正常執(zhí)行。

      3.1.3 自定義指令

      在HDISR框架中,為了支持內(nèi)核與應(yīng)用程序的動(dòng)態(tài)指令集隨機(jī)化,CPU增加了4條指令:密鑰生成指令、CPU執(zhí)行模式切換指令、讀密鑰指令以及寫密鑰指令。

      1) 密鑰生成指令:cust8,真隨機(jī)數(shù)密鑰生成模塊產(chǎn)生32 bit真隨機(jī)數(shù),存入相應(yīng)的密鑰寄存器。=0時(shí),生成用戶密鑰,存到用戶密鑰寄存器;=1時(shí),生成內(nèi)核密鑰,存到內(nèi)核密鑰寄存器。

      2) CPU執(zhí)行模式切換指令:cust7,使能選擇信號(hào)從而啟動(dòng)指令翻譯功能,解密后的指令送入譯碼階段。

      3) 讀密鑰指令:cust6 rD,,讀取密鑰寄存器,存入通用寄存器rD。=0時(shí),讀取用戶密鑰寄存器;=1時(shí),讀取內(nèi)核密鑰寄存器。

      4) 寫密鑰指令:cust5 rD,,將rD寄存器中的值寫入密鑰寄存器。=0時(shí),寫入用戶密鑰寄存器;=1時(shí),寫入內(nèi)核密鑰寄存器。

      3.2 編譯器支持模塊

      現(xiàn)有的指令集隨機(jī)化方法假設(shè)代碼段與數(shù)據(jù)段是嚴(yán)格區(qū)分的,但是代碼段中可能夾雜數(shù)據(jù),限制了此類方法的通用性。通過分析編譯器的匯編過程,HDISR提出了通用的靜態(tài)指令集隨機(jī)化生成方法和基于編譯結(jié)果比較的代碼區(qū)域信息生成方法,為內(nèi)核與應(yīng)用程序的動(dòng)態(tài)指令集隨機(jī)化提供支持。

      3.2.1 靜態(tài)指令集隨機(jī)化生成

      雖然ELF文件默認(rèn)是將代碼與數(shù)據(jù)分離的,但還是存在代碼中混入數(shù)據(jù)的情況。例如,在內(nèi)嵌匯編代碼中定義數(shù)據(jù)會(huì)使編譯生成的程序代碼段夾雜著數(shù)據(jù)?,F(xiàn)有的靜態(tài)指令集隨機(jī)化方法使用objcopy直接加密可執(zhí)行文件的代碼段,不僅會(huì)加密其中的指令,還會(huì)加密其中夾雜的數(shù)據(jù)。但是代碼段中的數(shù)據(jù)不會(huì)被指令翻譯模塊解密,會(huì)導(dǎo)致程序執(zhí)行異常。

      在編譯過程中,匯編器將指令翻譯為對(duì)應(yīng)的機(jī)器碼。通過跟蹤機(jī)器碼生成過程,可以在產(chǎn)生指令機(jī)器碼的同時(shí)加密機(jī)器碼,生成靜態(tài)加密的可執(zhí)行文件。在gcc編譯器中,as程序作為匯編器將匯編文件翻譯成目標(biāo)文件。分析as的處理流程之后發(fā)現(xiàn),指令匯編處理函數(shù)md_assemble()實(shí)現(xiàn)了每條指令的匯編。HDISR通過劫持指令的匯編過程,在指令翻譯為機(jī)器碼后使用指定的密鑰對(duì)指令的機(jī)器碼加密,可以生成靜態(tài)指令集隨機(jī)化的ELF文件。因此,在匯編過程中只會(huì)對(duì)指令的機(jī)器碼加密,而不會(huì)對(duì)代碼段中的數(shù)據(jù)加密,避免了整個(gè)代碼段加密引起的數(shù)據(jù)加密問題。

      3.2.2 代碼區(qū)域信息生成

      為了解決從代碼段中剝離數(shù)據(jù)困難的問題,HDISR提出了基于編譯結(jié)果比較的代碼區(qū)域信息生成方法,為動(dòng)態(tài)指令集隨機(jī)化提供準(zhǔn)確的代碼位置信息,具有更好的通用性。本文定義了代碼區(qū)域信息來描述ELF文件中指令的具體位置,考慮到代碼段中夾雜著數(shù)據(jù),指令區(qū)域是不連續(xù)的,因此定義代碼區(qū)域信息數(shù)據(jù)結(jié)構(gòu)如下。

      typedef struct codelayout_info

      {

      uint32;

      vector < uint32, uint32>; //,

      }

      其中,為代碼段中指令區(qū)域塊的總數(shù),為指令區(qū)域塊的文件偏移,為指令區(qū)域塊的大小。指令區(qū)域塊集合以和為元組組成,元組的個(gè)數(shù)為。

      在靜態(tài)指令集隨機(jī)化生成的ELF文件中,代碼段中只有指令是加密的。通過比較原始的ELF文件和靜態(tài)指令集隨機(jī)化生成的ELF文件,根據(jù)代碼段中的內(nèi)容加密與否判斷是指令還是數(shù)據(jù),再聚合代碼段中的指令位置得到代碼區(qū)域信息。ELF文件的代碼區(qū)域信息生成算法描述如下。

      算法1 代碼區(qū)域信息生成算法

      輸入 原始的ELF文件、靜態(tài)指令集隨機(jī)化生成的ELF文件、加密密鑰

      輸出 ELF文件的代碼區(qū)域信息

      1) 解析靜態(tài)指令集隨機(jī)化生成ELF文件,得到可執(zhí)行屬性節(jié)的節(jié)偏移與大小。

      2) 根據(jù)節(jié)偏移與大小,遍歷代碼段中的指令。

      3) 利用加密密鑰,解密靜態(tài)指令集隨機(jī)化生成的ELF文件中指令的機(jī)器碼。

      4) 判斷解密后的機(jī)器碼與原始ELF文件對(duì)應(yīng)位置的指令機(jī)器碼是否相等;如果相等,遍歷ELF文件的代碼區(qū)域信息,判斷是否存在指令區(qū)域塊,使當(dāng)前指令位置在指令區(qū)域塊的尾部。

      ①如果存在,則將此指令區(qū)域塊的加上當(dāng)前指令的大小。

      ②否則,建立新的指令區(qū)域塊元組<,>,將指令偏移存入,指令大小存入。

      代碼區(qū)域信息生成算法同時(shí)也適用于內(nèi)核映像。內(nèi)核映像通過ELF文件vmlinux生成,使用算法1可以得到vmlinux的代碼區(qū)域信息,再根據(jù)vmlinux與內(nèi)核映像的對(duì)應(yīng)關(guān)系,得到內(nèi)核映像的代碼區(qū)域信息。

      3.2.3 特征信息描述

      為了對(duì)內(nèi)核與應(yīng)用程序的指令集隨機(jī)化提供支持,定義了特征信息數(shù)據(jù)結(jié)構(gòu),將代碼區(qū)域信息、密鑰與指令集隨機(jī)化的模式作為文件的特征。其中,字段標(biāo)識(shí)文件采用的指令集隨機(jī)化方法(靜態(tài)指令集隨機(jī)化或動(dòng)態(tài)指令集隨機(jī)化);字段存放文件使用的密鑰;和表示文件的代碼區(qū)域信息,其具體含義與codelayout_info中一致。特征信息數(shù)據(jù)結(jié)構(gòu)定義如下。

      typedef struct feature_info

      {

      uint32;

      uint32;

      uint32;

      vector < uint32, uint32 >; //,

      }

      4 內(nèi)核動(dòng)態(tài)指令集隨機(jī)化

      HDISR設(shè)計(jì)了基于代碼區(qū)域信息的內(nèi)核動(dòng)態(tài)指令集隨機(jī)化方法,使用內(nèi)核密鑰加密內(nèi)核代碼,將指令集隨機(jī)化引入內(nèi)核層的安全防護(hù)。本文通過修改引導(dǎo)程序加載內(nèi)核的過程與指令操作碼判斷的處理流程,實(shí)現(xiàn)了內(nèi)核指令集隨機(jī)化。

      4.1 引導(dǎo)程序

      引導(dǎo)程序在內(nèi)核代碼加載完成后,會(huì)將控制權(quán)轉(zhuǎn)交給內(nèi)核執(zhí)行。通過修改引導(dǎo)程序啟動(dòng)內(nèi)核的流程,在內(nèi)核映像加載到內(nèi)存之后,根據(jù)內(nèi)核代碼區(qū)域信息,使用內(nèi)核密鑰加密內(nèi)核代碼;在跳轉(zhuǎn)到內(nèi)核執(zhí)行前,切換CPU執(zhí)行模式為解密模式,保證加密的內(nèi)核指令能在CPU中解密執(zhí)行。嵌入式系統(tǒng)常使用Uboot作為引導(dǎo)程序,下面以Uboot引導(dǎo)加載uImage的過程介紹內(nèi)核指令集隨機(jī)化的啟動(dòng)過程。

      4.1.1 內(nèi)核代碼加密

      內(nèi)核映像的代碼段中夾雜著數(shù)據(jù),不能直接加密整個(gè)代碼段。在HDISR框架中,通過基于編譯結(jié)果比較代碼區(qū)域信息生成方法得到內(nèi)核的代碼區(qū)域信息,再使用硬件生成的內(nèi)核密鑰對(duì)內(nèi)核的代碼區(qū)域加密,解決了對(duì)整個(gè)代碼段加密引起的數(shù)據(jù)加密問題。引導(dǎo)程序加載內(nèi)核時(shí)通過隨機(jī)產(chǎn)生的內(nèi)核密鑰對(duì)內(nèi)核代碼重新加密,實(shí)現(xiàn)了動(dòng)態(tài)指令集隨機(jī)化。

      分析Uboot引導(dǎo)啟動(dòng)過程之后發(fā)現(xiàn),函數(shù)do_bootm()實(shí)現(xiàn)內(nèi)核映像的加載。通過劫持do_bootm()函數(shù),加密內(nèi)核的代碼區(qū)域。內(nèi)核指令集隨機(jī)化的啟動(dòng)過程如圖4所示,通過環(huán)境變量指向uImage末尾的內(nèi)核特征信息,在映像文件加載到內(nèi)存后解析內(nèi)核特征信息,根據(jù)選擇指令集隨機(jī)化方法。

      如果值為0,表示采用靜態(tài)指令集隨機(jī)化,內(nèi)核映像通過靜態(tài)指令集隨機(jī)化生成方法得到,內(nèi)核代碼已經(jīng)加密,此時(shí)需要通過cust5指令將加密密鑰存入內(nèi)核密鑰寄存器,保證加密代碼與解密執(zhí)行密鑰的一致性。

      圖4 內(nèi)核指令集隨機(jī)化啟動(dòng)過程

      如果值為1,表示采用動(dòng)態(tài)指令集隨機(jī)化,此時(shí)需要根據(jù)代碼區(qū)域信息對(duì)內(nèi)核代碼加密。首先cust8指令生成KernelKey,接著cust6指令取出內(nèi)核密鑰,最后在encrypt_code()函數(shù)中使用KernelKey對(duì)內(nèi)核代碼區(qū)域加密。如果內(nèi)核被壓縮過,則在內(nèi)核正確解壓后再加密內(nèi)核的代碼。

      4.1.2 CPU執(zhí)行模式切換

      內(nèi)核代碼加載完成后,引導(dǎo)程序會(huì)跳轉(zhuǎn)到內(nèi)核代碼執(zhí)行,將控制權(quán)轉(zhuǎn)交給內(nèi)核。在跳轉(zhuǎn)到內(nèi)核代碼執(zhí)行之前,需要切換CPU執(zhí)行模式為解密模式,保證加密的內(nèi)核代碼能在CPU中正常執(zhí)行。分析Uboot之后發(fā)現(xiàn),內(nèi)核啟動(dòng)函數(shù)do_bootm_linux()調(diào)用函數(shù)kernel(),實(shí)現(xiàn)向內(nèi)核跳轉(zhuǎn)執(zhí)行。HDISR需要先使能指令翻譯模塊,再跳轉(zhuǎn)轉(zhuǎn)到內(nèi)核執(zhí)行。cut7指令切換CPU執(zhí)行模式為解密模式,再通過kernel()跳轉(zhuǎn)到內(nèi)核執(zhí)行。

      4.2 指令操作碼

      在內(nèi)核代碼加密之后,不能直接使用原始的指令操作碼來判斷指令類型。此時(shí),HDISR需要先解密隨機(jī)化的指令,再判斷指令的類型,以保證系統(tǒng)的正常運(yùn)行。例如,entry.s中的異常處理_data_page_fault_handler需要取出引發(fā)數(shù)據(jù)缺頁的指令,根據(jù)指令的操作碼判斷是否為跳轉(zhuǎn)指令。此時(shí)不能直接根據(jù)操作碼判斷跳轉(zhuǎn)指令類型,如圖5所示,HDISR會(huì)根據(jù)引發(fā)缺頁的指令的特權(quán)模式,選擇指令的密鑰(內(nèi)核密鑰或用戶密鑰)解密指令,再通過原始指令集的操作碼判斷指令類型。

      圖5 指令操作碼判斷

      5 應(yīng)用程序動(dòng)態(tài)指令集隨機(jī)化

      HDISR設(shè)計(jì)了基于代碼區(qū)域信息的應(yīng)用程序動(dòng)態(tài)指令集隨機(jī)化方法,使用用戶密鑰加密ELF文件的代碼,將動(dòng)態(tài)指令集隨機(jī)化引入應(yīng)用層的安全防護(hù)。此外,在進(jìn)程上下文切換的同時(shí)切換進(jìn)程密鑰,實(shí)現(xiàn)了多密鑰的應(yīng)用程序動(dòng)態(tài)指令集隨機(jī)化。

      5.1 ELF文件格式

      為支持基于代碼區(qū)域信息的動(dòng)態(tài)指令集隨機(jī)化,HDISR修改了ELF文件的格式,如圖6所示,在ELF文件中新增一節(jié),存放ELF文件的特征信息,包括指令集隨機(jī)化模式、密鑰以及代碼區(qū)域信息。指令集隨機(jī)化模式()表示采用的指令集隨機(jī)化方法;密鑰()表示ELF文件使用的加密密鑰;代碼區(qū)域信息提供代碼段中指令的準(zhǔn)確位置信息。

      5.2 ELF文件代碼加密

      在Linux內(nèi)核中,裝載函數(shù)load_elf_binary()只是為可執(zhí)行文件和虛擬地址空間建立映射關(guān)系,并未真地將ELF文件的內(nèi)容讀入內(nèi)存,只有在真正用到時(shí)才會(huì)以頁故障方式讀入內(nèi)存。在HDISR框架中,通過基于編譯結(jié)果比較的代碼區(qū)域信息生成方法得到ELF文件的代碼區(qū)域信息,在裝載ELF文件前使用隨機(jī)生成的用戶密鑰對(duì)ELF文件的代碼區(qū)域加密,確保裝載完成后通過頁故障讀入的代碼是加密的,加密后的指令通過CPU解密執(zhí)行。

      圖6 ELF文件格式修改

      ELF文件的代碼加密流程如圖7所示,首先解析ELF文件,獲取mydata節(jié)的內(nèi)容,然后根據(jù)文件的特征信息數(shù)據(jù)結(jié)構(gòu)解析此節(jié)。如果值為0,表示ELF文件的代碼已經(jīng)加密,實(shí)現(xiàn)靜態(tài)指令集隨機(jī)化;如果值為1,表示需要隨機(jī)生成新的用戶密鑰,重新加密ELF文件的代碼區(qū)域,實(shí)現(xiàn)動(dòng)態(tài)指令集隨機(jī)化。在重新加密ELF文件的代碼時(shí),HDISR先使用ELF文件的解密代碼,再用新生成的用戶密鑰加密代碼,最后用新密鑰更新ELF文件特征信息的,保證ELF文件的加密代碼與密鑰的一致性。

      圖7 ELF文件代碼區(qū)域加密流程

      5.3 進(jìn)程密鑰切換

      為了支持不同的應(yīng)用程序使用不同的密鑰,在進(jìn)程控制塊(PCB,process control block)中增加了存放進(jìn)程密鑰的字段,HDISR在ELF文件裝載時(shí)將加密密鑰存入中。此外,進(jìn)程上下文切換的同時(shí)需要將新進(jìn)程的密鑰寫入用戶密鑰寄存器,保證執(zhí)行代碼與指令翻譯模塊中用戶密鑰的一致性。

      在HDISR框架中,ELF文件的裝載過程如圖8所示,其中已加密的ELF文件A實(shí)現(xiàn)靜態(tài)指令集隨機(jī)化,不需要加密文件A的代碼;未加密的ELF文件B實(shí)現(xiàn)動(dòng)態(tài)指令集隨機(jī)化,使用隨機(jī)生成的用戶密鑰重新加密文件B的代碼。最后在裝載函數(shù)load_elf_binary()中讀取文件特征信息中的加密密鑰,并將其存入PCB的中,保證進(jìn)程密鑰與進(jìn)程代碼的一致性。

      在上下文切換函數(shù)context_switch()調(diào)用switch_to()函數(shù)切換進(jìn)程的寄存器集合的同時(shí),HDISR會(huì)使用cust5指令將新進(jìn)程的存入用戶密鑰寄存器。因此,新進(jìn)程的代碼執(zhí)行時(shí),CPU使用相應(yīng)的用戶密鑰解密代碼。需要注意的是,ELF文件裝載完成后,如果首次調(diào)入執(zhí)行的是此次裝載的進(jìn)程,此時(shí)不會(huì)切換進(jìn)程的上下文和進(jìn)程密鑰,且HDISR會(huì)在load_elf_binary()函數(shù)中將進(jìn)程密鑰寫入用戶密鑰寄存器。

      圖8 ELF文件裝載過程

      6 測(cè)試

      本文選取OR1200處理器與Linux 3.4版本實(shí)現(xiàn)了HDISR框架,OR1200是基于OpenRisc 1000架構(gòu)的32位RISC處理器。加密算法采用32位的異或加密,將修改后的OR1200處理器下載到Xilinix atlys開發(fā)板中的FPGA芯片中,并在開發(fā)板上運(yùn)行支持指令集隨機(jī)化的Linux系統(tǒng)。通過公開的內(nèi)核漏洞與應(yīng)用程序漏洞的攻擊實(shí)驗(yàn),驗(yàn)證了HDISR對(duì)代碼注入攻擊的防御效果。最后選取SPEC測(cè)試集測(cè)試了HDISR的性能損耗,實(shí)驗(yàn)結(jié)果表明,HDISR能夠抵御代碼注入攻擊,而且性能損耗較低。

      6.1 防御效果測(cè)試

      為了驗(yàn)證HDISR對(duì)代碼注入攻擊防御的有效性,本文選擇了表1中的5個(gè)漏洞,其中包括2個(gè)內(nèi)核漏洞和3個(gè)用戶級(jí)緩沖區(qū)溢出漏洞。在原始Linux系統(tǒng)和應(yīng)用程序上測(cè)試,能成功執(zhí)行注入的漏洞利用代碼。在Linux系統(tǒng)和應(yīng)用程序經(jīng)過HDISR保護(hù)后,注入的代碼執(zhí)行失敗,程序異常崩潰。HDISR會(huì)對(duì)Linux系統(tǒng)和應(yīng)用程序使用的指令集進(jìn)行隨機(jī)化處理,而注入的漏洞利用代碼仍然依據(jù)原始指令集生成,執(zhí)行錯(cuò)誤指令集的代碼會(huì)引起非法指令異常,導(dǎo)致程序崩潰。實(shí)驗(yàn)結(jié)果表明,HDISR可以有效地阻止代碼注入攻擊,將代碼注入攻擊降級(jí)為拒絕服務(wù)攻擊,對(duì)現(xiàn)有的內(nèi)核級(jí)別和用戶級(jí)別的遠(yuǎn)程代碼執(zhí)行漏洞具有較好的防御效果。

      表1 HDISR防御代碼注入攻擊的測(cè)試集

      6.2 硬件資源損耗

      本文選取FPGA中的FF寄存器和查找表資源來度量硬件損耗,以原始OR1200處理器綜合后的資源損耗作為基準(zhǔn)計(jì)算HDISR的資源損耗增加的百分比。HDISR額外的硬件損耗如表2所示,額外硬件消耗均低于2.57%,其中FF寄存器資源損耗增加了2.57%,查找表資源損耗增加了1.71%。

      6.3 性能測(cè)試

      選用SPEC CPU2006測(cè)試集[16]來測(cè)試HDSIR的性能損耗,包括運(yùn)行時(shí)性能損耗和啟動(dòng)延時(shí)兩方面。運(yùn)行時(shí)性能損耗來源于指令翻譯和密鑰切換,通過靜態(tài)指令集隨機(jī)化運(yùn)行耗時(shí)來度量。運(yùn)行時(shí)性能損耗的定義如下。

      表2 HDISR額外的硬件損耗

      HDISR加密代碼會(huì)帶來程序的啟動(dòng)延時(shí),延時(shí)與程序的代碼大小有關(guān),通過啟動(dòng)延時(shí)與代碼大小的比值來度量代碼加密效率。加密效率的定義如下。

      HDISR的性能測(cè)試結(jié)果如表3所示,結(jié)果表明,平均運(yùn)行時(shí)性能損耗為0.566%,且所有測(cè)試程序的運(yùn)行時(shí)性能損耗都低于0.9%;程序的啟動(dòng)延時(shí)與二進(jìn)制文件中的可執(zhí)行代碼的大小相關(guān),每兆字節(jié)的代碼加密平均帶來0.31 s的延時(shí)。

      7 結(jié)束語

      本文設(shè)計(jì)并實(shí)現(xiàn)了基于硬件的動(dòng)態(tài)指令集隨機(jī)化框架HDISR,將指令集隨機(jī)化方法引入內(nèi)核層和應(yīng)用層的安全防護(hù),提高了系統(tǒng)安全性。內(nèi)核使用單獨(dú)的內(nèi)核密鑰,同時(shí)每個(gè)應(yīng)用程序都有各自的密鑰,防止單個(gè)密鑰丟失而導(dǎo)致整個(gè)系統(tǒng)的淪陷。HDISR面臨內(nèi)存代碼泄露的威脅,由此降低了加密機(jī)制分析和密鑰猜解難度,下一步將研究限制代碼可執(zhí)行但不可讀的方法以應(yīng)對(duì)內(nèi)存代碼泄露風(fēng)險(xiǎn)。

      表3 SPEC測(cè)試集測(cè)試結(jié)果

      [1] NIST. USA national vulnerability database[EB/OL]. http://web. nvd.nist.gov/view/vuln/statistics.

      [2] CHEN P, WANG J, PAN L, et al. Research and implementation of SQL injection prevention method based on ISR[C]//IEEE International Conference on Computer and Communications. 2017: 1153-1156.

      [3] BARUA A, ZULKERNINE M, WELDEMARIAM K. Protecting Web browser extensions from JavaScript injection attacks[C]//The International Conference on Engineering of Complex Computer Systems. 2013: 188-197.

      [4] 湯戰(zhàn)勇, 李光輝, 房鼎益, 等. 一種具有指令集隨機(jī)化的代碼虛擬化保護(hù)系統(tǒng)[J]. 華中科技大學(xué)學(xué)報(bào)(自然科學(xué)版), 2016, 44(3): 28-33.

      TANG Z Y, LI G H, FANG D Y, et al. Code virtualized protection system with instruction set randomization[J]. Journal of Huazhong University of Science and Technology (Natural Science Edition), 2016, 44(3): 28-33.

      [5] DANGER J L, GUILLEY S, PRADEN F. Hardware-enforced protection against Software reverse-engineering based on an instruction set encoding[C]//ACM Sigplan on Program Protection and Reverse Engineering Workshop. 2014: 5.

      [6] LIU B, WANG B. Embedded reconfigurable logic for ASIC design obfuscation against supply chain attacks[C]//Design, Automation and Test in Europe Conference and Exhibition. 2014:1-6.

      [7] KC G S, KEROMYTIS A D, PREVELAKIS V. Countering code-injection attacks with instruction-set randomization[C]// ACM Conference on Computer and Communications Security. 2003: 272-280.

      [8] PORTOKALIDIS G, KEROMYTIS A D. Fast and practical instruction-set randomization for commodity systems[C]//Computer Security Applications Conference. 2010:41-48.

      [9] PORTOKALIDIS G, KEROMYTIS A D. Global ISR: toward a comprehensive defense against unauthorized code execution[M]// Moving Target Defense. New York: Springer, 2011: 49-76.

      [10] 王奕森, 舒輝, 謝耀濱, 等. 基于指令集隨機(jī)化的代碼注入型攻擊防御技術(shù)[J]. 計(jì)算機(jī)應(yīng)用與軟件, 2016, 33(5): 312-316.

      WANG Y S, SHU H, XIE Y B, et al. Defense technology against code-injection attacks based on instruction set randomization[J]. Computer Applications and Software, 2016, 33(5): 312-316.

      [11] SOVAREL A N, EVANS D, PAUL N. Where's the FEEB? the effectiveness of instruction set randomization[C]//USENIX Security Symposium. 2005: 10.

      [12] PAPADOGIANNAKIS A, LOUTSIS L, PAPAEFSTATHIOU V, et al. ASIST: architectural support for instruction set randomization[C]//ACM Sigsac Conference on Computer & Communications Security. 2013: 981-992.

      [13] SINHA K, KEMERLIS V P, SETHUMADHAVAN S. Reviving instruction set randomization[C]//IEEE International Symposium on Hardware Oriented Security and Trust. 2017.

      [14] 歐海文, 趙靜, 于慧紅, 等. 基于振蕩器的真隨機(jī)數(shù)發(fā)生器的研究[J]. 通信技術(shù), 2011, 44(12):153-155. OU H W, ZHAO J, YU H H, et al. Study on oscillator-based truly random number generator[J]. Communications Technology, 2011, 44(12): 153-155.

      [15] 郭弘, 劉鈺, 黨安紅, 等. 物理真隨機(jī)數(shù)發(fā)生器[J]. 科學(xué)通報(bào), 2009(23):3651-3657.

      GUO H, LIU Y, DANG A H, et al. Physical true random number generator[J]. Chinese Science Bulletin, 2009(23): 3651-3657.

      [16] HENNING J L. SPEC CPU2006 benchmark descriptions[J]. ACM Sigarch Computer Architecture News, 2006, 34(4): 1-17.

      Design and implementation of hardware-based dynamic instruction set randomization framework

      DU San, SHU Hui, KANG Fei

      (State Key Laboratory of Mathematical Engineering and Advanced Computing, Information Engineering University, Zhengzhou 450001, China)

      All the existing ISR methods have some defects including stripping data from code segment is hard to accomplish, static ISR has fixed key and pseudo-random key is not secure. To introduce ISR technology into the security protection of kernel layer and application layer, hardware-based dynamic instruction set randomization framework (HDISR) was designed and implemented, in which program code was encrypted at loading time. Kernel encryption uses kernel key and applications encryption uses a different user key per process. The experimental results show that HDISR can degrade code injection attack to Denial of Service attack with less than 2.57% additional hardware and 0.31s startup delay of each megabyte code encryption.

      code injection attack, instruction set randomization, dynamic instruction set randomization, kernel

      TP309.1

      A

      10.11959/j.issn.2096-109x.2017.00216

      杜三(1993-),男,四川射洪人,信息工程大學(xué)碩士生,主要研究方向?yàn)榫W(wǎng)絡(luò)安全與嵌入式系統(tǒng)安全。

      舒輝(1974-),男,江蘇鹽城人,博士,信息工程大學(xué)教授,主要研究方向?yàn)榫W(wǎng)絡(luò)安全、嵌入式系統(tǒng)分析與信息安全。

      康緋(1972-),女,河南周口人,碩士,信息工程大學(xué)教授,主要研究方向?yàn)榫W(wǎng)絡(luò)信息安全。

      2017-09-27;

      2017-10-19。

      杜三,qq13882525704@sina.com

      國家重點(diǎn)研發(fā)計(jì)劃基金資助項(xiàng)目(No.2016YFB08011601)

      The National Key R&D Plan Program of China (No.2016YFB08011601)

      猜你喜歡
      指令集內(nèi)核解密
      解密“熱脹冷縮”
      萬物皆可IP的時(shí)代,我們當(dāng)夯實(shí)的IP內(nèi)核是什么?
      強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
      3DNow指令集被Linux淘汰
      解密“一包三改”
      炫詞解密
      基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計(jì)
      Linux內(nèi)核mmap保護(hù)機(jī)制研究
      實(shí)時(shí)微測(cè)量系統(tǒng)指令集及解析算法
      解密“大調(diào)解”
      香港 | 青海省| 贡山| 张掖市| 余庆县| 东港市| 年辖:市辖区| 伽师县| 日喀则市| 红河县| 虎林市| 姜堰市| 丹棱县| 福海县| 新野县| 葫芦岛市| 濮阳县| 正阳县| 鹿邑县| 玉田县| 综艺| 三台县| 彭州市| 周宁县| 台州市| 独山县| 美姑县| 岳阳县| 宁城县| 广汉市| 集贤县| 包头市| 北辰区| 中山市| 湘乡市| 来宾市| 嘉峪关市| 绥阳县| 辉县市| 宝应县| 武邑县|