• 
    

    
    

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

      ?

      編譯支持的多變體融合執(zhí)行設(shè)計與實現(xiàn)

      2022-08-16 09:34:16李秉政馬博林邢???/span>鄔江興
      信息安全學報 2022年4期
      關(guān)鍵詞:編譯器監(jiān)視器變體

      李秉政 ,張 錚 ,馬博林 ,邢福康 ,鄔江興

      1 數(shù)學工程與先進計算國家重點實驗室 鄭州 中國 450001

      2 國家數(shù)字交換系統(tǒng)工程技術(shù)研究中心 鄭州 中國450002

      1 引言

      系統(tǒng)級軟件開發(fā)過程中,由于編程語言(如C 和C++等)的局限性和軟件開發(fā)者的安全知識缺乏等因素,軟件不可避免地出現(xiàn)諸如緩沖區(qū)溢出[1]、懸空指針[2]和內(nèi)存泄漏[3]等漏洞。同時,在軟件開發(fā)過程中,使用第三方庫、借鑒開源代碼等代碼復用方式雖然能夠顯著提升開發(fā)效率,但也帶來了軟件同質(zhì)化的問題。OpenSSL 是一個開放源代碼的軟件庫包,被廣泛應(yīng)用在互聯(lián)網(wǎng)程序和網(wǎng)站上,其加密代碼中一種名為 Heartbleed 的嚴重安全漏洞(CVE-2014-0160)曾引發(fā)重大影響。相同的漏洞經(jīng)代碼復用方式被廣泛傳播,給攻擊者提供了便利,并給網(wǎng)絡(luò)安全帶來極大風險。

      研究人員提出了多種措施來防御軟件漏洞。針對控制流劫持攻擊,早期研究提出了棧保護技術(shù)(StackGuard)[4]、數(shù)據(jù)不可執(zhí)行(Data Execution Prevention,DEP)[5]、地址空間布局隨機化(Address Space Layout Randomization,ASLR)[6]等防御方法,能夠有效抵御代碼注入攻擊,但容易被return-to-libcReturn[7]、面向返回編程(Return Oriented Programming,ROP)[8-9]等代碼重用攻擊手段繞過??刂屏魍暾苑烙?Control Flow Integrity,CFI)[10-11]在運行時嚴格按照預先定義的控制流圖限制程序控制轉(zhuǎn)移,能夠抵御代碼注入、代碼重用攻擊和內(nèi)存信息泄露,但難以在性能和安全性兩者間找到平衡。面向數(shù)據(jù)編程(Data-oriented Programming,DOP)[12]采用非控制數(shù)據(jù)攻擊方式實現(xiàn)圖靈完備的攻擊,可繞過細粒度的控制流完整性防御。攻防對抗雙方此消彼長,被動式防御方法往往容易被新的攻擊繞過,無法應(yīng)對未知漏洞的威脅。

      Cox[13]于 2006 年首次提出將多變體執(zhí)行(Multi-Variant Execution,MVX)用于解決軟件安全問題。作為一種主動防御方式,多變體執(zhí)行使用軟件多樣性技術(shù)生成變體集合,將程序輸入分發(fā)至多個功能相同,結(jié)構(gòu)不同的變體并行執(zhí)行,并設(shè)置檢查點,通過比較發(fā)現(xiàn)變體執(zhí)行狀態(tài)的不一致來檢測攻擊。攻擊者必須在不觸發(fā)表決檢測的情況下同時對多變體執(zhí)行架構(gòu)中所有變體實施攻擊。

      近年來,對多變體執(zhí)行的研究主要圍繞多變體執(zhí)行安全防御架構(gòu)機制的實現(xiàn)以及安全性和性能平衡等方面展開[14-16]。?sterlund S 等人[17]首次將軟件多變體執(zhí)行防御技術(shù)應(yīng)用于操作系統(tǒng)內(nèi)核,將內(nèi)核內(nèi)存空間分區(qū),采用地址空間布局隨機化來構(gòu)造兩個內(nèi)核多變體。在執(zhí)行系統(tǒng)調(diào)用時兩個內(nèi)核同時處理,對執(zhí)行結(jié)果進行同步檢查以判斷是否存在內(nèi)核內(nèi)存泄露。Voulimeneas A[18]首次提出了分布式ISA異構(gòu)平臺DMON 的多變體執(zhí)行架構(gòu),實現(xiàn)指令集異構(gòu)執(zhí)行,并利用arm 和x86 不同的硬件安全機制,進一步提升多變體執(zhí)行安全性,但存在通信成本和性能損耗大的問題。與之類似的HeterSec[19]在異構(gòu)的ISA 上實現(xiàn)多變體執(zhí)行。不同于DMON 基于ptrace在用戶層對變體進程進行監(jiān)控和裁決,HeterSec 基于Linux 內(nèi)核修改,增加內(nèi)核動態(tài)加載模塊支持用戶層分布式變體進程的同步和通信。姚東等人[20]提出MVX-CFI,一種基于多變體執(zhí)行架構(gòu)的CFI,提高了MVX 的執(zhí)行性能。擬態(tài)防御[21-22]是我國科研團隊提出的針對未知漏洞后門的主動防御技術(shù),核心思想是動態(tài)異構(gòu)冗余(Dynamic Heterogeneous Redundancy,DHR),相比MVX,擬態(tài)防御的動態(tài)性和反饋機制使擬態(tài)防御系統(tǒng)具有內(nèi)生的測不準效應(yīng),在裁決機制上更加完善。

      多變體執(zhí)行在內(nèi)存漏洞方面具有較強的無需先驗知識的入侵檢測能力。然而,目前研究人員多變體執(zhí)行設(shè)計實現(xiàn)中的缺陷討論不足,多變體執(zhí)行中存在的假陽性錯誤問題常常導致誤報率居高不下,可用性下降。Pina 等人[23]提出一種特定領(lǐng)域的語言(Domain-Specific Language,DSL),用以解決不同版本變體之間因系統(tǒng)調(diào)用號執(zhí)行順序的不同導致不一致產(chǎn)生假陽性錯誤的問題。該DSL 語言及算法提高了多變體執(zhí)行的兼容性,但僅解決了系統(tǒng)調(diào)用級的假陽性問題。Stijn 等人[24]在多變體執(zhí)行中加入線程時鐘同步并行機制,采用鎖步的方式對多線程中部分系統(tǒng)調(diào)用排序執(zhí)行,解決了多變體執(zhí)行中線程調(diào)度和資源爭用問題,首次在軟件多變體執(zhí)行架構(gòu)中支持多線程并行,該多變體執(zhí)行能夠支持多線程的本質(zhì)是對線程共享資源進行加鎖,阻塞線程的執(zhí)行,因此必然會導致性能的降低。

      針對多變體執(zhí)行技術(shù)存在的假陽問題,本文提出一種編譯支持的多變體融合執(zhí)行架構(gòu),稱之為I-MVX(Integrated MVX)在編譯階段對程序內(nèi)部引起假陽性問題的代碼和變量進行插樁標識,在運行時由監(jiān)視器對來自多個變體進程內(nèi)部和變體進程外部的變量及資源進行同步處理,消除多變體執(zhí)行中的誤報,提升多變體執(zhí)行技術(shù)的可用性。本文主要貢獻有:

      (1) 本文提出了多變體執(zhí)行同步編程模型,通過添加少量的編譯制導語句即可完成對多變體執(zhí)行中假陽代碼的同步處理。

      (2) 本文提出了一種多變體執(zhí)行架構(gòu)下變體進程間數(shù)據(jù)與資源同步的解決方案,首次在軟件多變體執(zhí)行架構(gòu)中解決了隨機數(shù)假陽問題,擴展了多變體執(zhí)行的應(yīng)用范圍。

      (3) 本文基于Clang 編譯器和Linux 內(nèi)核加載模塊設(shè)計實現(xiàn)了一個多變體融合執(zhí)行編譯器和運行時監(jiān)視器,實驗評估結(jié)果表明,以少量的性能損耗為代價,多變體融合執(zhí)行方法能夠有效解決多變體執(zhí)行中的進程內(nèi)部對象和外部對象引起的假陽問題,提升多變體執(zhí)行的可用性。

      文章結(jié)構(gòu)安排如下:第1 章介紹多變體執(zhí)行研究背景;第2 章分析多變體執(zhí)行假陽性問題產(chǎn)生的原因;第3 章提出多變體融合執(zhí)行方案;第4 章闡述多變體融合執(zhí)行實現(xiàn);第5 章針對多變體融合執(zhí)行架構(gòu)做相應(yīng)實驗評估;第6 章進行全文總結(jié)。

      2 多變體執(zhí)行假陽問題分析

      多變體執(zhí)行是由異構(gòu)冗余變體并行執(zhí)行來檢測攻擊的一種技術(shù)。軟件中存在的某些缺陷導致程序狀態(tài)發(fā)生非正常轉(zhuǎn)換(如緩沖區(qū)越界、內(nèi)存泄漏等),稱之為軟件漏洞。漏洞能被攻擊者所非法利用,進而控制系統(tǒng)和獲取敏感信息。多變體執(zhí)行技術(shù)在保證程序功能完備性的前提下,通過異構(gòu)程序的部分組件,例如異構(gòu)的虛擬內(nèi)存空間等,使得攻擊者的漏洞利用過程在不同變體之間產(chǎn)生非一致的狀態(tài)轉(zhuǎn)換,由監(jiān)視器在程序檢查點對多變體輸出結(jié)果或中間狀態(tài)進行比較,即可檢測攻擊行為。而對于正常的用戶輸入,程序狀態(tài)轉(zhuǎn)換是一致的,能夠產(chǎn)生一致的輸出結(jié)果。

      在不具備攻擊輸入的情況下,變體程序并行執(zhí)行時出現(xiàn)不一致的程序狀態(tài)轉(zhuǎn)換或輸出結(jié)果,監(jiān)視器將程序正常執(zhí)行識別為發(fā)生攻擊,稱之為多變體執(zhí)行的假陽問題。如圖1 所示,變體進程1 和變體進程2 分別向操作系統(tǒng)請求進程號,作為libc 庫隨機數(shù)種子,因為兩個變體進程號不相同,導致生成的隨機數(shù)也不同,在后續(xù)使用隨機數(shù),如HTTPS 協(xié)議交換隨機數(shù)等應(yīng)用場景時輸出產(chǎn)生不一致,監(jiān)視器檢測到該不一致,被誤認為發(fā)生攻擊。

      多變體執(zhí)行當中變體程序異構(gòu)組件的邊界不清晰是導致假陽性問題產(chǎn)生的原因之一?,F(xiàn)有的多變體執(zhí)行技術(shù)以進程為冗余執(zhí)行的主體,以虛擬地址空間為異構(gòu)對象來檢測內(nèi)存攻擊,其運行時的本質(zhì)為一種執(zhí)行相同任務(wù)且內(nèi)存空間異構(gòu)的進程級并行計算。多個變體進程并行執(zhí)行過程中,將部分進程內(nèi)部和外部相關(guān)聯(lián)的對象,如進程內(nèi)部隨機數(shù)變量、進程外部由操作系統(tǒng)管理的進程PID 號和文件描述符等被動地納入到了多變體執(zhí)行的邊界內(nèi),參與監(jiān)視器的表決過程,從而被檢測到不一致產(chǎn)生誤報。解決假陽性問題的關(guān)鍵就在于確定多變體執(zhí)行的邊界。對于邊界外的對象,需要進行同步操作,消除多變體執(zhí)行中合法的不一致。

      3 多變體融合執(zhí)行方案設(shè)計

      基于上述分析,本文提出了一種多變體融合執(zhí)行方法,用以解決多變體執(zhí)行中的假陽問題。多變體融合執(zhí)行,是指在多變體執(zhí)行架構(gòu)中,對部分因進程級冗余執(zhí)行產(chǎn)生假陽問題的變體進程內(nèi)部和外部的對象進行同步處理,減少誤報,使得多變體執(zhí)行系統(tǒng)中多個變體進程對于外部正常輸入能夠協(xié)同一致,表現(xiàn)為一致性的輸出結(jié)果,而對于攻擊輸入則出現(xiàn)不一致的執(zhí)行狀態(tài),通過監(jiān)視器的比較發(fā)現(xiàn)攻擊。假陽錯誤主要來源分為多變體進程外部對象和內(nèi)部對象兩種類型,需要分別選擇合適的同步點并設(shè)計相應(yīng)的同步處理方法。

      3.1 多變體進程外部對象

      多變體執(zhí)行是一種運行時的防御技術(shù),當變體程序被操作系統(tǒng)裝載到內(nèi)存并分配給它一定資源后,此時可稱為變體進程。變體進程的執(zhí)行一方面受到監(jiān)視器的控制,另一方面也作為一個進程實體,與操作系統(tǒng)進行交互來使用運行時的資源。變體進程與操作系統(tǒng)交互過程中的外部數(shù)據(jù)結(jié)構(gòu)和相關(guān)系統(tǒng)調(diào)用,如Linux 內(nèi)核中的task_struct、文件描述符等,是影響多變體執(zhí)行的重要外部對象。

      舉例而言,變體進程并行執(zhí)行時打開文件并將返回的文件描述符files_struct 打印至終端輸出。由于進程的并行執(zhí)行在微觀層面的時間片上大概率是不同步的,變體進程執(zhí)行sys_open 系統(tǒng)調(diào)用的順序不同,則返回的files_struct 中引用計數(shù)字段將產(chǎn)生不一致,監(jiān)視器輸出表決過程中即產(chǎn)生誤報。

      對于多變體執(zhí)行中進程外部對象引發(fā)的假陽問題,設(shè)計融合執(zhí)行方案如圖2 所示。在關(guān)鍵系統(tǒng)調(diào)用處設(shè)置同步點,變體進程合路執(zhí)行一次,將執(zhí)行結(jié)果返回給各個變體程序。針對不同的系統(tǒng)調(diào)用,融合執(zhí)行的實現(xiàn)細節(jié)不同。對于輸入性系統(tǒng)調(diào)用,例如打開文件、獲取系統(tǒng)當前時間等操作由主進程執(zhí)行,主進程向從進程同步執(zhí)行結(jié)果(文件描述符、系統(tǒng)當前時間等),保證輸入數(shù)據(jù)的一致性。對于輸出型系統(tǒng)調(diào)用,例如文件寫操作,在表決點完成表決后,由主進程向?qū)?yīng)文件(終端、網(wǎng)絡(luò)接口等)執(zhí)行寫數(shù)據(jù)操作,從進程執(zhí)行空操作,保持對外的一致輸出。

      3.2 多變體進程內(nèi)部對象

      進程內(nèi)部對象,包括函數(shù)、變量等,在正常運行過程中由于多變體并行執(zhí)行的時間序列不同或外部輸入不同導致執(zhí)行結(jié)果產(chǎn)生不一致,也會引發(fā)假陽性錯誤。以隨機數(shù)函數(shù)為例,使用進程PID 號作為隨機種子生成隨機數(shù),在兩個變體進程上必然產(chǎn)生不一致,而采用未賦值寄存器作為種子的隨機數(shù)生成算法在不同變體中也會大概率導致隨機數(shù)的不一致。對于進程內(nèi)部產(chǎn)生不一致的對象,需要進行同步操作。

      變體進程擁有獨立的地址空間(代碼段、數(shù)據(jù)段等),其中的二進制代碼及數(shù)據(jù)由源代碼經(jīng)編譯器轉(zhuǎn)換生成,是進程私有的,在運行過程中,操作系統(tǒng)無法解析程序內(nèi)部的邏輯和所實現(xiàn)的功能,因而無法確定同步點和同步對象。雖然編程人員在代碼編寫時掌握函數(shù)及相關(guān)變量的邏輯功能,但由編程人員直接編寫同步代碼的方式,需要修改源代碼且難以推廣應(yīng)用。

      本文設(shè)計多變體進程內(nèi)部對象的融合執(zhí)行方案如圖3 所示,由編譯器在編譯階段對關(guān)鍵代碼及變量進行函數(shù)插樁的形式設(shè)置同步點,使用動態(tài)鏈接的方式鏈接插樁函數(shù),由外部監(jiān)視器完成同步操作,并將同步結(jié)果返回變體進程。

      4 多變體融合執(zhí)行架構(gòu)實現(xiàn)

      多變體執(zhí)行假陽性問題是由于表決時將部分非一致性變量,如隨機數(shù)、端口號等納入了表決范圍,并行執(zhí)行的變體之間異步執(zhí)行時,監(jiān)視器檢測到非一致性變量而產(chǎn)生了誤報。對隨機數(shù)等關(guān)鍵變量及代碼采用多變體變體融合執(zhí)行方式,降低多變體執(zhí)行誤報率,可以提升多變體執(zhí)行的可用性。多變體融合執(zhí)行架構(gòu)主要包含以下兩個部分的實現(xiàn)。

      編譯器的主要工作:在編譯階段根據(jù)編譯制導語句的指示,對產(chǎn)生誤報的非一致性變量和關(guān)鍵代碼地址進行分析提取,并插樁同步處理函數(shù)。

      運行時的主要工作:基于Linux 內(nèi)核動態(tài)加載模塊實現(xiàn)了一個運行監(jiān)視器同步模塊,在運行時監(jiān)視多變體進程的關(guān)鍵系統(tǒng)調(diào)用,設(shè)置主從變體同步交換機制,將執(zhí)行結(jié)果拷貝至從變體進程。

      4.1 多變體執(zhí)行同步編程模型

      對于多變體進程內(nèi)部對象造成的假陽問題,需要在分析理解程序代碼的邏輯功能的基礎(chǔ)上來確定產(chǎn)生不一致的變量及代碼,并在運行時進行同步處理。人工分析和修改程序源代碼是一種實現(xiàn)方案,以隨機數(shù)函數(shù)為例,編寫隨機數(shù)代理模塊,修改源代碼從代理函數(shù)獲取隨機數(shù),由代理模塊在運行時通過進程間共享內(nèi)存通信等方式,將生成的隨機數(shù)分發(fā)給變體進程。該方案需要程序開發(fā)人員對多變體執(zhí)行有非常深刻的分析和理解,不具有通用性,且有可能在修改代碼時引入新的bug。

      本文基于LLVM 編譯框架在Clang 編譯器前端實現(xiàn)基于編譯制導的多變體同步編程模型,通過添加少量的編譯制導和提供對應(yīng)的編譯器,即可完成對多變體執(zhí)行中假陽代碼的同步處理。Clang/LLVM 版本為10.0.0。其流程如圖4 所示。

      4.1.1 編譯制導語句設(shè)計

      #pragma 編譯制導命令常用來給編譯器傳遞額外的信息,指示編譯器做額外的操作。為了提高多變體執(zhí)行的適配效率,本文設(shè)計的多變體執(zhí)行同步編程模型對代碼的改動量較小,具體的同步編譯制導語句定義如表1。

      4.1.2 擴展編譯器實現(xiàn)

      MVX-Clang 編譯器前端主要完成對編譯制導語句的解析,在語法分析樹中添加隨機數(shù)等非一致性變量相關(guān)的代碼注解信息并對代碼進行插樁處理。MVX-Clang編譯器后端將插樁IR代碼與同步函數(shù)庫鏈接編譯成可執(zhí)行代碼。如圖5 所示,Clang 編譯器輸入為帶編譯制導語句的C 語言程序源代碼,其編譯步驟為:

      (1) 詞法分析器檢測到對以#pragma mvx 字符開頭的多變體同步制導語句,生成詞法單元Token,填入對應(yīng)的語義信息,并加入到當前編譯單元Token流中,傳遞給語法分析器。

      (2) 語法分析器根據(jù)Token 中的抽象符號所表示的不同語義,生成抽象語法數(shù)AST 對應(yīng)節(jié)點并進行語法方面的檢查,語義分析器在生成AST 節(jié)點階段進行語義檢查。

      (3) IR生成器遍歷AST節(jié)點,在同步代碼位置進行插樁處理,生成IR 中間表示代碼。

      (4) 編譯器后端將IR 代碼編譯為可執(zhí)行文件,并鏈接同步函數(shù)庫。

      圖6 所示為編譯制導語句編程和編譯器插樁同步函數(shù)樣例。編程人員在隨機數(shù)生成代碼前后添加編譯指示,由編譯器完成對隨機數(shù)代碼前后插樁同步處理函數(shù)。之后由鏈接器鏈接同步函數(shù)庫。

      4.2 運行時監(jiān)視器同步模塊

      多變體執(zhí)行中監(jiān)視組件在整個架構(gòu)中起著舉足輕重的作用,在運行時除了要對變體進程的輸出進行表決之外,還要執(zhí)行變體進程創(chuàng)建、跟蹤、退出等一系列管理功能。根據(jù)實現(xiàn)方式的不同,監(jiān)視器主要分為基于Ptrace API 實現(xiàn)的監(jiān)視器和基于內(nèi)核模塊實現(xiàn)監(jiān)視器。Ptrace 實現(xiàn)的監(jiān)視器與變體位于不同的進程空間,它們的交互通過Ptrace 調(diào)試接口進行?;诳杉虞d的內(nèi)核模塊(Loadable Kernel Module,LKM)實現(xiàn)的監(jiān)視器通過攔截變體進程的系統(tǒng)調(diào)用來監(jiān)視多變體執(zhí)行過程,部署在內(nèi)核中的監(jiān)視器,與變體共享相同的地址空間,并且具有特權(quán)級的權(quán)限。本文基于內(nèi)核動態(tài)加載模塊實現(xiàn)的監(jiān)視器來實現(xiàn)運行時同步模塊,其實現(xiàn)方案稍加改造,也可應(yīng)用于基于Ptrace 調(diào)試接口的監(jiān)視器中。

      如圖7 所示,采用環(huán)形緩沖區(qū)實現(xiàn)變體進程外部的數(shù)據(jù)同步,在監(jiān)視器模塊中設(shè)置系統(tǒng)調(diào)用參數(shù)緩沖區(qū)和數(shù)據(jù)緩沖區(qū)兩個環(huán)形緩沖區(qū),用于進程外部數(shù)據(jù)的同步。以read 系統(tǒng)調(diào)用為例,監(jiān)視器攔截變體進程read 系統(tǒng)調(diào)用后,隨機選擇其中一個變體作為主變體,執(zhí)行read 系統(tǒng)調(diào)用,將輸入數(shù)據(jù)放入環(huán)形緩沖區(qū),系統(tǒng)調(diào)用返回值放入環(huán)形緩沖區(qū),從變體讀取環(huán)形緩沖區(qū)數(shù)據(jù)和系統(tǒng)調(diào)用返回值,完成同步。對于輸出型系統(tǒng)調(diào)用的同步點設(shè)置,如write 系統(tǒng)調(diào)用等,在表決點之后進行。表決通過后,由監(jiān)視器選擇一個變體進程向目標地址(文件)執(zhí)行write 系統(tǒng)調(diào)用。

      對于變體進程內(nèi)部數(shù)據(jù)的同步處理,本文新增一個系統(tǒng)調(diào)用作為專用的同步處理函數(shù),用于監(jiān)視器模塊和變體進程內(nèi)插樁的同步函數(shù)進行同步交互。新增系統(tǒng)調(diào)用采用Linux 內(nèi)核動態(tài)加載模塊覆蓋系統(tǒng)調(diào)用表的方式實現(xiàn),不需要修改內(nèi)核源代碼。其同步流程為:

      (1) 變體進程執(zhí)行到前驅(qū)函數(shù)時,發(fā)起系統(tǒng)調(diào)用;

      (2) 監(jiān)視器等待所有變體程序均運行到前驅(qū)函數(shù)并發(fā)起該系統(tǒng)調(diào)用后返回變體進程,繼續(xù)執(zhí)行同步區(qū)代碼;

      (3) 變體進程執(zhí)行到后驅(qū)函數(shù)時,發(fā)起系統(tǒng)調(diào)用,將需要同步的變量地址和數(shù)據(jù)類型作為系統(tǒng)調(diào)用的參數(shù)傳遞給監(jiān)視器;

      (4) 監(jiān)視器根據(jù)編譯制導指定的同步類型,隨機選擇其中一個變體或使用主變體的執(zhí)行結(jié)果,拷貝到另外一個變體進程,之后返回變體進程繼續(xù)執(zhí)行。

      5 實驗評估

      本章節(jié)從四個方面對本文提出的多變體融合執(zhí)行架構(gòu)進行評估。首先,本文采用SPEC2006 基準測試集和tinyhttpd 測試程序,對多變體融合執(zhí)行架構(gòu)進行CPU 密集型與I/O 密集型兩種類型程序的性能測試。其次,為了衡量多變體融合執(zhí)行代碼插樁和運行時同步所引入的性能開銷,本文設(shè)計了微基準測試程序并對多變體融合執(zhí)行架構(gòu)模塊進行深入的測試分析。之后,本文基于真實CVE漏洞,對多變體融合執(zhí)行安全性進行評估。最后,本文基于真實網(wǎng)關(guān)應(yīng)用和服務(wù)器程序?qū)-MVX 進行有效性實驗評估。

      5.1 正確性和性能評估

      為了驗證程序多變體融合執(zhí)行架構(gòu)的正確性,評估多變體融合執(zhí)行架構(gòu)的性能,本文采用SPEC CPU Benchmark 2006[25]中的 CINT 程序集和tinyhttpd 測試程序,運行3 次基準程序和多變體執(zhí)行程序來測量平均性能損耗。實驗在Ubuntu18.04 系統(tǒng)中運行,內(nèi)核版本為Linux 5.4.0-42-generic,CPU 型號為Intel Silver 4210,內(nèi)存容量為32GB。

      如圖8 所示,SPEC2006 基準測試中,多變體融合執(zhí)行架構(gòu)的平均時間開銷為 2.13%。與GHUMVEE 等其他多變體執(zhí)行相比性能損耗較低的原因主要有兩點。一方面,多變體融合執(zhí)行架構(gòu)采用內(nèi)核加載模塊實現(xiàn)對變體進程的運行時監(jiān)視和同步,與Ptrace 實現(xiàn)方式相比,減少了進程間通信和用戶態(tài)與內(nèi)核態(tài)頻繁切換帶來的性能開銷;另一方面,SPEC 基準性能測試中的程序為CPU 密集型程序,其中的系統(tǒng)調(diào)用次數(shù)較少,變體間同步的頻率較低,因而性能損耗較小。單個測試樣例中,存在比平均時間開銷高的樣例429.mcf,分析該測試樣例為訪存密集型程序,在運行時需要最大約1.7GB 的內(nèi)存,其訪存次數(shù)頻繁,觸發(fā)系統(tǒng)調(diào)用次數(shù)遠大于其他程序。

      如表2 所示,tinyhttpd 測試中,多變體融合執(zhí)行架構(gòu)對tinyhttpd 導致的平均響應(yīng)時間損耗為13.2%,對tinyhttpd 導致的吞吐量損耗為18.3%。tinyhttpd 測試程序為I/O 密集型程序,其系統(tǒng)調(diào)用次數(shù)遠大于SPEC2006 基準測試集中的CPU 密集型程序,在系統(tǒng)調(diào)用處進行表決和同步的概率增加,因而時間損耗和I/O 吞吐量損耗較大。

      表2 tinyhttpd 測試結(jié)果Table 2 Tinyhttpd experiment result

      5.2 微基準測試評估

      為了評估多變體融合執(zhí)行架構(gòu)中編譯插樁同步及運行時同步模塊對程序性能的具體影響,本文設(shè)計了兩組微基準測試來分析多變體融合執(zhí)行架構(gòu)引入的性能損耗。

      首先,本文采用OpenSSL 開源加密庫中的隨機數(shù)測試代碼來測試編譯插樁同步對程序性能帶來的損耗,版本號為 openssl-1.1.1f。openssl speed 為OpenSSL 用于測試加密算法性能的應(yīng)用程序,openssl speed rand 命令可測試隨機數(shù)生成算法的性能,其測試過程為循環(huán)執(zhí)行RAND_bytes()函數(shù)并統(tǒng)計每秒處理的字節(jié)數(shù)。使用本文提供的MVX-Clang編譯器編譯 OpenSSL 代碼,對 speed.c 代碼中RAND_bytes()函數(shù)進行插樁同步處理,作為微基準測試的測試程序。測試結(jié)果如表3 所示,平均性能損耗為1.42%,表明插樁的同步函數(shù)及監(jiān)視器運行時同步模塊對于程序性能的影響較小。

      表3 OpenSSL Rand 算法性能測試Table 3 OpenSSL Rand performance

      其次,為了評估運行時同步模塊在系統(tǒng)調(diào)用級的影響,本文本文選取3 個代表性的系統(tǒng)調(diào)用,設(shè)計微基準測試程序,分別在基準環(huán)境和多變體融合執(zhí)行架構(gòu)下執(zhí)行系統(tǒng)調(diào)用1 萬次,對比其性能損耗。選取的系統(tǒng)調(diào)用為:

      (1) sys_read(fd,buf,512) 為需要輸入同步的系統(tǒng)調(diào)用,監(jiān)視器將讀取的數(shù)據(jù)同步至變體。

      (2) sys_write(fd,buf,512) 為需要輸出表決和同步的系統(tǒng)調(diào)用,這類系統(tǒng)調(diào)用在多變體融合執(zhí)行架構(gòu)中作為敏感系統(tǒng)調(diào)用,監(jiān)視器將不同變體的輸出數(shù)據(jù)進行表決,表決一致后進行同步輸出。

      (3) sys_sched_yield() 該系統(tǒng)調(diào)用不需要同步和表決。

      測試結(jié)果如圖9 所示。在微基準測試中,sys_read和sys_write 系統(tǒng)調(diào)用受到兩個變體進程同步操作的延遲影響,達到了1.51 倍和1.27 倍的性能損耗,而不需同步的sys_sched_yield 系統(tǒng)調(diào)用則沒有性能損耗。在實際的程序中,觸發(fā)多變體融合執(zhí)行架構(gòu)進行同步的頻率由程序的類型決定,對于計算密集型程序,其I/O 系統(tǒng)調(diào)用耗時占比較小,因而程序性能受到的影響較小;反之,對于I/O 密集型程序則性能影響較大,這也與本文5.1 節(jié)中性能測試結(jié)果相符。

      5.3 安全性評估

      為了驗證本文提出的多變體融合執(zhí)行架構(gòu)防御攻擊的有效性,本文選取開源程序中CVE 漏洞對多變體融合執(zhí)行架構(gòu)進行測試,評估其防御效果。

      wget 網(wǎng)絡(luò)文件下載工具存在棧溢出漏洞,編號為CVE-2017-13089。由于源碼中fd_read 函數(shù)將HTTP 響應(yīng)數(shù)據(jù)(用戶輸入)寫入dlbuf時并未檢查長度參數(shù)contlen是否為負數(shù),攻擊者可構(gòu)造特定long長整型負數(shù)值,覆蓋寫入緩沖區(qū),引發(fā)棧溢出漏洞。該漏洞可用于實施控制流劫持攻擊。多變體融合執(zhí)行架構(gòu)中采用ASLR 生成的兩變體進程能夠有效防御該漏洞。攻擊者在覆蓋寫入緩沖區(qū)時,由于兩個變體的函數(shù)返回地址不同,導致攻擊者覆蓋的地址在兩個變體中必然指向的是不同的內(nèi)容,從而執(zhí)行了不同的控制流,最終在I/O 輸出系統(tǒng)調(diào)用中檢測輸出不一致,發(fā)現(xiàn)攻擊行為,進而阻斷攻擊。

      CVE-2014-0160 漏洞存在于OpenSSL 程序中。該漏洞存在于ssl/dl_both.c 實現(xiàn)TLS 和DTLS 的心跳處理邏輯時沒有檢測心跳包中的長度字段是否和后續(xù)的數(shù)據(jù)字段相符合,導致內(nèi)存區(qū)域后續(xù)的隱私數(shù)據(jù)被拷貝泄露給攻擊者。多變體融合執(zhí)行架構(gòu)能夠有效防御該漏洞。在泄露內(nèi)存數(shù)據(jù)時,由于異構(gòu)變體進程間的地址空間不同,泄露數(shù)據(jù)出現(xiàn)不一致,最終在輸出系統(tǒng)調(diào)用中被多變體融合執(zhí)行監(jiān)視器檢測到并阻斷信息泄露。

      5.4 有效性評估

      安全套接字協(xié)議SSL(Secure Sockets Layer)及傳輸層安全協(xié)議TSL(Transport Layer Security)是目前互聯(lián)網(wǎng)應(yīng)用最為廣泛的加密通信協(xié)議,為網(wǎng)絡(luò)通信雙方提供身份認證及加密數(shù)據(jù)傳輸功能。OpenSSL是SSL/TSL 協(xié)議實現(xiàn)的開放源碼軟件包,采用C 語言開發(fā)。OpenVPN 是一個基于OpenSSL 加密庫實現(xiàn)的應(yīng)用層虛擬專用通道(VPN)軟件,其中使用了OpenSSL 中的SSLv3/TLSv1 協(xié)議函數(shù)庫來實現(xiàn)身份認證、訪問控制等功能。

      某電網(wǎng)網(wǎng)關(guān)服務(wù)端程序基于開源OpenVPN 和OpenSSL 定制開發(fā),其中OpenSSL 軟件包通過調(diào)用函數(shù)RAND_set_rand_method() 替換OpenSSL 所提供的隨機數(shù)生成方式,實現(xiàn)了基于硬件方式(隨機數(shù)發(fā)生器)來生成隨機數(shù),具有更高的安全性。將網(wǎng)關(guān)服務(wù)端程序部署于MVX 系統(tǒng)時,由于兩個網(wǎng)關(guān)變體進程在TLS 雙向認證過程中分別調(diào)用隨機數(shù)生成函數(shù)RAND__bytes()生成不同的隨機數(shù),進而加密生成不同的預主密鑰輸出,在輸出表決過程中被MVX 監(jiān)視器判斷為不一致,產(chǎn)生誤報。而在I-MVX中,對OpenSSL 隨機數(shù)生成函數(shù)添加編譯指示。使用本文的MVX-Clang 編譯器進行編譯,并鏈接同步函數(shù)庫,在運行時由監(jiān)視器對兩個變體進程隨機數(shù)進行同步處理,能夠消除因隨機數(shù)產(chǎn)生的假陽問題。該I-MVX 防御系統(tǒng)同樣可以兼容其他基于OpenSSL 中SSL/TLS 協(xié)議的應(yīng)用,亦可在SSL/TLS協(xié)議的其他代碼實現(xiàn)中通過添加少量編譯指示的方式進行適配。

      由于本文所提出的多變體同步編程模型需要在C 語言源代碼相應(yīng)位置添加編譯指示并經(jīng)過定制編譯器生成可執(zhí)行文件,故無法適用于無源碼的應(yīng)用程序。對于無源碼的應(yīng)用程序,其內(nèi)部函數(shù)及變量的同步關(guān)系不透明,需要通過反編譯手段作進一步的分析處理。同時,本文所實現(xiàn)的編譯器及同步庫函數(shù)、監(jiān)視器組件不依賴于指定的指令集,故本文所述基于x86 平臺下的I-MVX 實現(xiàn)方法同樣可以延伸借鑒到其他諸如arm、MIPS 等指令集架構(gòu)的系統(tǒng)中。

      6 結(jié)論

      MVX 作為一種主動防御技術(shù),在網(wǎng)絡(luò)安全領(lǐng)域具有廣泛的應(yīng)用前景。本文在分析多變體執(zhí)行假陽問題產(chǎn)生原因的基礎(chǔ)上,設(shè)計實現(xiàn)了多變體融合執(zhí)行架構(gòu)I-MVX,分為多變體同步編程框架和運行時同步模塊。編程人員通過添加少量編譯指示對多變體進程內(nèi)部對象插樁同步函數(shù),在運行時完成對多變體進程內(nèi)部和外部對象的同步處理,消除多變體執(zhí)行中的誤報,有效提升了多變體執(zhí)行技術(shù)的兼容性。通過實驗驗證了I-MVX 的防御有效性,并且只對CPU 密集型和I/O 密集型程序分別增加2.13%和13.2%的性能損耗。

      本文提出的I-MVX 架構(gòu),其設(shè)計方案具有通用性,不局限于本文所使用的Clang 編譯器和Linux 內(nèi)核模塊監(jiān)視器,同樣可以基于gcc 等開源編譯器實現(xiàn)多變體同步編程模型,基于ptrace 的MVX 監(jiān)視器實現(xiàn)運行時同步模塊。

      存在不足的是,在I-MVX 架構(gòu)中,我們對主要功能進行了實現(xiàn)和驗證,還有諸如多變體執(zhí)行中的多線程支持、無源碼程序的分析、同步算法的改進等細節(jié)需要在未來的研究工作中進一步完善。同時,多變體執(zhí)行與擬態(tài)防御思想相結(jié)合來實現(xiàn)軟件安全防御,將擬態(tài)防御的DHR 構(gòu)造引入到進程執(zhí)行過程中,在異構(gòu)冗余的基礎(chǔ)之上進行表決,稱之為擬態(tài)2.0,可為擬態(tài)防御研究提供新的思路。

      致 謝 在此,向評閱本文的審稿專家表示衷心的感謝,向?qū)Ρ疚墓ぷ鹘o與支持和指導的同行,尤其是課題組的老師表示感謝。

      猜你喜歡
      編譯器監(jiān)視器變體
      基于DDPG算法的變體飛行器自主變形決策
      基于相異編譯器的安全計算機平臺交叉編譯環(huán)境設(shè)計
      基于FPGA消息識別和過濾的1553B總線監(jiān)視器的設(shè)計
      非仿射參數(shù)依賴LPV模型的變體飛行器H∞控制
      仿生監(jiān)視器
      深耕廣電,時代奧視監(jiān)視器“花香遍墻內(nèi)外”
      信息化視聽(2016年7期)2016-05-14 06:38:19
      耀變體噴流高能電子譜的形成機制
      高速公路智能網(wǎng)絡(luò)監(jiān)視器的應(yīng)用
      中國傳統(tǒng)文學的換形變體——論“詩化小說”的興起與傳承
      通用NC代碼編譯器的設(shè)計與實現(xiàn)
      榆林市| 仁布县| 高阳县| 辽中县| 邓州市| 定边县| 云林县| 土默特右旗| 吴忠市| 盐亭县| 桓仁| 玉龙| 湘西| 溧水县| 彰化市| 永顺县| 延吉市| 深泽县| 龙岩市| 西平县| 镇远县| 平远县| 师宗县| 奎屯市| 厦门市| 德保县| 河津市| 上林县| 吕梁市| 营口市| 忻州市| 西乌珠穆沁旗| 曲阳县| 沭阳县| 宁远县| 营山县| 新沂市| 花垣县| 福清市| 南城县| 益阳市|