程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> 使用Visual C++防御功能保護您的代碼

使用Visual C++防御功能保護您的代碼

編輯:更多關於編程

       目錄

      基於堆棧的緩沖區溢出檢測 (/GS)

      安全異常處理 (/SafeSEH)

      DEP 兼容性 (/NXCompat)

      映像隨機化 (/DynamicBase)

      更安全的函數調用

      C++ Operator::new

      如果失敗會怎樣?

      許 多代碼都是使用 C 和 C++ 編寫的,但遺憾的是,其中很多此類代碼都有一些甚至連開發人員都不知道的安全漏洞。以任何語言編寫的程序都存在可能會使其用戶受到攻擊的漏洞,但 C 和 C++ 語言在 Internet 歷史上占有特殊的地位,原因是它們的許多安全漏洞都源自使其大受歡迎的功能:對計算機硬件無限制的訪問以及隨之而來的性能優勢。在閱讀有關安全和 C 或 C++ 方面的資料時,通常很容易看到“緩沖”和“溢出”等術語,因為緩沖通常就是直接訪問內存的一個示例。這種類型的直接訪問雖然功能非常強大,但也非常非常危險。

      對於在生成 C 和 C++ 代碼過程中出現的許多緩沖區溢出問題,其原因有多種。第一個原因我在上面已提到過:編程語言提供對易受攻擊內存的直接訪問。第二個原因是開發人員出錯。第三個原因是編譯器通常不提供防御功能。對於第一個問題很容易提供補救措施,但自此 C 和 C++ 開始成為不同的語言。

      開發人員出錯問題可通過培訓來部分加以解決,但是我還沒有真正看到在這方面教育機構的興起。行業中也確實有一些進行安全培訓的機構,但是我們只能提供部分解決方案或解決部分問題,我非常希望看到各所大學能對學生進行更多有關軟件安全方面的教育。您可能要問“為什麼教育機構不嘗試培訓這一非常重要的主題?”說實話,我也不知道為什麼。不過這確實非常讓人郁悶。

      最後,即使有一流的培訓,但有些安全問題真的非常復雜,就算是受過良好教育的工程師也不能完全解決。我們人類並不是完美的。

      在編譯器中建立更多防御措施是 Microsoft Visual C++ 團隊多年以來一直試圖解決的問題,在我們安全團隊的協助下目前正逐漸得到改進。本專欄將概述一些在 Visual C++® 2005 中可用的緩沖區溢出防御措施及其他內容。請注意,一些其他編譯器也提供防御措施,但 Visual C++ 有兩個主要優勢超越了 gcc 等編譯器。首先,所有這些防御措施都默認集成在工具集中,無需下載某些稀奇古怪的加載項。其次,這些選項易於使用。

      Visual C++ 工具集提供的防御措施包括(不分先後順序):

      基於堆棧的緩沖區溢出檢測 (/GS)

      安全異常處理 (/SafeSEH)

      數據執行保護 (DEP) 兼容性 (/NXCompat)

      映像隨機化 (/DynamicBase)

      自動使用更安全的函數調用

      C++ operator::new

      在詳細討論每一項之前,我要指出的是這些防御措施並不能彌補不安全的代碼。您應該始終盡最大努力編寫最安全的代碼,如果不知道該怎樣做,可以先閱讀一些有關這一主題的專業書籍。

    使用Visual C++防御功能保護您的代碼 三聯

      Typical Stack Compared to One Compiled with /GS

      另外我還要指出,這些都是 Microsoft 的“安全開發生命周期”(SDL) 的要求,這意味著編寫 C 和 C++ 代碼時必須使用這些選項,否則不能交付。偶爾會有些例外,但是非常少,因此在這裡不對其做詳細討論。

      最後必須要牢記的要點是:這些精心設計的防御措施也是可以被繞過的,具體視代碼問題而定。代碼使用的防御措施越多,解決起來就越困難,但是沒有任何防御措施是盡善盡美的。它們都是為了減少被侵入的機會。您一定對此已經有所了解!唯一的應對方案就是使用更安全的函數調用,這是真正能夠堵上漏洞的防御措施。讓我們詳細了解一下各個防御措施。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved