Windows NT挑戰/響應(Challenge/Response)
Windows NT挑戰/響應是確定發送請求的人員的最安全的方式。挑戰/響應的處理流程是所有使用IIS的人員必須掌握的。(我們實際是圍繞著Windows NT委托(delegation)過程進行,但在挑戰/響應后有委托的最好說明。)
現在說明一個完全不同的技術: "散列(Hash)"
Windows NT挑戰/響應驗證過程中并不通過網絡發送密碼,因為密碼可能會被截獲和破譯。Windows NT使用的是一個類似于絞肉機的不可逆算法。輸入內容后得到一個散列內容。Windows NT使用Internet標準MD4散列算法生成16字節(128位)的散列值。(理論上)不可能使用散列值和算法在數學上逆轉加密過程而得到原密碼。也就是說,密碼作為了一個“私人密鑰(private key)”。只有擁有該密鑰的人才能產生一個特定的散列值。Windows NT域控制器有一個數據庫存儲了由用戶密碼產生的用戶散列值,但并未存儲用戶密碼。 (注意密碼和散列值的分離不會使域控制器減少受到黑客攻擊的可能,因為有時散列值也可以用作密碼的等效物。)
IIS與挑戰/響應驗證過程
如果下面條件滿足時,IIS將使用挑戰/響應驗證:
如果Internet服務管理器的WWW屬性對話框的“允許匿名”選項沒有被選中,IUSR帳戶沒有足夠的許可權訪問所請求的資源,或者執行代碼禁止訪問。 在Internet服務管理器的WWW屬性對話框中選擇Windows NT Challenge/Response 瀏覽器在挑戰/響應驗證方式下發送請求 (當前瀏覽器中只有Internet Explorer支持挑戰/響應驗證) 當我們說IIS嘗試驗證用戶時,IIS所做的工作非常簡單。它向瀏覽器發回一個"HTTP 401 Access Denied"消息,以及它接受的驗證方法列表。與一個高級俱樂部的保鏢非常相似, IIS這時會說:"You can't get what you want without identifying yourself. By the way, I accept the following methods of identification.(沒有確認您的身份,您不能獲得所需要的內容。另外,我支持下列驗證方法)"。IIS接受的兩種驗證方法是挑戰/響應驗證和基本驗證。具體使用哪種方法取決于在IIS的Internet服務管理器WWW屬性對話框中的選擇。如果兩種驗證方法都被啟用,對于Internet Explorer將一定會使用挑戰/響應驗證,而對其它瀏覽器則會使用基本驗證。
圖1從包的角度顯示了如何在沒有看到用戶密碼的情況下對他(她)進行Windows 挑戰/響應驗證。
圖1. Windows NT 挑戰/響應驗證過程
使用隨機散列的挑戰信息的原因
增加使用密碼散列值加密挑戰信息的額外步驟,而不是將簡單的散列值傳送到域,可以使散列值更難以被截獲破譯而作為密碼使用。因為挑戰需要用戶密碼散列值來產生新的散列值,它證實了用戶至少擁有用戶散列值 (而且可能還有用戶密碼)。所有的這些不用通過電線傳送密碼。實質上,密碼成為了私人密鑰而隨機值成為了不斷變化的公共密鑰。
委托(Delegation)!
委托是大多數實現Windows NT安全和IIS驗證的人員所遺漏的內容,甚至當委托對于其考慮的安全Web服務器環境十分關鍵的人員,或是簡單希望Web服務器能夠運行的人員也是如此。當IIS Web服務器扮演一個使用挑戰/響應驗證的用戶時,IIS服務器并沒有用戶的密碼或密碼散列值。IIS只看到了傳送到域控制器的加密的挑戰。當使用ASP頁訪問另一臺Windows NT計算機(比如遠程數據庫服務器)的資源時很可能遇到這種情況。遠程服務器向IIS發送挑戰信息以驗證自己所扮演的用戶,而IIS由于無法使用用戶散列值加密任何發送給它的挑戰信息,所以無法進行驗證。因而遠程服務器被禁止訪問,而你的數據庫驅動的Web頁將運行失敗。這是Windows NT 4.0 (和以前版本)安全模型的一個限制,不是IIS的原因。使用Windows NT挑戰/響應驗證,一個依靠扮演的進程將無法像一個文本文件一樣訪問另一臺Windows NT計算機上的太多內容。
如果你希望確定何時需要考慮委托,而如果Web服務器擁有用戶密碼或散列值,請詢問自己。在政策上,你應“根據財力(follow the money)”。在委托上,你應“根據密碼(follow the password)”!
對此可以有一個類比,行政主管委托一個秘書代其簽名并在其它方面替其行使職責。當用戶使用挑戰/響應驗證時,用戶無法委托IIS完全按照其利益工作。這個特別的限制可能在Windows NT 5.0發布后會得到完美解決,因為那時Windows NT集成了Kerberos 驗證系統 (該系統為MIT的Athena 項目(Project Athena)開發)。
|