<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            Insecure Compiler Optimization

            ABSTRACT

            對內存中的敏感數據刪除不當可能會危及數據的安全。

            EXPLANATION

            Compiler optimization 錯誤會在以下情況中出現:

            1. 機密數據儲存在內存中。

            2. 內存中的機密數據通過覆蓋內容的方式進行清除。



            3. 源代碼使用一個優化編譯器進行編譯,從而標識和刪除那些將相關內容作為死存儲進行覆蓋的函數,因為在隨后的操作中不會再使用這一內存。

            示例:以下代碼從用戶那里讀取一個密碼,使用該密碼連接到一個終端大型機,然后嘗試使用 memset() 來清除內存中的密碼。


            void GetData(char *MFAddr) {
            char pwd[64];
            if (GetPasswordFromUser(pwd, sizeof(pwd))) {
            if (ConnectToMainframe(MFAddr, pwd)) {
            // Interaction with mainframe
            }
            }
            memset(pwd, 0, sizeof(pwd));
            }


            如果例子中的代碼被逐字執行,那么它就可以正確地運行,但是如果代碼是使用優化的編譯器進行編譯的,如 Microsoft Visual C++(R) .NET 或者 GCC 3.x,那么 memset() 的調用會被當作一個死存儲清除,因為 pwd 緩沖區在其數值被覆蓋之后便不會再次使用了 [2]。因為緩沖區 pwd 包含一個敏感值,所以如果數據長期駐留在內存中,應用程序會很容易受到攻擊。如果攻擊者能夠訪問正確的內存區域,那么他們就能使用復原后的密碼來獲取系統的控制權。

            為了防止攻擊者獲取系統機密,通常的做法是覆蓋內存中操作的敏感數據,如密碼或者用密碼編寫的密鑰。然而,有了優化編譯器,程序就不會一直僅按照源代碼指示的那樣運行。在本例中,編譯器將 memset() 調用解析為一段 dead code,這是因為隨后的操作不會再使用被寫入的內存,然而顯而易見的是這樣做會引發安全問題。這里的問題是,很多編譯器,實際上是很多編程語言在努力提高效率的同時沒有考慮這個及其他安全問題。

            通常,攻擊者會通過一個核心轉儲或運行時機制來利用這種漏洞,以便訪問某個特定應用程序所使用的內存,并恢復機密信息。一旦攻擊者訪問到機密信息,盜取更多的系統信息就相對簡單了,并有可能危及到與該應用程序交互的其他資源。

            REFERENCES

            [1] Standards Mapping - OWASP Top 10 2010 - (OWASP 2010) A7 Insecure Cryptographic Storage

            [2] Standards Mapping - OWASP Top 10 2007 - (OWASP 2007) A8 Insecure Cryptographic Storage

            [3] Standards Mapping - OWASP Top 10 2004 - (OWASP 2004) A8 Insecure Storage

            [4] Standards Mapping - Security Technical Implementation Guide Version 3 - (STIG 3) APP3230.2 CAT II

            [5] Standards Mapping - Security Technical Implementation Guide Version 3.4 - (STIG 3.4) APP3230.2 CAT II

            [6] Standards Mapping - Common Weakness Enumeration - (CWE) CWE ID 14

            [7] Standards Mapping - FIPS200 - (FISMA) MP

            [8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 - (PCI 1.2) Requirement 3.4, Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4

            [9] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 - (PCI 2.0) Requirement 3.4, Requirement 6.5.3, Requirement 8.4

            [10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 - (PCI 1.1) Requirement 3.4, Requirement 6.5.8, Requirement 8.4

            [11] M. Howard Some Bad News and Some Good News Microsoft

            [12] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press


            Copyright 2013 Fortify Software - All rights reserved.
            (Generated from version 2013.1.1.0008 of the Fortify Secure Coding Rulepacks)
            desc.semantic.cpp.insecure_compiler_optimization

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线