亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        緩沖區(qū)溢出攻擊的原理和防范技術(shù)分析

        2013-09-25 14:13:12姜燕劉娜
        電子設(shè)計(jì)工程 2013年8期
        關(guān)鍵詞:編譯器堆棧字符串

        姜燕,劉娜

        (湖北醫(yī)藥學(xué)院 公共管理學(xué)院,湖北 十堰 442000)

        緩沖區(qū)溢出是指向緩沖區(qū)中傳輸?shù)臄?shù)據(jù)超出了緩沖區(qū)所能容納的最大長(zhǎng)度,從而使提交的數(shù)據(jù)超過(guò)相應(yīng)的邊界而進(jìn)入了其他區(qū)域[1]。緩沖區(qū)溢出攻擊則是人為將大于緩沖區(qū)長(zhǎng)度的數(shù)據(jù)傳輸?shù)骄彌_區(qū),從而覆蓋其他區(qū)域的數(shù)據(jù),達(dá)到破壞性目的的操作。緩沖區(qū)溢出已成為一種十分普遍和危險(xiǎn)的安全漏洞,存在于各種操作系統(tǒng)和應(yīng)用軟件中。利用緩沖區(qū)溢出攻擊,可以導(dǎo)致程序運(yùn)行失敗、系統(tǒng)死機(jī)、計(jì)算機(jī)重新啟動(dòng)等后果,更為嚴(yán)重的是可以利用它執(zhí)行非授權(quán)指令,甚至可以取得系統(tǒng)特權(quán),進(jìn)而進(jìn)行各種非法操作。

        1 緩沖區(qū)溢出攻擊的原理

        程序執(zhí)行時(shí)的內(nèi)存從邏輯上可以分為代碼區(qū)和數(shù)據(jù)區(qū)兩大部分,而數(shù)據(jù)區(qū)又可以分為靜態(tài)數(shù)據(jù)區(qū)、堆棧和堆3個(gè)部分。代碼區(qū)存放可執(zhí)行代碼,只能讀不能寫(xiě),因此相對(duì)比較安全;數(shù)據(jù)區(qū)的數(shù)據(jù)經(jīng)常隨著程序的運(yùn)行變化,是攻擊發(fā)生的主要地方。本文以在堆棧中的溢出說(shuō)明緩沖區(qū)溢出攻擊的原理。

        堆棧是在程序運(yùn)行過(guò)程中由操作系統(tǒng)分配的內(nèi)存區(qū)域,當(dāng)程序中發(fā)生函數(shù)調(diào)用時(shí),主要完成如下操作:首先把函數(shù)參數(shù)壓入堆棧;然后向堆棧壓入指令寄存器(IP)中的內(nèi)容,作為返回地址 (RET);接下來(lái)放入堆棧的是基址寄存器(EBP),把當(dāng)前的棧指針(ESP)拷貝到 EBP,做為新的基地址;最后把ESP減去適當(dāng)?shù)臄?shù)值,為本地變量留出一定空間[2]。堆棧的情形如圖1所示。

        圖1 堆棧的情形Fig.1 Stack situation

        通過(guò)以下程序的執(zhí)行過(guò)程可以說(shuō)明對(duì)堆棧的操作和溢出的產(chǎn)生過(guò)程。

        編譯運(yùn)行以上代碼,輸入“network”結(jié)果會(huì)輸出network,其中對(duì)堆棧的操作是先在棧底壓入返回地址,接著將棧指針EBP入棧,此時(shí)EBP等于現(xiàn)在的ESP,之后ESP減10,即向上增長(zhǎng)10個(gè)字節(jié),用來(lái)存放strbuffer數(shù)組。最后,從main返回,彈出RET里的返回地址并賦值給IP,CPU繼續(xù)執(zhí)行IP所指向的命令。如果我們輸入的字符串長(zhǎng)度超過(guò)10個(gè)字節(jié),則由于輸入的字符串太長(zhǎng),strbuffer數(shù)組容納不下,只好向堆棧的底部方向繼續(xù)寫(xiě)入。這些超出10字節(jié)部分的數(shù)據(jù)覆蓋了堆棧的基地址寄存器、RET或函數(shù)參數(shù)部分的數(shù)據(jù)。從main返回時(shí),就必然會(huì)把新的數(shù)據(jù)視作返回地址,CPU會(huì)試圖執(zhí)行新數(shù)據(jù)所指向的指令,結(jié)果出現(xiàn)難以預(yù)料的后果,這樣就產(chǎn)生了一次堆棧溢出。

        除了上述攻擊外,還有針對(duì)堆的溢出攻擊和基于lib庫(kù)的緩沖區(qū)溢出攻擊及格式化串[3]的攻擊,無(wú)論是何種攻擊,最根本的原因是由于C語(yǔ)言的char*這種數(shù)據(jù)結(jié)構(gòu)的存在。在進(jìn)行字符串處理時(shí)不能自動(dòng)進(jìn)行長(zhǎng)度的檢查,留下了很多的安全隱患。

        緩沖區(qū)溢出攻擊通常分為 3步[4]:1)在目標(biāo)程序中植入攻擊代碼(shellcode);2)拷貝數(shù)據(jù)到需要溢出的緩沖區(qū)并破壞鄰近區(qū)域的數(shù)據(jù)結(jié)構(gòu);3)獲得shell執(zhí)行攻擊代碼(shellcode)。其中第二步是進(jìn)行攻擊的主要環(huán)節(jié)。

        2 緩沖區(qū)溢出攻擊的防范

        面對(duì)緩沖區(qū)溢出攻擊的挑戰(zhàn),根據(jù)各種攻擊的機(jī)制,提出了不同的防范措施,這些措施包括技術(shù)層面的和非技術(shù)層面的,在技術(shù)層面有軟件技術(shù)手段和硬件技術(shù)手段。常見(jiàn)的防范措施主要有如下幾種。

        2.1 數(shù)組邊界檢查

        根據(jù)緩沖區(qū)溢出的特點(diǎn),只要對(duì)輸入字符串或傳遞給函數(shù)的字符串參數(shù)的長(zhǎng)度做邊界檢查,就可以有效地防止緩沖區(qū)溢出的發(fā)生,從而也就不可能發(fā)生任何緩沖區(qū)溢出攻擊。因此,防范緩沖區(qū)溢出攻擊的首要方法是使用帶邊界檢查機(jī)制的安全計(jì)算機(jī)語(yǔ)言編寫(xiě)程序,如Java、Pascal、Perl和Python等。若使用的是C語(yǔ)言等不帶邊界檢查機(jī)制的語(yǔ)言,則需要在編寫(xiě)程序時(shí)由程序員負(fù)責(zé)考慮各種可能發(fā)生緩沖區(qū)溢出的情況并加以避免或使用一些輔助技術(shù)進(jìn)行檢查。

        2.1.1 人工檢查

        C語(yǔ)言中很多的字符串處理函數(shù)如strcpy()、strcat()、sprintf()、vsprintf()、gets()、scanf()等都不能進(jìn)行數(shù)組邊界的判定,因此需要在使用這些函數(shù)之前加上一些邊界檢查語(yǔ)句判斷源字符串的長(zhǎng)度,再進(jìn)行拷貝操作?;蚴褂肅語(yǔ)言之后改進(jìn)的帶有邊界檢查功能的標(biāo)準(zhǔn)函數(shù)如strncpy()、strncat()、snprintf()、fgets()等替換上述函數(shù)。

        此方法的優(yōu)點(diǎn)是直接簡(jiǎn)單,缺點(diǎn)是對(duì)人的依賴性太高,而現(xiàn)實(shí)中程序員要受各個(gè)方面因素的影響,難以取得較好的效果。

        2.1.2 靜態(tài)發(fā)現(xiàn)技術(shù)

        靜態(tài)發(fā)現(xiàn)技術(shù)是在程序設(shè)計(jì)過(guò)程中,根據(jù)一定的規(guī)則發(fā)現(xiàn)源代碼中潛在的漏洞,以便程序員進(jìn)行改進(jìn)?,F(xiàn)在已經(jīng)發(fā)展了很多成熟的靜態(tài)發(fā)現(xiàn)技術(shù),主要有 ITS4、Flawfinder、RATS和 BOON 等[5-6]。

        ITS4(It’s the Software Stupid Source Scanner)是一種命令模式的交互式程序漏洞掃描工具,它能對(duì)C/C++程序的每一個(gè)函數(shù)進(jìn)行代碼分析,根據(jù)所建立的模式庫(kù)匹配,然后依據(jù)危險(xiǎn)級(jí)別給用戶一個(gè)修改提示報(bào)告。

        Flawfinder是基于Python語(yǔ)言開(kāi)發(fā)的用來(lái)輔助進(jìn)行C/C++程序安全審查的工具,運(yùn)行于類UNIX平臺(tái)。它內(nèi)嵌了一些類似于ITS4的程序漏洞數(shù)據(jù)庫(kù),如緩沖區(qū)溢出、格式化串漏洞等,掃描速度較快。

        RATS(Rough Auditing Tool for Security)作為程序安全性的審計(jì)工具,比Flawfinder支持更多的語(yǔ)言,提供了對(duì)C、C++、Perl、PHP以及 Python語(yǔ)言的漏洞掃描。

        BOON (Buffer Overrun detectiON)是加州伯克利 David Wagner博士論文的實(shí)現(xiàn)原型,是專門(mén)針對(duì)C程序緩沖區(qū)溢出漏洞的檢測(cè)工具。BOON借鑒面向?qū)ο笏枷?,?duì)每個(gè)字符串變量設(shè)置了兩個(gè)屬性,一個(gè)描述該字符串被分配的大小,另一個(gè)描述字符串實(shí)際被使用的大小。所有的字符串處理函數(shù)都將參考這兩個(gè)屬性對(duì)字符串進(jìn)行操作。BOON通過(guò)掃描計(jì)算后得出源程序中的安全漏洞級(jí)別,程序員根據(jù)BOON的報(bào)告然后手動(dòng)改正源程序的缺陷。BOON不檢查有關(guān)格式化串漏洞的掃描。

        完全找出程序中所有的錯(cuò)誤是不可能的,所以靜態(tài)發(fā)現(xiàn)技術(shù)是不完整的解決方案,它只是降低了程序被攻擊的可能性,而且靜態(tài)發(fā)現(xiàn)工具還需要維護(hù)一個(gè)與漏洞有關(guān)的不斷變化的規(guī)則庫(kù)。

        2.1.3 動(dòng)態(tài)防御技術(shù)

        動(dòng)態(tài)防御技術(shù)是從操作系統(tǒng)和編譯系統(tǒng)角度,通過(guò)編譯器自動(dòng)地在程序中添加額外的代碼以及讓操作系統(tǒng)提供一些輔助的手段,來(lái)動(dòng)態(tài)地發(fā)現(xiàn)運(yùn)行的程序是否有緩沖區(qū)溢出 。 主要方法如下[5,7-8]:

        Austin等人提出的安全指針?lè)椒▽⒅羔樀谋憩F(xiàn)形式擴(kuò)展為安全指針,包含原指針的基地址及可訪問(wèn)范圍信息。安全指針可以十分方便地實(shí)現(xiàn)邊界檢查。但由于改變了原有指針的表現(xiàn)形式,會(huì)與現(xiàn)有程序的代碼形式不兼容,需要重新編寫(xiě)源代碼。

        Richard Jones和Paul Kelly針對(duì)安全指針的兼容性問(wèn)題提出了另一種保留原指針形態(tài)的實(shí)時(shí)緩沖區(qū)邊界檢查方法。該方法將程序運(yùn)行時(shí)創(chuàng)建的每個(gè)緩沖區(qū)視為一個(gè)對(duì)象,并動(dòng)態(tài)地維護(hù)一張含有所有對(duì)象的列表。當(dāng)需要進(jìn)行緩沖區(qū)的指針操作時(shí),通過(guò)將該指針映射到相應(yīng)的對(duì)象來(lái)獲得緩沖區(qū)的長(zhǎng)度信息,從而實(shí)現(xiàn)邊界檢查。

        Purify是C程序調(diào)試時(shí)查看存儲(chǔ)器使用的工具,Purify檢查所有的存儲(chǔ)器存取,通過(guò)用Purify鏈接工具鏈接,可執(zhí)行代碼在執(zhí)行的時(shí)候檢查對(duì)數(shù)組的所有引用來(lái)保證其合法性。

        LibSafe針對(duì)C庫(kù)中的潛在有緩沖區(qū)溢出漏洞的函數(shù)重新包裝,在函數(shù)調(diào)用前先計(jì)算目標(biāo)地址有否被緩沖區(qū)溢出的可能,即要先進(jìn)行邊界檢查,然后才調(diào)用以完成該函數(shù)正常的功能。LibSafe在實(shí)現(xiàn)時(shí),其邊界檢查只是計(jì)算目標(biāo)緩沖區(qū)是否會(huì)溢出到函數(shù)返回地址,對(duì)函數(shù)內(nèi)部用到的局部變量(如函數(shù)指針)就檢查不到,所以該方法不是萬(wàn)能的。LibSafe的優(yōu)點(diǎn)是不需要重新編譯源程序,只需更改系統(tǒng)的庫(kù)函數(shù)即可。

        此外,在編譯器方面,當(dāng)編譯含有字符串?dāng)?shù)組的程序時(shí)編譯器在程序開(kāi)頭預(yù)留出足夠的空間后,接著就將這些空間進(jìn)行初始化。編譯器為函數(shù)中的字符串?dāng)?shù)組分配了空間,但并沒(méi)有標(biāo)志數(shù)組的末尾位置,所以根本無(wú)法正確測(cè)量字符串?dāng)?shù)組的確切大小。應(yīng)該修改現(xiàn)有編譯器的初始化操作,使它在字符串?dāng)?shù)組的末尾加上結(jié)束標(biāo)志“

        成人妇女免费播放久久久| 久久久熟女一区二区三区| 伊人中文字幕亚洲精品乱码| 老司机亚洲精品影院| 成人三级在线| 国产在线精品亚洲视频在线| 日本一二三四高清在线| 蜜桃av抽搐高潮一区二区| 国产女人成人精品视频| 一本一道久久a久久精品综合蜜桃| 日本一区二区三区光视频 | 女人天堂国产精品资源麻豆| 亚洲三区在线观看内射后入| 国产内射在线激情一区| 日本色偷偷| 熟妇人妻精品一区二区视频| 国产亚av手机在线观看| 亚洲av乱码中文一区二区三区| 无码啪啪人妻| 国产日产桃色精品久久久| 又大又紧又粉嫩18p少妇 | 人妻无码一区二区19P| 日本一区二区三区经典视频| 亚洲av无码av在线播放| 中文无码成人免费视频在线观看 | 国产美女在线一区二区三区| 一区二区三区人妻在线| 内射中出日韩无国产剧情| 特黄a级毛片免费视频| 黄色大片一区二区中文字幕| 男女性行为免费视频网站| 亚洲乱亚洲乱妇50p| 久久青草伊人精品| 高清国产精品一区二区| 女人张开腿让男人桶爽| 亚洲综合av在线在线播放| 亚洲天堂中文字幕君一二三四| 亚洲精品av一区二区| 色欲人妻综合网| 99riav精品国产| 美女视频在线观看网址大全|