999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

緩沖區溢出利用研究

2008-12-31 00:00:00鐘達夫唐懿芳李肖堅
電腦知識與技術 2008年19期

摘要:探討了緩沖區溢出攻擊的原理,研究了國內外緩沖區溢出攻擊的分類,對三種緩沖區溢出攻擊類型進行了深入的技術分析探討,最后對三種攻擊類型進行總結和分析比較。

關鍵詞:緩沖區溢出;棧溢出攻擊;堆溢出攻擊;Bss溢出攻擊

中圖分類號:TP393文獻標識碼:A文章編號:1009-3044(2008)19-30041-03

Utilization of Buffer Overflow

ZHONG Da-fu1, TANG Yi-fang1, LI Xiao-Jian2

(1.School of Computer Science and Engineering, Guangdong Institute of Science and Technology, Zhuhai 519090, China; 2.School of Information Engineering, University of Science and Technology Beijing, Beijing 100083, China; 3.School of Computer Science, Beihang University, Beijing 100083, China)

Abstract: Discussion on the principle of buffer overflow attacks, Research at home and abroad buffer overflow attacks Category, Analysis the three types of buffer overflow attacks technical in-depth. Finally, Summary and analysis and comparison the three types of overflow attacks.

Key words: buffer overflow;stack overflow attack;heap overflow attack;bss overflow attack

1 引言

1988年11月2日康乃爾大學計算機系的一位名叫Robert T. Morris, Jr.碩士研究生——利用緩沖區溢出漏洞——制造了“Morris Worm”,在短時間內就感染了60000多臺計算機[1],對ARPA網(互聯網的前身)的計算機系統造成了巨大的破壞。緩沖區溢出漏洞非常普遍,據綠盟科技每月公布的安全漏洞中,緩沖區溢出漏洞占了大部分,如BSD上存在的打印守護進程遠程緩沖區溢出漏洞、Sun OS上的Solaris whodo本地緩沖區溢出漏洞、Windows下IIS4、IIS5某些版本在處理超長文件名時的緩沖區溢出漏洞,等等。但在“Morris Worm”事件之前和之后的一段時間里,人們對此類攻擊技術所知無幾。直到1996年11月,Aleph One在Phrack magazine雜志上發表了“Smashing the stack for fun and profit”[2]的文章后,利用緩沖區漏洞進行系統攻擊的事件就逐年大幅增加,諸如Code Red worm[3]、SQL slammer worm[4]、Blaster worm[5]等都是典型的緩沖區溢出攻擊事件。據CERT(Computer Emergency Response Team)統計,目前,利用緩沖區溢出漏洞進行的攻擊已經占到整個網絡攻擊次數的一半以上。

緩沖區溢出攻擊,可以導致程序運行失敗、系統崩潰、重新啟動甚至整個網絡癱瘓等效果。更為重要的是,可以利用緩沖區溢出執行非授權指令,甚至取得系統特權,從而給予攻擊者想要的一切。因此,哪怕是一次不成功的緩沖區溢出攻擊,也可以使服務程序宕掉,造成拒絕服務(Deny of Service)攻擊的效果。

2 緩沖區溢出原理

所謂緩沖區,是指計算機在內存區域開辟一段連續內存塊,用以存放相同數據類型的多個實例[3],應用最多的緩沖區類型是字符數組。緩沖區溢出是指當某個用戶/進程試圖往程序中一個固定長度的緩沖區放置比原初分配的存儲空間還要多的數據的時候,通常會導致超越存儲邊界,從而影響相鄰內存空間的數據。造成緩沖區越界的根本原因是由于 C 和 C++ 等高級語言里,程序將數據讀入或復制到緩沖區中的任何時候,所用函數缺乏邊界檢查機制,這些函數包括 strcpy()、strcat()、sprintf()、vsprintf()、gets()、scanf()、fscanf()、sscanf()、vscanf()、vsscanf()和vfscanf()等。如下是一個簡單的緩沖區溢出實例,當strcpy()函數企圖向一個緩沖區填充超過它存儲容量時,數據越出其邊界,就造成了緩沖區溢出。

void function(char *ptr)

{ char buf[4];

strcpy(buf1,ptr);}

在函數function運行時,首先在內存里為其分配一段空間——棧,依次將函數參數ptr、函數返回地址ret、前幀指針sfp(stack frame pointer)和局部變量buf數組壓入其中。現在假設往函數function的字符數組buf復制一串字符串“aaaabbbbccccdddd”,即執行strcpy(buf1,ptr)操作,也即是要將16字節長的字符串復制到只有4個字節長的buf字符數組里,然而由于strcpy()字符串操作函數沒有邊界檢查功能,這就必然要導致字符串要超越buf字符數組的邊界,一直向內存高地址方向覆蓋,最終將函數返回地址等相鄰數據改寫了,如圖1所示,當函數執行結束后返回時,由于函數的返回地址被改寫了,因此常常會導致“段出錯”。緩沖區溢出是向一個緩沖區填充超過它處理能力的數據而越出其邊界所造成的結果,目前許多攻擊者利用有溢出漏洞的程序,進行緩沖區溢出攻擊。所謂緩沖區溢出攻擊,是指利用目標程序的緩沖區溢出漏洞,通過操作目標程序堆棧并暴力改寫其返回地址,從而獲得目標控制權的一種攻擊手段[7]。

圖1 緩沖區溢出前后的內存影像

3 緩沖區溢出攻擊分類及其利用

緩沖區溢出攻擊,國內外都進行了比較深入的研究,并設立了相應的研究機構。1988年的“Morris Worm”事件,在這之前和這之后的一段時間里,人們對此類攻擊技術還是毫無所知的。1995年mudge博士發表了“How To Write Buffer Overflow”[8],初步介紹了緩沖區溢出攻擊的一些原理,但是并沒有給出技術細節。1996年,Aleph One 發表了“Smashing the stack for fun and profit”一文,文章首次詳細地介紹了linux/unix下的棧溢出攻擊的原理、方法和步驟,揭示了緩沖區溢出攻擊中的技術細節,從此掀開了網絡攻擊的新篇章;1999年1月,Matt Conover在他的“w00w00 on Heap Overflows”[9]文獻里首次詳細介紹了如何利用堆和bss進行緩沖區溢出攻擊,對堆和bss的結構和溢出原理作了詳細的介紹,開辟了新的緩沖區溢出攻擊路徑。

在研究linux/unix下的緩沖區攻擊的同時,同時人們又將研究的目光轉到Windows操作系統。DilDog在他的“The Tao of The Windows Buffer Overflow”[9]文章里首次討論了Windows系統平臺下的棧溢出攻擊。Jason Jordan[10]、dark spyrit AKA Barnaby Jack[11] 、Backend [12]等人也對Windows下的緩沖區溢出進行了研究。

按照緩沖區溢出類型,所有的緩沖區溢出攻擊都可以歸納為棧溢出攻擊、堆溢出攻擊和Bss溢出攻擊三類[6]。

3.1 棧溢出及其利用

基于棧的溢出攻擊研究比較早,事實上自1996年以來,從目前可查的文獻資料看,利用緩沖區進行溢出攻擊的事例中,絕大部分是基于棧的溢出攻擊。基于棧的溢出攻擊技術比較簡單,其思路是通過改寫返回地址的值,使其指向預先設計好的攻擊代碼,如圖2所示。這是最常用的溢出攻擊手段,攻擊技術也較成熟和完善。

3.2 堆溢出及其利用

堆和棧的溢出利用原理是一樣的,但是由于堆結構不同于棧結構,因此在利用的時候還是有差異的。對于棧來說,由于棧結構的本身特點,攻擊者可以直接往目標機器的緩沖區復制超長的字符串,改寫保存于棧中固定位置的函數返回地址,實現執行流程的改變。對于堆來說,由于堆本身的結構里并沒有像棧一樣,有函數返回地址,因此在利用的時候,堆溢出要比棧溢出復雜得多。

堆的溢出利用,目前也可以分為兩種情況:第一種是Matt Conover等[10]提出的堆利用方法,這種方法和棧溢出利用比較相似:通過溢出堆,從而覆蓋保存的某個指針值。但這種溢出方法有個條件:即堆溢出漏洞后面要存在一個可利用的指針值,并且該指針值必須是位于堆的后面,即相對于堆來說處于內存高端;第二種是利用堆結構本身的特點 [14-15]。

假設有如下的堆定義:

char *buf1 = (char *)malloc(16);

char *buf2 = (char *)malloc(16);

先往buf2里寫入16個“A”,之后再往buf1里寫入32個“B”。通常認為,往buf1里寫入32個字符,肯定會導致buf1溢出,從而將其相鄰的buf2中的16個“A”改寫為16個“B”,但實際并非如此,只是將buf2的前8個字符改寫為“B”而已,其原因由圖3可知,另外8個字節的“B”被寫到了內部保留的8個字節中了。

圖3 堆溢出示意圖

堆是由程序運行時動態分配的一段內存快,其分配和釋放是根據用戶的需求分別由malloc類函數和free類函數來實現。堆的增長方向與內存的增長方向相同,從內存低地址到內存高地址順序分配。每個堆實質是由用戶數據區和管理結構區兩部分組成,其中用戶數據區用來存儲用戶數據;管理結構區用來存放堆的信息,如堆空閑與否、堆大小和雙向鏈表指針等。攻擊者如果能夠改變堆中的俄內部保留地址的值,就可能改變程序的執行流程,劫持目標計算機的執行權,達到攻擊者的攻擊目的。

3.3 Bss溢出及其利用

Bss段存放全局和靜態的未初始化變量,其分配比較簡單,變量與變量之間是連續的,沒有保留空間。如下定義的兩個字符數組即是位于bss段:static char buf1[16], buf2[16];

假設事先往buf2寫入16個“A”,之后再往buf1里寫入24個“B”,由圖4可以看出,通過溢出靜態字符數組buf1,可以改寫其相鄰區域字符數組buf2的值,利用這點,攻擊者可以通過改寫bss里的指針或者函數指針[10]等方式,改變程序原先的執行流程,使指針跳轉到特定的內存地址并執行攻擊者指定的操作。

圖4 bss溢出示意圖

Bss溢出利用技術比較簡單,其溢出原理與棧溢出原理基本一樣,都是設法去改寫某個相鄰的指針值。但是棧溢出時的改寫對象(函數返回地址)其位置相對固定,而Bss溢出后要改寫的對象其位置是非固定的,因此在進行Bss溢出攻擊時要確定某個指針值的位置是比較難的,另外一個困難是,即使存在Bss溢出漏洞,但假如附近沒有可利用的指針值,溢出攻擊也不能成功。因此,目前利用Bss溢出進行攻擊的例子相對較少。

4 結束語

棧溢出攻擊技術相對比較簡單,攻擊技術也相對比較完善,并且利用棧溢出漏洞的攻擊具有一定的規律可循,因此在目前的緩沖區溢出攻擊中,相當部分的攻擊選擇了棧溢出攻擊方式。但是,棧的溢出攻擊中,攻擊者也會遇到比其他兩種攻擊方式更嚴密的防御措施,如stackguard [16]、不可執行堆棧保護方法[17]、Pax內核補丁保護方法[18]以及隨機棧保護技術[19]等。由于這些防御措施,使得棧溢出攻擊變得困難。

堆溢出技術比較復雜,雖然近幾年來,已經有越來越多的關于堆溢出利用的事件和理論報道,但是這門技術仍然相對比較深奧。這主要是由于每個系統和編譯器都使用不同的方式管理堆,即使是在相同的平臺上,不同的應用程序也會使用不同的堆管理方式[20],針對不同目標軟件的每一次攻擊都有其各自的特點,沒有固定的規律可循,因此實施這類攻擊比較困難,非一般人員所能掌握和使用。但是由于堆的保護可以說是非常薄弱[10],因此堆溢出攻擊是目前緩沖區溢出攻擊的研究重點。

Bss溢出攻擊技術并不難,但是bss溢出利用事件并不多見,其主要原因在于要想bss溢出攻擊成功,除了要有bss溢出漏洞外,還要滿足如下條件:(1)bss區域必須具有可利用的指針值等;(2)可利用的指針值必須是位于bss溢出漏洞的內存高端。但即使滿足了上面的條件,由于指針值位置是非固定的,在攻擊時還存在一定的定位困難。

參考文獻:

[1] Mark W. Eichin and Jon A. Rochlis. \"With Microscope and Tweezers: An Analysis of the Internet Virus of November 1988\" [EB/OL]. Massachusetts Institute of Technology.Feb 9,1989.

[2] Aleph One. Smashing the stack for fun and profit[J]. Phrack Magazine, 49(14), 1996.11

(下轉第50頁)

(上接第43頁)

[3] CERT.CERT?誖 Advisory CA-2001-19 \"Code Red\" Worm Exploiting Buffer Overflow In IIS Indexing Service DLL[Z]. http://www.cert.org/advisories/CA-2001-19.html,2001.

[4] CERT.CERT?誖 Advisory CA-2003-04 MS-SQL Server Worm[Z]. http://www.cert.org/advisories/CA-2003-04.html,2003.

[5] CERT.CERT?誖 Advisory CA-2003-20 W32/Blaster worm[Z]. http://www.cert.org/advisories/CA-2003-20.html,2003.

[6] 李肖堅,等.緩沖區溢出原理及其植入代碼分析研究[J].計算機應用研究.2007.1.

[7] 王磊,等.系統緩沖區溢出攻擊防范體系的建立[J].計算機工程.2004.6.

[8] Mudge.HOW TO WRITE BUFFER OVERFLOWS[EB/OL].http://reactor-core.org/overflow-howto.html,1995.10.

[9] Matt Conover.w00w00 on Heap Overflows [EB/OL].http:/www.windowsecurity.com/whitepaper/ w00w00_on_Heap_Overflows.html, 1999.1.

[10] DilDog.The Tao of The Windows Buffer Overflow[EB/OL].:http:/ www.cultdeadcow.com/cDc_files/cDc-351/,1999

[11] Jason Jordan. WindowsNT Buffer Overflow's From Start to Finish[EB/OL]. http://www.net-security.org/article_out.php?id=334,1999.

[12] dark spyrit AKA Barnaby Jack. Win32 Buffer Overflows (Location,Exploitation and Prevention).Phrack Magazine,55(9),1999.9.

[13] Jason,Backend. Windows2000緩沖區溢出入門[EB/OL]. http://www.juntuan.net/e/DoPrint/?newsid=2904,2004.04

[14] Pierre-Alain FAYOLLE, Vincent GLAUME ENSEIRB. A Buffer Overfow Study Attacks Defenses[EB/OL].http:// securityfocus.com/library/category/28,2002.

[15] warning3.一種新的堆溢出方法[EB/OL].http://overflow.nease.net/txt/new_heap.txt,2001.

[16] Crispin Cowan, Steve Beattie, Ryan Finnin Day, Calton Pu, Perry Wagle and Erik Walthinsen. Protecting Systems from Stack Smashing Attacks with StackGuard[EB/OL]. http://www.immunix.org/documentation.html,2000.Bulba and Kil3r. BYPASSING STACKGUARD AND STACKSHIELD [EB/OL].

[17] Solar Designer. Non-executable Stack Patch [EB/OL]. http://www.1.com/security/linux-stack,1998.

[18] The PaX team. PaX ASLR protection[EB/OL]. http://pageexec.virtualave.net,1999.

[19] Pax team. address space layout randomization[EB/OL].http://pax.grsecurity.net/docs/aslr.txt.

[20] Greg Hoglund,等.軟件剖析—代碼攻防之道[M].北京:清華大學出版社,2005.4:239.

注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文

主站蜘蛛池模板: 性欧美精品xxxx| 91网站国产| 久久人人妻人人爽人人卡片av| 国产精品无码翘臀在线看纯欲| 精品色综合| 免费国产高清精品一区在线| 亚洲色图综合在线| 亚洲性一区| 国产成人综合网在线观看| 在线永久免费观看的毛片| 亚洲视频免| 午夜视频免费试看| 亚洲男人的天堂视频| 亚洲人成网站观看在线观看| 欧美人在线一区二区三区| 欧美一级一级做性视频| 波多野结衣视频网站| 久久人体视频| 国产成人免费手机在线观看视频| 啪啪永久免费av| 黄片在线永久| 91日本在线观看亚洲精品| 手机永久AV在线播放| 国产精品久久久久久搜索 | 亚洲国产高清精品线久久| 亚洲精品在线观看91| 精品国产91爱| a毛片在线免费观看| 思思热在线视频精品| 六月婷婷精品视频在线观看| 国产高清不卡| 亚洲人成网站日本片| 在线观看免费黄色网址| 一级福利视频| 国产电话自拍伊人| 欧美精品成人一区二区在线观看| 国模视频一区二区| 婷婷六月在线| 国产乱人伦偷精品视频AAA| 亚洲国产成人精品一二区| 19国产精品麻豆免费观看| 国产亚洲精| 日本免费福利视频| 国产毛片一区| 91精品小视频| 91精品国产麻豆国产自产在线| 亚洲第一在线播放| 97超级碰碰碰碰精品| 欧美一级夜夜爽| 色综合久久无码网| 日本欧美视频在线观看| 在线视频亚洲色图| 欧美全免费aaaaaa特黄在线| 尤物亚洲最大AV无码网站| 在线a视频免费观看| 国产va在线观看| 亚洲娇小与黑人巨大交| 亚洲高清日韩heyzo| 最新精品久久精品| 日本在线亚洲| 日韩精品专区免费无码aⅴ| 日韩欧美一区在线观看| 91福利在线看| 四虎AV麻豆| 大香网伊人久久综合网2020| 国产h视频免费观看| 人妖无码第一页| 99久久99视频| 一区二区三区四区日韩| 欧美一区二区三区香蕉视| 国产精品分类视频分类一区| 无码AV日韩一二三区| 亚洲精品成人片在线观看| 亚洲国产精品日韩欧美一区| 成年午夜精品久久精品| 久久精品亚洲中文字幕乱码| 欧美日本中文| 亚洲视频色图| 亚洲黄色视频在线观看一区| 99视频在线看| 欧美成人看片一区二区三区 | 精品国产网站|