資料介紹
對于為何要保護堆棧,請以“緩沖區(qū)溢出”,“堆棧”為關(guān)鍵詞google一下,本文不再贅述。只要你的程序要調(diào)用函數(shù),那么就要使用堆棧,不進行函數(shù)調(diào)用的程序已經(jīng)很少了吧,難道你能忍受通篇的jmp,jne.。。等等手工作坊的方法嗎?在linux和windows 上,保護棧的方式最重要的莫過于兩種, 一個是使用堆棧安全cookie;另一個是使棧不可執(zhí)行。

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





創(chuàng)作
發(fā)文章
發(fā)帖
提問
發(fā)資料
發(fā)視頻
上傳資料賺積分
評論