999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人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ū)溢出攻擊的類(lèi)型;最后,從靜態(tài)防范和動(dòng)態(tài)防范兩個(gè)方面提出了溢出的防范策略,緩沖區(qū)溢出攻擊的分析與防范對(duì)網(wǎng)絡(luò)信息安全具有非常重要的意義。

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

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

緩沖區(qū)是用戶(hù)為程序運(yùn)行時(shí)在計(jì)算機(jī)中申請(qǐng)的一段連續(xù)的內(nèi)存,它保存了給定類(lèi)型的數(shù)據(jù)。緩沖區(qū)溢出指的是一種常見(jiàn)且危害很大的系統(tǒng)攻擊手段,通過(guò)向程序的緩沖區(qū)寫(xiě)入超出其長(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ū)寫(xiě)超出其長(zhǎng)度的內(nèi)容,造成緩沖區(qū)的溢出,破壞程序的堆棧,造成程序崩潰或使程序轉(zhuǎn)而執(zhí)行其它指令,以達(dá)到攻擊的目的。造成緩沖區(qū)溢出的原因是程序中沒(méi)有仔細(xì)檢查用戶(hù)輸入的參數(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è)用戶(hù)shell,再通過(guò)shell執(zhí)行其它命令。如果該程序?qū)儆趓oot且有suid權(quán)限的話(huà),攻擊者就獲得了一個(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è)很?chē)?yán)重的安全問(wèn)題。

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

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

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

2.修改函數(shù)指針溢出。如果程序中使用了函數(shù)指針變量,例如類(lèi)似于“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),稱(chē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ū)攻擊類(lèi)型就是在一個(gè)字符串里綜合了代碼植入和激活記錄。攻擊者定位一個(gè)可供溢出的自動(dòng)變量,然后向程序傳遞一個(gè)很大的字符串,在引發(fā)緩沖區(qū)溢出改變激活記錄的同時(shí)植入代碼(C語(yǔ)言程序員通常在習(xí)慣上只為用戶(hù)和參數(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)類(lèi)型和長(zhǎng)度檢查的一種程序設(shè)計(jì)語(yǔ)言,而程序員在編寫(xiě)代碼時(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ù)組的讀寫(xiě)操作都應(yīng)當(dāng)被檢查,以確保對(duì)數(shù)組的操作在正確的范圍內(nèi)。最直接的方法是檢查所有的數(shù)組操作,但會(huì)使性能下降很多,通常可采用一些優(yōu)化的技術(shù)來(lái)減少檢查次數(shù)。

主站蜘蛛池模板: 99热免费在线| 国产不卡一级毛片视频| 大陆精大陆国产国语精品1024| 亚洲国内精品自在自线官| 成人日韩精品| 精品久久高清| 亚洲国模精品一区| 日本在线视频免费| 国产经典在线观看一区| 激情网址在线观看| 欧美h在线观看| 国产www网站| 四虎国产精品永久在线网址| 久久久久九九精品影院| AⅤ色综合久久天堂AV色综合| 狠狠ⅴ日韩v欧美v天堂| 国产97视频在线观看| 丁香六月综合网| 伊人色天堂| AⅤ色综合久久天堂AV色综合 | 久996视频精品免费观看| 中文字幕在线免费看| 日韩区欧美区| 欧美视频免费一区二区三区| 亚洲高清国产拍精品26u| 国产精品一区二区在线播放| 综合五月天网| 中文无码精品A∨在线观看不卡| 72种姿势欧美久久久大黄蕉| 国产尤物视频在线| 国产剧情一区二区| 找国产毛片看| 色综合天天综合| 亚洲区第一页| 91久草视频| 欧美午夜精品| 欧美日韩精品一区二区视频| 色综合天天视频在线观看| AV在线天堂进入| 日a本亚洲中文在线观看| 国产打屁股免费区网站| 成人午夜网址| 亚洲有无码中文网| 色偷偷男人的天堂亚洲av| 久久9966精品国产免费| 日韩欧美国产综合| 久久久久久久97| 国产精品亚洲一区二区三区z| 在线免费亚洲无码视频| 日韩精品毛片人妻AV不卡| 国产免费黄| 99色亚洲国产精品11p| 国内精品视频区在线2021| 亚洲色图欧美一区| 国产v欧美v日韩v综合精品| 91av成人日本不卡三区| 制服丝袜在线视频香蕉| 亚洲区欧美区| 国内自拍久第一页| 国产精品美女自慰喷水| 亚洲成肉网| 国产一区二区三区在线无码| 72种姿势欧美久久久久大黄蕉| 毛片网站在线看| 97在线国产视频| 99精品视频播放| 日本免费新一区视频| 99re在线视频观看| 久久久精品国产SM调教网站| 亚洲欧洲日产国码无码av喷潮| 免费看的一级毛片| 中文字幕欧美日韩| 成人毛片免费在线观看| www成人国产在线观看网站| 免费99精品国产自在现线| 亚洲中久无码永久在线观看软件| 国产在线日本| 欧美不卡视频一区发布| 成人精品免费视频| 蜜臀AV在线播放| 人禽伦免费交视频网页播放| 夜精品a一区二区三区|