跳到主要內容

發表文章

目前顯示的是有「Time of Check to Time of Use (TOC/TOU) attack」標籤的文章

TOCTOU 攻擊深度解析:掌握競爭條件漏洞的運作原理與防禦策略

TOCTOU 攻擊深度解析 掌握競爭條件漏洞的運作原理與防禦策略 當系統「確認安全」到「真正使用」之間存在時間差,攻擊者便能趁虛而入。 TOCTOU(Time of Check to Time of Use) 正是利用這個微小窗口,讓授權檢查形同虛設。 什麼是 TOCTOU 攻擊? TOCTOU 屬於 Race Condition(競爭條件) 漏洞的典型形式。系統在「檢查」資源狀態(如:驗證檔案權限)與「使用」該資源(如:開啟並寫入)之間,並非原子操作。攻擊者在此窗口內 替換或竄改目標資源 ,使系統最終操作的對象與當初檢查的不同。最經典場景是符號連結攻擊(Symlink Attack):程式確認 /tmp/file 安全後,攻擊者立即將其替換為指向 /etc/passwd 的符號連結,程式便在不知情下寫入系統關鍵檔案。 # 存在漏洞的模式(非原子操作) if os.access("/tmp/file", os.W_OK): # 1. 檢查(Check) # ← 攻擊者在此替換為 symlink open("/tmp/file", "w").write(data) # 2. 使用(Use) 如何有效防禦? 防禦核心思想是: 消除「檢查」與「使用」之間的時間差,讓兩者成為不可分割的原子操作 。在檔案系統場景,應優先使用 O_NOFOLLOW 旗標開啟檔案(拒絕符號連結),或改用 openat() 搭配目錄檔案描述符來鎖定操作範圍。在權限驗證場景,應採用 樂觀鎖(Optimistic Locking) 或資料庫交易(Transaction)確保原子性。從架構層面,最小化 Race Window 的存在,是根本的設計原則。 💡 重點整理 根本原因: 檢查與使用非原子操作,存在可被利用的時間窗口。 典型場景: 符號連結攻擊、競爭條件提權、暫存檔案竄改。 防禦核心: 使用原子性 API(如 O_NOFOLLOW ),避免分離式檢查。 架構原則: 以「直接操作並處理失敗」取代「先檢查再操作」模式。 TOCTOU 漏洞往往隱藏在看似正確的邏輯中,卻在高並發環境下釀成嚴重資安事...