?

ARM架構中控制流完整性驗證技術研究

2015-02-20 08:15葉雁秋王震宇趙利軍
計算機工程 2015年3期
關鍵詞:控制流二進制寄存器

葉雁秋,王震宇,趙利軍

(解放軍信息工程大學,鄭州450001)

ARM架構中控制流完整性驗證技術研究

葉雁秋,王震宇,趙利軍

(解放軍信息工程大學,鄭州450001)

通用平臺目標二進制代碼運行時控制流的提取主要依賴于處理器硬件特性,或其動態二進制插樁工具,該平臺的控制流完整性驗證方法無法直接移植到進階精簡指令集機器(ARM)架構中。為此,基于控制流完整性驗證技術,設計一種用于ARM架構,利用緩沖溢出漏洞檢測控制流劫持攻擊的方法。該方法在程序加載時、執行前動態構建合法跳轉地址白名單,在目標二進制代碼動態執行過程中完成控制流完整性驗證,從而檢測非法控制流轉移,并對非法跳轉地址進行分析,實現漏洞的檢測和診斷。在ARM-Linux系統的動態二進制分析平臺上實施測試,結果表明,該方法能夠檢測出漏洞,并精確定位攻擊矢量。

控制流完整性;進階精簡指令集機器架構;合法地址白名單;動態二進制分析;攻擊矢量定位

1 概述

當前多數惡意代碼的攻擊行為大都需劫持并修改系統或二進制代碼的控制流[1]??刂屏魍暾?Control Flow Integrity,CFI)[2]驗證技術在二進制代碼運行時動態監控控制流,判斷是否與源碼設計時控制流屬性一致,用于控制流劫持攻擊的檢測和防御[3]。

文獻[4]通過從源碼或者匯編碼中提取靜態控制流,在編譯器中加入控制流完整性驗證,實現了對惡意改變控制流的攻擊的有效防御。Hypersafe利用控制流完整性驗證方法有效確保了開源虛擬機管理器的可信性[5]。然而,在現實情況中,應用程序的源碼大多都是不公開的或者根本無法獲取的(比如遺留程序),這種情況下靜態時控制流的獲取需要依賴編譯技術,而靜態反編譯技術不能很好地處理代碼加殼、代碼混淆等復雜情況。

CFIMon結合了靜態分析和運行時訓練的方法

來收集合法控制流轉移,然后利用Intel處理器中的Branch Tracing Store(BTS)機制收集程序的實際執行流,最后對控制流完整性進行驗證[6]。文獻[7]基于控制流完整性驗證構建的3種控制流劫持攻擊防御工具在執行運行時控制流完整性監視時也都是利用了通用平臺處理器的硬件特性。這些基于處理器硬件特性的控制流完整性驗證技術由于其平臺相關性,在目標處理器架構(如本文研究的進階精簡指令集機器(Advanced RISC Machine,ARM)架構不具備相應硬件特性時無法發揮其有效性。

Total-CFI是一款在軟件仿真器上通過執行全系統的控制流完整性驗證來檢測漏洞利用的工具。Total-CFI通過構建合法目標跳轉地址的white list作為合法控制流的跳轉目標。Total-CFI在執行控制流完整性驗證的過程同時結合了對目標程序動態執行過程中實際控制流跳轉地址在white-list和對應線程堆棧中的檢測。因此,Total-CFI不僅具有漏洞利用的檢測能力,還能夠對攻擊技術類別、payload等信息進行精確定位,且帶來性能負載不會超過64%[8]。

目前,針對嵌入式架構上控制流完整性驗證方面的研究還比較少。文獻[9]在現場可編程門陣列(Field Programmable Gate Array,FPGA)上實現了控制流完整性驗證技術,但該方法直接將控制流完整性驗證模塊構建在芯片中,該方法的通用性和擴展性都有很大局限性。MoCFI將控制流驗證技術應用在ARM架構中的二進制可執行程序中,但由于對合法控制流的跳轉地址收集上的不完整,導致仍然有一些漏洞利用能夠執行[10]。

本文在對ARM架構與X86架構進行對比研究后,設計并實現一種針對ARM架構的控制流完整性驗證方法,從而對ARM架構中的控制流劫持攻擊進行檢測。通過動態二進制分析檢測ARM系統中的異??刂屏?檢測攻擊行為,此外,通過對攻擊payload進行提取,為后續攻擊行為分析提供基礎。

2 ARM架構子過程調用規約

ARM架構是基于RISC指令集的32位處理器架構,相比于基于CISC指令集的X86架構,ARM架構處理器在寄存器和指令集上有很大差異。相比于X86架構的4個可用數據寄存器和4個指針寄存器,ARM架構中共有37個寄存器,其中,31個為通用寄存器;6個為狀態寄存器。ARM架構中的37個寄存器根據處理器運行模式的不同,能夠使用的寄存器也不同,其中,用戶模式和系統模式使用相同的寄存器[11]。根據ARM子函數調用規則(ARM Procedure Call Standard,AAPCS)[12],在用戶模式和系統模式下,ARM架構中可用寄存器及其用法如表1所示。

表1 子過程調用時的寄存器作用

根據ARM子函數調用的參數傳遞規則:如果形參個數少于4或者等于4,則形參由R0,R1,R2,R3這4個寄存器進行過傳遞,若形參個數大于4,大于4之外的參數必須通過堆棧進行傳遞。

ARM架構中的跳轉指令都被稱之為branch指令,主要有6個,如表2所示。

表2 ARM架構中跳轉指令功能描述

基于以上信息和對ARM指令集的研究,可以得到以下2個結論:

(1)在ARM架構中,在子過程調用出現時,首先執行跳轉指令,進入子過程后,執行指令為對鏈接寄存器(LR寄存器)和棧楨寄存器(R11/FP寄存器)進行保存,其指令類型為PUSH{FP,LR,RX},其中,RX表示其他可能需要保存的通用寄存器,不是必選。非子過程調用的跳轉指令執行后,則不會執行該指令。

(2)在列車動載作用下,管片會產生一定的拉應力和壓應力增量。其中,最大拉應力增量集中在管片標準塊拱腰中部內側和拱底塊端部外側,這些位置在自重應力作用下表現為壓應力;最大壓應力增量集中在管片標準塊拱腰中部外側、拱底塊端部內側及拱頂封頂塊內側,這些位置在自重應力作用下表現為拉應力。因此,在列車動載作用下,隧道管片斷面的拉應力和壓應力水平均存在一定程度的降低。

(2)子過程調用返回時,首先要將進入子過程時保存的返回地址和調用者的棧楨地址恢復到LR寄存器和FP寄存器中,其指令類型為POP{FP,LR, RX},其中,RX表示其他可能需要恢復的寄存器。然后再執行跳轉指令,其指令為BX LR,而非子過程調用的跳轉指令返回時,則不會出現出棧操作。

3 ARM架構中CFI驗證系統整體框架

本文設計的ARM架構中控制流完整性驗證技術的整體框架如圖1所示。其中,主要包含2個模塊,即合法地址白名單、控制流完整性驗證模塊。

圖1 CFI驗證系統總體框架

在目標程序加載之后且運行之前,構建該程序的合法地址白名單,合法地址白名單中包含目標程序中所有控制流轉移的合法目標地址。然后在程序開始執行后,對目標程序的指令序列進行跟蹤解析,將程序中所有控制流轉移指令都交由控制流完整性驗證模塊進行分析,分析結果以診斷報告的形式保存。

4 子模塊實現

2個模塊均運行于ARM-Linux系統全系統動態二進制分析平臺上,該分析平臺提供了對目標系統中事件(如程序加載、程序開始、模塊加載、指令執行等事件)的插樁,并提供對這事件注冊回調函數和提取目標系統內存、寄存器等信息的能力[13]。

4.1 合法地址白名單模塊

4.1.1 合法地址白名單構成

合法地址白名單中的地址主要由二進制文件和共享目標文件(對應Windows系統中的動態鏈接庫文件)中的可重定位表和符號表中的函數符號地址(類似Windows系統中的導出表)構成。出于兼容性的考慮,當前大多數二進制文件都會被編譯為可重定位的,ARM-Linux系統中的二進制文件以及鏈接庫文件都采用ELF格式,這些文件在編譯時默認都會被設置為可重定位。當加載器無法將二進制文件加載到其默認的加載地址時,加載器就會執行重定位操作。加載器會根據重定位表修復重定位表中的所有條目的地址。類似的,符號表中的所有函數符號信息包含了一個給定模塊中可用于被其他模塊調用的函數。這些函數的地址都是在二進制文件運行時根據相應模塊的實際加載地址來確定的。因此,重定位表和模塊的符號表中的所有函數符號條目就構成了一個模塊中的有效跳轉地址。本文通過直接從二進制可執行文件和共享目標文件中提取合法跳轉地址的方式,取代從源碼中構建控制流圖的傳統方式,該方式可以有效解決現實中通常無法獲得所有相關文件(包括可執行文件和共享目標文件)的源碼的情況。

當應用程序被創建時,二進制文件加載會將進程對應的二進制文件加載到內存,開始構建目標進程的虛擬地址空間,這時直接從目標系統物理內存中讀取重定位表和符號表,加入合法地址白名單。另外,ARM-Linux系統中每一個進程都由一個task_ struct數據結構維護,該數據結構中包含進程的虛擬地址劃分。對于進程所有包含的模塊,提取其加載的基地址,然后對該模塊中的重定位表和符號表進行提取,將其與模塊加載基地址合并后的地址信息加入合法地址白名單。直接從目標系統內存或者磁盤中提取數據并分析對目標系統的性能會由較大影響,為了降低這種性能影響,采取了一種優化策略:直接靜態的將目標系統中所有共享目標文件和對應二進制可執行文件提取出來,在本地利用交叉編譯環境提取器重定位表和符號表中函數符號信息,系統加載時,直接將這些信息保存到二進制分析平臺的緩存中,這樣在進程創建時,只需從其task_struct數據結構中提取模塊基地址即可,不用再從內存或者磁盤讀取該模塊中的數據。通過這種減少內存和磁盤數據讀取的操作可以有效降低控制流完整性驗證執行的性能消耗。

4.2 控制流完整性驗證模塊

在ARM架構中執行控制流完整性驗證,首先從目標系統提取進程執行指令流,對所有分支指令(除B imm類型指令外)的目標地址進行驗證,以判斷該地址是否屬于合法跳轉地址。

為了提高對攻擊漏洞利用類型檢測的準確性以及攻擊payload的提取,基于第2節中提到的2個觀察結果以及ARM架構中用于控制流轉移的跳轉指令分析結果,對于LR/FP寄存器進行操作的PUSH/ POP指令對單獨進行控制流完整性驗證。其具體實現如圖2所示。

圖2 控制流完整性的驗證流程

5 實驗測試與性能評估

實現硬件平臺為Macbook Pro MD313筆記本,搭載Intel i5 2.4 GHz處理器、4 GB內存,主機操作系統為Ubuntu 13.10,在主機系統中運行前期研究構建的基于QMEU 1.0的動態二進制分析平臺;仿真環境中,仿真硬件為搭載ARM-926T處理器的開發版,目標操作系統為debian-squeeze,其內核版本為2.6.32。

5.1 實驗測試

為驗證本文中提供的漏洞利用檢測工具的有效性,在上述實驗環境中重構了exploit-db中的2個POC(Proof of Concept)實例。下面分別對2個漏洞利用實例及本文中的檢測工具的結果進行分析。2個漏洞程序的代碼如下:

圖3介紹對2個漏洞程序的利用過程,其中,實現表示程序正常執行時的控制流;虛線表示漏洞利用后程序執行時的控制流。

圖3 2種漏洞程序執行流程

表3給出了漏洞利用檢測插件的診斷報告中的部分信息。從表3中看可以看到,該方法成功的檢測出了漏洞利用類型、漏洞所在函數、攻擊矢量等的詳細信息。

表3 診斷報告中提取的部分信息

5.2 性能評估

通過對加載了本文分析插件的情況和未加載分析插件2種情況,對目標系統中應用程序的啟動速度進行了測試對比,如圖4所示。從圖中可以看出,分析插件對系統性能的負載在20%左右(雖然使用的分析平臺具備對內核代碼進行跟蹤的能力,但本文實驗中對跟蹤的指令地址進行了限定,僅分析目標二進制代碼代碼段的指令,開啟所有指令跟蹤時,負載在1倍左右),相比于通用平臺中,基于PIN, DynamoRIO等動態二進制插樁(Dynamic Binary Instrumentation,DBI)工具構建的分析工具的性能損耗通常都在2倍以上[14],該方法能夠滿足嵌入式ARM架構中對時效性的要求。

圖4 應用程序啟動時間對比

6 結束語

本文基于ARM-Linux系統動態二進制分析平臺,設計并實現ARM架構中的控制流完整性驗證技術。實例驗證了該技術的有效性和精確性。由于構建插件的平臺本身具有全系統分析能力,因此該技術對內核漏洞的檢測同樣有效。另外,通過對比插件加載前后應用程序的響應時間,可以看出,其對系統性能的影響在可接受范圍內,負載問題不會成為瓶頸。然而,該技術雖然能夠檢測ROP攻擊,但無法對ROP攻擊的gadgets模塊進行檢測,今后將針對該問題做進一步優化。

[1]Oh N,Shirvani P P,McCluskey E J.Control-flow Checking by Software Signatures[J].IEEE Transactions on Reliability,2002,51(1):111-122.

[2]Abadi M,Budiu M,Erlingsson U,et al.Control-flow Integrity[C]//Proceedings of the 12th ACM Conference on Computer and Communications Security.[S.l.]: ACM Press,2005:340-353.

[3]Abadi M,Budiu M,Erlingsson U,et al.Control-flow IntegrityPrinciples,Implementations,andApplications[J].ACM Transactions on Information and System Security,2009,13(1):41-54.

[4]Diatchki I,Pike L,Erkok L.Practical Considerations in Control-flow Integrity Monitoring[C]//Proceedings of the 4th IEEE International Conference on Software Testing,VerificationandValidationWorkshops.[S.l.]:IEEE Press,2011:537-544.

[5]Wang Zhi,JiangXuxian.Hypersafe:ALightweight Approach to Provide Lifetime Hypervisor Control-flow Integrity[C]//Proceedings of IEEE Symposium on Security and Privacy.[S.l.]:IEEE Press,2010: 380-395.[6]Xia Yubin,Liu Yutao,Chen Haibo,et al.CFIMon: Detecting Violation of Control Flow Integrity Using Performance Counters[C]//Proceedings of the 42nd AnnualIEEE/IFIPInternationalConferenceon Dependable Systems and Networks.[S.l.]:IEEE Press,2012:1-12.

[7]Park Y J.Efficient Validation of Control Flow Integrity for Enhancing Computer System Security[D].Ames, USA:Iowa State University,2010.

[8]Zhang Chao,Wei Tao,Chen Zhaofeng,et al.Practical Control Flow Integrity and Randomization for Binary Executables[C]//Proceedings of IEEE Symposium on Security and Privacy.[S.l.]:IEEE Press,2013: 559-573.

[9]Abad F A T,Woude J V D,Lu Yi,et al.On-chip Control Flow Integrity Check for Real Time Embedded Systems[C]//Proceedingsofthe 1stInternational Conference on Cyber-physical Systems,Networks,and Applications.[S.l.]:IEEE Press,2013:26-31.

[10]Davi L,Dmitrienko A,Egele M,et al.MoCFI:A FrameworktoMitigateControl-flowAttackson Smartphones[C]//ProceedingsofSymposiumon Network and Distributed System Security.[S.l.]:IEEE Press,2012:544-554.

[11]ARM.ARM Architecture Reference Manual[EB/OL].(2010-07-21).http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0406c/index.html.

[12]AAPCS.ARM Procedure Call Standard for the ARM Architecture[EB/OL].(2010-11-21).http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042d/IHI0042D_ aapcs.pdf.

[13]Wang Zhenyu,Ye Yanqiu,Wang Ruimin.An Out-ofthe-Box Dynamic Binary Analysis Tool for ARM-based Linux[C]//Proceedings of Cyberspace Safety and Security.[S.l.]:Springer,2013:450-457.

[14]紀宇鵬.動態二進制程序漏洞挖掘的系統設計[D].北京:北京郵電大學,2012.

編輯 劉 冰

Research on Control Flow Integrity Verification Technology in ARM Architecture

YE Yanqiu,WANG Zhenyu,ZHAO Lijun
(PLA Information Engineering University,Zhengzhou 450001,China)

On common platform,the extraction of run-time control-flow to target binary code relies on either processor’s mechanism or Dynamic Binary Instrumentation(DBI)tools.So,the implementation on common platform can not be transplanted to Advanced RISC Machine(ARM)directly.Based on Control Flow Integrity(CFI)enforcement,this paper designs a method to detect and diagnose control flow hijacking which is implemented by exploit a buffer overflow vulnerability on ARM.This method dynamically builds a white-list of legitimate branch target address before the target binary code execute,performs CFI enforcement to detect illegal control-flow transfer at run-time,analyzes the illegal branch target address to achieve exploit diagnosis.It implements the technique on a dynamic binary analysis platform for ARM-Linux systems.Results show that it can effectively detect the exploit and locates the attack vector.

Control Flow Integrity(CFI);Advanced RISC Machine(ARM)architecture;legitimate address white-list; dynamic binary analysis;attack vector location

葉雁秋,王震宇,趙利軍.ARM架構中控制流完整性驗證技術研究[J].計算機工程, 2015,41(3):151-155,171.

英文引用格式:Ye Yanqiu,Wang Zhenyu,Zhao Lijun.Research on Control Flow Integrity Verification Technology in ARM Architecture[J].Computer Engineering,2015,41(3):151-155,171.

1000-3428(2015)03-0151-05

:A

:TP311

10.3969/j.issn.1000-3428.2015.03.029

葉雁秋(1988-),男,碩士研究生,主研方向:嵌入式系統,信息安全;王震宇,副教授;趙利軍,碩士研究生。

2014-03-18

:2014-04-28E-mail:yyq19881203@hotmail.com

猜你喜歡
控制流二進制寄存器
用二進制解一道高中數學聯賽數論題
抵御控制流分析的Python 程序混淆算法
工控系統中PLC安全漏洞及控制流完整性研究
抵御控制流分析的程序混淆算法
Lite寄存器模型的設計與實現
有趣的進度
二進制在競賽題中的應用
分簇結構向量寄存器分配策略研究*
基于控制流隱藏的代碼迷惑
高速數模轉換器AD9779/AD9788的應用
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合