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

?

基于內(nèi)存訪問軌跡的程序脆弱性檢測(cè)

2020-11-17 12:05彭雙和
關(guān)鍵詞:脆弱性漏洞內(nèi)存

彭雙和 ,韓 靜

(北京交通大學(xué) 計(jì)算機(jī)與信息技術(shù)學(xué)院,北京 100044)

隨著信息化時(shí)代的到來(lái),計(jì)算機(jī)行業(yè)蓬勃發(fā)展,隨之而來(lái)的還有層出不窮的軟件漏洞,為計(jì)算機(jī)安全帶來(lái)很大的隱患,尤其是內(nèi)存方面的漏洞.據(jù)國(guó)家信息安全漏洞庫(kù)的最新統(tǒng)計(jì),大多數(shù)高危漏洞都是內(nèi)存安全漏洞.這些漏洞一旦被不法分子利用,就會(huì)產(chǎn)生不可估量的危害.除了目前廣泛出現(xiàn)的內(nèi)存泄漏、懸空指針、未初始化讀、use-after-free[1]等漏洞外,還有一些有意或者無(wú)意的不當(dāng)操作引發(fā)的低效代碼.這些漏洞輕則導(dǎo)致程序運(yùn)行低效,重則導(dǎo)致系統(tǒng)失效甚至崩潰,從而降低系統(tǒng)可靠性.而且這些內(nèi)存錯(cuò)誤都很難被發(fā)現(xiàn),尋找也相當(dāng)費(fèi)時(shí)費(fèi)力,靠一般手段是很難檢測(cè)到.尤其是內(nèi)存泄漏,隨著計(jì)算機(jī)內(nèi)存的不斷擴(kuò)大,程序員對(duì)于內(nèi)存泄漏的感知越來(lái)越弱,這就使得內(nèi)存泄漏不斷堆積,最終危害系統(tǒng)安全.

目前對(duì)于內(nèi)存漏洞的檢測(cè)主要分為靜態(tài)檢測(cè)和動(dòng)態(tài)檢測(cè)[2]兩方面.靜態(tài)檢測(cè)是在程序不運(yùn)行的狀態(tài)下針對(duì)源程序進(jìn)行的一種檢測(cè)方式,可以確保100%的代碼覆蓋率.但對(duì)于在程序運(yùn)行過程中才會(huì)被觸發(fā)的漏洞則無(wú)能為力,導(dǎo)致較高的誤報(bào)和漏報(bào).如EXE[3]、KLEE[4-5]采用符號(hào)執(zhí)行的方式檢測(cè)內(nèi)存錯(cuò)誤,通過計(jì)算執(zhí)行路徑中可達(dá)分支的路徑約束來(lái)確定是否激活程序漏洞.但是當(dāng)源碼不可得時(shí),這些方法將無(wú)法實(shí)現(xiàn).

動(dòng)態(tài)檢測(cè)在程序運(yùn)行過程中進(jìn)行,最常見的動(dòng)態(tài)檢測(cè)方式是二進(jìn)制插樁(Dynamic Binary Instrument,DBI)[6].通過二進(jìn)制插樁,可以一步一步地對(duì)目標(biāo)二進(jìn)制進(jìn)行拆解,從而獲取需要的信息.在程序運(yùn)行過程中檢測(cè),可以有效避免靜態(tài)檢測(cè)的漏判,實(shí)時(shí)檢測(cè)出可執(zhí)行程序在運(yùn)行過程中發(fā)生的錯(cuò)誤,但是動(dòng)態(tài)檢測(cè)也會(huì)帶來(lái)較大的系統(tǒng)開銷.如基于Valgrind[7]開發(fā)的Memcheck框架的一個(gè)內(nèi)存錯(cuò)誤檢測(cè)器,它可以檢測(cè)出大多數(shù)的內(nèi)存錯(cuò)誤.Memcheck實(shí)現(xiàn)了一個(gè)仿真的CPU,被監(jiān)控程序由這個(gè)仿真CPU解釋執(zhí)行,從而有機(jī)會(huì)在所有內(nèi)存讀寫指令發(fā)生時(shí),檢測(cè)地址和讀操作的合法性.但該方法的開銷較大,而且缺少錯(cuò)誤的詳細(xì)信息.此外,Memcheck只能檢測(cè)堆中的內(nèi)存錯(cuò)誤,對(duì)于大多數(shù)內(nèi)存攻擊都無(wú)能為力.文獻(xiàn)[8]提出了一種智能模糊測(cè)試方法來(lái)檢測(cè)內(nèi)存錯(cuò)誤,可以對(duì)二進(jìn)制程序進(jìn)行檢測(cè).但它只能檢測(cè)基于堆的內(nèi)存錯(cuò)誤,不能檢測(cè)對(duì)于棧中的內(nèi)存錯(cuò)誤.

本文作者提出一種動(dòng)靜相結(jié)合的方式,即采用動(dòng)態(tài)插樁獲取可執(zhí)行程序的內(nèi)存軌跡,然后靜態(tài)分析軌跡得到檢測(cè)結(jié)果.該方法可以在保證精確度的同時(shí)大大縮減系統(tǒng)開銷,而且可以在無(wú)需程序源碼的情況下盡可能完整的還原程序內(nèi)存訪問的軌跡及其函數(shù)調(diào)用,并以可視化的形式展現(xiàn)出來(lái),清晰直觀地描述內(nèi)存訪問的軌跡及內(nèi)存錯(cuò)誤發(fā)生的位置和類型.

1 基于內(nèi)存訪問軌跡的脆弱性檢測(cè)

本文提出的基于內(nèi)存訪問軌跡的程序脆弱性檢測(cè)方法的總體框架如圖1所示,主要分為在線分析和離線分析兩個(gè)模塊,分別負(fù)責(zé)內(nèi)存訪問軌跡的獲取和內(nèi)存脆弱性的約束求解與檢測(cè).

首先根據(jù)有限狀態(tài)機(jī)模型[9]定義相關(guān)脆弱性,然后對(duì)可執(zhí)行程序進(jìn)行在線分析,在不影響進(jìn)程正常執(zhí)行流程的前提下,可選擇性的插入分析代碼進(jìn)行實(shí)時(shí)分析,獲取進(jìn)程內(nèi)存訪問的軌跡.最后通過相應(yīng)的脆弱性約束進(jìn)行離線分析,與處理后的內(nèi)存軌跡一起通過約束求解器求解,最終得到脆弱性類別及位置.

1.1 脆弱性約束定義

脆弱性即漏洞,是指軟件中存在的一些功能性或安全性的邏輯缺陷.本文將可執(zhí)行程序的內(nèi)存操作過程看作一個(gè)有限狀態(tài)機(jī),包括堆內(nèi)存的從內(nèi)存分配到內(nèi)存釋放過程,以及棧內(nèi)存的讀寫過程,建立相應(yīng)的模型如圖2所示.內(nèi)存訪問的軌跡即為有限狀態(tài)機(jī)中各個(gè)狀態(tài)之間的轉(zhuǎn)化,圖2實(shí)線和點(diǎn)線中箭頭所示方向的所有操作都是合法的狀態(tài)轉(zhuǎn)化過程,缺少某個(gè)操作或者操作順序錯(cuò)誤都會(huì)導(dǎo)致不同程度的內(nèi)存脆弱性,基于這些不合法的轉(zhuǎn)化定義以下幾種內(nèi)存脆弱性:內(nèi)存泄漏、未初始化讀、雙重釋放、use-after-free、死寫以及重復(fù)頻繁讀.

將上述有限狀態(tài)機(jī)模型定義為一個(gè)五元組

M=(K,∑,f,S,Z)

(1)

式中:K為有限狀態(tài)的集合;∑為事件集合;f為狀態(tài)轉(zhuǎn)換函數(shù);S為初始狀態(tài);Z為終態(tài)集,具體定義如下

K={start,alloc,write,read,free,end};

∑={alloc(addr),read(addr),write(addr),free(addr),exit(fun)};

f的定義見表1,內(nèi)存執(zhí)行在不同狀態(tài)下可以進(jìn)行不同的操作,而且執(zhí)行不同操作的安全性也是不同的,表1中包含了部分轉(zhuǎn)換可能導(dǎo)致的脆弱性.

表1 有限狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換

其中,內(nèi)存泄漏是指程序中用戶動(dòng)態(tài)分配的內(nèi)存由于某種原因(程序未釋放或無(wú)法釋放),造成系統(tǒng)內(nèi)存的浪費(fèi),會(huì)導(dǎo)致程序運(yùn)行速度減慢甚至系統(tǒng)崩潰等嚴(yán)重后果.圖2中①就是一種內(nèi)存泄漏,是由于分配了一塊內(nèi)存空間,卻沒有對(duì)它進(jìn)行釋放導(dǎo)致的.

未初始化讀是一種使用未初始化變量導(dǎo)致的內(nèi)存讀寫錯(cuò)誤,如圖2中②,它通常會(huì)導(dǎo)致嚴(yán)重的后果,可能使系統(tǒng)崩潰.未初始化讀代碼片段如下,由于局部變量c在使用前沒有初始化,就產(chǎn)生了未初始化讀的錯(cuò)誤.

char *readline(char *buf){

char c;

char *savebuf=buf;

while(c!=EOF&&(c=getchar())!=′ ′)

*buf++=c;

*buf=′

岳阳市| 正定县| 东宁县| 汾西县| 新建县| 定州市| 仪陇县| 平度市| 绥德县| 商河县| 荔波县| 高雄市| 阿城市| 咸丰县| 民乐县| 克东县| 九江县| 岳阳市| 钦州市| 通渭县| 莎车县| 绵阳市| 荥阳市| 女性| 道孚县| 连云港市| 深水埗区| 华蓥市| 高邮市| 水富县| 牡丹江市| 容城县| 宁化县| 沙雅县| 济阳县| 泽普县| 桦南县| 青浦区| 虞城县| 邻水| 名山县|