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

?

競態(tài)漏洞檢測方法綜述

2018-02-07 01:47趙世斌周天陽朱俊虎王清賢
計算機工程與應用 2018年3期
關鍵詞:內核線程漏洞

趙世斌,周天陽,朱俊虎,王清賢

數(shù)字工程與先進計算國家重點實驗室,鄭州 450002

1 引言

現(xiàn)代操作系統(tǒng)功能結構和程序邏輯復雜,開發(fā)人員難以為所有共享資源提供完善的保護機制,導致了由于設計缺陷和實現(xiàn)不當產(chǎn)生的邏輯缺陷時有發(fā)生。這些邏輯缺陷被稱為競態(tài)漏洞,其不僅會導致程序本身運行出錯和系統(tǒng)崩潰,還常被攻擊者惡意利用,實現(xiàn)遠程命令執(zhí)行和本地提權等攻擊效果[1]。目前,Web服務、殺毒軟件等應用程序,Linux、Android和IOS操作等系統(tǒng)內核中潛藏的競態(tài)漏洞被頻繁曝光,競態(tài)漏洞日益成為威脅網(wǎng)絡信息系統(tǒng)安全的嚴重隱患。

競態(tài)漏洞與堆棧溢出、格式化字符串等傳統(tǒng)漏洞相比,具有隱蔽性強、難以調試、攻擊效果明顯等特點。目前,學者主要從程序競爭性行為分析以及由此觸發(fā)的破壞性結果兩個方面著手進行研究。前者主要針對競態(tài)漏洞的發(fā)生條件進行分析,后者主要針對漏洞觸發(fā)后漏洞利用過程中的程序異常行為進行分析。因為程序異常行為分析和競態(tài)漏洞的成因關系不密切,本文主要面向競態(tài)漏洞的發(fā)生條件進行研究。1992年,Netzer和Miller論證指出,由競態(tài)程序行為導致的漏洞發(fā)現(xiàn)與定位是一個NP難問題[2]。

在漏洞挖掘與檢測領域,如何快速有效地檢測未知競態(tài)漏洞是一項極具挑戰(zhàn)性的研究工作。近年來,研究人員從不同系統(tǒng)特權級對競態(tài)漏洞的產(chǎn)生機理及其檢測技術展開了富有成效的研究,主要分為用戶態(tài)和內核態(tài)兩個方向。其中,用戶態(tài)競態(tài)漏洞檢測研究重點是訪問共享資源的程序行為的邏輯關系[3-10],以及如何在有限條件下平衡檢測效率和準確率之間的關系[11-17];內核態(tài)競態(tài)漏洞檢測研究則側重于解決程序語義視圖缺失問題,同時盡量減少侵入式檢測方法對內核平穩(wěn)高效運行的影響。隨著系統(tǒng)虛擬化技術不斷成熟和應用,研究人員嘗試利用虛擬機監(jiān)控器(hypervisor)的特權級優(yōu)勢,從系統(tǒng)底層對操作系統(tǒng)程序行為進行動態(tài)監(jiān)控和調試分析[18],取得了較好的檢測效果,為競態(tài)漏洞檢測研究探索了新方向。

本文從競態(tài)漏洞定義出發(fā),分析了不同類型程序競態(tài)缺陷以及由此引發(fā)競態(tài)漏洞的作用機理;在綜合研究各類競態(tài)漏洞檢測原理與實現(xiàn)技術的基礎上,提出了競態(tài)漏洞檢測基本范式和通用框架,深入分析了競態(tài)漏洞檢測涉及的關鍵技術環(huán)節(jié)及其需要解決的核心問題;依據(jù)不同檢測目的和實現(xiàn)方法,分別論述了用戶態(tài)、內核態(tài)兩大類競態(tài)漏洞檢測研究中的技術思想及其發(fā)展脈絡,指出了制約檢測效率的瓶頸問題以及可能的解決方法。本文對競態(tài)漏洞檢測技術的總結展望將為當前及未來研究提供借鑒與參考。

2 競態(tài)漏洞檢測技術概述

如圖1所示,競態(tài)漏洞檢測技術是一個數(shù)據(jù)提取和分析的過程。進行競態(tài)漏洞檢測首先需要選擇數(shù)據(jù)的類型,即共享資源操作軌跡,包括共享內存讀寫、共享磁盤讀寫、信號量的使用、鎖的使用、設備的使用等;然后根據(jù)需要的數(shù)據(jù)類型采取合適的數(shù)據(jù)提取方法,包括日志記錄、插樁、虛擬化技術、Intel PT技術等;最后通過設計合適的數(shù)據(jù)分析方法對提取的數(shù)據(jù)進行分析,得到正確的判決結果。其中操作軌跡提取和漏洞觸發(fā)識別組成了競態(tài)漏洞檢測的基本框架。

圖1 競態(tài)漏洞檢測整體框架示意圖

2.1 競態(tài)漏洞定義與分類

競態(tài)條件(race condition)是指這樣一種情形——多個線程或進程在讀寫一個共享數(shù)據(jù)時結果依賴于它們執(zhí)行的相對時間。競態(tài)條件發(fā)生在多個進程或者線程讀寫數(shù)據(jù)時,其最終的結果依賴于多個進程的指令執(zhí)行順序。例如,在多個任務系統(tǒng)中,兩個連續(xù)的操作作用在同一個文件時,系統(tǒng)會按照競爭條件的原則做出決定。此時,兩個連續(xù)操作之間存在一定的時間間隔,如果攻擊者利用這個時間間隔對文件進行了惡意篡改,則產(chǎn)生了競態(tài)漏洞利用。

競態(tài)條件漏洞,又名競爭條件漏洞,簡稱競態(tài)漏洞,其定義為事件的執(zhí)行時間或順序影響程序正確性的一種缺陷[2]。競態(tài)漏洞的定義是從程序執(zhí)行產(chǎn)生的結果進行定義的,只有競態(tài)條件發(fā)生且造成正確性缺失的情況才會被稱為競態(tài)漏洞;當競態(tài)條件發(fā)生,但是沒有對程序正確性造成影響,不能稱之為競態(tài)漏洞。

競態(tài)漏洞的定義可以看出,競態(tài)漏洞檢測的關鍵在于:一是及時發(fā)現(xiàn)并定位競爭性的資源訪問(可簡稱為競態(tài)條件的產(chǎn)生);二是已構成競態(tài)條件時危害程序正確性的異常行為。由于危害程序正確性的行為復雜多樣,包括但不限于命令執(zhí)行、信息泄露、拒絕服務、本地提權等各類漏洞利用行為,難以通過單一的檢測方法實現(xiàn)所有異常行為的檢測,因此研究人員更傾向于從競態(tài)漏洞的產(chǎn)生原因(即競態(tài)條件)來進行研究。不同原因產(chǎn)生的競態(tài)漏洞具有不同特點,利用這些特點進行檢測更有針對性。目前,針對競態(tài)條件的研究主要包括:數(shù)據(jù)競爭和TOCTTOU(Time Of Check To Time Of Use)兩類。

2.1.1 數(shù)據(jù)競爭

一個內存訪問操作定義e為一個四元組(m,t,L,a),其中:m為內存訪問操作的內存地址;t為標識內存訪問操作的線程;L為操作所屬線程擁有的鎖集合;a為內存訪問操作的類型(READ或WRITE)。

數(shù)據(jù)競爭IsRace(ei,ej)是滿足以下條件的兩個內存訪問操作[19]:(1)內存訪問位置相同;(2)兩者并發(fā)執(zhí)行;(3)至少有一個為寫操作;(4)未使用“互斥”的同步機制約束。表示為:

2016年被曝光的DirtyCow漏洞(CVE-2016-5195)是最為典型的數(shù)據(jù)競爭。該漏洞是由于Linux內核在處理寫時復制的過程中沒有限制內存的競爭性訪問,任意文件在寫時復制中可被惡意篡改,進而被攻擊者用來進行提權操作[20]。DirtyCow漏洞存在于Linux內核2.6.22以上的所有版本中,危害范圍廣泛,包括絕大多數(shù)Linux服務器、主機以及安卓手機[21]。

如圖2所示,正常的程序流程三次調用了faultin_page函數(shù)完成了三個步驟,其中第二次進入faultin_page主要是處理寫權限的頁錯誤問題,要求的寫權限標志會被去掉,即去掉FOLL_WRITE標志位,第三次調用faultin_page時已經(jīng)成功得到cow后的頁面,且flags已經(jīng)去掉FOLL_WRITE,因此不會再產(chǎn)生寫錯誤的處理,可以直接寫入cow的頁。但是如果在上述流程即第二次頁錯誤處理結束時,在一個新的線程調用madvise,會unmap掉前面cow的頁面,又進入缺頁處理,這里不同的是在do_fault調用時,由于沒有了寫權限的要求,直接調用了do_read_fault讀取映射文件的內存頁,而不是內存頁副本,后續(xù)即可實現(xiàn)越權寫操作。在DirtyCow漏洞中,兩個線程競爭的資源是內存頁,并且造成了程序正確性的影響,所以DirtyCow漏洞是數(shù)據(jù)競爭。

圖2 DirtyCow漏洞觸發(fā)流程圖

由定義分析可知,數(shù)據(jù)競爭是競態(tài)漏洞產(chǎn)生的必要條件,但不是充分條件。這是因為某些數(shù)據(jù)競爭發(fā)生時并不會影響程序的正確性,例如當兩個進程競爭的內存共享資源和兩個進程的邏輯完全無關,則認為構成數(shù)據(jù)競爭但是不構成競態(tài)漏洞。由此可見,只有那些影響程序正確性的競爭性數(shù)據(jù)訪問才可構成競態(tài)漏洞產(chǎn)生的充分條件,DirtyCow正是由于在數(shù)據(jù)競爭發(fā)生之后導致任意文件被惡意篡改的危害性結果,才被研究人員歸結為競態(tài)漏洞。

2.1.2 TOCTTOU

TOCTTOU是競態(tài)條件的一種,指計算機系統(tǒng)中的資源與權限等狀態(tài)在檢查(安全授權)和使用這個檢查結果之間,因為檢查結果(如授權狀態(tài))在這段時間發(fā)生了改變而造成的漏洞產(chǎn)生[22]。TOCTTOU通常發(fā)生在文件系統(tǒng)的訪問時,特別是在UNIX操作系統(tǒng)中較為常見,文件系統(tǒng)訪問一般會要求對文件先檢查再寫入,這就導致檢查與讀寫操作之間存在時間間隔,攻擊者可利用這種時間間隔對文件系統(tǒng)展開攻擊,如寫入惡意代碼等。2010年爆出的KDE桌面本地提權漏洞(CVE-2010-0436),就發(fā)生在 kdebase-workspace-4.1.4/kdm/backend/ctrl.c的openctrl功能中,根據(jù)漏洞產(chǎn)生原因與實現(xiàn)機理研究人員將其歸結為一種TOCTTOU型競態(tài)漏洞[23]。

目前,針對類UNIX系統(tǒng)的競態(tài)漏洞檢測主要是利用其文件系統(tǒng)的TOCTTOU特點展開研究[24]。類Unix文件系統(tǒng)中存在TOCTTOU缺陷的根本原因在于文件名和文件對象之間的映射是可變的,如果symlink等操作的時機準確,那么可以在文件的檢查和使用之間替換文件,從而導致錯誤發(fā)生。

如圖3所示是TOUCTTOU的典型例子Binmail。Binmail是一個setuid-to-root程序,在普通用戶權限下可以調用執(zhí)行root用戶權限的操作。在正常的讀取郵件的過場中,Binmail首先通過lstat函數(shù)查看文件mail的信息,如果mail文件是正常文件,不是符號鏈接則執(zhí)行open函數(shù)打開郵件。但是由于lstat和open函數(shù)不是原始操作,所以如果在lstat函數(shù)檢查完畢后,另外一個線程或者進程可以通過unlink和symlink操作將mail文件替換為指向系統(tǒng)關鍵文件/etc/passwd等文件的鏈接,那么open的文件將會是替換后的系統(tǒng)關鍵文件,實現(xiàn)了任意文件讀取。

圖3 Binmail漏洞觸發(fā)流程圖

2.1.3 競態(tài)漏洞產(chǎn)生原因相互關系

由于不同進程擁有各自不同的內存、寄存器等資源,多進程執(zhí)行產(chǎn)生競態(tài)條件繼而引發(fā)漏洞利用的可能性較小。大部分不同進程之間發(fā)生競態(tài)漏洞的情況都是針對文件系統(tǒng)等多進程間共享資源TOUTTOU類型的競態(tài)漏洞[25]。線程因為共有內存的緣故,使得大部分競態(tài)漏洞都是線程之間資源競爭導致的。在現(xiàn)有CVE披露的競態(tài)漏洞中,線程之間競態(tài)漏洞最主要的原因是內存中數(shù)據(jù)競爭類型的競態(tài)漏洞[26]。

如韋恩圖(圖4)所示,因為數(shù)據(jù)競爭并不一定會對程序的正確性造成影響,所以數(shù)據(jù)競爭和競態(tài)漏洞是交集的關系。在韋恩圖中,存在同時屬于數(shù)據(jù)競爭和競態(tài)漏洞的區(qū)域,指數(shù)據(jù)競爭影響了程序正確性并造成了危害,可以被視為競態(tài)漏洞;導致程序存在屬于數(shù)據(jù)競爭但是不屬于競態(tài)漏洞的部分,指數(shù)據(jù)競爭沒有對程序的正確性造成影響;也存在不屬于數(shù)據(jù)競爭但是屬于競態(tài)漏洞的部分,指不滿足數(shù)據(jù)競爭的四個條件但是卻影響了程序的正確性,如死鎖。在文獻[3]中,特別地討論了數(shù)據(jù)競爭中有害和無害的區(qū)分方法。TOCTTOU中檢查的過程是為了確保數(shù)據(jù)不會被更改而誕生的過程,如果在此之后對數(shù)據(jù)進行了更改會違背檢查的目的,從而影響程序的正確性,所以TOCTTOU是競態(tài)漏洞的子集。

圖4 競態(tài)漏洞分類韋恩圖

在進行競態(tài)漏洞檢測方法的研究過程中,不會研究對程序正確性無法造成影響的數(shù)據(jù)競爭,研究人員主要研究的競態(tài)漏洞產(chǎn)生原因為數(shù)據(jù)競爭的有害部分和TOCTTOU。

2.2 競態(tài)漏洞檢測技術基本框架

競態(tài)漏洞與棧溢出、堆溢出、格式化字符串等傳統(tǒng)漏洞產(chǎn)生機理存在差異,是在開發(fā)之前由系統(tǒng)實現(xiàn)過程中對多進程、多線程相互干擾問題考慮不當而造成的安全隱患[27]。因此,競態(tài)漏洞具有較強的隱蔽性,模糊測試、符號執(zhí)行等傳統(tǒng)漏洞分析手段難以將其有效檢測出來[28];同時,由于競態(tài)漏洞主要發(fā)生在多進程或多線程相互作用之時,競爭性的程序運行環(huán)境給調試帶來很多挑戰(zhàn)。

根據(jù)對現(xiàn)有文獻研究,競態(tài)漏洞檢測基本框架主要包括兩個部分:操作軌跡提取和漏洞觸發(fā)識別[29]。操作軌跡提取是指從多進程或多線程的運行過程中提取共享資源的程序操作軌跡;漏洞觸發(fā)識別則是根據(jù)共享資源操作軌跡識別和判斷漏洞是否被觸發(fā)。不同競態(tài)漏洞的操作軌跡和漏洞觸發(fā)機理具有不同特點,相應的檢測思路也不盡相同,特別是在不同系統(tǒng)特權級環(huán)境下,檢測方法的實現(xiàn)方式差異較大。目前,在競態(tài)漏洞檢測框架的兩部分研究中,具體需要解決三個關鍵問題,分別是:數(shù)據(jù)種類選取、數(shù)據(jù)提取與管理以及檢測性能與準確性平衡。如圖5所示,在競態(tài)漏洞檢測基本框架下,這三個關鍵問題彼此影響,相互制約。

圖5 競態(tài)漏洞檢測技術基本框架面臨的問題

2.2.1 數(shù)據(jù)種類選取

面向不同檢測對象,在不同操作系統(tǒng)特權級環(huán)境中,依據(jù)不同檢測策略選取的數(shù)據(jù)種類在競態(tài)漏洞檢測中發(fā)揮不同的作用。系統(tǒng)調用數(shù)據(jù)是最基礎的數(shù)據(jù)種類,監(jiān)控操作系統(tǒng)調用,為競態(tài)漏洞檢測提供分析數(shù)據(jù),是現(xiàn)在內核態(tài)競態(tài)漏洞檢測中的基本方法[30];函數(shù)級別的數(shù)據(jù)是高語義級別的數(shù)據(jù),通常只能通過侵略式插樁的方式獲取,選取合適的函數(shù)進行監(jiān)控,可以生成完整的共享資源操作軌跡供檢測系統(tǒng)分析,是現(xiàn)在用戶態(tài)競態(tài)漏洞檢測中較為成熟的方法。操作類型也是數(shù)據(jù)種類提取需要考慮的問題,在完整共享資源操作軌跡提取方法中,通常會將內存、文件等共享資源操作區(qū)分為讀、寫、鎖[31]三種操作,按照邏輯順序排列后作為共享資源操作軌跡的記錄[32]。

2.2.2 數(shù)據(jù)提取與管理方式

數(shù)據(jù)的提取和管理方式是連接數(shù)據(jù)和分析系統(tǒng)的橋梁,是競態(tài)漏洞檢測技術基本框架需要研究的重要問題。數(shù)據(jù)提取的關鍵是對系統(tǒng)操作通過侵略式插樁[33]的方式進行調試,常見的侵略式插樁的方式有動態(tài)插樁技術、重編譯技術、HOOK技術。動態(tài)插樁技術指在待分析二進制程序中插入探針,通過探針的執(zhí)行進行數(shù)據(jù)的提取與分析;重編譯技術指在源碼層面加入數(shù)據(jù)提取的代碼,將程序重新編譯的方式進行數(shù)據(jù)的提?。籋OOK技術指通過改寫需要檢測的關鍵函數(shù),使得程序首先運行數(shù)據(jù)提取指令再恢復正常程序流程的方式實現(xiàn)數(shù)據(jù)提取。隨著硬件調試、虛擬化自省技術的快速發(fā)展,在系統(tǒng)外進行數(shù)據(jù)提取的方式逐漸成熟起來[34],在特定場景和條件下取得了不錯的效果。數(shù)據(jù)管理是數(shù)據(jù)提取后需要解決的重要問題。對提取的數(shù)據(jù)進行存儲有助于提高檢測的準確率,但數(shù)據(jù)管理本身會產(chǎn)生額外性能開銷,需要進一步展開研究,主要包括:數(shù)據(jù)存儲的數(shù)據(jù)結構設計及其空間復雜度,數(shù)據(jù)的存、查、刪等操作策略及其時間復雜度等。

2.2.3 性能與準確性的平衡

競態(tài)漏洞數(shù)據(jù)分析過程中的關鍵問題是性能和準確性的平衡問題。競態(tài)漏洞是由兩個或兩個以上進程/線程競爭資源造成的,因此數(shù)據(jù)分析需要對不同進程或線程的操作進行比較。操作系統(tǒng)內部對共享資源的訪問操作具有頻率高、種類多的特點。為提高檢測的準確性,應盡可能比對所有相關操作,但這會造成檢測開銷大的問題。因此在設計檢測方法時,必須考慮比較不同操作的性能開銷。針對不同的檢測環(huán)境和檢測目標,在現(xiàn)有的競態(tài)漏洞檢測方法中出現(xiàn)了注重性能和注重準確性兩種不同的理念。

3 用戶態(tài)競態(tài)漏洞檢測

用戶態(tài)競態(tài)漏洞檢測的本質是動態(tài)地監(jiān)控并行程序多個線程的內存訪問操作并進行數(shù)據(jù)分析。檢測程序通過監(jiān)控用戶態(tài)程序在并發(fā)執(zhí)行過程中發(fā)生的內存訪問操作和其使用的同步保護機制,使用算法推斷競態(tài)漏洞的發(fā)生,不同的檢測手段使用了不同的檢測與推斷的方法,而評價方法的三個最重要的因素是:漏報率、誤報率和額外性能開銷。漏報率指檢測方法所不能檢測到的競態(tài)漏洞占所有競態(tài)漏洞的比例;誤報率指檢測結果中不被確認為競態(tài)漏洞占檢測結果數(shù)量的比例;額外性能開銷指引入檢測方法后系統(tǒng)運行同樣的程序增長的時間占原運行時間的比例。目前,用戶態(tài)競態(tài)漏洞檢測分為兩種思路:happens-before方法[2]和lock-set方法[11]。happens-before方法注重準確性,誤報率低,但是無法檢測出所有潛在的競態(tài)漏洞,漏報率高,額外性能開銷大,研究人員的研究重點圍繞著性能優(yōu)化開展;lock-set方法注重效率,會產(chǎn)生虛警,誤報率高,系統(tǒng)額外開銷低,研究人員的研究重點圍繞著準確性提高開展。

3.1 happens-before方法

happens-before方法就是通過檢測兩個操作是否滿足happens-before關系來實現(xiàn)競態(tài)漏洞的檢測。如果在程序執(zhí)行過程中任意兩個操作都滿足happens-before關系則認為不存在競態(tài)漏洞,反之則認為存在。

happens-before關系最初在1978年Lamport提出,用來描述程序事件的一種偏序關系[2]。在兩個事件中,在一個事件發(fā)生前能夠確定另外一個事件的結果,則稱兩個事件滿足happens-before關系。如圖6所示,當一個線程對共享資源v的操作使用了鎖,并且在之后一個不同的線程中對共享資源v再次申請了鎖并且使用完后釋放,那么率先使用鎖對共享資源v操作的線程和后續(xù)使用鎖的線程滿足happens-before關系。通過設置happens-before規(guī)則,在每個多線程進程中檢測任意兩個操作之間是否滿足happens-before關系。如果存在兩個操作不滿足happens-before關系,則判定存在競態(tài)漏洞。因為happens-bofore方法能夠確保所有操作之間不會存在結果不確定的情況,所以happens-before方法誤報率低。20世紀90年代初期,Netzer對競態(tài)漏洞進行了詳細地分類與說明[29],預估了檢測競態(tài)漏洞的難度[2],將競態(tài)漏洞檢測問題抽象成一個數(shù)學模型進行了檢測方法的探討,并且率先基于Lamport的happens-before方法,使用信號量同步實現(xiàn)了競態(tài)漏洞的檢測[35]。

圖6 happens-before方法檢測案例

理想化的happens-before檢測模型需要記錄大量指令集操作并執(zhí)行推斷操作,以實現(xiàn)較高的檢測精度,但這會大大增加實際的程序開銷,嚴重影響檢測效率。檢測系統(tǒng)在實現(xiàn)過程中會使用向量時鐘(Vector Clock,VC)來記錄每個線程的共享資源操作軌跡數(shù)據(jù),來進行happens-before關系的判斷。如果被測程序有n個線程,那么每個VC都需要O(n)的存儲空間,每個VC操作需要O(n)的時間進行算法計算,而在操作系統(tǒng)中VC操作的數(shù)量每秒都可能數(shù)以千計,所以時間復雜度和空間復雜度都在O(n)的情況下會對系統(tǒng)造成極大的額外性能開銷,嚴重影響檢測效率和用戶體驗。

為了降低額外性能開銷,研究人員采用降低記錄VC操作數(shù)量的方法對happen-before進行改進。一種有效的思路是進行數(shù)據(jù)采樣,通過降低監(jiān)測分析數(shù)據(jù)量,提高檢測性能,例如,文獻[4]利用微軟通用語言運行庫(Common Language Runtime,CLR)設計了一種基于happens-before方法的檢測系統(tǒng)RaceTrack,該系統(tǒng)的每個檢測單元均維護了一個訪問歷史數(shù)據(jù)庫,為減少性能開銷,系統(tǒng)設置了檢測粒度和日志存儲量,通過對關鍵數(shù)據(jù)進行記錄,不關鍵的數(shù)據(jù)進行拋棄的方式有效地提升了檢測效率。文獻[3]則將數(shù)據(jù)競爭條件區(qū)分為有害和無害兩種類型,多線程執(zhí)行記錄分析[36]提高檢測效率。Maino等人對采樣方式進一步優(yōu)化,只記錄小于2%訪存操作,可以檢測出70%以上的競態(tài)漏洞[37]。

happens-before使用采樣方法進行優(yōu)化時,采樣的時機直接影響了性能和準確率。為了準確把握happensbefore的識別時機,F(xiàn)lanagan設計了FastTrack系統(tǒng)[5],改進了笨重的vectorclocks,采用了一種輕量級的vectorclocks,在沒有精度損失的情況下將監(jiān)控操作的時間復雜度從O(n)級別幾乎降至O(1)級別。Bond等人[6]設計的Pacer提供了高速的采樣機制,結合FastTrack實現(xiàn)了檢測的速率近似于取樣的速率,并將采樣產(chǎn)生的額外開銷降至1%~3%。后期研究人員繼續(xù)進行采樣方法的創(chuàng)新和優(yōu)化。Poluri等人[8]使用DJIT+結合FastTrack的方式進行了創(chuàng)新;Wilcox等人[9]為了進一步優(yōu)化,基于FastTrack使用了Array Shadow State進行了數(shù)據(jù)存取性能的優(yōu)化,與FastTrack相比提升了約35%的運行效率。文獻[38]中分別針對漏洞研究者和軟件使用者分別設計了高效的RaceChaser和精確的Caper,區(qū)分了注重效率和注重性能的應用場景。

除了努力提高檢測性能,研究人員還著重研究了檢測準確性和檢測范圍等問題。Huang等人通過控制流抽象的方式提升了happens-before的完備性[10],而不是提高性能。通過提高準確性和檢測范圍,happens-before方法的性能雖然會降低但是卻可以更好地為漏洞挖掘等不需要性能的應用服務。

3.2 lock-set方法

lock-set方法最早由Savage等人在Eraser系統(tǒng)中提出[11]。這種方法的基本思想是提取并記錄不同線程所申請的鎖的集合,當每個線程訪問共享資源時,取不同線程針對該共享資源鎖的交集,如果兩個線程對該共享資源沒有使用同一個鎖保護,那么兩個線程就可能同時對該共享資源進行操作,認為存在競態(tài)漏洞。

如圖7所示,在兩個線程中對相同的共享資源使用了不同的鎖進行保護,存在競態(tài)漏洞,會被lock-set方法檢測出來。lock-set方法的本質是檢測由不同進程或線程發(fā)出的沒有被相同鎖保護的沖突操作,其選取的數(shù)據(jù)種類是共享資源操作軌跡中的鎖操作,具有較快的數(shù)據(jù)提取效率;lock-set方法對數(shù)據(jù)進行分析時采用的是集合的操作,具有較快的數(shù)據(jù)分析效率。因此,lock-set方法與happen-before方法相比,同時具有更高效的數(shù)據(jù)提取和分析效率,可以有效降低性能開銷,被看作是happen-before的替代方法。當然,由于選取的數(shù)據(jù)片面,集合的判斷邏輯簡單,該方法存在虛警問題。由于lockset具有優(yōu)異的檢測效率,后續(xù)學者對其進行了更深入的研究,例如Praun等人[12]針對多線程的JAVA程序,利用面對對象的特殊屬性,將變量級別的檢測提升到了對象級別,優(yōu)化了檢測的性能,減少了16%~129%的即時開銷,和75%以上的空間開銷;Nishiyama[13]則是通過read-barrier-based方法減少檢測數(shù)據(jù)競爭的必須檢查的內存位置數(shù)量,針對SPEC基準測試,開銷分別為57.8%至735.7%,對于Java Grande基準測試則為0.6%至6 012.5%。

圖7 lock-set方法檢測案例

研究學者發(fā)現(xiàn)很難純粹通過算法優(yōu)化來同時獲得準確率和性能的大幅度地提升,于是采取了與其他檢測手段或方法結合的方式來輔助lock-set方法進行競態(tài)漏洞的檢測。Choi等人通過定義“weaker-than”關系過濾了一些冗余的訪存記錄,降低了訪存監(jiān)控開銷[5]。兩個已經(jīng)發(fā)生的訪存操作ei和ej滿足“weaker-than”關系,指對于任意將要發(fā)生的訪存操作ek來說,如果IsRace(ej,ek)發(fā)生可以推理出IsRace(ei,ek)發(fā)生,那么可以說ei“weaker-than”ej,即可以不考慮ei事件,將其從訪存記錄中刪除。美國伊利諾斯大學采取體系結果擴展技術在硬件平臺上實現(xiàn)了鎖集合方法,將集合操作轉換為硬件的位圖操作,提高了效率,但是這種方法的誤報率仍然高達0.89[14]。

為了能夠有效地減少誤報率,降低虛警,研究人員開始通過犧牲一部分性能來換取準確率。例如2007年出現(xiàn)的開源項目Helgrind[15],通過與happens-before結合的方式有效地提升了準確率。Helgrind是Valgrind的一部分,項目的目的是針對C/C++和Fortran程序設計一款檢測數(shù)據(jù)競爭的工具,其采取的是Eraser中的lock-set算法,并使用了happens-before來減少虛警。其通過將二進制文件轉換為中間語言,并使用即時編譯器執(zhí)行,并通過插件來進行分析。Helgrind出現(xiàn)后,Jannesari和Tichy基于Helgrind實現(xiàn)了多線程程序中數(shù)據(jù)競爭檢測的方法[16]。

還有一部分學者將注意力集中在繼續(xù)提高lock-set的性能上。例如,來自清華的Tianwei Sheng等人基于lock-set設計了RACEZ,其通過硬件性能監(jiān)測裝置透明地獲取指令記錄[17],性能優(yōu)異,平均只有2.8%的額外開銷;而后在2015年,同一個團隊使用了CPU硬件的PMU功能進行監(jiān)控,識別對內存的受保護的訪問和不受保護的訪問,對lock-set的性能進一步進行了優(yōu)化。

3.3 未來發(fā)展

在現(xiàn)有研究中,研究人員針對happens-before方法和lock-set方法做了大量的性能優(yōu)化和準確性提升的工作,取得了很多不錯的結果。但是在已有的方法中,仍然存在可以繼續(xù)深入研究和發(fā)展的空間。

3.3.1 智能精確的數(shù)據(jù)選取

在現(xiàn)有的方法中,通過取樣的方式進行happensbefore方法的性能優(yōu)化是優(yōu)秀的性能、準確性平衡的手段,但是取樣的方法是值得研究的問題,使用自適應的方式進行取樣是值得借鑒的一種嘗試。未來的檢測技術的研究手段中,可以使用機器學習、數(shù)據(jù)挖掘等更為智能的方法進行數(shù)據(jù)的選取,精確地選取必要的數(shù)據(jù),以較小的數(shù)據(jù)量獲得較大的信息量,提高檢測的性能和準確性[39]。

3.3.2 透明高效的數(shù)據(jù)提取

用戶態(tài)可以通過侵略式插樁的方式提取到高語義的共享資源操作軌跡數(shù)據(jù),但是提取方式不透明、效率低。不透明指在進行數(shù)據(jù)提取的過程中,惡意進程可能會發(fā)現(xiàn)檢測的痕跡從而和檢測系統(tǒng)形成對抗。效率低指數(shù)據(jù)提取的性能開銷大,影響程序的正常運行。

針對以上問題,探索新的共享資源操作軌跡數(shù)據(jù)的提取方式是研究人員關心的問題。Sheng等人[17]、Kistler[40]等人的研究都對數(shù)據(jù)提取方式進行了一些新的嘗試,從效果來看,基于硬件的方法取得了不錯的效果。在虛擬化技術飛速發(fā)展的今天,使用硬件虛擬化[41]、虛擬機自省技術[42]進行高效率、高透明共享資源操作軌跡數(shù)據(jù)提取是一個很好的思路,趙躍華等人的工作[18]給出了利用硬件虛擬化技術進行數(shù)據(jù)提取的嘗試。基于虛擬化自省技術、硬件虛擬化技術,檢測系統(tǒng)可以通過設置客戶操作系統(tǒng)從ring3進入ring0的調用作為VM Exit的條件實現(xiàn)低語義層級的系統(tǒng)調用監(jiān)控,在客戶機不知情的情況下訪問虛擬機系統(tǒng)的內部狀態(tài),包括內存、CPU寄存器、IO設備標志;監(jiān)測特定事件,包括特權寄存器更改、設備狀態(tài)更改等;對監(jiān)測中的虛擬機進行控制,如暫停、快照、重啟,這為程序調試分析特提供了極大便利[43]。

進行漏洞檢測的時候,對共享資源操作軌跡數(shù)據(jù)存取和查詢的效率影響了檢測的性能。針對硬盤存儲的優(yōu)化,如何對內存存儲部分、硬盤存儲部分的數(shù)據(jù)結構進行設計,選取合適的數(shù)據(jù)結構能夠兼顧數(shù)據(jù)的存取和查詢是未來的研究需要重點解決的問題[44]。

3.3.3 并行化共享資源操作軌跡數(shù)據(jù)分析

用戶態(tài)競態(tài)漏洞檢測的方法自19世紀80年代開始經(jīng)歷了30多年的推敲,很難再有大幅度的性能提高,利用現(xiàn)有云計算、集群計算、并行計算發(fā)展的計算優(yōu)勢設計并行化數(shù)據(jù)分析算法,提高數(shù)據(jù)分析的性能,是優(yōu)化競態(tài)漏洞檢測性能的一種方法,然而復雜的計算機系統(tǒng)環(huán)境給實現(xiàn)并行化的算法分析帶來了難題。

4 內核態(tài)競態(tài)漏洞檢測

操作系統(tǒng)內核與用戶態(tài)程序運行環(huán)境相比更加復雜,用戶態(tài)競態(tài)漏洞檢測方法無法直接應用于內核態(tài)靜態(tài)漏洞檢測。一方面,內核中系統(tǒng)調用頻繁,通過侵入性插樁記錄共享資源操作軌跡的檢測方法將導致大量額外開銷;另一方面,內核程序語義更底層,以happenbefore方法為例,很難從兩個內核操作直接判斷兩者之間的邏輯關系,因為同一個內核線程的上下文執(zhí)行程序有多種可能——用戶模式進程代碼、設備中段服務例程或是內核延遲過程調用[45]。正如文獻[46]所論述的:通過理解內核中復雜的同步機制原語語義來推斷happens-before關系或統(tǒng)計lock-set設置點都是相當繁重的工作。目前,內核態(tài)競態(tài)漏洞檢測的主要方法是對系統(tǒng)調用進行簡單邏輯推理。

4.1 現(xiàn)有方法

現(xiàn)有內核態(tài)競態(tài)漏洞檢測方法主要分為兩種,一種是針對文件系統(tǒng)特別是UNIX風格文件系統(tǒng)的TOCTTOU漏洞檢測方法,另外一種是通過實現(xiàn)部分用戶態(tài)競態(tài)漏洞檢測方法的輕量級方法。虛擬化技術出現(xiàn)之后,出現(xiàn)了基于虛擬化技術的競態(tài)漏洞檢測技術,在原有檢測方法的基礎上,對競態(tài)漏洞檢測提供了高效透明的數(shù)據(jù)提取支持。

文件系統(tǒng)的競態(tài)檢測較為簡單,觀測方便,特別的是,UNIX風格的文件系統(tǒng)中都有檢查的過程,很多學者針對TOCTTOU進行了檢測方法的研究。Tsyrklevich等人最先提出了一種通過監(jiān)控系統(tǒng)調用檢測利用競態(tài)漏洞改寫文件的方法[47]。Uppuluri在監(jiān)視文件操作的基礎上,設置時間窗口來進行競態(tài)漏洞的檢測[48],將虛警降到了3%,性能開銷小于8%,是對檢測性能和準確率的顯著地提升。Wei等人基于Unix風格系統(tǒng)設計一種防御機制EDGI[49],通過枚舉所有的文件系統(tǒng)調用并建立檢測模型,防止攻擊者在特定步驟對文件進行篡改。攻擊者如果想要攻擊,那么在TOCTTOU即檢查和使用之間,需要修改文件路徑名到邏輯磁盤的映射。EDGI通過在這個特定步驟防止篡改,即可完成檢測。

因為內核態(tài)狀態(tài)下很難實現(xiàn)完整的happens-before或者lock-set方法,研究人員通過實現(xiàn)部分的happensbefore或者lock-set實現(xiàn)內核態(tài)競態(tài)漏洞動態(tài)檢測。例如,Jeter等人借鑒lock-set的思想,通過一個全局的鎖來管理所有的共享內存進行檢測[50]。Erickson等人則是借鑒了happens-before與采樣的思想,設計了DataCollider[19]。DataCollider是一款優(yōu)秀的內核態(tài)動態(tài)競態(tài)漏洞檢測工具,能夠同時用于漏洞檢測和漏洞挖掘,并且針對Windows 7的數(shù)據(jù)競爭進行了實現(xiàn)。DataCollider沒有使用傳統(tǒng)的程序分析方法,而是使用了硬件結構中的調試寄存器對復雜的內核代碼進行了數(shù)據(jù)競爭的檢測。DataColloder吸取了happens-before結合采樣來優(yōu)化性能的方法,通過采樣少量的訪存操作來降低系統(tǒng)運行時開銷。DataCollider利用硬件斷點采樣一些內存訪問指令,在這些指令斷點觸發(fā)的時候,取出其相應的訪存地址,設置相應的數(shù)據(jù)斷點,掛起線程,等待設置的內存斷點被觸發(fā)。一旦觸發(fā),則表示存在訪問沖突,即數(shù)據(jù)競爭。這種方法在性能與準確率之間做了一個平衡,是一種優(yōu)秀的內核態(tài)動態(tài)競態(tài)漏洞檢測方法,并且由于其采用的硬件斷點,對上層操作系統(tǒng)具有一定的透明性,作者利用此方法挖出了若干Windows的競態(tài)漏洞。但是由于該工具基于閉源的Windows操作系統(tǒng),給其應用帶來了不便。隨后,Jiang等人將DataCollider進行了Linux版本的移植,并將之命名為DRDDR[30]。

現(xiàn)有競態(tài)漏洞檢測方法的瓶頸取決于內核態(tài)提取的數(shù)據(jù)效率低、語義低,VT-X硬件虛擬化技術出現(xiàn)之后其對客戶機操作系統(tǒng)的高效透明的數(shù)據(jù)提取方式給現(xiàn)有的內核態(tài)競態(tài)漏洞檢測方法帶來了很大的便利,有效地解決了效率問題。趙躍華,鄧淵浩使用了VT-X硬件虛擬化技術進行了競態(tài)漏洞檢測的嘗試[18]。其通過硬件虛擬化技術監(jiān)控中斷監(jiān)視系統(tǒng)調用,設置關鍵內存缺頁實現(xiàn)內存監(jiān)控,又結合符號文件分析,從函數(shù)和棧中參數(shù)獲取內存讀寫位置,通過判斷兩次對同內存訪問的時間差判定內核競態(tài)漏洞的存在性。使用硬件虛擬機化技術進行競態(tài)漏洞檢測,可以高效且透明地進行數(shù)據(jù)采集和系統(tǒng)調用監(jiān)控,給vector clock的生成提供了良好的支持,有效地解決了侵略性插樁的問題;但是使用硬件虛擬化技術,同樣存在過于中斷頻繁,檢測算法不宜復雜的問題。

4.2 未來發(fā)展

內核態(tài)程序運行數(shù)據(jù)提取的難度和性能要求是制約內核態(tài)競態(tài)漏洞檢測的主要原因。只有解決內核數(shù)據(jù)語義理解和數(shù)據(jù)分析效率等關鍵問題,內核競態(tài)漏洞檢測才可能獲得突破性發(fā)展。

4.2.1 內核態(tài)數(shù)據(jù)提取方式優(yōu)化

在內核態(tài)能夠監(jiān)控的語義層級低,而且系統(tǒng)調用頻繁,頻發(fā)觸發(fā)檢測事件對系統(tǒng)的性能開銷過大。在未來的研究中,需要針對三個問題對內核態(tài)的數(shù)據(jù)提取進行優(yōu)化,數(shù)據(jù)提取效率問題、數(shù)據(jù)提取透明度問題以及能夠提取高語義層級數(shù)據(jù)的問題。

硬件虛擬化技術、虛擬機自省技術等虛擬機技術可以為數(shù)據(jù)提取的效率和透明度提供良好的解決方案。特別是在云虛擬平臺,利用虛擬機技術可以在客戶機不知情的情況下高效地提取出所需共享資源操作軌跡數(shù)據(jù),為下一步分析提供良好的數(shù)據(jù)基礎。但是使用此類方法提取的數(shù)據(jù)仍然是低語義級別的數(shù)據(jù),僅為系統(tǒng)調用層級,使得檢測方法的誤報率高、檢測漏洞的覆蓋范圍優(yōu)先。

在未來的研究過程中,研發(fā)出新的內核層高語義數(shù)據(jù)提取方式是一個值得研究人員關心的方向,當能夠提取的數(shù)據(jù)信息量足夠支撐內核態(tài)運行用戶態(tài)的檢測方法,會對內核態(tài)競態(tài)漏洞的檢測準確性帶來較大幅度的提升。在犧牲一部分透明性的前提下,通過侵略式插樁的方式實現(xiàn)某些關鍵函數(shù)的高語義級別的數(shù)據(jù)提取都是可行的方案。

4.2.2 低語義級別數(shù)據(jù)智能分析

研究低語義級別數(shù)據(jù)智能分析方法是解決內核態(tài)競態(tài)漏洞數(shù)據(jù)語義級別低的方法之一。低語義級別數(shù)據(jù)分析可以從兩個方向進行研究,從低語義級別數(shù)據(jù)還原高語義級別數(shù)據(jù)是方法之一,可以通過模式匹配、規(guī)則推理等方式利用現(xiàn)有的低語義級別數(shù)據(jù)還原出高語義級別數(shù)據(jù)[51],研究的關鍵問題是還原算法的設計、還原算法的效率和準確率;直接從低語義級別進行數(shù)據(jù)智能分析也是方法之一。文獻[52]通過VT-X硬件虛擬化技術提取了Windows操作系統(tǒng)的內核對象分配、內核內存訪問、線程調度和函數(shù)調用數(shù)據(jù),并通過固定的規(guī)則從提取數(shù)據(jù)中分析漏洞是否觸發(fā),通過這種方式發(fā)現(xiàn)了45個Windows內核漏洞。這種方式數(shù)據(jù)提取效率快,但是現(xiàn)在的方法只能通過簡單的規(guī)則限定檢測漏洞觸發(fā),漏報率和誤報率都很高。未來可以通過神經(jīng)網(wǎng)絡、深度學習等方式,將可以提取的數(shù)據(jù)類型作為特征,使用已有的漏洞提取數(shù)據(jù)作為學習樣本進行深度學習,訓練后通過神經(jīng)網(wǎng)絡等方式智能推理實現(xiàn)漏報率誤報率較低的漏洞檢測方式,檢測出競態(tài)漏洞等更為復雜的漏洞。

5 總結與展望

現(xiàn)有的競態(tài)漏洞檢測技術在用戶態(tài)和內核態(tài)存在顯著的差異。用戶態(tài)競態(tài)漏洞檢測經(jīng)過充分的發(fā)展已經(jīng)逐步成熟,內核態(tài)競態(tài)漏洞檢測因為研究手段單一、語義層級低、性能開銷大等因素尚未形成完善的競態(tài)漏洞檢測方案,但是涌現(xiàn)了許多具有參考價值的嘗試和創(chuàng)新??偨Y研究人員對競態(tài)漏洞檢測的各類方法,可以對競態(tài)漏洞檢測技術的發(fā)展帶來指引和啟迪。

5.1 競態(tài)漏洞檢測方法總結

如表1列出的競態(tài)漏洞檢測工具所示,現(xiàn)有的用戶態(tài)競態(tài)漏洞檢測工具種類按照檢測方法分為happensbefore 類 別 和 lock-set類 別 。Racetrack[4]、LiteRace[37]、Fasttrack[5]、PACER[6]屬于 happens-before類別,此類工具是在happens-before基礎上通過取樣的方式進行了性能優(yōu)化;Eraser[11]是屬于lock-set類別的檢測工具。內核態(tài)競態(tài)漏洞檢測工具均是通過系統(tǒng)調用的監(jiān)控實現(xiàn)檢測,包括 RPS[53],DRDDR[30],RACEZ[17]和 HARD[14]。

表1 競態(tài)漏洞檢測工具匯總

用戶態(tài)的競態(tài)漏洞檢測方法趨于成熟,檢測技術整體框架完善;內核態(tài)的競態(tài)漏洞檢測面臨兩個挑戰(zhàn):如何實現(xiàn)內核態(tài)系統(tǒng)數(shù)據(jù)的提取,并保證數(shù)據(jù)提取操作的穩(wěn)定性、透明性和數(shù)據(jù)的高語義;如何實現(xiàn)適合內核態(tài)數(shù)據(jù)的高效數(shù)據(jù)分析方法。目前來說,硬件虛擬化技術可以較好地解決第一個挑戰(zhàn)中的部分問題,能夠透明且高效地從客戶機中提取信息,但是信息的語義層級仍然較低,仍處于系統(tǒng)調用級別;解決第二個挑戰(zhàn)的關鍵是能否基于機器學習設計出適合內核態(tài)數(shù)據(jù)的分析算法。

5.2 競態(tài)漏洞檢測方法展望

利用虛擬機化技術進行數(shù)據(jù)提取是未來競態(tài)漏洞檢測技術的發(fā)展趨勢。虛擬機自省技術、硬件虛擬化技術、云虛擬化技術都可以有效地提高數(shù)據(jù)提取效率,并且使得提取數(shù)據(jù)的方式更加隱蔽,提取的數(shù)據(jù)更為真實,在漏洞利用和漏洞檢測的對抗過程中獲得更大的優(yōu)勢。

利用機器學習的方式智能化分析數(shù)據(jù)之間的邏輯關系,定位操作與操作之間的矛盾之處,發(fā)現(xiàn)存在于程序之中的競態(tài)漏洞是未來競態(tài)漏洞數(shù)據(jù)的分析方法。神經(jīng)網(wǎng)絡、深度學習等機器學習方法能夠準確、高效地進行競態(tài)漏洞數(shù)據(jù)分析。未來可以利用已公開的漏洞生成訓練數(shù)據(jù),分析系統(tǒng)在訓練完成后,對虛擬化技術提取的數(shù)據(jù)進行分析,實現(xiàn)智能化的邏輯漏洞檢測,彌補現(xiàn)有漏洞檢測技術中邏輯漏洞檢測的短板,改善目前嚴峻的內核安全生態(tài)。

[1]Raheja S,Munjal G.Analysis of Linux kernel vulnerabilities[J].Indian Journal of Science and Technology,2016,9(48).

[2]Netzer R H B,Miller B P.What are race conditions?:Some issues and formalizations[J].ACM Letters on Programming Languages and Systems(LOPLAS),1992,1(1):74-88.

[3]Narayanasamy S,Wang Z,Tigani J,et al.Automatically classifying benign and harmful data races using replay analysis[C]//ACM Sigplan Notices,2007,42(6):22-31.

[4]Yu Y,Rodeheffer T,Chen W.Racetrack:Efficient detection of data race conditions via adaptive tracking[C]//ACM SIGOPS Operating Systems Review,2005,39(5):221-234.

[5]Flanagan C,F(xiàn)reund S N.FastTrack:Efficient and precise dynamic race detection[C]//ACM Sigplan Notices,2009,44(6):121-133.

[6]Bond M D,Coons K E,McKinley K S.PACER:Proportional detection of data races[C]//ACM Sigplan Notices,2010,45(6):255-268.

[7]Smaragdakis Y,Evans J,Sadowski C,et al.Sound predictive race detection in polynomial time[J].ACM Sigplan Notices,2012,47(1):387-400.

[8]Poluri S V,Ramanathan M K.Deterministic dynamic race detection across program versions[C]//2015 IEEE International Conference on Software Maintenance and Evolution(ICSME),2015:181-190.

[9]Wilcox J R,F(xiàn)inch P,F(xiàn)lanagan C,et al.Array shadow state compression for precise dynamic race detection(T)[C]//30th IEEE/ACM International Conference on Automated Software Engineering(ASE),2016:155-165.

[10]Huang J,Meredith P O N,Rosu G.Maximal sound predictive race detection with control flow abstraction[J].ACM Sigplan Notices,2014,49(6):337-348.

[11]Savage S,Burrows M,Nelson G,et al.Eraser:A dynamic data race detector for multithreaded programs[J].ACM Transactions on Computer Systems(TOCS),1997,15(4):391-411.

[12]Von Praun C,Gross T R.Object race detection[C]//ACM Sigplan Notices,2001,36(11):70-82.

[13]Nishiyama H.Detecting data races using dynamic escape analysis based on read barrier[C]//Virtual Machine Research and Technology Symposium,2004:127-138.

[14]Zhou P,Teodorescu R,Zhou Y.HARD:Hardware-assisted lockset-based race detection[C]//IEEE 13th International Symposium on High Performance Computer Architecture,2007:121-132.

[15]Serebryany K,Iskhodzhanov T.ThreadSanitizer:data race detection in practice[C]//Proceedings of the Workshop on Binary Instrumentation and Applications,2009:62-71.

[16]Jannesari A,Tichy W F.On-the-fly race detection in multithreaded programs[C]//Proceedings of the 6th Workshop on Parallel and Distributed Systems:Testing,Analysis,and Debugging,2008:6.

[17]Sheng T,Vachharajani N,Eranian S,et al.RACEZ:A lightweight and non-invasive race detection tool for production applications[C]//2011 33rd International Conference on Software Engineering(ICSE),2011:401-410.

[18]趙躍華,鄧淵浩.基于硬件虛擬化的內核競態(tài)漏洞監(jiān)測技術研究與實現(xiàn)[J].軟件導刊,2015(5):161-164.

[19]Erickson J,Musuvathi M,Burckhardt S,et al.Effective data-race detection for the kernel[C]//Usenix Symposium on Operating Systems Design&Implementation,2010:151-162.

[20]Jimenez M,Papadakis M,Le Traon Y.Vulnerability prediction models:A case study on the linux kernel[C]//2016 IEEE 16th International Working Conference on Source Code Analysis and Manipulation(SCAM),2016:1-10.

[21]倪昀澤.移動智能終端安全漏洞攻防技術綜述[J].移動通信,2017,41(7):30-34.

[22]Payer M,Gross T R.Protecting applications against TOCTTOU races by user-space caching of file metadata[C]//ACM Sigplan Notices,2012,47(7):215-226.

[23]Wei J,Pu C.TOCTTOU vulnerabilities in UNIX-Style file systems:An anatomical study[C]//Conference on Usenix Conference on File&Storage Technologies,2015,29(8):12.

[24]Bratus S,D’Cunha N,Sparks E,et al.TOCTOU,traps,and trusted computing[C]//International Conference on Trusted Computing.Berlin Heidelberg:Springer,2008:14-32.

[25]Lamport L.Correctly executes multiprocess progranm[J].IEEE Transactions on Computers,1979,28(9).

[26]Li X,Chang X,Board J A,et al.A novel approach for software vulnerability classification[C]//2017 Annual Reliability and Maintainability Symposium(RAMS),2017:1-7.

[27]Whyman P A.Automatic endpoint vulnerability detection of Linux and open source using the National Vulnerability Database[D].Colorado State University,2007.

[28]Koziol J,Litchfield D,Aitel D,et al.The Shellcoder’s handbook[M].Indianapolis:Wiley,2004.

[29]Netzer R H B.Race condition detection for debugging shared-memory parallel programs[D].University of Wisconsin-Madison,1991.

[30]Jiang Y,Yang Y,Xiao T,et al.DRDDR:A lightweight method to detect data racesin Linux kernel[J].The Journal of Supercomputing,2016,72(4):1645-1659.

[31]Jiang Y,Yang Y,Xiao T,et al.Kernel data race detection using debug register in Linux[C]//COOL Chips XVII,2014:1-3.

[32]Lamport L.Time,clocks,and the ordering of events in a distributed system[J].Communications of the ACM,1978,21(7):558-565.

[33]Flanagan C,F(xiàn)reund S N.Type-based race detection for Java[C]//ACM Sigplan Notices,2000,35(5):219-232.

[34]Gupta S,Sultan F,Cadambi S,et al.Using hardware transactional memory for data race detection[C]//IEEE International Symposium on Parallel& Distributed Processing,2009:1-11.

[35]Netzer R H B,Ghosh S.Efficient race condition detection for shared-memory programs with post/wait synchronization[D].University of Wisconsin-Madison,1992.

[36]Bhansali S,Chen W K,De Jong S,et al.Framework for instruction-level tracing and analysis of program executions[C]//Proceedingsofthe 2nd International Conference on Virtual Execution Environments,2006:154-163.

[37]Marino D,Musuvathi M,Narayanasamy S.LiteRace:effective sampling for lightweight data-race detection[C]//ACM Sigplan Notices,2009,44(6):134-143.

[38]Biswas S,Cao M,Zhang M,et al.Lightweight data race detection for production runs[C]//Proceedings of the 26th International Conference on Compiler Construction,2017:11-21.

[39]Witten I H,F(xiàn)rank E,Hall M A,et al.Data mining:Practical machine learning tools and techniques[M].[S.l.]:Morgan Kaufmann,2016.

[40]Kistler M,Brokenshire D.Detecting race conditions in asynchronous DMA operations with full system simulation[C]//2011 IEEE International Symposium on Performance Analysis of Systems and Software(ISPASS),2011:207-215.

[41]Srivastava A,Giffin J.Automatic discovery of parasitic malware[C]//International Workshop on Recent Advances in Intrusion Detection.Berlin Heidelberg:Springer,2010:97-117.

[42]Garfinkel T,Rosenblum M.A virtual machine introspection based architecture for intrusion detection[C]//Proceedings of the Network&Distributed Systems Secuity Symposium,2003:191-206.

[43]王麗娜,高漢軍,劉煒,等.利用虛擬機監(jiān)視器檢測及管理隱藏進程[J].計算機研究與發(fā)展,2011,48(8):1534-1541.

[44]Singhal M,Kshemkalyani A.An efficient implementation of vector clocks[J].Information Processing Letters,1992,43(1):47-52.

[45]Gaur D,Connor P,Jenison L,et al.Driver having multiple deferred procedure calls for interrupt processing and method for interrupt processing:U.S.Patent Application 09/823,155[P].2001-03-29.

[46]Love R.Linux kernel development[M].[S.l.]:Novell Press,2005.

[47]Tsyrklevich E,Yee B.Dynamic detection and prevention of race conditions in file accesses[C]//Proceedings of Usenix Security Symposium,2003,4(2):17.

[48]Uppuluri P,Joshi U,Ray A.Preventing race condition attacks on file-systems[C]//Proceedings of the 2005 ACM Symposium on Applied Computing,2005:346-353.

[49]Wei J,Pu C.Modeling and preventing TOCTTOU vulnerabilities in Unix-style file systems[J].Computers&Security,2010,29(8):815-830.

[50]Jeter R E,Potter K H.Memory controller that tracks queue operations to detect race conditions:U.S.Patent 7,254,687[P].2007-08-07.

[51]Jiang X,Wang X,Xu D.Stealthy malware detection through vmm-based out-of-the-box semantic view reconstruction[C]//Proceedings of the 14th ACM Conference on Computer and Communications Security,2007:128-138.

[52]Pan J,Yan G,F(xiàn)an X.Digtool:A virtualization-based framework for detecting kernel vulnerabilities[C]//26th{USENIX}Security Symposium({USENIX}Security 17),USENIX Association,2017.

[53]Park J,Lee G,Lee S,et al.RPS:An extension of reference monitor to prevent race-attacks[J].Advances in Multimedia Information Processing-PCM 2004,2005:556-563.

猜你喜歡
內核線程漏洞
漏洞
強化『高新』內核 打造農業(yè)『硅谷』
基于國產(chǎn)化環(huán)境的線程池模型研究與實現(xiàn)
基于嵌入式Linux內核的自恢復設計
Linux內核mmap保護機制研究
淺談linux多線程協(xié)作
三明:“兩票制”堵住加價漏洞
漏洞在哪兒
微生物內核 生態(tài)型農資
高鐵急救應補齊三漏洞
连州市| 武陟县| 刚察县| 阜新市| 滨海县| 云南省| 新乡县| 永吉县| 霍城县| 顺昌县| 汽车| 唐河县| 肃宁县| 文安县| 赣州市| 梁山县| 张家界市| 裕民县| 盘锦市| 南康市| 白城市| 黄骅市| 云林县| 民丰县| 古蔺县| 宣恩县| 逊克县| 沈阳市| 武乡县| 宁陕县| 监利县| 大丰市| 琼结县| 阜新市| 泗水县| 礼泉县| 深州市| 长汀县| 黎川县| 峡江县| 科技|