黑客攻防入門(四)對抗緩沖區(qū)溢出攻擊

概說

現(xiàn)代的編譯器和系統(tǒng)已經(jīng)實現(xiàn)了很多機制,避免受到緩沖區(qū)溢出的攻擊,下面介紹Linux上比較新版本的GCC所提供的機制。


1. 棧的隨機化

我們在前面文章里提到的一個參數(shù)設置:

sysctl -w kernel.randomize_va_space=0

kernel.randomize_va_space 就是棧隨機化的設置,當它的值為0時,禁止實現(xiàn)棧隨機化,這樣的情況下,程序在同一計算機系統(tǒng)內每次啟動的?;刂范际枪潭ú蛔兊摹?/p>

當它的值為1時,將實現(xiàn)棧隨機化,棧的位置在程序每次運行時都有變化。 即使許多機器都運行同樣的代碼,它們的棧地址都是不同的。

棧隨機化的實現(xiàn)方式是:

程序開始時,在棧上分配一段0~n字節(jié)之間的隨機大小空間,程序不使用這段空間,但它會導致程序每次執(zhí)行時的棧的位置發(fā)生變化。
分配的范圍n必須足夠大,才能獲得足夠多樣的棧地址變化;同時又必須足夠小,不至于浪費程序太多的空間。

在Linux中,棧隨機化是標準行為,它是更大的一類技術中的一種,這類技術稱為地址空間布局隨機化,采用這類技術,程序的不同部分(代碼段、數(shù)據(jù)段、堆棧)都會被加載到存儲器的不同部分。

  1. 頑固且有耐性的攻擊者可以通過枚舉的方法來蠻力克服隨機化,它反復用不同的地址進行攻擊,來猜測棧的地址。如果它建立一個256字節(jié)的nop sled(空操作),枚舉215=32768個起始地址就能破解223的隨機化。
  2. 對于64位系統(tǒng),需要嘗試2^24=16777216就有點令人生畏了。

2. 棧破壞檢測

前面的文章里,我們用gcc編譯時都加上了下面的參數(shù)。

"-fno-stack-protector" 這個參數(shù)用來阻止程序生成棧破壞檢測的代碼。

這是因為在新版的GCC里加入了一種棧保護者機制,用來檢測緩沖區(qū)越界,如果我們不禁止這個功能,那么演示緩沖區(qū)溢出攻擊實例就無法成功。

那么,GCC是怎樣實現(xiàn)這個保護機制的呢?

實現(xiàn)的方法是: 在棧幀中任何局部緩沖區(qū)和棧狀態(tài)之間存儲一個只有程序本身才知道的隨機值,俗稱為哨兵,在恢復存儲器狀態(tài)和函數(shù)返回之前,程序檢測哨兵值是否被覆蓋,如果是,那么程序就異常中止。

3.限制可執(zhí)行代碼區(qū)域

我們在前面的文章中編譯程序也用到了下面的一個參數(shù)

execstack
使用這個參數(shù)的目的就是將限制可執(zhí)行代碼區(qū)域的限制取消,使我們的演示能順利進行。

這種方法的實現(xiàn)是和虛擬存儲器的頁表條目有關的,在每個頁表條目里有三個權限位用來控制對頁的訪問,其中XD就是禁止CPU在這個頁表所對應的空間里讀取指令,亦即是在這個區(qū)域里限制可執(zhí)行代碼。

1.現(xiàn)代的處理器都使用虛擬尋址的尋址形式,CPU通過一個生成的虛擬地址來訪問內存,這些虛擬地址就是通頁表條目來記錄管理的。
2.頁表條目是由幾個權限位(有效位)和一個n位地址字段組成。

4. 總結

我們講到的這些技術——隨機化、棧保護和限制可執(zhí)行代碼,是用于最小化程序緩沖區(qū)溢出攻擊漏洞三種最常見機制,它們都有同樣的屬性,就是不需要程序員任何特殊的努力,帶來的性能代價都非常小,甚至沒有。這三種機制都很有效,三種結合起來大大提高了程序的安全性,不幸的是,仍然有辦法能夠攻擊到計算機。

什么辦法呢?

后面的章節(jié)見解!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 0. 引言 如果你學的第一門程序語言是C語言,那么下面這段程序很可能是你寫出來的第一個有完整的 “輸入---處理-...
    pandolia閱讀 14,405評論 13 27
  • 緩沖區(qū)溢出(Buffer Overflow)是計算機安全領域內既經(jīng)典而又古老的話題。隨著計算機系統(tǒng)安全性的加強,傳...
    Chivalrous閱讀 1,395評論 0 5
  • 本文介紹了一些棧的緩沖區(qū)原理和攻防手段。 1. C程序地址空間布局 先上一張老生常談的圖(來自《Unix環(huán)境高級編...
    Matrix0x7C閱讀 4,427評論 0 2
  • 六年前 殺過一只白老鼠 我不比它更輕松 猶豫著不敢下刀,直到 打入它身體的麻藥消亡 它別過腦袋 驚恐地看我 顫抖的...
    詩歌君閱讀 536評論 0 15
  • 新的一周開始了,棒棒的!將一周的事情規(guī)劃一下,哪些是必須做的,哪些是提前做的,哪些是可以等等再做的!時間管理四象限...
    OO碰到OO閱讀 282評論 0 0

友情鏈接更多精彩內容