阻斷服務

拒絕服務會在應授與特定服務的存取權時發生,但實際上遭到不當拒絕。 例如,不具特殊許可權應用程式可執行檔任何作業都會導致系統變成無法使用,實際上是拒絕服務。 這包括下列作業的任何作業或作業順序:

  • 當機系統。

  • 導致執行緒或進程的提前終止。

  • 建立死結條件。 當兩個以上的執行緒停止等候永久過期狀態時,就會發生死結。 每個執行緒正在等候另一個執行緒所持有的資源。

  • 建立即時鎖定條件。 當兩個或多個處理器無法進行時,可能會發生即時鎖定,因為它們正在等候取得資源 (佇列) 且擁有該資源的執行緒處於類似的非進度狀態。

這類問題通常會在驅動程式內發生,因為它們包含可由一般應用程式惡意探索的潛在錯誤。 這種類型的惡意探索可能很簡單,而且難以防範。 驅動程式中這類問題的常見原因包括:

  • 使用者緩衝區驗證不正確。

  • 緩衝區溢位或下溢。

對於檔案系統和檔案系統篩選驅動程式,這類問題有許多案例。 例如,基於 Win32 子系統的歷程原因,MAX_PATH值定義為 260。 許多驅動程式元件假設這表示最大路徑的大小。 可惜的是,這並非這種情況,因為 NTFS 檔案系統上的最大路徑為 32,767 個 Unicode 字元, (65,534 個位元組) 。 如果篩選驅動程式將MAX_PATH長度假設編碼為其程式碼基底,則簡單的拒絕服務攻擊會發生在應用程式建立的路徑時,其路徑大於篩選驅動程式所管理的路徑。

另一個常見問題是應用程式通常會將使用者模式指標內嵌至私人 FSCTL 要求。 檔案系統受限於三種廣泛的拒絕服務攻擊:

  • 耗用所有可用的磁碟空間。

  • 使用所有可用的磁片頻寬。

  • 封鎖使用者應具有存取權的檔案存取。

一般而言,檔案系統開發人員可以執行一些動作來防止這些類型的攻擊。 不過,開發人員可以採取的步驟可讓系統管理員限制這些類型的拒絕服務攻擊。

涉及檔案系統的最簡單拒絕服務攻擊是使用所有可用磁碟空間。 撰寫應用程式以執行這項操作很簡單,而且結果很遠。 如果許多應用程式和服務無法再寫入磁片,則系統中的許多應用程式和服務將無法運作。 緩和技術是磁片配額,可限制系統管理員適當使用時,使用者擁有的磁碟空間量。 因此,在開發檔案系統時包含磁片配額的支援是合理的做法。

惡意或寫入不良的應用程式也可以嘗試取用所有磁片頻寬。 一般使用者受這種攻擊類型的影響是一種緩慢或沒有回應的系統。 作業系統目前沒有機制可節流應用程式所耗用的頻寬。 檔案系統也會針對每個開啟的檔案物件和檔案控制代碼取用核心記憶體。 惡意應用程式可能會嘗試持續開啟大量檔案,並將它們保持開啟,直到記憶體耗盡為止。 這些問題的主要緩和技術是稽核和記錄,讓系統管理員可以監視執行大量 I/O 或使用大量其他資源之應用程式的電腦。 同樣地,檔案系統和檔案系統篩選驅動程式會很謹慎,以包含稽核支援,以便將這種類型的拒絕服務降到最低。

惡意應用程式可以嘗試防止其他使用者存取正常使用所需的檔案。 最小化這些問題的重要策略是確保開發檔案系統時,已正確實作與檔案物件相關聯的安全性資訊。

最後,所有驅動程式都必須擔心取用所有可用的記憶體或其他資源,以回應來自惡意或異常應用程式的要求。