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

概說

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


1. 棧的隨機(jī)化

我們?cè)谇懊嫖恼吕锾岬降囊粋€(gè)參數(shù)設(shè)置:

sysctl -w kernel.randomize_va_space=0

kernel.randomize_va_space 就是棧隨機(jī)化的設(shè)置,當(dāng)它的值為0時(shí)温数,禁止實(shí)現(xiàn)棧隨機(jī)化,這樣的情況下蜻势,程序在同一計(jì)算機(jī)系統(tǒng)內(nèi)每次啟動(dòng)的棾糯蹋基地址都是固定不變的。

當(dāng)它的值為1時(shí)握玛,將實(shí)現(xiàn)棧隨機(jī)化够傍,棧的位置在程序每次運(yùn)行時(shí)都有變化。 即使許多機(jī)器都運(yùn)行同樣的代碼挠铲,它們的棧地址都是不同的冕屯。

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

程序開始時(shí),在棧上分配一段0~n字節(jié)之間的隨機(jī)大小空間拂苹,程序不使用這段空間安聘,但它會(huì)導(dǎo)致程序每次執(zhí)行時(shí)的棧的位置發(fā)生變化。
分配的范圍n必須足夠大瓢棒,才能獲得足夠多樣的棧地址變化浴韭;同時(shí)又必須足夠小,不至于浪費(fèi)程序太多的空間脯宿。

在Linux中念颈,棧隨機(jī)化是標(biāo)準(zhǔn)行為,它是更大的一類技術(shù)中的一種连霉,這類技術(shù)稱為地址空間布局隨機(jī)化,采用這類技術(shù)榴芳,程序的不同部分(代碼段嗡靡、數(shù)據(jù)段、堆棧)都會(huì)被加載到存儲(chǔ)器的不同部分翠语。

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

2. 棧破壞檢測

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

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

這是因?yàn)樵谛掳娴腉CC里加入了一種棧保護(hù)者機(jī)制菜谣,用來檢測緩沖區(qū)越界珠漂,如果我們不禁止這個(gè)功能,那么演示緩沖區(qū)溢出攻擊實(shí)例就無法成功尾膊。

那么媳危,GCC是怎樣實(shí)現(xiàn)這個(gè)保護(hù)機(jī)制的呢?

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

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

我們?cè)谇懊娴奈恼轮芯幾g程序也用到了下面的一個(gè)參數(shù)

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

這種方法的實(shí)現(xiàn)是和虛擬存儲(chǔ)器的頁表?xiàng)l目有關(guān)的,在每個(gè)頁表?xiàng)l目里有三個(gè)權(quán)限位用來控制對(duì)頁的訪問滩届,其中XD就是禁止CPU在這個(gè)頁表所對(duì)應(yīng)的空間里讀取指令集侯,亦即是在這個(gè)區(qū)域里限制可執(zhí)行代碼。

1.現(xiàn)代的處理器都使用虛擬尋址的尋址形式丐吓,CPU通過一個(gè)生成的虛擬地址來訪問內(nèi)存浅悉,這些虛擬地址就是通頁表?xiàng)l目來記錄管理的。
2.頁表?xiàng)l目是由幾個(gè)權(quán)限位(有效位)和一個(gè)n位地址字段組成券犁。

4. 總結(jié)

我們講到的這些技術(shù)——隨機(jī)化术健、棧保護(hù)和限制可執(zhí)行代碼,是用于最小化程序緩沖區(qū)溢出攻擊漏洞三種最常見機(jī)制粘衬,它們都有同樣的屬性荞估,就是不需要程序員任何特殊的努力咳促,帶來的性能代價(jià)都非常小,甚至沒有勘伺。這三種機(jī)制都很有效跪腹,三種結(jié)合起來大大提高了程序的安全性,不幸的是飞醉,仍然有辦法能夠攻擊到計(jì)算機(jī)冲茸。

什么辦法呢?

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末轴术,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子钦无,更是在濱河造成了極大的恐慌逗栽,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件失暂,死亡現(xiàn)場離奇詭異彼宠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)弟塞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門凭峡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人宣肚,你說我怎么就攤上這事想罕。” “怎么了霉涨?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵按价,是天一觀的道長。 經(jīng)常有香客問我笙瑟,道長楼镐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任往枷,我火速辦了婚禮框产,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘错洁。我一直安慰自己秉宿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布屯碴。 她就那樣靜靜地躺著描睦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪导而。 梳的紋絲不亂的頭發(fā)上忱叭,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天隔崎,我揣著相機(jī)與錄音,去河邊找鬼韵丑。 笑死爵卒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的撵彻。 我是一名探鬼主播钓株,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼千康!你這毒婦竟也來了享幽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤拾弃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后摆霉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體豪椿,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年携栋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了搭盾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡婉支,死狀恐怖鸯隅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情向挖,我是刑警寧澤蝌以,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站何之,受9級(jí)特大地震影響跟畅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜溶推,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一徊件、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蒜危,春花似錦虱痕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至占拍,卻和暖如春略就,著一層夾襖步出監(jiān)牢的瞬間捎迫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來泰國打工表牢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留窄绒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓崔兴,卻偏偏與公主長得像彰导,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子敲茄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

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