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

        ?

        VC++緩沖區(qū)溢出攻擊的分析與防范策略

        2010-12-31 00:00:00張鵬程
        企業(yè)導(dǎo)報(bào) 2010年12期

        [摘要]首先解釋了緩沖區(qū)溢出的概念和溢出原理,并在VC++環(huán)境下比較了緩沖區(qū)非溢出、下標(biāo)越界溢出、堆溢出、綜合代碼和激活記錄溢出四種情況,由此總結(jié)出了避免緩沖區(qū)溢出的基本方法;其次通過(guò)一個(gè)導(dǎo)致緩沖區(qū)溢出的小程序?qū)彌_區(qū)溢出攻擊的產(chǎn)生進(jìn)行了實(shí)例分析,總結(jié)出緩沖區(qū)溢出攻擊的類型;最后,從靜態(tài)防范和動(dòng)態(tài)防范兩個(gè)方面提出了溢出的防范策略,緩沖區(qū)溢出攻擊的分析與防范對(duì)網(wǎng)絡(luò)信息安全具有非常重要的意義。

        [關(guān)鍵詞]緩沖區(qū);堆溢出;靜態(tài)防范:攻擊

        一、緩沖區(qū)溢出概念

        緩沖區(qū)是用戶為程序運(yùn)行時(shí)在計(jì)算機(jī)中申請(qǐng)的一段連續(xù)的內(nèi)存,它保存了給定類型的數(shù)據(jù)。緩沖區(qū)溢出指的是一種常見(jiàn)且危害很大的系統(tǒng)攻擊手段,通過(guò)向程序的緩沖區(qū)寫入超出其長(zhǎng)度的內(nèi)容,造成緩沖區(qū)的溢出,破壞程序的堆棧,使程序轉(zhuǎn)而執(zhí)行其他的指令,以達(dá)到攻擊的目的。為了達(dá)到這個(gè)目的,攻擊者必須達(dá)到如下的兩個(gè)目標(biāo):(1)程序的地址空間里安排適當(dāng)?shù)拇a。(2)通過(guò)適當(dāng)?shù)某跏蓟拇嫫骱蛢?nèi)存,讓程序跳轉(zhuǎn)到入侵者安排的地址空間執(zhí)行。

        二、緩沖區(qū)溢出概念危害

        在當(dāng)前網(wǎng)絡(luò)與分布式系統(tǒng)安全中,被廣泛利用的50%以上都是緩沖區(qū)溢出,其中最著名的例子是1988年利用fingerd漏洞的蠕蟲(chóng)。而緩沖區(qū)溢出中,最為危險(xiǎn)的是堆棧溢出,因?yàn)槿肭终呖梢岳枚褩R绯?,在函?shù)返回時(shí)改變返回程序的地址,讓其跳轉(zhuǎn)到任意地址,帶來(lái)的危害一種是程序崩潰導(dǎo)致拒絕服務(wù);另外一種是跳轉(zhuǎn)并且執(zhí)行一段惡意代碼,比如得到shell,然后為所欲為。

        三、緩沖區(qū)溢出的原理

        通過(guò)往程序的緩沖區(qū)寫超出其長(zhǎng)度的內(nèi)容,造成緩沖區(qū)的溢出,破壞程序的堆棧,造成程序崩潰或使程序轉(zhuǎn)而執(zhí)行其它指令,以達(dá)到攻擊的目的。造成緩沖區(qū)溢出的原因是程序中沒(méi)有仔細(xì)檢查用戶輸入的參數(shù)。例如下面程序:

        void function(char*str){

        char buffer[16];

        strcpy(buffer,str);}

        上面的strcpy()將直接把str中的內(nèi)容copy到buffer中。這樣只要str的長(zhǎng)度大于16,就會(huì)造成buffer的溢出,使程序運(yùn)行出錯(cuò)。存在像strcpy這樣的問(wèn)題的標(biāo)準(zhǔn)函數(shù)還有strcat(),sprintf(),vsprintf(),gets(),scanf()等。當(dāng)然,隨便往緩沖區(qū)中填東西造成它溢出只會(huì)出現(xiàn)“分段錯(cuò)誤”(Seg-mentation fault),而不能達(dá)到攻擊的目的。最常見(jiàn)的手段是通過(guò)制造緩沖區(qū)溢出使程序運(yùn)行一個(gè)用戶shell,再通過(guò)shell執(zhí)行其它命令。如果該程序?qū)儆趓oot且有suid權(quán)限的話,攻擊者就獲得了一個(gè)有root權(quán)限的shell,可以對(duì)系統(tǒng)進(jìn)行任意操作了。

        緩沖區(qū)溢出攻擊之所以成為一種常見(jiàn)安全攻擊手段其原因在于緩沖區(qū)溢出漏洞太普遍,并且易于實(shí)現(xiàn)。緩沖區(qū)溢出成為遠(yuǎn)程攻擊的主要手段其原因在于緩沖區(qū)溢出漏洞給予了攻擊者所想要的一切,植入并且執(zhí)行攻擊代碼。被植入的攻擊代碼以一定的權(quán)限運(yùn)行有緩沖區(qū)溢出漏洞的程序,而得到被攻擊主機(jī)的控制權(quán)。在1998年Lincoln實(shí)驗(yàn)室用來(lái)評(píng)估入侵檢測(cè)的的5種遠(yuǎn)程攻擊中,有2種是緩沖區(qū)溢出。在1998年CERT的13份建議中,有9份與緩沖區(qū)溢出有關(guān),在1999年,至少有半數(shù)的建議和緩沖區(qū)溢出有關(guān)。在Bugtraq的調(diào)查中,有2/3的被調(diào)查者認(rèn)為緩沖區(qū)溢出漏洞是一個(gè)很嚴(yán)重的安全問(wèn)題。

        緩沖區(qū)溢出漏洞和攻擊有很多種形式,會(huì)在第二節(jié)對(duì)他們進(jìn)行描述和分類。相應(yīng)地防衛(wèi)手段也隨著攻擊方法的不同而不同,將在第四節(jié)描述,它的內(nèi)容包括針對(duì)每種攻擊類型制定有效的防衛(wèi)手段。

        四、緩沖區(qū)溢出分類

        1.堆棧溢出。破壞系統(tǒng)堆棧中被調(diào)用函數(shù)的返回地址是緩沖區(qū)溢出攻擊者最常用的方法。首先通過(guò)輸入大量的數(shù)據(jù),以此造成緩沖區(qū)溢出,如果溢出改變了堆棧中保存的函數(shù)返回地址,則函數(shù)返回時(shí),可使程序轉(zhuǎn)向執(zhí)行其它指令,以達(dá)到攻擊的目的。攻擊代碼一般是類似于exce(“sh”)的這樣能獲得系統(tǒng)控制權(quán)的程序。通常情況下攻擊者輸入的超長(zhǎng)字符串實(shí)際上是含一個(gè)二進(jìn)制機(jī)器語(yǔ)言的小程序,這就是攻擊代碼。因此,改變的函數(shù)返回地址將指向溢出數(shù)據(jù),也就是這段攻擊代碼。

        2.修改函數(shù)指針溢出。如果程序中使用了函數(shù)指針變量,例如類似于“void(*foo)()”這樣的語(yǔ)句。函數(shù)的指針可能位于堆棧靜態(tài)數(shù)據(jù)區(qū)中等,如果被攻擊者攻擊的緩沖區(qū)點(diǎn)恰好就在某個(gè)指針的附近,攻擊者就有機(jī)會(huì)修改函數(shù)指針,當(dāng)程序通過(guò)指針變量調(diào)用該函數(shù)時(shí)就會(huì)轉(zhuǎn)去執(zhí)行攻擊者事先放置的代碼。

        3.長(zhǎng)跳轉(zhuǎn)溢出。在c語(yǔ)言中包含了一個(gè)簡(jiǎn)單的檢驗(yàn)/恢復(fù)系統(tǒng),稱為“set jmp/long jmp”,意思是在檢驗(yàn)點(diǎn)設(shè)定“setjmp(buffer)”,用“l(fā)ong jmp(buffer)”來(lái)恢復(fù)檢驗(yàn)點(diǎn)。如果攻擊時(shí)能夠進(jìn)入緩沖區(qū)的空間,“l(fā)ong jmp(buffer)”實(shí)際上是跳轉(zhuǎn)到攻擊者的代碼。像函數(shù)指針一樣,long jmp緩沖區(qū)能夠指向任何地方,所以攻擊者所要做的就是找到一個(gè)可供溢出的緩沖區(qū)。例如Perl 5.003,攻擊者首先進(jìn)入用來(lái)恢復(fù)緩沖區(qū)溢出的long jmp緩沖區(qū),然后誘導(dǎo)進(jìn)入恢復(fù)模式,這樣就使Perl的解釋器跳轉(zhuǎn)到攻擊代碼上了。

        4.綜合代碼植入和激活記錄溢出。最簡(jiǎn)單和常見(jiàn)的溢出緩沖區(qū)攻擊類型就是在一個(gè)字符串里綜合了代碼植入和激活記錄。攻擊者定位一個(gè)可供溢出的自動(dòng)變量,然后向程序傳遞一個(gè)很大的字符串,在引發(fā)緩沖區(qū)溢出改變激活記錄的同時(shí)植入代碼(C語(yǔ)言程序員通常在習(xí)慣上只為用戶和參數(shù)開(kāi)辟很小的緩沖區(qū))。

        代碼植入和緩沖區(qū)溢出不一定要在一次動(dòng)作內(nèi)完成,攻擊者可以在一個(gè)緩沖區(qū)內(nèi)放置代碼(這個(gè)時(shí)候并不能溢出緩沖區(qū)),然后攻擊者通過(guò)溢出另一個(gè)緩沖區(qū)來(lái)轉(zhuǎn)移程序的指針。這樣的方法一般用來(lái)解決可供溢出的緩沖區(qū)不夠大(不能放下全部的代碼)。如果攻擊者試圖使用已經(jīng)常駐的代碼而不是從外部植入代碼,他們通常必須把代碼作為參數(shù)。例如在libc(幾乎所有的C程序都用它來(lái)連接)中的一部分代碼段會(huì)執(zhí)“exec(something)”,其中something就是參數(shù),攻擊者使用緩沖區(qū)溢出改變程序的參數(shù),利用另一個(gè)緩沖區(qū)溢出,使程序指針指向libc中的特定的代碼段。

        五、緩沖區(qū)溢出攻擊的防范策略

        1.下標(biāo)越界溢出防范。只要在所有拷貝數(shù)據(jù)的地方進(jìn)行數(shù)據(jù)長(zhǎng)度和有效性的檢查,確保目標(biāo)緩沖區(qū)中數(shù)據(jù)不越界并有效,就可避免緩沖區(qū)溢出,更不可能使程序跳轉(zhuǎn)到惡意代碼上。但諸如C/C++自身是一種不進(jìn)行強(qiáng)類型和長(zhǎng)度檢查的一種程序設(shè)計(jì)語(yǔ)言,而程序員在編寫代碼時(shí)由于開(kāi)發(fā)速度和代碼的簡(jiǎn)潔性,往往忽視了程序的健壯性,導(dǎo)致緩沖區(qū)溢出,因此,我們必須從程序語(yǔ)言和系統(tǒng)結(jié)構(gòu)方面加強(qiáng)防范。很多不安全程序的出現(xiàn)是由于調(diào)用了一些不安全的庫(kù)函數(shù),這些庫(kù)函數(shù)往往沒(méi)有對(duì)數(shù)組邊界進(jìn)行檢查。這些函數(shù)有strcpy()、sprintf()、str-cat()等,所以一種簡(jiǎn)單的方法是利用grep搜索源程序,找出對(duì)這些函數(shù)的調(diào)用,然后代以更安全的函數(shù),如strncpy()替換strcpy()。進(jìn)一步的查找可以是檢查更廣范圍的不安全操作,如在一個(gè)不定循環(huán)中對(duì)數(shù)組的賦值等。

        2.堆溢出的防范。緩沖區(qū)溢出的根本原因是沒(méi)有數(shù)組邊界檢查,當(dāng)數(shù)組被溢出時(shí),一些關(guān)鍵的數(shù)據(jù)就有可能被修改,攻擊代碼也可以被植入。因此,對(duì)數(shù)組進(jìn)行邊界檢查,使超長(zhǎng)代碼不可能植入,就完全沒(méi)有了緩沖區(qū)溢出攻擊產(chǎn)生的條件。只要數(shù)組不能被溢出,溢出攻擊就無(wú)從談起。

        為了實(shí)現(xiàn)數(shù)組邊界檢查,則所有的對(duì)數(shù)組的讀寫操作都應(yīng)當(dāng)被檢查,以確保對(duì)數(shù)組的操作在正確的范圍內(nèi)。最直接的方法是檢查所有的數(shù)組操作,但會(huì)使性能下降很多,通??刹捎靡恍﹥?yōu)化的技術(shù)來(lái)減少檢查次數(shù)。

        国产精品白浆一区二区免费看| 激情伊人五月天久久综合| 中文字幕一区二区三区乱码| 免费99视频| 精品女同av一区二区三区| 亚洲精品中文字幕乱码影院| 欧美 国产 综合 欧美 视频| 国产日韩欧美在线| 中文字幕人妻一区色偷久久| 蜜桃av噜噜一区二区三区策驰| 国产精成人品日日拍夜夜免费 | 欧美日韩精品一区二区三区不卡| 免费国产h视频在线观看86| 亚洲精品国产av成拍| 国产a在亚洲线播放| 色妞色综合久久夜夜| 亚洲αv在线精品糸列| 人妻少妇精品视中文字幕免费| 一边做一边喷17p亚洲乱妇50p| 亚洲av成人一区二区三区av| 一片内射视频在线观看| 美女丝袜美腿玉足视频| 成人美女黄网站色大免费的| 国产日产精品久久久久久| 亚洲一区二区三区资源| 后入内射国产一区二区| 97久久天天综合色天天综合色hd| 欧美在线观看www| 日韩av一区二区不卡| 久久天天躁狠狠躁夜夜2020一| 99福利在线| 亚洲全国最大的人成网站| 真人做爰试看120秒| 日日噜噜夜夜爽爽| 日本第一区二区三区视频| 国产桃色一区二区三区| 成人a级视频在线观看| 亚洲区偷拍自拍29p| 亚洲最大av在线精品国产| 国产三级久久久精品麻豆三级| 中国大陆一级毛片|