<abbr id="8ggge"></abbr>
<kbd id="8ggge"><code id="8ggge"></code></kbd>
<pre id="8ggge"></pre>
  • <s id="8ggge"><dd id="8ggge"></dd></s>
    <s id="8ggge"><dd id="8ggge"></dd></s><cite id="8ggge"><tbody id="8ggge"></tbody></cite>
    <kbd id="8ggge"><code id="8ggge"></code></kbd>

    國內或國外 期刊或論文

    您當前的位置:發表學術論文網電子論文》 計算機應用論文之緩沖區溢出以及漏洞的探討> 正文

    計算機應用論文之緩沖區溢出以及漏洞的探討

    所屬分類:電子論文 閱讀次 時間:2014-10-22 14:11

    本文摘要:摘要 論文詳細分析了緩沖區溢出的原理,描述了網絡攻擊者利用緩沖區溢出漏洞進行系統攻擊的一般過程,最后簡單討論了幾種緩沖區溢出的保護方法。 關鍵詞 緩沖區溢出 緩沖區溢出漏洞 安全攻擊 緩沖區溢出保護 在過去的十年中,以緩沖區溢出為攻擊類型的安全漏

      摘要 論文詳細分析了緩沖區溢出的原理,描述了網絡攻擊者利用緩沖區溢出漏洞進行系統攻擊的一般過程,最后簡單討論了幾種緩沖區溢出的保護方法。

      關鍵詞 緩沖區溢出 緩沖區溢出漏洞 安全攻擊 緩沖區溢出保護

      在過去的十年中,以緩沖區溢出為攻擊類型的安全漏洞是最為常見的一種形式。更為嚴重的是,緩沖區溢出漏洞占了遠程網絡攻擊的絕大多數,這種攻擊可以使得一個匿名的Internet用戶有機會獲得一臺主機的部分或全部的控制權!由于這類攻擊使任何人都有可能取得主機的控制權,所以它代表了一類極其嚴重的安全威脅。

      緩沖區溢出攻擊之所以成為一種常見的攻擊手段,其原因在于緩沖區溢出漏洞太普通了,并且易于實現。而且,緩沖區溢出所以成為遠程攻擊的主要手段,其原因在于緩沖區溢出漏洞給予了攻擊者所想要的一切:殖入并且執行攻擊代碼。被殖入的攻擊代碼以一定的權限運行有緩沖區溢出漏洞的程序,從而得到被攻擊主機的控制權。本文簡單介紹了緩沖區溢出的基本原理和預防辦法。

      一、緩沖區溢出的概念和原理

      緩沖區是內存中存放數據的地方。在程序試圖將數據放到機器內存中的某一個位置的時候,因為沒有足夠的空間就會發生緩沖區溢出。而人為的溢出則是有一定企圖的,攻擊者寫一個超過緩沖區長度的字符串,植入到緩沖區,然后再向一個有限空間的緩沖區中植入超長的字符串,這時可能會出現兩個結果:一是過長的字符串覆蓋了相鄰的存儲單元,引起程序運行失敗,嚴重的可導致系統崩潰;另一個結果就是利用這種漏洞可以執行任意指令,甚至可以取得系統root特級權限。

      緩沖區是程序運行的時候機器內存中的一個連續塊,它保存了給定類型的數據,隨著動態分配變量會出現問題。大多時為了不占用太多的內存,一個有動態分配變量的程序在程序運行時才決定給它們分配多少內存。如果程序在動態分配緩沖區放入超長的數據,它就會溢出了。一個緩沖區溢出程序使用這個溢出的數據將匯編語言代碼放到機器的內存里,通常是產生root權限的地方。僅僅單個的緩沖區溢出并不是問題的根本所在。但如果溢出送到能夠以root權限運行命令的區域,一旦運行這些命令,那可就等于把機器拱手相讓了。

      造成緩沖區溢出的原因是程序中沒有仔細檢查用戶輸入的參數。例如下面程序:

      example1.c

      void func1(char *input) {

      char buffer[16];

      strcpy(buffer, input);

      }

      上面的strcpy()將直接吧input中的內容copy到buffer中。這樣只要input的長度大于16,就會造成buffer的溢出,使程序運行出錯。存在像strcpy這樣的問題的標準函數還有strcat(),sprintf(),vsprintf(),gets(),scanf(),以及在循環內的getc(),fgetc(),getchar()等。

      當然,隨便往緩沖區中填東西造成它溢出一般只會出現Segmentation fault 錯誤,而不能達到攻擊的目的。最常見的手段是通過制造緩沖區溢出使程序運行一個用戶shell,再通過shell執行其他命令。如果該程序屬于root且有suid權限的話,攻擊者就獲得了一個有root權限的shell,便可以對系統進行任意操作了。

      請注意,如果沒有特別說明,下面的內容都假設用戶使用的平臺為基于Intel x86 CPU的Linux系統。對其他平臺來說,本文的概念同樣適用,但程序要做相應修改。

      二、制造緩沖區溢出

      一個程序在內存中通常分為程序段、數據段和堆棧三部分。程序段里放著程序的機器碼和只讀數據。數據段放的是程序中的靜態數據。動態數據則通過堆棧來存放。在內存中,它們的位置是:

      當程序中發生函數調用時,計算機做如下操作:首先把參數壓入堆棧;然后保存指令寄存器(IP)中的內容作為返回地址(RET);第三個放入堆棧的是基址寄存器(FP);然后把當前的棧指針(SP)拷貝到FP,做為新的基地址;最后為本地變量留出一定空間,把SP減去適當的數值。以下面程序為例:

      example2.c

      void func1(char * input) {

      char buffer[16];

      strcpy(buffer, input);

      }

      void main() {

      char longstring[256];

      int i;

      for( i = 0; i < 255; i++)

      longstring [i] = 'B';

      func1(longstring);

      }

      當調用函數func1()時,堆棧如下:

      不用說,程序執行的結果是"Segmentation fault (core dumped)"或類似的出錯信息。因為從buffer開始的256個字節都將被* input的內容'B'覆蓋,包括sfp, ret,甚至*input。'B'的16進值為0x41,所以函數的返回地址變成了0x41414141,這超出了程序的地址空間,所以出現段錯誤。

      三、緩沖區溢出漏洞攻擊方式

      緩沖區溢出漏洞可以使任何一個有黑客技術的人取得機器的控制權甚至是最高權限。一般利用緩沖區溢出漏洞攻擊root程序,大都通過執行類似“exec(sh)”的執行代碼來獲得root 的shell。黑客要達到目的通常要完成兩個任務,就是在程序的地址空間里安排適當的代碼和通過適當的初始化寄存器和存儲器,讓程序跳轉到安排好的地址空間執行。

      1、在程序的地址空間里安排適當的代碼

      在程序的地址空間里安排適當的代碼往往是相對簡單的。如果要攻擊的代碼在所攻擊程序中已經存在了,那么就簡單地對代碼傳遞一些參數,然后使程序跳轉到目標中就可以完成了。攻擊代碼要求執行“exec(‘/bin/sh’)”,而在libc庫中的代碼執行“exec(arg)”,其中的“arg”是個指向字符串的指針參數,只要把傳入的參數指針修改指向“/bin/sh”,然后再跳轉到libc庫中的響應指令序列就可以了。當然,很多時候這個可能性是很小的,那么就得用一種叫“植入法”的方式來完成了。當向要攻擊的程序里輸入一個字符串時,程序就會把這個字符串放到緩沖區里,這個字符串包含的數據是可以在這個所攻擊的目標的硬件平臺上運行的指令序列。緩沖區可以設在:堆棧(自動變量)、堆(動態分配的)和靜態數據區(初始化或者未初始化的數據)等的任何地方。也可以不必為達到這個目的而溢出任何緩沖區,只要找到足夠的空間來放置這些攻擊代碼就夠了。

      2、控制程序轉移到攻擊代碼的形式

      緩沖區溢出漏洞攻擊都是在尋求改變程序的執行流程,使它跳轉到攻擊代碼,最為基本的就是溢出一個沒有檢查或者其他漏洞的緩沖區,這樣做就會擾亂程序的正常執行次序。通過溢出某緩沖區,可以改寫相近程序的空間而直接跳轉過系統對身份的驗證。原則上來講攻擊時所針對的緩沖區溢出的程序空間可為任意空間。但因不同地方的定位相異,所以也就帶出了多種轉移方式。

      (1)Function Pointers(函數指針)

      在程序中,“void (* foo) ( )”聲明了個返回值為“void” Function Pointers的變量“foo”。Function Pointers可以用來定位任意地址空間,攻擊時只需要在任意空間里的Function Pointers鄰近處找到一個能夠溢出的緩沖區,然后用溢出來改變Function Pointers。當程序通過Function Pointers調用函數,程序的流程就會實現。

      (2)Activation Records(激活記錄)

      當一個函數調用發生時,堆棧中會留駐一個Activation Records,它包含了函數結束時返回的地址。執行溢出這些自動變量,使這個返回的地址指向攻擊代碼,再通過改變程序的返回地址。當函數調用結束時,程序就會跳轉到事先所設定的地址,而不是原來的地址。這樣的溢出方式也是較常見的。

      (3)Longjmp buffers(長跳轉緩沖區)

      在C語言中包含了一個簡單的檢驗/恢復系統,稱為“setjmp/longjmp”,意思是在檢驗點設定“setjmp(buffer)”,用longjmp(buffer)“來恢復檢驗點。如果攻擊時能夠進入緩沖區的空間,感覺“longjmp(buffer)”實際上是跳轉到攻擊的代碼。像Function Pointers一樣,longjmp緩沖區能夠指向任何地方,所以找到一個可供溢出的緩沖區是最先應該做的事情。

    轉載請注明來自發表學術論文網:http://www.zpfmc.com/dzlw/1563.html

    主站蜘蛛池模板: 国产午夜亚洲精品不卡| 日本丰满www色| 国产精品乱码在线观看| 亚洲欧洲精品视频在线观看| JLZZJLZZ全部女高潮| 狠狠色综合网久久久久久| 女仆胸大又放荡的h| 国产黄色二级片| 亚洲欧美日韩国产| 2021乱理片宅它网| 玩乡下小处雏女免费视频| 女人张腿让男人捅| 四虎影视永久地址四虎影视永久地址www成人| 久久亚洲精品无码gv| 艹逼视频免费看| 成人爱做日本视频免费| 出租屋换租妻小雯21回| a级毛片免费观看网站| 精品哟哟哟国产在线观看不卡 | 日本久久中文字幕精品| 国产偷窥熟女精品视频| 久久se精品动漫一区二区三区| 老司机午夜电影| 女大学生的沙龙室| 亚洲精品一二区| 四虎1515hh永久久免费| 日本韩国中文字幕| 国产成人精品视频一区二区不卡 | 欧美日韩午夜视频| 国产真实露脸精彩对白| 久久婷婷丁香五月综合五| 色婷婷丁香六月| 女人的高潮毛片| 亚洲国产精彩中文乱码av| 黄色毛片电影黄色毛片| 无遮挡全彩口工h全彩| 免费国产成人α片| 69久久夜色精品国产69小说| 欧美黑人疯狂性受xxxxx喷水 | 国产精品9999久久久久仙踪林| 久久精品国产99精品国产亚洲性色 |