


版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、VC+ 中利用 /GS 開關防止緩沖區(qū)溢出緩沖區(qū)溢出通常表現(xiàn)為一個最為常見的漏洞而存在于今天的 各種軟件之中,黑客可以用惡意的輸入,從而更改程序的執(zhí)行流程, 由此入侵相應的進程、電腦、或整個域。如果進程運行于一個高度受 信的賬戶之下,如管理員或本地系統(tǒng)賬戶,那么黑客帶來的破壞將是 極其嚴重,并有潛在廣泛傳播的危險。近幾年來爆發(fā)的一些 "知名 "病 毒,如紅色代碼、 沖擊波、震蕩波等等, 都源于 C/C+ 代碼緩沖區(qū)溢 出的結(jié)果。從程序的角度來看,緩沖區(qū)溢出只是一個再簡單不過的編程 錯誤- 都是關于復制一個內(nèi)存區(qū)域的內(nèi)容到另一個內(nèi)存區(qū)域,而目標 內(nèi)存區(qū)域容量太小無法容納。以下
2、的代碼作了簡單的演示:char* source = "A reasonably long string"char dest10;:strcpy(dest, source);在本例中,源字符串的長度為 25 個字符(包括了空結(jié)束符) , 它對目標內(nèi)存塊來說,無疑太大了,而目標內(nèi)存塊聲明在堆棧上;當 此代碼執(zhí)行時,將會破壞掉原有堆棧,程序會因為一個訪問違例而崩 潰。如果此源內(nèi)存塊由外部第三方提供, 那么就有可能存在一個漏洞, 因為它允許傳入函數(shù)的內(nèi)存塊以一種特定的方式修改堆棧。當在 C/C+ 中調(diào)用一個函數(shù)時,調(diào)用函數(shù)的返回地址被存放 在堆棧中,因此在被調(diào)用函數(shù)執(zhí)行完畢時,執(zhí)行
3、流程能重新返回到原 處。如果調(diào)用了一個可能包含潛在緩沖區(qū)溢出的函數(shù),返回地址可能 會被修改,而且執(zhí)行流程將會跳到緩沖區(qū)數(shù)據(jù)中指定的地方。通過改 變函數(shù)的返回地址,攻擊者可獲取進程中任意位置的代碼以執(zhí)行,一 般而言,主要可以兩種方式被利用:如果帶有漏洞的程序是、且容易訪問到的,攻擊者可查 找某函數(shù)的地址,這通常會在所有進程實例的一處固定地址處被找到; 并修改堆棧,等著此函數(shù)被調(diào)用。要執(zhí)行的指令可作為緩沖區(qū)的一局部傳遞到進程地址空間, 攻擊者利用此來完成攻擊。防范緩沖區(qū)溢出 防范緩沖區(qū)溢出最簡單的方式是限制復制的數(shù)據(jù)大小,使其 不能大于目標緩沖區(qū)容量。雖然此方法看上去微缺乏道,但實際上, 經(jīng)驗證明
4、,要在那些大型的 C/C+ 代碼中,完全消除了緩沖區(qū)溢出的 隱患,是件非常艱巨的任務。另外,使用如.NET或Java這樣的受托 管技術,也能極大地降低緩沖區(qū)溢出的危險,但把大型工程移植到此 技術上,實施起來不太可能也不適當?;诙褩5木彌_區(qū)溢出可如此簡單地被利用的原因在于,編 譯器生成的指令,會把函數(shù)的返回地址存儲在堆棧中,但要認識到, 編譯器在這個問題中, 只扮演了一個小小的角色。 從 Visual C+.NET 7.0開始, Visual C+ 開發(fā)小組采取了一種方法,可從編譯器方 面減少此類問題發(fā)生的機率,他們在堆棧中保存函數(shù)返回地址的數(shù)據(jù)之下,插入了一個帶有數(shù)值的 cookie ,由此
5、, 如果緩沖區(qū)溢出改 變了函數(shù)的返回地址值, 同樣也會覆蓋這個 cookie ,而在函數(shù)返回時, 一般會對這個 cookie 進行檢測, 如果檢測到 cookie 已被修改, 就會 拋出一個平安異常,而如果這個異常未被處理,此進程就會終止。以 下的代碼演示了一個帶有平安異常處理方法的簡單程序:void _cdecl sec_handler( int code, void *)if ( code = _SECERR_BUFFER_OVERRUN )printf(" 檢測到一個緩沖區(qū)溢出。 n");exit(1);int main()_set_security_error_ha
6、ndler( sec_handler );/ 主程序代碼在此省略。Visual C+.NET 2003 (7.1 )通過移動易受攻擊的數(shù)據(jù)結(jié) 構- (如異常處理方法的地址) - 到堆棧中位于緩沖區(qū)之下的某個位 置,增強了緩沖區(qū)溢出的保護力度。在編譯器的 7.0 版本中,可通過 破壞緩沖區(qū)與 cookie 之間的敏感數(shù)據(jù), 繞過平安 cookie 所提供的保 護;然而,在新版本的編譯器中,已把這些數(shù)據(jù)移到位于緩沖區(qū)下的 一個區(qū)域,現(xiàn)在,想要通過修改這些數(shù)據(jù)而到達溢出,似乎是不太可 能了。在 C+ 編譯器 6、7.0 、7.1 中,堆棧概念上的布局,并演示 了堆棧由高地址向低地址空間方向增長,這也
7、是當程序執(zhí)行時,堆棧 增長的方向。堆棧向下增長,正是導致緩沖區(qū)溢出的主要原因,因為 溢出會覆寫在比緩沖區(qū)更高的內(nèi)存地址空間上,而此正是易受攻擊數(shù) 據(jù)結(jié)構的棲身之地。除了把異常處理方法等信息移到堆棧中數(shù)據(jù)緩沖區(qū)之下, Visual C+.NET 2003 的鏈接器也把結(jié)構化異常處理方法的地址放 到可執(zhí)行文件的頭部中。當異常發(fā)生時,操作系統(tǒng)可以檢查堆棧中的 異常信息地址,是否符合記錄在文件頭信息中的異常處理方法,如果 情況不符,異常處理方法將不會執(zhí)行。比方說,Windows Server 2003 就可檢查結(jié)構化異常信息, 而此項技術也在 Service Pack 2 中移植到 了 Windows
8、 XP 上。而 Visual C+ 2005 8.0在此根底上又更進了一步,通 常當有函數(shù)調(diào)用發(fā)生時,如果其中的一個本地緩沖區(qū)超出限度了,攻 擊者可能改寫堆棧中在此之上的任何東西,包括異常處理、平安 cookie 、幀指針、返回地址和函數(shù)參數(shù)。而這些值的大多數(shù)被不同的 機制所保護如平安異常處理,但對一個有函數(shù)指針作參數(shù)的函數(shù)來 說,仍有時機被溢出。如果一個函數(shù)接受一個函數(shù)指針或結(jié)構、類 中包含有函數(shù)指針作為參數(shù),攻擊者就有可能改寫指針中的值,使 代碼執(zhí)行任何他想要的函數(shù)。鑒于此, Visual C+ 2005 編譯器將分 析所有可能存在此漏洞的函數(shù)參數(shù),并復制一份函數(shù)參數(shù) - 并不使用 原有的
9、函數(shù)參數(shù),把它放在堆棧中本地變量之下。如果原有函數(shù)參數(shù) 被溢出改寫了, 只要副本中的值仍保持不變, 整個函數(shù)就不會被攻破。應用緩沖區(qū)保護只需簡單地翻開 /GS 編譯器開關,就可啟用緩沖區(qū)保護。在 Visual Studio 中,此開關可在 "C/C+" 選項頁的 "代碼生成 "選項中找 到。默認情況下,在 Debug 配置下為關,而在 Release 配置下為開。如果用最新版本的編譯器進行編譯, 并生成結(jié)構化異常信息, 那么在默認情況下,平安結(jié)構化異常處理將是翻開的,另外,也可以 使用 /SAFESEH:NO 命令行選項來關閉平安結(jié)構化異常處理,在 Vi
10、sual Studio 的工程設置中,是沒方法關閉平安結(jié)構化異常處理的, 但仍可在鏈接器中使用此命令行選項來完成。/GS 及更遠的平安前景僅僅是翻開一個編譯器開關, 不會使一個程序徹底變得平安, 但在平安漏洞以各種形式出現(xiàn)的今天,它將有助于使程序更加平安。 基于堆棧的緩沖區(qū)溢出是平安漏洞中的一大類,但隨著黑客攻擊技術 的不斷更新,相信它的謝幕,還有一段很長的路要走。在 Microsoft 正式的術語中, /GS 和 SAGESEH 均為軟件強制的數(shù)據(jù)執(zhí)行保護DEP,軟件強制的DEP也能以硬件的方式實現(xiàn), 如在實現(xiàn)了此功能的 CPU 中,如果數(shù)據(jù)出現(xiàn)在被標記為 "不可執(zhí)行 "
11、的內(nèi)存頁中,將不會執(zhí)行它。 Windows XP SP2 及 Windows Server 2003 現(xiàn)在已支持這些技術,目前市面上的大多數(shù)的 32 位 CPU 及全 部的64位CPU,都支持No Execute (NX)這類平安增強技術。任何一個好的平安系統(tǒng),均有多層防范措施應對平安威脅。 本文所涉及的編譯器開關,它能防范或減少普通編碼錯誤所帶來的安 全隱患,而且它具有易于使用和低本錢的特點,在這場沒有硝煙的戰(zhàn) 爭中,不失為一個好的解決方案,絕對值得你的程序采用?!網(wǎng)ord是學生和職場人士最常用的一款辦公軟件之一,99.99% 的人知道它,但其實,這個軟件背后,還有一大批隱藏技能你不知道。掌握他們,你將開啟新世界的大門。Tab+Enter,在編過號以后,會自動編號段落Ctrl + D 調(diào)出字體欄,配合 Tab+Enter 全鍵盤操作吧Ctrl + L 左對齊, Ctrl + R 右對齊, Ctrl + E 居中Ctrl + F 查找,Ctrl + H 替換。然后關于替換,里面又大有學問!有時候Word文檔中有許多多余的空行需要刪除,這個時候我們可以完全可以用查找替換來輕松解決。翻開 編輯菜單中的 替換對話框,把光
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度茶樓租賃合同茶樓與茶藝培訓學校合作框架協(xié)議
- 二零二五年度在線教育平臺師資聘用協(xié)議
- 食用菌種植技術服務合同
- 英語語法中的定語從句詳解:九年級英語語法基礎強化教案
- 幼兒園繪本閱讀感悟分享
- 產(chǎn)品分銷銷售服務條款及目標協(xié)定
- 數(shù)據(jù)驅(qū)動的環(huán)保產(chǎn)業(yè)發(fā)展戰(zhàn)略協(xié)議
- 提升職場技能與素質(zhì)
- 數(shù)理化習題集:高三化學知識點強化練習計劃
- 家電產(chǎn)品渠道經(jīng)銷協(xié)議
- 人工智能在維修行業(yè)的應用
- 福建省泉州市第五中學2023-2024學年八年級下學期期中語文試題
- 2024CSCO惡性腫瘤患者營養(yǎng)治療指南解讀
- 自我解壓與情緒管理課件
- 2024年時政必考試題庫ab卷
- 語法選擇10篇(名校模擬)-2024年中考英語逆襲沖刺名校模擬真題速遞(廣州專用)
- 通達信公式函數(shù)說明大全
- 體育初中學生學情分析總結(jié)報告
- MOOC 中國文化概論-武漢大學 中國大學慕課答案
- 高三心理健康輔導講座省公開課一等獎全國示范課微課金獎
- 《工程建設標準強制性條文電力工程部分2023年版》
評論
0/150
提交評論