• 
    

    
    

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

      操作系統(tǒng)內(nèi)核模糊測試技術(shù)綜述

      2019-09-09 03:38:40朱俊虎
      小型微型計算機系統(tǒng) 2019年9期
      關(guān)鍵詞:測試工具覆蓋率內(nèi)核

      李 賀,張 超,楊 鑫,朱俊虎

      1(數(shù)學(xué)工程與先進(jìn)計算國家重點實驗室,鄭州 450002)2(清華大學(xué) 網(wǎng)絡(luò)科學(xué)與網(wǎng)絡(luò)空間研究院,北京 100083) E-mail:chaoz@tsinghua.edu.cn

      1 引 言

      操作系統(tǒng)作為當(dāng)今社會信息基礎(chǔ)設(shè)施中最為基礎(chǔ)的軟件設(shè)施,從其誕生之初就與安全研究有著密不可分的聯(lián)系,是軟件安全最早的研究對象之一[1,3].內(nèi)核作為操作系統(tǒng)最重要的組成部分,其安全性一直是計算機安全研究的熱點.隨著近年來技術(shù)的發(fā)展,針對Windows內(nèi)核、Linux內(nèi)核和XUN內(nèi)核等主流PC和服務(wù)器操作系統(tǒng)的漏洞挖掘研究也越來越多,出現(xiàn)了大量研究成果.自2007年以來,iOS和Android等移動終端系統(tǒng)的市場份額的不斷擴大,針對移動終端操作系統(tǒng)內(nèi)核的研究也成為安全研究一個重要關(guān)注對象.

      內(nèi)核漏洞有其獨特的優(yōu)良性質(zhì).首先,一般的操作系統(tǒng)平臺都有著數(shù)量巨大的用戶群,這使得內(nèi)核漏洞具有很強的通用性.其次,操作系統(tǒng)內(nèi)核代碼極其龐大,擁有大量的遺留代碼和紛繁復(fù)雜的子模塊,增加了漏洞發(fā)生的可能性.再次,由于內(nèi)核特權(quán)級高,內(nèi)核漏洞可以實現(xiàn)獲取內(nèi)核資源的訪問權(quán)限、獲取超級用戶權(quán)限、關(guān)閉安全防護(hù)功能等高危攻擊行為,并且能夠為rootkit等后門駐留打開突破口.最后,內(nèi)核重視運行性能,默認(rèn)情況下安全防護(hù)機制較少.尤其是在實際工作中還需要維持生產(chǎn)環(huán)境的穩(wěn)定,甚至需要關(guān)閉很多內(nèi)核防御機制,給攻擊方留下了很大的可利用空間.

      模糊測試作為實踐效果良好的漏洞挖掘方法,在內(nèi)核漏洞挖掘領(lǐng)域得到了廣泛的應(yīng)用.以虛擬化、硬件調(diào)試器、云計算為代表的新技術(shù)都被應(yīng)用到了內(nèi)核模糊測試漏洞挖掘框架中,主流操作系統(tǒng)都有專門針對其內(nèi)核的模糊測試漏洞挖掘工具.從發(fā)展歷史來看,內(nèi)核漏洞模糊測試從一開始簡單的隨機生成測試?yán)?發(fā)展到輸入規(guī)范化、虛擬化運行系統(tǒng)、覆蓋率反饋、多系統(tǒng)支持、云平臺集群化運行等諸多新特性.

      本文主要對近年來內(nèi)核模糊測試的發(fā)展進(jìn)行回顧,總結(jié)內(nèi)核模糊測試的技術(shù)特點,并對其面臨的問題進(jìn)行梳理.對典型工具的技術(shù)思想進(jìn)行綜述,并專門討論了驅(qū)動模糊測試技術(shù).最后對本文進(jìn)行總結(jié),討論了內(nèi)核模糊測試今后的發(fā)展方向.

      2 內(nèi)核模糊測試技術(shù)概述

      2.1 模糊測試

      模糊測試(Fuzz testing,Fuzzing)作為目前較為有效的軟件漏洞挖掘工具,在新世紀(jì)以來得到了學(xué)術(shù)界和工業(yè)界的廣泛應(yīng)用.模糊測試的核心思想是自動化或半自動的生成輸入數(shù)據(jù)到目標(biāo)程序中,監(jiān)測目標(biāo)程序運行是否發(fā)生異常.通過對造成程序運行失常的輸入執(zhí)行過程進(jìn)行分析,從而找出目標(biāo)程序中的隱藏缺陷.從測試?yán)蓙碚f,模糊測試可以劃分為基于生成(Generation-based)和基于變異(Mutation-based)兩種技術(shù)路線,也有將其稱為基于語法(Grammar-based)和基于反饋(Feedback-based)的模糊測試.基于生成的模糊測試偏向于利用目標(biāo)程序輸入語法、目標(biāo)靜態(tài)分析等知識生成大致符合目標(biāo)軟件輸入格式的測試?yán)?而基于變異的模糊測試則使用遺傳算法等方法迭代生成表現(xiàn)更好的測試?yán)?從引導(dǎo)方式上來說,模糊測試可以劃分為基于隨機的模糊測試(blind fuzzing)和基于覆蓋率引導(dǎo)的模糊測試.在實踐中,模糊測試確實能夠挖掘出內(nèi)存錯誤、數(shù)據(jù)競爭、邏輯錯誤等多種類型的漏洞.

      圖1 模糊測試Fig.1 Fuzzing test

      如圖1所示,有研究[11,26-28,31-33]將模糊測試與靜態(tài)分析、符號執(zhí)行、污點分析、機器學(xué)習(xí)等技術(shù)結(jié)合,加強模糊測試平臺漏洞挖掘能力,黎軍[6]等人對模糊測試進(jìn)行系統(tǒng)性的總結(jié).模糊測試主要的缺點是覆蓋率較低,生成的測試?yán)话阒荒芨采w小部分目標(biāo)程序代碼,并且大量測試?yán)旧鲜菬o效的.實踐中,模糊測試在漏洞挖掘領(lǐng)域取得良好效果,已經(jīng)成為業(yè)界主流的漏洞挖掘方法.

      2.2 內(nèi)核模糊測試面臨的挑戰(zhàn)

      與普通軟件的安全研究相比,針對操作系統(tǒng)內(nèi)核的安全研究一直面臨著代碼規(guī)模過于龐大、功能復(fù)雜、部分模塊相關(guān)文檔較少、調(diào)試運行不便等諸多問題,而針對內(nèi)核的模糊測試也在此列.與針對普通軟件的模糊測試相比,實現(xiàn)系統(tǒng)內(nèi)核的高效模糊測試需要克服以下幾個問題.

      2.2.1 操作系統(tǒng)內(nèi)核代碼規(guī)模帶來的問題

      2018年9月整個Linux系統(tǒng)代碼行數(shù)已經(jīng)超過了2500萬行(1)https://phoronix.com/misc/linux-20180915/index.html,Windows在2003年(NT 5.2)就已經(jīng)達(dá)到了5000萬行[5].龐大的代碼規(guī)模使得模糊測試的目標(biāo)模塊和系統(tǒng)調(diào)用接口數(shù)目非常多.并且Linux、Windows等系統(tǒng)都能在不同硬件架構(gòu)上運行,這也進(jìn)一步加劇了模糊測試面臨的規(guī)模問題.由于內(nèi)核代碼的規(guī)模,研究者很難對內(nèi)核的各個模塊具體運行有廣泛又細(xì)致的理解,也導(dǎo)致內(nèi)核模糊測試過程中測試?yán)跏挤N子挑選、崩潰樣本分析等人工參與的環(huán)節(jié)需要消耗大量人力來提取相關(guān)信息.

      2.2.2 操作系統(tǒng)內(nèi)核運行環(huán)境帶來的問題

      模糊測試中必不可少的一個環(huán)節(jié)就是需要對被測目標(biāo)軟件運行狀態(tài)進(jìn)行監(jiān)控,發(fā)現(xiàn)軟件的異常狀態(tài).而操作系統(tǒng)內(nèi)核位于計算機體系底層,特權(quán)級高,不僅需要處理硬件管理事務(wù),還要對上層用戶程序的運行提供支撐,這就使得內(nèi)核作為被監(jiān)控程序運行存在一定的技術(shù)困難.早期的模糊測試采用直接在物理主機上運行,顯而易見的存在漏洞觸發(fā)狀態(tài)記錄、漏洞調(diào)試上的巨大困難,因此大部分的內(nèi)核模糊測試都不同程度上利用虛擬化技術(shù)來監(jiān)控運行內(nèi)核.內(nèi)核負(fù)責(zé)整個系統(tǒng)任務(wù)切換和資源分配等基礎(chǔ)功能,運行狀態(tài)非常復(fù)雜多變,提取漏洞觸發(fā)狀態(tài)語義比較困難,尤其是數(shù)據(jù)競爭和邏輯錯誤兩種漏洞更為明顯.另外,作為高權(quán)限運行實體,操作系統(tǒng)內(nèi)核還會出現(xiàn)二次獲取[24,25](double fetch)和二次寫入(double write)等獨特的邏輯漏洞.

      2.2.3 操作系統(tǒng)開發(fā)方式帶來的問題

      由于Windows、MacOS等操作系統(tǒng)內(nèi)核的大部分代碼都不對外開放,非廠商相關(guān)研究者針對這些閉源操作系統(tǒng)的內(nèi)核漏洞挖掘就必須對閉源模塊進(jìn)行逆向分析,并且無法實現(xiàn)基于源碼插樁的覆蓋率引導(dǎo)模糊測試.此外,Linux等開源操作系統(tǒng)為了實現(xiàn)更好的功能,更新速度很快,Linux v4在2018年(2)https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/refs/tags就從4.15發(fā)展到了4.20,發(fā)布了40多個最終測試版本,這也給內(nèi)核模糊測試工作帶來了很大壓力.

      2.3 內(nèi)核模糊測試基本框架

      內(nèi)核模糊測試的威脅模型將用戶態(tài)或硬件輸入到操作系統(tǒng)內(nèi)核的數(shù)據(jù)看作是威脅來源,即從低權(quán)限的用戶空間、外部硬件到高權(quán)限的內(nèi)核空間中的輸入是不可信的.目前,用戶態(tài)輸入作為威脅來源的模糊測試已經(jīng)有了比較多的研究,但將硬件輸入作為威脅來源的研究還較少,文獻(xiàn)[39]對這個方面進(jìn)行了討論.

      以圖2為例,內(nèi)核模糊測試將生成的畸形數(shù)據(jù)輸入到被測內(nèi)核,并期望發(fā)生內(nèi)核運行異常.但由于操作系統(tǒng)內(nèi)核的特殊性,內(nèi)核模糊測試在測試?yán)?、輸入、?nèi)核運行監(jiān)控等方面需要更高的技術(shù)實現(xiàn)水平.除了直接使用物理機以及將內(nèi)核代碼庫做用戶態(tài)模糊測試,其他內(nèi)核模糊測試工具都同程度上應(yīng)用了虛擬化方式運行目標(biāo)系統(tǒng).一般來說,內(nèi)核模糊測試主要的評價標(biāo)準(zhǔn)包括內(nèi)核代碼覆蓋率、漏洞觸發(fā)識別能力以及內(nèi)核監(jiān)控運行額外開銷等等.

      3 內(nèi)核模糊測試技術(shù)分類和典型工具

      除了傳統(tǒng)軟件測試中基于對目標(biāo)軟件知識依賴程度而劃分的白盒、灰盒及黑盒測試,內(nèi)核模糊測試還有很多的分類標(biāo)準(zhǔn).系統(tǒng)內(nèi)核的攻擊面基本上可以認(rèn)為是傳入內(nèi)核的各種數(shù)據(jù)接口,包括系統(tǒng)調(diào)用參數(shù)、硬件輸入、用戶態(tài)共享到內(nèi)核態(tài)的內(nèi)存對象等.從這些攻擊面來看,內(nèi)核模糊測試可以分為面向系統(tǒng)調(diào)用和面向系統(tǒng)數(shù)據(jù)處理接口兩種.從引導(dǎo)方式來看,內(nèi)核模糊測試工具也可以分為隨機模糊測試(blind fuzzing)和覆蓋率引導(dǎo)的模糊測試.除此以外,也可以用針對的目標(biāo)操作系統(tǒng)、漏洞類型將內(nèi)核模糊測試工具進(jìn)行分類.文獻(xiàn)[7]對針對系統(tǒng)調(diào)用的模糊測試工具進(jìn)行了總結(jié),根據(jù)工作原理將內(nèi)核模糊測試工具分為了基于隨機生成、基于類型知識、基于鉤子以及基于反饋驅(qū)動四種類型.另外,還有一類是基于內(nèi)核漏洞狀態(tài)感知的模糊測試工具,這種模糊測試的測試?yán)斎肟梢允沁\行正常的程序,通過對內(nèi)核狀態(tài)的監(jiān)控,進(jìn)而捕獲信息泄露、內(nèi)存錯誤等類型的漏洞.值得注意的是,隨著移動互聯(lián)網(wǎng)和物聯(lián)網(wǎng)的發(fā)展,模糊測試也成為挖掘這些平臺漏洞的通用方法[18,37].

      圖2 基于覆蓋率反饋的內(nèi)核模糊測試Fig.2 Cover age-guided kernel fuzzing

      3.1 面向內(nèi)核數(shù)據(jù)處理接口模糊測試工具

      操作系統(tǒng)內(nèi)核需要處理很多從硬件以及用戶空間中傳入的各種輸入數(shù)據(jù),從內(nèi)核安全的角度來看,這些數(shù)據(jù)輸入的接口都可以看做是系統(tǒng)內(nèi)核的攻擊面.部分模糊測試工具利用AFL(3)http://lcamtuf.coredump.cx/afl/等針對普通軟件模糊測試工具將用戶態(tài)生成的隨機數(shù)據(jù)輸入到系統(tǒng)文件鏡像掛載、音頻視頻處理等接口中,期望發(fā)現(xiàn)漏洞.比較典型工具有KernelFuzzing(4)https://github.com/oracle/kernel-fuzzing、kAFL[13]TriforceLinuxSyscallFuzzer(5)https://github.com/nccgroup/TriforceLinuxSyscallFuzzer、JANUS[42]等等.kAFL創(chuàng)造性的使用Intel PT(6)https://software.intel.com/en-us/node/721535(Processor Trace)和Intel VT-x兩個硬件特性,實現(xiàn)了在虛擬機中使用PT技術(shù)對內(nèi)核進(jìn)行動態(tài)跟蹤,大大的提高了針對內(nèi)核模糊測試的效率.通過隨機填充、比特翻轉(zhuǎn)、字節(jié)翻轉(zhuǎn)、代數(shù)變換、興趣字段探測、段拼接等方法生成文件系統(tǒng)鏡像,通過不斷的掛載鏡像文件對文件系統(tǒng)進(jìn)行漏洞挖掘.同時,kAFL也使用AFL的位圖(Bitmap)來記錄測試?yán)斎牒髢?nèi)核程序控制流邊,實現(xiàn)了覆蓋率反饋機制.JANUS是一個專門針對文件系統(tǒng)進(jìn)行模糊測試的工具.這個工作創(chuàng)造性地采用了Linux Kernel Library 將Linux文件子系統(tǒng)轉(zhuǎn)換到用戶態(tài)單獨測試,減少了操作系統(tǒng)中其他子系統(tǒng)的影響,極大的提高了漏洞復(fù)現(xiàn)能力.JANUS還使用對文件鏡像和文件操作兩個維度進(jìn)行模糊測試,有效增加了代碼覆蓋率.

      3.2 針對系統(tǒng)調(diào)用接口的模糊測試工具

      模糊測試技術(shù)是為了測試Linux系統(tǒng)的健壯性而發(fā)明[2]的.針對系統(tǒng)調(diào)用接口的模糊測試工具可以追溯到1991年tsys程序,這個程序循環(huán)生成不正常的系統(tǒng)調(diào)用參數(shù),通過syscall函數(shù)將這些參數(shù)交給系統(tǒng)調(diào)用執(zhí)行,從而實現(xiàn)觸發(fā)系統(tǒng)崩潰.由于系統(tǒng)調(diào)用數(shù)目較多,大部分模糊測試工具都將目標(biāo)聚焦到部分系統(tǒng)調(diào)用上.Perf_fuzzer[23]是一個專門針對Linux系統(tǒng)Perf_events工具接口進(jìn)行模糊測試的工具,使用參數(shù)和系統(tǒng)調(diào)用等知識來生成測試?yán)?主要用于解決Linux內(nèi)核引入perf工具以后導(dǎo)致的內(nèi)核頻繁崩潰問題.Trinity(7)https://github.com/kernelslacker/trinity將系統(tǒng)調(diào)用參數(shù)的數(shù)據(jù)類型、參數(shù)值接受范圍、接受的特定參數(shù)值等參數(shù)格式知識加入到測試?yán)蛇^程中,大大的提高了測試?yán)|(zhì)量.IMF[7]重點關(guān)注了系統(tǒng)調(diào)用之間的依賴關(guān)系對于漏洞挖掘的影響.IMF通過對MacOS上運行的程序進(jìn)行動態(tài)跟蹤,記錄系統(tǒng)調(diào)用的執(zhí)行順序和參數(shù)使用.將存在參數(shù)數(shù)據(jù)依賴和系統(tǒng)調(diào)用順序依賴的系統(tǒng)調(diào)用識別出來,生成系統(tǒng)調(diào)用依賴模型,并使用模型來生成用于模糊測試的系統(tǒng)調(diào)用序列.

      Syzkaller(8)https://github.com/google/syzkaller是Google開發(fā)的內(nèi)核漏洞模糊測試平臺,規(guī)模相當(dāng)龐大,能夠?qū)Χ喾N操作系統(tǒng)平臺進(jìn)行模糊測試工作.Syzkaller使用一系列的系統(tǒng)調(diào)用模板生成符合一定規(guī)范的系統(tǒng)調(diào)用序列,將測試?yán)刹糠趾蜏y試?yán)龍?zhí)行部分都放到虛擬機中,生成可以合法訪問的緩存區(qū)等內(nèi)存對象參數(shù).此外,Syzkaller還對整個虛擬機管理做了很大的改進(jìn),使得Syzkaller可以在QEMU、Google云平臺、KVM等多種虛擬化及硬件調(diào)試平臺上運行,并且能夠大規(guī)模集群化的運行在大量主機上.值得注意的是,Syzkaller實現(xiàn)了一個自動化地對Linux內(nèi)核最新版本進(jìn)行模糊測試的一個Syzbot(9)https://syzkaller.appspot.com組件,并運行在Google公司的云平臺上,已經(jīng)自動化地挖掘出3000多個各類系統(tǒng)內(nèi)核缺陷.Syzkaller是一個優(yōu)秀的內(nèi)核漏洞挖掘平臺,其Linux內(nèi)核上實現(xiàn)的源碼插樁覆蓋率記錄、運行集群管理、漏洞捕捉技術(shù)、系統(tǒng)調(diào)用函數(shù)模板、漏洞復(fù)現(xiàn)代碼自動生成等工作極大的方便了內(nèi)核漏洞挖掘.目前有大量研究都是針對Syzkaller平臺在各個方面進(jìn)行的改進(jìn),如靜態(tài)分析系統(tǒng)調(diào)用之間依賴關(guān)系提升模糊測試覆蓋率的Moonshine[26],以及結(jié)合靜態(tài)分析專門挖掘設(shè)備驅(qū)動漏洞的DIFUZE[30]等等.

      3.3 基于感知的內(nèi)核模糊測試工具

      基于感知的內(nèi)核模糊測試工具的主要思路是通過虛擬化等方法,提取內(nèi)核活動中可能存在漏洞狀態(tài)的語義,捕獲內(nèi)核漏洞.這種方法在檢測信息泄漏類型的漏洞方面有比較好的效果.Bochspwn[12]利用Bochs模擬器模擬執(zhí)行Windows等目標(biāo)系統(tǒng),對系統(tǒng)內(nèi)核數(shù)據(jù)進(jìn)行預(yù)先的污染,并對內(nèi)核空間傳遞到用戶空間的數(shù)據(jù)進(jìn)行檢查,通過這種污點跟蹤的技術(shù),Bochspwn不僅能對能夠?qū)?nèi)核流出到文件系統(tǒng)的泄露進(jìn)行探測,還能探測到二次獲取和二次寫入等邏輯漏洞.與之類似,Digtool[14]實現(xiàn)了一套虛擬機監(jiān)控程序,利用硬件虛擬化和Intel PT等功能,極大的提升了監(jiān)控系統(tǒng)調(diào)用接口和內(nèi)核活動的能力,可以方便的收集整個內(nèi)核的運行情況.

      3.4 結(jié)合代碼靜態(tài)分析的內(nèi)核模糊測試

      在內(nèi)核漏洞挖掘領(lǐng)域,代碼靜態(tài)分析作為軟件安全白盒測試中最為重要的方法,出現(xiàn)了很多研究成果.通過結(jié)合代碼靜態(tài)分析覆蓋率高、檢測結(jié)果可靠性(Soundness)強等優(yōu)點,可以有效的補足模糊測試的缺點,提升模糊測試效果.Moonshine[26]與IMF思路較為相似,使用靜態(tài)分析工具對系統(tǒng)調(diào)用的內(nèi)核代碼實現(xiàn)進(jìn)行依賴性分析,發(fā)掘內(nèi)核狀態(tài)讀寫方面依賴,然后基于這些依賴從trace中提取系統(tǒng)調(diào)用測試序列,輸入到Syzkaller中執(zhí)行,提高了模糊測試的代碼覆蓋率.Razzer[40]主要針對內(nèi)核中的數(shù)據(jù)競爭漏洞進(jìn)行挖掘,利用LLVM(10)對Linux代碼進(jìn)行靜態(tài)分析,找到代碼中可能發(fā)生數(shù)據(jù)競爭的指令對.通過定制化地修改Syzkaller和QEMU,實現(xiàn)了生成包含潛在發(fā)生數(shù)據(jù)競爭代碼的測試?yán)?精確地執(zhí)行數(shù)據(jù)競爭中特定指令對,并驗證其競態(tài)訪問后果,從而找到可以發(fā)生競爭的代碼.

      3.5 針對驅(qū)動程序的模糊測試

      內(nèi)核驅(qū)動程序模糊測試主要針對的read、write、ioctl等系統(tǒng)調(diào)用進(jìn)行模糊測試.而沒有專門對應(yīng)系統(tǒng)調(diào)用函數(shù)的Windows系統(tǒng),也可以采用相似的方法,將模糊器生成的數(shù)據(jù)傳入到設(shè)備控制、輸入和輸出接口中(11)https://llvm.org https://github.com/Cr4sh/ioctlfuzzer. https://github.com/debasishm89/iofuzz https://docs.microsoft.com/en-us/windows-hardware/drivers/devtest/how-to-perform-fuzz-tests-with-iospy-and-ioattack https://code.google.com/archive/p/ioctlbf/.

      DIFUZE[30]使用代碼靜態(tài)分析方法,提取IOCTL系統(tǒng)調(diào)用接口的數(shù)據(jù)結(jié)構(gòu)和控制命令信息,生成更為符合IOCTL系統(tǒng)調(diào)用接口規(guī)定的測試?yán)?進(jìn)而提高模糊測試的覆蓋率.在Syzkaller的基礎(chǔ)上,DIFUZE實現(xiàn)了一整套利用驅(qū)動程序知識提高模糊測試能力的框架.Charm[38]主要實現(xiàn)了一種能夠在X86體系的主機上對ARM移動設(shè)備系統(tǒng)驅(qū)動進(jìn)行模糊測試的架構(gòu),通過虛擬化等方法將Android設(shè)備上的驅(qū)動程序在X86平臺上重新編譯運行,實現(xiàn)了利用X86平臺上內(nèi)核模糊測試工具對Android設(shè)備驅(qū)動進(jìn)行模糊測試.PeriScope[39]對硬件不可信輸入造成的影響進(jìn)行了研究,將驅(qū)動程序接收外部設(shè)備數(shù)據(jù)的接口作為模糊測試的目標(biāo),將硬件輸入數(shù)據(jù)作為測試?yán)?對采用MMIO和DMA通信的驅(qū)動程序進(jìn)行分析,并基于AFL和定制的KCOV(12)http://simonkagstrom.github.io/kcov實現(xiàn)了整個的模糊測試循環(huán).

      4 內(nèi)核模糊測試中的關(guān)鍵技術(shù)

      在內(nèi)核模糊測試框架的搭建中,針對目標(biāo)操作系統(tǒng)內(nèi)核,需要整體設(shè)計測試目標(biāo)接口、測試?yán)煞椒?、測試?yán)斎雸?zhí)行方式、反饋機制等方面.內(nèi)核模糊測試框架的搭建與普通應(yīng)用程序模糊測試比較類似,有研究將用戶態(tài)模糊器作為輸入生成器,也有部分研究另起爐灶,直接使用基于系統(tǒng)調(diào)用接口知識的方式生成測試?yán)?為了實現(xiàn)高效的漏洞挖掘,還需要重點考慮被測內(nèi)核運行方式、內(nèi)核漏洞觸發(fā)狀態(tài)感知、以及實現(xiàn)覆蓋率引導(dǎo)等幾個方面的問題.

      4.1 虛擬化技術(shù)

      一般來說,操作系統(tǒng)內(nèi)核只能運行在計算機體系特權(quán)級較高的層級上.2015年以前的內(nèi)核模糊測試研究[16,19,22]主要為利用鉤子(HOOK)技術(shù)對Windows、MacOS等操作系統(tǒng)部分函數(shù)進(jìn)行修改,實現(xiàn)輸入測試?yán)捅O(jiān)控系統(tǒng)崩潰功能.但為了實現(xiàn)對內(nèi)核狀態(tài)的較為方便監(jiān)控,就需要采用虛擬化技術(shù)將讓被測內(nèi)核降級到用戶態(tài)運行.在內(nèi)核模糊測試中一般使用軟件虛擬化和硬件虛擬化平臺運行被測內(nèi)核,常見的平臺有QEMU和KVM等.文獻(xiàn)[17,20]研究了使用虛擬化技術(shù)運行被測目標(biāo)系統(tǒng),文獻(xiàn)[13,40]等研究采用定制虛擬化工具的方法實現(xiàn)黑盒系統(tǒng)的覆蓋率生成、執(zhí)行漏洞觸發(fā)關(guān)鍵代碼等功能.Panda(13)https://github.com/panda-re/panda研究了利用虛擬化技術(shù)記錄漏洞生命周期,完整收集漏洞狀態(tài)語義,極大的方便了內(nèi)核漏洞的調(diào)試.另外,基于感知的內(nèi)核模糊測試工具基本上就是圍繞虛擬化技術(shù)展開研究的.從開始的系統(tǒng)加載到漏洞狀態(tài)檢測,此類工具都需要透過虛擬機或模擬器對內(nèi)核的運行狀態(tài)進(jìn)行監(jiān)控.

      4.2 內(nèi)核漏洞狀態(tài)感知技術(shù)

      內(nèi)核漏洞的感知技術(shù)也是內(nèi)核漏洞研究的一個重要方面,并且極大的決定著內(nèi)核漏洞挖掘的效率.內(nèi)核漏洞感知技術(shù)既需要精確地捕捉到內(nèi)核漏洞觸發(fā)時的寄存器狀態(tài)、堆棧狀態(tài)等底層硬件信息,還要對漏洞發(fā)生時相關(guān)內(nèi)存對象分配釋放信息、內(nèi)核棧信息、線程信息等上層漏洞語義進(jìn)行記錄.Linux系統(tǒng)上實現(xiàn)了一系列的內(nèi)核安全違例檢查工具,這些工具都受到了PaX(14)https://www.kernel.org/doc/html/latest/dev-tools/kasan.html項目以及用戶態(tài)程序漏洞檢測技術(shù)的啟發(fā),利用雷區(qū)(Red Zone)等技術(shù)對Linux內(nèi)核中內(nèi)存讀寫、線程創(chuàng)建與銷毀等可能導(dǎo)致漏洞的行為進(jìn)行探測.其中以KASAN(15)https://www.kernel.org/doc/html/latest/dev-tools/ubsan.html(Kernel Address Sanitizer)和UBSAN19(UndefinedBehavior Sanitizer)最為成熟,已經(jīng)可以直接應(yīng)用到Linux內(nèi)核中,可以通過對內(nèi)存對象讀寫監(jiān)控、內(nèi)存對象周圍監(jiān)控、內(nèi)存延遲回收等內(nèi)核活動實現(xiàn)內(nèi)存錯誤探測,發(fā)現(xiàn)內(nèi)核中存在的堆棧移除、UAF(Use-after-free)和越界讀寫漏洞,并打印輸出漏洞信息.KMSAN(16)https://github.com/google/kmsan(Kernel Memory Sanitizer)和KTSAN(17)https://github.com/google/ktsan(Kernel Thread Sanitizer)還都處于原型開發(fā)階段,主要用于未初始化內(nèi)存使用和競態(tài)條件錯誤的探測.另外,針對信息泄漏漏洞,可以配合內(nèi)核數(shù)據(jù)污染,采用污點分析的方法進(jìn)行漏洞挖掘.

      4.3 代碼覆蓋率計算技術(shù)

      模糊測試中代碼覆蓋率指的是輸入的測試?yán)軌蜃屇繕?biāo)程序的控制流途經(jīng)代碼的數(shù)量,一般計數(shù)的單位都是控制流上基本塊.目前內(nèi)核模糊測試代碼覆蓋率計算主要方式包括源碼插樁、Intel PT控制流記錄、單步執(zhí)行、性能監(jiān)控單元(PMU)取樣、動態(tài)二進(jìn)制翻譯等方式(18)https://moflow.org/Presentations/Evolutionary%20Kernel%20Fuzzing-BH2017-rjohnson-FINAL.pdf.KCOV是Syzkaller項目組在GCC編譯器中實現(xiàn)的一種針對Linux 內(nèi)核的源碼插樁覆蓋率檢測工具,專門配合Syzkaller等模糊測試工具進(jìn)行覆蓋率測量.通過開啟特定的Linux內(nèi)核編譯選項,記錄執(zhí)行系統(tǒng)調(diào)用產(chǎn)生的內(nèi)核代碼覆蓋率.KCOV記錄的數(shù)據(jù)包括內(nèi)核代碼基本塊的地址和這些地址的數(shù)量.通過將每一個地址與上一個地址進(jìn)行哈希等運算生成控制流圖中的邊,然后以此計算整個測試?yán)龑?nèi)核代碼的覆蓋率.Intel Processor Trace(Intel PT)是Intel第五代(Broadwell) CPU上添加的一個新特性,實現(xiàn)了使用硬件對程序控制流進(jìn)行記錄,提高了代碼跟蹤的效率.通過使用Intel PT對內(nèi)核控制流進(jìn)行記錄,通過解碼獲取控制流覆蓋率的基本塊,就可以高效地記錄測試?yán)龑?yīng)的內(nèi)核代碼覆蓋率,不需要對源碼進(jìn)行處理,并且相對于動態(tài)二進(jìn)制翻譯極大的提高了效率.

      5 總結(jié)與展望

      操作系統(tǒng)作為信息基礎(chǔ)設(shè)施中地位不可動搖的可信計算基,使得針對操作系統(tǒng)內(nèi)核漏洞的研究一直以來都是安全研究的熱點.對內(nèi)核漏洞的深入研究也推動了內(nèi)核安全防御機制的快速發(fā)展,而安全機制的發(fā)展反過來又促進(jìn)研究者去發(fā)掘能夠繞過安全機制的方法和漏洞.內(nèi)核模糊測試作為高效的內(nèi)核漏洞挖掘工具,在近年來得到了較好的發(fā)展22,各種新技術(shù)新做法都被應(yīng)用到內(nèi)核模糊測試中,并且取得了良好的效果.kAFL在多個系統(tǒng)平臺上發(fā)現(xiàn)了8個文件系統(tǒng)漏洞,IMF在Mac OS上發(fā)現(xiàn)了32個內(nèi)核漏洞,Razzer在Linux系統(tǒng)內(nèi)核中發(fā)現(xiàn)了30個競態(tài)漏洞.值得一提的是,截止2019年4月,Syzkaller的自動化挖掘平臺syzbot在Linux系統(tǒng)內(nèi)核中發(fā)現(xiàn)了1200多個軟件脆弱點,極大的提高了內(nèi)核的安全性.

      目前,實踐中內(nèi)核模糊測試的主要局限性還是在于操作系統(tǒng)內(nèi)核復(fù)雜性導(dǎo)致的一系列問題上.首先內(nèi)核模糊測試還需要能力更強的漏洞檢測方法.由于內(nèi)核運行狀態(tài)較為復(fù)雜,大量的子系統(tǒng)事務(wù)相互影響,目前比較成熟的KASAN在檢測內(nèi)存錯誤也會存在無法準(zhǔn)確還原漏洞語義的情況,而針對未初始化內(nèi)存、數(shù)據(jù)競爭、未定義行為等漏洞的檢測更是存在較大困難,這也使得漏洞調(diào)試、復(fù)現(xiàn)等環(huán)節(jié)收到了巨大的限制.其次,目前的內(nèi)核模糊測試工具除Syzkaller系列以外都沒有正面面對操作系統(tǒng)內(nèi)核規(guī)模龐大、接口眾多的問題.Syzkaller雖然能夠一定程度自動化提取系統(tǒng)調(diào)用、系統(tǒng)庫函數(shù)等內(nèi)核調(diào)用接口,但仍然需要人工編寫測試?yán)傻哪0?最后,模糊測試固有的測試?yán)|(zhì)量不高的問題.目前IMF、Moonshine等工具雖然已經(jīng)對這個問題進(jìn)行了研究,但在解讀內(nèi)核中紛繁復(fù)雜的狀態(tài)關(guān)系上仍然還有較大的改進(jìn)空間.

      由于技術(shù)實現(xiàn)難度等原因,內(nèi)核模糊測試的發(fā)展相對于普通應(yīng)用程序模糊測試還是有一定的滯后性,將普通應(yīng)用程序模糊測試已有的方法應(yīng)用在內(nèi)核模糊測試上是一種比較經(jīng)濟的改進(jìn)方法.普通應(yīng)用程序的模糊測試在AFL等工具的基礎(chǔ)上使用了多種方法改進(jìn)了代碼覆蓋率的表示形式.如AFLFast[35]、Vuzzer[29]、CollAFL[9]等工具利用定向模糊測試、有向圖算法、靜態(tài)分析等方法改進(jìn)了原來基于控制流圖邊的覆蓋率表示算法,提高了漏洞挖掘的有效性.在測試?yán)珊蛨?zhí)行方面,Angora[11]、T-Fuzz[10]等工具使用的利用梯度下降算法和強制執(zhí)行流翻轉(zhuǎn)算法提高了測試?yán)馁|(zhì)量.另外,隨著神經(jīng)網(wǎng)絡(luò)技術(shù)的發(fā)展,也有研究[31-33]在模糊測試中應(yīng)用深度學(xué)習(xí)技術(shù)提高模糊測試能力.這些在普通應(yīng)用程序模糊測試中行之有效的方法都可以嘗試應(yīng)用到內(nèi)核模糊測試中.從長期來看,內(nèi)核模糊測試未來除了可以在傳統(tǒng)的虛擬化的基礎(chǔ)上進(jìn)行更加細(xì)致的研究,采用類似于JANUS的方法也是一種非常好的選擇,將內(nèi)核子系統(tǒng)或驅(qū)動抽離單獨對其進(jìn)行模糊測試,提高漏洞復(fù)現(xiàn)能力和測試效率.

      猜你喜歡
      測試工具覆蓋率內(nèi)核
      邊緣智力兒童及其智力測試工具的研究進(jìn)展
      民政部等16部門:到2025年村級綜合服務(wù)設(shè)施覆蓋率超80%
      萬物皆可IP的時代,我們當(dāng)夯實的IP內(nèi)核是什么?
      我國全面實施種業(yè)振興行動 農(nóng)作物良種覆蓋率超過96%
      強化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
      基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計
      Linux內(nèi)核mmap保護(hù)機制研究
      Http并發(fā)連接測試工具
      基于噴丸隨機模型的表面覆蓋率計算方法
      福祿克推出先進(jìn)的連接式測試工具系統(tǒng)
      长沙县| 绥宁县| 永宁县| 阜宁县| 竹山县| 吉林市| 东阳市| 玉溪市| 古蔺县| 壤塘县| 武安市| 竹溪县| 泰和县| 和政县| 宁城县| 奉新县| 湄潭县| 图片| 丽水市| 无棣县| 永兴县| 祁连县| 通化市| 泰兴市| 龙海市| 汤阴县| 邵阳市| 喜德县| 潮安县| 黎平县| 沾益县| 内江市| 沅陵县| 岳阳市| 会泽县| 卢氏县| 桐城市| 平湖市| 海门市| 曲周县| 正安县|