資料介紹
對(duì)于為何要保護(hù)堆棧,請(qǐng)以“緩沖區(qū)溢出”,“堆?!睘殛P(guān)鍵詞google一下,本文不再贅述。只要你的程序要調(diào)用函數(shù),那么就要使用堆棧,不進(jìn)行函數(shù)調(diào)用的程序已經(jīng)很少了吧,難道你能忍受通篇的jmp,jne.。。等等手工作坊的方法嗎?在linux和windows 上,保護(hù)棧的方式最重要的莫過(guò)于兩種, 一個(gè)是使用堆棧安全cookie;另一個(gè)是使棧不可執(zhí)行。
上面提到的兩種方式中,安全cookie提供了更大的保護(hù),而不可執(zhí)行棧在遇到溢出代碼放到堆的時(shí)候就很難奏效了,先看看安全cookie是怎么一回事。 在傳統(tǒng)的函數(shù)調(diào)用時(shí),棧自下而上是:參數(shù)--》返回地址--》老的棧底指針--》局部變量--》。。.如果局部變量發(fā)生向下溢 出,覆蓋了函數(shù)的返回地址,那么程序一點(diǎn)脾氣也沒(méi)有,乖乖聽(tīng)任你的擺布,但是這種錯(cuò)誤的行為是在被調(diào)函數(shù)返回的時(shí)候發(fā)生的,如果被調(diào)函數(shù)有漏洞,那么我們希望的是在它返回的時(shí)候,也就是出了它的控制范圍的時(shí)候主動(dòng)地報(bào)出錯(cuò)誤,而不是將錯(cuò)就錯(cuò),那么就需要一種有效的方式來(lái)檢測(cè)到錯(cuò)誤的發(fā)生,于是安全 cookie就臨危受命了,它實(shí)際上就是在參數(shù)--》返回地址--》老的棧底指針--》局部變量--》。。.中間插入了一個(gè) cookie,使得這個(gè)結(jié)構(gòu)變?yōu)榱藚?shù)--》返回地址--》老的棧底指針--》cookie--》局部變量--》。。.這 個(gè)cookie是每個(gè)程序映像都有的一個(gè)數(shù)值,最好就是一個(gè)隨機(jī)值,當(dāng)函數(shù)調(diào)用的時(shí)候,編譯器自動(dòng)插入(編譯的時(shí)候編譯器知道何時(shí)進(jìn)行函數(shù)調(diào)用,比如 call)一個(gè)cookie,這個(gè)cookie在程序啟動(dòng)的時(shí)候被初始化為隨機(jī)值(如果不是隨機(jī)值,我們考慮最極端的情況,比如就是1,那么攻擊者就知道 把kookie的位置覆蓋為1就不會(huì)導(dǎo)致cookie 檢查失敗了),當(dāng)程序返回的時(shí)候系統(tǒng)會(huì)檢查堆棧的cookie和程序的cookie是否一致,如果不 一致,那么就報(bào)錯(cuò)。
以上的方式很不錯(cuò)嗎?考慮一下以下的問(wèn)題:如果攻擊者知道程序的cookie所存放的位置,那么他就會(huì)知道cookie的值,于是他就知道應(yīng)該將堆棧中 cookie位置的值覆蓋成什么,即使你將cookie的存放位置設(shè)為不可讀也不好,因?yàn)楣粽呖偰芡ㄟ^(guò)各種淫亂的手段達(dá)到目的,試問(wèn)你是保護(hù) cookie函數(shù)保護(hù)函數(shù)返回值?另外一個(gè)問(wèn)題:當(dāng)cookie檢查失敗,該怎么辦?就算 cookie檢查失敗,緩沖區(qū)確實(shí)溢出,但是此時(shí)操作系統(tǒng)內(nèi)核并 不知道發(fā)生的一切(前提是只要?jiǎng)e溢出到內(nèi)核空間),于是想讓系統(tǒng)在檢查失敗時(shí)就自動(dòng)陷入內(nèi)核是不可能的,一切必須手動(dòng)進(jìn)行,在用戶空間進(jìn)行,如果想讓內(nèi)核幫忙處理,就要手動(dòng)進(jìn)行陷入(x86種int指令),如果不需要內(nèi)核處理就在用戶空間了斷,不管哪種方式,都要在檢查失敗后跳到一段代碼,我們姑且把它叫做異常處理代碼,那么問(wèn)題來(lái)了,如果攻擊者將這段異常處理代碼攻擊了怎么辦,這不成了個(gè)怪圈了嗎?是的,這是個(gè)怪圈,緩沖區(qū)溢出錯(cuò)誤既然發(fā)生,你就誰(shuí)也別 怪,錯(cuò)就錯(cuò)在你的代碼寫(xiě)的不嚴(yán)密有漏洞,指望緩沖區(qū)溢出檢查機(jī)制無(wú)論怎樣結(jié)果都是不可信的,記住,計(jì)算機(jī)系統(tǒng)中只有一種可信的軟件,就是操作系統(tǒng)內(nèi)核(存在內(nèi)核的前提下,當(dāng)然不包括裸奔的單片機(jī)),而用戶空間的緩沖區(qū)溢出又沒(méi)有嚴(yán)重到內(nèi)核必須接管的地步(它可沒(méi)有缺頁(yè)異常嚴(yán)重),既然用戶空間的任何機(jī)制都 不可信,那么你還指望所謂嚴(yán)密的緩沖區(qū)溢出檢查機(jī)制嗎?
- MOS管的電路符號(hào)詳細(xì)資料講解 49次下載
- 無(wú)人機(jī)的飛控系統(tǒng)詳細(xì)資料講解 76次下載
- 標(biāo)準(zhǔn)CANBUS協(xié)議鏈路的詳細(xì)資料講解 2次下載
- Arduino的語(yǔ)法詳細(xì)資料講解 4次下載
- Rockchip Linux SDK的開(kāi)發(fā)指南的詳細(xì)資料說(shuō)明 74次下載
- Linux的使用基礎(chǔ)詳細(xì)資料說(shuō)明 15次下載
- 51單片機(jī)的int相關(guān)數(shù)據(jù)類(lèi)型問(wèn)題的詳細(xì)資料講解
- Proteus元器件封裝的詳細(xì)資料講解 0次下載
- STM8 GPIO入門(mén)的詳細(xì)資料講解筆記免費(fèi)下載 24次下載
- Linux的封裝庫(kù)文件詳細(xì)資料合集免費(fèi)下載 9次下載
- 使用Linux進(jìn)行GPS的衛(wèi)星信號(hào)欺騙源碼詳細(xì)資料免費(fèi)下載 8次下載
- Linux入門(mén)教程之Linux的基本操作詳細(xì)資料說(shuō)明 14次下載
- 如何在Linux下如何刪除大量文件的詳細(xì)資料概述 7次下載
- linux教程之Linux系統(tǒng)的安裝與啟動(dòng)詳細(xì)資料 7次下載
- 嵌入式linux開(kāi)發(fā)詳細(xì)資料 3次下載
- linux和windows的區(qū)別 linux系統(tǒng)一般用來(lái)干嘛 1029次閱讀
- Windows與Linux之間相互傳輸文件的方法 4980次閱讀
- RS232接口串口取電電路的詳細(xì)資料介紹 9048次閱讀
- Linux操作系統(tǒng)知識(shí)講解:走進(jìn)Linux 內(nèi)存分配算法 5483次閱讀
- Linux操作系統(tǒng)知識(shí)講解:走進(jìn)linux 內(nèi)存地址空間 5079次閱讀
- Linux桌面虛擬化技術(shù)KVM的詳細(xì)資料說(shuō)明 4473次閱讀
- 如何新建一個(gè)軟件工程詳細(xì)資料講解 3172次閱讀
- 如何進(jìn)行PLC控制程序的設(shè)計(jì)詳細(xì)資料PPT說(shuō)明 6010次閱讀
- 庫(kù)卡機(jī)器人模擬量輸入輸出編程的詳細(xì)資料概述 7037次閱讀
- PPT教程之伺服電機(jī)及其驅(qū)動(dòng)技術(shù)的詳細(xì)資料講解 8034次閱讀
- 詳細(xì)的繼電保護(hù)基礎(chǔ)知識(shí)講解 1.3w次閱讀
- PLC常用基本環(huán)節(jié)梯形圖和詳細(xì)文字說(shuō)明詳細(xì)資料概述 1w次閱讀
- 變壓器保護(hù)的基本要求,保護(hù)配置和運(yùn)行規(guī)定的詳細(xì)資料概述 9679次閱讀
- Windows和Linux的區(qū)別以及Linux系統(tǒng)的目錄結(jié)構(gòu) 8806次閱讀
- Linux系統(tǒng)軟件加殼保護(hù)技術(shù)的改進(jìn)設(shè)計(jì) 1419次閱讀
下載排行
本周
- 1TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 2開(kāi)關(guān)電源基礎(chǔ)知識(shí)
- 5.73 MB | 6次下載 | 免費(fèi)
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設(shè)計(jì)
- 0.60 MB | 3次下載 | 免費(fèi)
- 5基于FPGA的光纖通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 0.61 MB | 2次下載 | 免費(fèi)
- 651單片機(jī)窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費(fèi)
- 751單片機(jī)大棚環(huán)境控制器仿真程序
- 1.10 MB | 2次下載 | 免費(fèi)
- 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
- 0.86 MB | 2次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33564次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
- 0.00 MB | 6653次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537796次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191185次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論