Win NT/2000網絡操作系統在內核和安全方面的設計很好,但從第一版到現在畢竟不到十年時間,不像Unix已經過了幾十年的完善,因此,還存在一些安全隱患。 1. SAM數據庫無效時,任何人可用超級用戶登錄Win NT/2000 SAM,即安全賬號管理數據庫(Security Accounts Management Database),它是Win NT/2000操作系統的核心,其中存放了本地機和操作系統所控制域的組帳號及用戶帳號信息。SAM中的開始存放了域中各組的描述信息和權限信息,接下來的部分存放了域用戶的描述信息和加密後的密碼數據等。超級用戶Administrator的密碼存放在SAM 文件中最後一?quot;Administrator"字串之後。SAM這個文件位於winnt/system32/config目錄下,它在系統運行時受操作系統保護,即使是超級用戶也無法直接打開,只能通過"域用戶管理器"來操作。但還是有辦法訪問SAM,如果本機不定期存在另一個操作系統,且另一個系統可以訪問Win NT/2000系統文件的所在的分區的話。這時候,SAM的安全總是就暴露出來了:任何人只要把SAM文件刪除或移動到另一個目錄,然後再重新啟動系統,在登錄時使用"Administrator"帳號,用戶密碼為空,然後確認,便能以超級用戶成功登錄系統。 消除這一安全隱患的一種辦法是在一台計算機中只安裝一種操作系統,而且把Win NT/2000的啟動分區和要存放操作系統文件的分區格式化為NTFS或NTFS5。另一種方法是在CMOS中設置開機密碼。 造成Win NT/2000這一安全隱患的原因是用戶帳號太集中,都存放在SAM文件中。SAM一旦被人為改動,系統將在啟動時報告錯誤並重新啟動,實際是崩潰了。SAM文件一旦丟失,系統沒有校驗和恢復SAM文件的能力。 在Win NT SP3以後的版本中,winnt/system32目錄下有一個公開發行資料很少提到的可執行文件syskey.exe,它是作為一個NT補丁程序加進去的。它的主要作用是設置開機密碼,並將SAM中用戶密碼的加密鍵擴展為128位。用syskey.exe設置開機密碼後,系統會在進行用戶認證之前要求企圖登錄的人輸入開機密碼。如果沒有開機密碼,即使企圖登錄者有超級用戶密碼,系統也無法啟動。但在采用上述使SAM"丟失"的辦法後,開機密碼設置也將失效。 SAM的另一個安全問題在於,某人只須有域中Replicator (支持域中的文憑復制)組成員的權限,就可以利用Windows提供的隱藏共享功能從網絡訪問域服務器的目錄,這時可以訪問winnt/repair目錄獲得SAM,然後根據SAM中的用戶密碼,猜解得到用戶密碼。 2. 對遠程多次登錄失敗的處理,存在安全隱患 在Win NT/2000的默認設置下,一個用戶登錄失敗後可以繼續重新登錄,而且對重新登錄的次數沒有限制,這樣,攻擊者可以采用窮舉密碼和字典攻擊的方式來猜解更高權限用戶的密碼乃至超級用戶密碼。在10M/100M以太局域網絡中,以錯誤密碼登錄Win NT 4 Server,大約0.7秒後可以獲得登錄失敗的信息及重新登錄。如果是登錄Win 2000則所用時間更少。比如用Win NT工作站窮舉,工作站的線程時間片是Server1/6,以此速度,6個字符的密碼,20分鐘一定能獲得密碼。如果Win NT/2000某用戶的密碼在這個密碼集合中,別人在一台工作站上,幾天內一定能夠取得密碼。 通過Win NT的域用戶管理器中的賬號規則設置可以實現用戶帳號鎖定功能。這個功能的作用是某個用戶在限定的次數內仍無法提供正確的登錄密碼,Win NT將自動鎖定這個賬號,不允許以此賬號登錄。這個功能無疑是針對窮舉密碼攻擊而設計的。但這個設計本身有兩個安全隱患:一是當用"Administrator"登錄時,即使登錄失敗的次數超過了"賬號規則"中限定的次數,這個賬號仍然不鎖定,二是當某個賬號鎖定時,Win NT/2000將不接受來自任何工作站的用這個賬號登錄的請求,即使某個工作站提供了正確的登錄密碼。這時,不難理解為什麼超級用戶的賬號不會鎖定,因為,如果允許鎖定,系統管理員將無法以超級用戶登錄進管理服務器,而只能去拔網線了! 在Unix/Linux中,對於多次登錄失敗的處理是斷開與對方的連接,在重新連接後仍然可以登錄。這樣雖然避免了帳號鎖定產生的安全隱患,但密碼窮舉還是可以進行的,只是速度慢了而已。可見兩類系統在解決這個問題上各有不足。 這個問題的解決可以考慮這種方法,在服務器中維護一個表,這個表記錄了超過限定登錄失敗次數計算機的IP地址或其他標識。服務器建立連接時查詢這個表,不與表中的計算機建立連接。 3.網絡設備硬件中斷的安全問題 事實上,計算機硬件方面也存在著安全隱患。隱患之一是現代操作系統的設計中,硬件中斷優先級高於軟件優先級,包括操作系統內核最重要的高度程序。現以Win NT/2000網絡設備的中斷來說明問題。 Win NT/2000的中斷優先級從高到低依次為:(1)高級,即系統停機程序;(2)電源級,即電源故障或關閉電源程序:(3)處理器級,即處理器間通信;(4)時鐘級;(5)設備級,x86支持256個設備中斷;(6)高度/DPX級,即線程高度和延遲過程調節器(DPC);(7)異步過程調用(APC)級;(8)32個線程優先級要高於操作系統各種線程的優先級。因為網絡設備是可以通過網絡遠程訪問的,,這個安全總是也就暴露出來了:如果攻擊者通過網絡以足夠的頻率向服務器網絡設備發送數據幀,那麼服務器的處理器將窮於應付網絡設備的中斷而無暇去響應操作系統各個線程的軟件中斷,也沒有機會來高度線程和資源。盡管Win NT提供了時間片、優先級自動衰減/提高等機制來保證各個過程有機會占用處理器,但這個機制只對線程調度起作用,對硬件中斷則不起作用。因此,頻繁的硬件中斷可使操作系統運行的速度慢到使人無法忍受,甚至使操作系統"停止運行"。 這種可能性已經在局域網得到了驗證。普通個人計算機通過不斷地發送數據幀,可使安裝有Win 2000操作系統的服務器推動應用軟件及用戶的響應。 能夠利用這一安全隱患的人,要對網絡協議棧底層的實現有足夠的了解,需要跳過網絡協議中間的各層,在網絡協議層中的鏈路層直接構造自己的數據幀。這類攻擊與DoS攻擊是有區別的:這種攻擊需要在數據鏈路層實現,因此只能在物理上相連的相鄰節點間使用,不能跨過路由器,但這種攻擊是無法過濾的;而典型的DoS攻擊如SYN Flooding是在TCP/IP協議層中的TCP層實現的,可以跨過網絡中的中間節點(如路由器)進行攻擊,但也可以被中間節點在IP層過濾。
這一安全隱患的危害性較大,因為它具有不可屏蔽性、不可跟蹤性。不可屏蔽性是指這類攻擊的數據幀在網絡設備的鏈路層已被處理,無法采用過濾構件來防范,不可跟蹤性是指無法通過日志的方式記錄攻擊者,因為數據幀不是協議棧產生的,是人為構造的。這一安全隱患的解決辦法是提高網絡設備的數據處理能力和獨立能力,使它在工作時不必過多依賴服務器CPU。這樣,當網絡設備受到攻擊時,它不能給服務器CPU造成過重的負擔。