競爭條件漏洞
傳統的程序執行方式涉及單執行緒,因此與多執行緒相比,出現故障的可能性較小。當出現多個執行緒或程序時,執行任務的順序可能會混淆或改變。類似地,當同時讀取和寫入某個特定操作或程式時,就會發生“競爭條件”。這種競爭條件是對系統的一種安全威脅,會導致資料損壞或資料丟失。
競爭條件漏洞
它涉及執行多個執行緒,多個執行緒意味著許多程序同時並行執行。在這種情況下,競爭條件漏洞是由檢查時間 (TOC) 和使用時間 (TOU) 引起的。在使用資源之前,需要檢查資源的可用性狀態,而狀態根據 TOCTOU 而變化。
檢查時間 (TOC) 使用時間 (TOU)
這是一個由競爭條件引起的軟體錯誤。這些條件在UNIX作業系統中很常見,發生在檔案操作之間。當此錯誤進入系統時,它將竊取資料、損壞資料或擦除資料。
競爭條件攻擊示例
在授予訪問許可權之前檢查登入憑據的過程中,駭客可以干擾安全系統。攻擊是透過在 TOC 和 TOU 之間插入惡意程式碼來執行的,然後對未經授權的使用者進行身份驗證以訪問系統。
對於臨時檔案,攻擊者將建立或更改具有某些常用名稱建議的檔案以儲存敏感資料。透過這種方式,攻擊者可以更改系統的行為,從而導致漏洞。
當用戶想要訪問任何檔案或資料時,系統會提示他們需要許可權才能訪問該檔案。利用這一點,資料和檔案可能會導致損壞或丟失。
在更新資料庫中員工薪資資訊(根據績效)的情況下,攻擊者可能會開啟資料庫並根據其需要更改資料,他們可以提高低績效員工的薪資,反之亦然。
多執行緒
多執行緒和競爭條件相互關聯;競爭條件是在多執行緒環境中發生的軟體漏洞。多執行緒也稱為多執行緒處理。它是在同一時間併發執行或管理許多程序的過程。此過程涉及共享資源(如裝置、檔案或資料),當許多程序同時使用時,就會引入“漏洞”這一術語。
由競爭條件漏洞引起的熔斷攻擊
熔斷攻擊並非完全是一種競爭條件漏洞,但與其相關。熔斷攻擊利用處理器中的漏洞,允許它訪問不應該訪問的記憶體位置,例如核心記憶體或其他程序的記憶體。此漏洞是由稱為推測執行的功能引起的,該功能允許處理器提前執行指令以提高效能。但是,此功能還會在指令執行和驗證其有效性之間產生競爭條件。
如果指令無效(例如訪問受保護的記憶體位置),處理器將丟棄結果並回滾到先前狀態。但是,指令的執行可能會在處理器的快取或其他元件中留下一些痕跡,這可以透過旁路技術檢測到。因此,攻擊者可以使用熔斷攻擊透過推測性地執行訪問它們的指令並測量訪問它們所需的時間來讀取任何位置的記憶體內容。
競爭條件漏洞的影響
它對安全系統及其功能產生一些嚴重影響,例如:
系統崩潰導致資料丟失。
系統中的資料已損壞。
導致未經授權的成員使用。
當多個執行緒嘗試鎖定同一檔案時,會導致死鎖情況,在這種情況下,程序沒有可用資料。
防禦競爭條件漏洞
競爭條件漏洞可以從開發人員端防止,並且需要具備為程式碼提供安全性和開發裝置或系統的適當技能。一些防止競爭條件漏洞的方法包括:
共享資源
資源不必透過多執行緒技術在裝置或程序之間共享。實際上,如果需要共享資源,則必須對其進行同步或訪問鎖定以確保安全措施。一些鎖定方法包括互斥鎖、訊號量和監視器。
唯一名稱
賦予臨時檔案的名稱必須是唯一的,以避免 TOCTOU 攻擊的威脅。並且還需要使用安全函式或庫來建立資源或臨時檔案。
跟蹤活動
需要監控系統和程序是否存在任何可能導致競爭條件攻擊的不必要活動。它還可以使用一些安全測試工具來跟蹤和檢測競爭條件漏洞。
結論
競爭條件漏洞發生的兩種主要方式是:多個程序訪問共享資源時。當系統檢查檔案或資源許可權以及系統資源狀態在檢查和使用之間切換時,也稱為檢查時間和使用時間視窗。