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

?

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

2019-09-09 03:38:40朱俊虎
關(guān)鍵詞:測(cè)試工具覆蓋率內(nèi)核

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

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

1 引 言

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

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

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

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

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

2.1 模糊測(cè)試

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

圖1 模糊測(cè)試Fig.1 Fuzzing test

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

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

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

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

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

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

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

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

由于Windows、MacOS等操作系統(tǒng)內(nèi)核的大部分代碼都不對(duì)外開放,非廠商相關(guān)研究者針對(duì)這些閉源操作系統(tǒng)的內(nèi)核漏洞挖掘就必須對(duì)閉源模塊進(jìn)行逆向分析,并且無法實(shí)現(xiàn)基于源碼插樁的覆蓋率引導(dǎo)模糊測(cè)試.此外,Linux等開源操作系統(tǒng)為了實(shí)現(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多個(gè)最終測(cè)試版本,這也給內(nèi)核模糊測(cè)試工作帶來了很大壓力.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3.5 針對(duì)驅(qū)動(dòng)程序的模糊測(cè)試

內(nèi)核驅(qū)動(dòng)程序模糊測(cè)試主要針對(duì)的read、write、ioctl等系統(tǒng)調(diào)用進(jìn)行模糊測(cè)試.而沒有專門對(duì)應(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ī)定的測(cè)試?yán)?進(jìn)而提高模糊測(cè)試的覆蓋率.在Syzkaller的基礎(chǔ)上,DIFUZE實(shí)現(xiàn)了一整套利用驅(qū)動(dòng)程序知識(shí)提高模糊測(cè)試能力的框架.Charm[38]主要實(shí)現(xiàn)了一種能夠在X86體系的主機(jī)上對(duì)ARM移動(dòng)設(shè)備系統(tǒng)驅(qū)動(dòng)進(jìn)行模糊測(cè)試的架構(gòu),通過虛擬化等方法將Android設(shè)備上的驅(qū)動(dòng)程序在X86平臺(tái)上重新編譯運(yùn)行,實(shí)現(xiàn)了利用X86平臺(tái)上內(nèi)核模糊測(cè)試工具對(duì)Android設(shè)備驅(qū)動(dòng)進(jìn)行模糊測(cè)試.PeriScope[39]對(duì)硬件不可信輸入造成的影響進(jìn)行了研究,將驅(qū)動(dòng)程序接收外部設(shè)備數(shù)據(jù)的接口作為模糊測(cè)試的目標(biāo),將硬件輸入數(shù)據(jù)作為測(cè)試?yán)?對(duì)采用MMIO和DMA通信的驅(qū)動(dòng)程序進(jìn)行分析,并基于AFL和定制的KCOV(12)http://simonkagstrom.github.io/kcov實(shí)現(xiàn)了整個(gè)的模糊測(cè)試循環(huán).

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

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

4.1 虛擬化技術(shù)

一般來說,操作系統(tǒng)內(nèi)核只能運(yùn)行在計(jì)算機(jī)體系特權(quán)級(jí)較高的層級(jí)上.2015年以前的內(nèi)核模糊測(cè)試研究[16,19,22]主要為利用鉤子(HOOK)技術(shù)對(duì)Windows、MacOS等操作系統(tǒng)部分函數(shù)進(jìn)行修改,實(shí)現(xiàn)輸入測(cè)試?yán)捅O(jiān)控系統(tǒng)崩潰功能.但為了實(shí)現(xiàn)對(duì)內(nèi)核狀態(tài)的較為方便監(jiān)控,就需要采用虛擬化技術(shù)將讓被測(cè)內(nèi)核降級(jí)到用戶態(tài)運(yùn)行.在內(nèi)核模糊測(cè)試中一般使用軟件虛擬化和硬件虛擬化平臺(tái)運(yùn)行被測(cè)內(nèi)核,常見的平臺(tái)有QEMU和KVM等.文獻(xiàn)[17,20]研究了使用虛擬化技術(shù)運(yùn)行被測(cè)目標(biāo)系統(tǒng),文獻(xiàn)[13,40]等研究采用定制虛擬化工具的方法實(shí)現(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)核模糊測(cè)試工具基本上就是圍繞虛擬化技術(shù)展開研究的.從開始的系統(tǒng)加載到漏洞狀態(tài)檢測(cè),此類工具都需要透過虛擬機(jī)或模擬器對(duì)內(nèi)核的運(yùn)行狀態(tài)進(jìn)行監(jiān)控.

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

內(nèi)核漏洞的感知技術(shù)也是內(nèi)核漏洞研究的一個(gè)重要方面,并且極大的決定著內(nèi)核漏洞挖掘的效率.內(nèi)核漏洞感知技術(shù)既需要精確地捕捉到內(nèi)核漏洞觸發(fā)時(shí)的寄存器狀態(tài)、堆棧狀態(tài)等底層硬件信息,還要對(duì)漏洞發(fā)生時(shí)相關(guān)內(nèi)存對(duì)象分配釋放信息、內(nèi)核棧信息、線程信息等上層漏洞語義進(jìn)行記錄.Linux系統(tǒng)上實(shí)現(xiàn)了一系列的內(nèi)核安全違例檢查工具,這些工具都受到了PaX(14)https://www.kernel.org/doc/html/latest/dev-tools/kasan.html項(xiàng)目以及用戶態(tài)程序漏洞檢測(cè)技術(shù)的啟發(fā),利用雷區(qū)(Red Zone)等技術(shù)對(duì)Linux內(nèi)核中內(nèi)存讀寫、線程創(chuàng)建與銷毀等可能導(dǎo)致漏洞的行為進(jìn)行探測(cè).其中以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)核中,可以通過對(duì)內(nèi)存對(duì)象讀寫監(jiān)控、內(nèi)存對(duì)象周圍監(jiān)控、內(nèi)存延遲回收等內(nèi)核活動(dòng)實(shí)現(xiàn)內(nèi)存錯(cuò)誤探測(cè),發(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)存使用和競(jìng)態(tài)條件錯(cuò)誤的探測(cè).另外,針對(duì)信息泄漏漏洞,可以配合內(nèi)核數(shù)據(jù)污染,采用污點(diǎn)分析的方法進(jìn)行漏洞挖掘.

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

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

5 總結(jié)與展望

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

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

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

猜你喜歡
測(cè)試工具覆蓋率內(nèi)核
邊緣智力兒童及其智力測(cè)試工具的研究進(jìn)展
民政部等16部門:到2025年村級(jí)綜合服務(wù)設(shè)施覆蓋率超80%
萬物皆可IP的時(shí)代,我們當(dāng)夯實(shí)的IP內(nèi)核是什么?
我國全面實(shí)施種業(yè)振興行動(dòng) 農(nóng)作物良種覆蓋率超過96%
強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計(jì)
Linux內(nèi)核mmap保護(hù)機(jī)制研究
Http并發(fā)連接測(cè)試工具
基于噴丸隨機(jī)模型的表面覆蓋率計(jì)算方法
福祿克推出先進(jìn)的連接式測(cè)試工具系統(tǒng)
巫山县| 偃师市| 应城市| 邹平县| 东山县| 康定县| 绍兴县| 宁陕县| 灵丘县| 驻马店市| 耿马| 井研县| 彩票| 额济纳旗| 罗源县| 南宁市| 峨眉山市| 禄丰县| 祥云县| 蓝田县| 镇平县| 顺义区| 康乐县| 金沙县| 凤台县| 卓尼县| 莲花县| 陇西县| 汕尾市| 福海县| 宁明县| 永宁县| 灵璧县| 中阳县| 从化市| 三原县| 怀来县| 保亭| 大兴区| 仁怀市| 祁门县|