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

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

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

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

            Race Condition: File System Access

            ABSTRACT

            從檢查到文件資源到使用文件的這段時間間隙,可以用來發動一次擴大權限的攻擊。

            EXPLANATION

            文件訪問的 race condition(如已知的 time-of-check、time-of-use (TOCTOU) race condition)在以下情況中出現:

            1. 程序檢查某個文件的屬性時,根據名稱來引用文件。

            2. 稍候該程序會使用相同的文件名來執行 file system 操作,并假設之前檢查的屬性仍然有效。


            例 1:以下代碼來自一個安裝了 setuid root 的程序。該程序以無權限用戶的名義執行了特定的文件操作,并使用訪問檢查以確保程序沒有使用其根權限來執行操作,而這些操作對于當前用戶來說是不可行的。程序在打開文件和執行必要的操作之前,使用 access() 系統調用來檢查運行程序的用戶是否有權訪問這些指定的文件。


            if(!access(file,W_OK)) {
            f = fopen(file,"w+");
            operate(f);
            ...
            }
            else {
            fprintf(stderr,"Unable to open file %s.\n",file);
            }


            access() 的調用按照預期計劃的那樣執行,而且如果運行程序的用戶具有編輯文件的必要權限,則會返回 0,反之則會返回 -1。然而,因為 access()fopen() 都是對文件名進行操作,而不是文件句柄,所以當 file 變量傳遞到 fopen() 時,就無法保證該變量仍能像傳遞到 access() 時那樣引用磁盤上相同的文件。如果攻擊者在調用 access() 之后,用指向其他文件的象征性鏈接來取代 file,程序就會使用根權限對文件進行操作,即便這個文件是攻擊者在其他情況下無法進行更改的。通過欺騙程序去運行其他情況下不允許執行的操作,從而使攻擊者獲得更高的權限。

            這種形式的漏洞不限于具有 root 權限的程序。如果應用程序能夠執行本不允許攻擊者執行的操作,那么有可能就會成為攻擊目標。

            導致這種攻擊漏洞的原因是從開始測試文件屬性到使用文件這段時間的間隙。即使檢查后立即使用文件,現今的操作系統也無法確保程序在讓出 CPU 之前能夠執行的代碼數量。攻擊者掌握了多種擴大該時間間隙的技術,以便更加容易地發起攻擊,但即使是一段很短的間隙,也可以不斷地重復該攻擊企圖,直到成功為止。

            示例 2:以下代碼將生成一個文件,然后更改該文件的所有者。


            fd = creat(FILE, 0644); /* Create file */
            if (fd == -1)
            return;
            if (chown(FILE, UID, -1) < 0) { /* Change file owner */
            ...
            }


            該代碼假設調用 chown() 操作的文件與調用 creat() 創建的文件相同,但實際不一定如此。由于 chown() 是在文件名、而不是文件句柄上操作,所以攻擊者可以使用一個文件(并非歸攻擊者擁有)的鏈接替代該文件。然后,調用 chown() 則會向攻擊者提供該鏈接文件的所有權。

            REFERENCES

            [1] Standards Mapping - Security Technical Implementation Guide Version 3 - (STIG 3) APP3630.1 CAT II

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

            [3] J. Viega, G. McGraw Building Secure Software Addison-Wesley

            [4] Standards Mapping - Common Weakness Enumeration - (CWE) CWE ID 362, CWE ID 367

            [5] Standards Mapping - SANS Top 25 2009 - (SANS 2009) Insecure Interaction - CWE ID 362

            [6] Standards Mapping - SANS Top 25 2010 - (SANS 2010) Insecure Interaction - CWE ID 362


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

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

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

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

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

                      亚洲欧美在线