於Web服務器被越來越多的駭客和蠕蟲制造者作為首要攻擊目標,IIS便也成為了Microsoft可信賴計算計劃中首要關注的內容。因此,IIS 6.0被完全的重新設計,以實現默認安全和設計安全。本文主要講述了IIS 6.0在默認設置和設計上安全性的改變是如何使其成為關鍵web應用的平台。 默認安全 過去,包括像微軟這樣的企業,都在他們的web服務器上安裝一系列的默認示例腳本,文件處理和最小文件授權,以提高管理員管理的靈活性和可用性。但是,這些默認設置都增加了IIS的被攻擊面,或者成為了攻擊IIS的基礎。因此,IIS 6.0被設計成了一個比早期產品更安全的平台。最顯而易見的變化是IIS 6.0並沒有被Windows Server 2003默認安裝,而是需要管理員顯式的安裝這個組件。其他的變化包括: 默認只安裝靜態HTTP服務器 IIS 6.0的默認安裝被設置為僅安裝靜態HTML頁面顯示所需的組件,而不允許動態內容。下表比較了IIS 5.0和IIS 6.0的默認安裝設置: 默認不安裝應用范例 IIS 6.0中不再包括任何類似showcode.asp或codebrws.asp等的范例腳本或應用。這些程序原被設計來方便程序員快速察看和調試數據庫的連接代碼,但是由於showcode.asp和codebrws.asp沒有正確的進行輸入檢查,以確定所訪問的文件是否位於站點根目錄下。這就允許攻擊者繞過它去讀取系統中的任何一個文件(包括敏感信息和本應不可見的配置文件),參考以下鏈接以獲取該漏洞的更多的細節:?url=/technet/security/bulletin/MS99-013.asp 增強的文件訪問控制 匿名帳號不再具有web服務器根目錄的寫權限。另外,FTP用戶也被相互隔離在他們自己的根目錄中。這些限制有效的避免了用戶向服務器文件系統的其他部分上傳一些有害程序。例如攻擊者可以向/scripts目錄上傳一些有害的可執行代碼,並遠程執行這些代碼,從而攻擊web站點。 虛擬目錄不再具有執行權限 虛擬目錄中不再允許執行可執行程序。這樣避免了大量的存在於早期IIS系統中的目錄遍歷漏洞、上傳代碼漏洞以及MDAC漏洞。 去除了子驗證模塊 IIS 6.0中去除了IISSUBA.dll。任何在早期IIS版本中,需要該DLL模塊來驗證的賬號,現在需要具有"從網絡上訪問這台計算機"的權限。這個DLL模塊的去除,可以強制要求所有的訪問都直接去SAM或者活動目錄進行身份驗證,從而減少IIS可能的被攻擊面。 父目錄被禁用 IIS 6.0中默認禁用了對父目錄的訪問。這樣可以避免攻擊者跨越web站點的目錄結構,訪問服務器上的其他敏感文件,如SAM文件等。當然也請注意,由於父目錄默認被禁用,這可能導致一些從早期版本IIS上遷移過來的應用由於無法使用父目錄而出錯。 安全設計 IIS 6.0設計中安全性的根本改變表現在:改善的數據有效性、增強的日志功能、快速失敗保護、應用程序隔離和最小權限原則。 改善的數據有效性 IIS 6.0設計上的一個主要新特性是工作在內核模式的HTTP驅動--HTTP.sys。它不僅提高了web服務器的性能和可伸縮性,而且極大程度的加強了服務器的安全性。HTTP.sys作為web服務器的門戶,首先解析用戶對web服務器的請求,然後指派一個合適的用戶級工作進程來處理請求。工作進程被限制在用戶模式以避免它訪問未授權的系統核心資源。從而極大的限制了攻擊者對服務器保護資源的訪問。 IIS 6.0通過在內核模式的驅動中整合一系列的安全機制,以提升其設計上固有的安全性。這些機制包括避免潛在的緩沖溢出,改善的日志機制以輔助事件響應進程和檢查用戶有效性請求的先進URL解析機制。 為了第一時間的避免潛在的緩沖區和內存溢出漏洞的利用,微軟通過在HTTP.sys中進行特殊的URL解析設置以實現IIS 6.0安全設計中的深度防御原則。這些設置還可以通過修改注冊表中特定的鍵值來進一步優化。下表提供了主要注冊表鍵值的位置(均在以下路徑HKLM\System\CurrentControlSet\Services\HTTP\Parameters): 增強的日志機制 一個全面的日志是檢測或響應一個安全事故的基礎要求。微軟也意識到了在HTTP.sys中進行全面的、可靠的日志機制的重要性。HTTP.sys在將請求指派給特定的工作進程之前就進行日志記錄。這樣可以保證,即使工作進程中斷了,也會保留一個錯誤日志。日志由發生錯誤的時間戳、來源目的IP和端口、協議版本、HTTP動作、URL地址、協議狀態、站點ID和HTTP.sys的原因解釋等條目構成。原因解釋能夠提供詳細的錯誤產生原因的信息,如由於超時導致的錯誤,或由於工作進程的異常終止而引發的應用程序池強行切斷連接而導致的錯誤。 以下連接可以看到HTTP.sys日志文件的示例:?url=/technet/prodtechnol/iis/iis6/proddocs/resguide/iisrg_log_qlow.asp 快速失敗保護 除了修改注冊表,IIS 6.0的管理員還可以通過服務器設置,來使那些在一段時間內反復失敗的進程關閉或者重新運行。這個附加的保護措施是為了防止應用程序因為受到攻擊而不斷地出錯。這個特性就叫做快速失敗保護。 快速失敗保護可以按照以下步驟在Internet信息服務管理工具中配置: 1. 在Internet信息服務(IIS)管理器中,展開本地計算機。 2. 展開應用程序池。 3. 在要設定快速失敗保護的應用程序池上單擊鼠標右鍵。 4. 選擇屬性。 5. 選擇運行狀況選項卡,勾選啟用快速失敗保護。 6. 在失敗數中,填寫可以忍受的工作進程失敗次數(在結束這個進程之前)。 7. 在時間段中,填寫累計工作進程失敗次數統計的時間。
應用程序隔離 在早期版本的IIS中(5.0和以前的版本),由於將web應用程序隔離在獨立的單元將會導致嚴重的性能下降,因此沒有實現應用程序隔離。通常一個web應用程序的失敗會影響同一服務器上其他應用程序。然而,IIS 6.0在處理請求時,通過將應用程序隔離成一個個叫做應用程序池的孤立單元這種設計上的改變,成倍的提高了性能。每個應用程序池中通常由一個或多個工作進程。這樣就允許確定錯誤的位置,防止一個工作進程影響其他工作進程。這種機制也提高了服務器以及其上應用的可靠性。 堅持最小特權原則 IIS 6.0堅持一個基本安全原則--最小特權原則。也就是說,HTTP.sys中所有代碼都是以Local System權限執行的,而所有的工作進程,都是以Network Service的權限執行的。Network Service是Windows 2003中新內置的一個被嚴格限制的賬號。另外,IIS 6.0只允許管理員執行命令行工具,從而避免命令行工具的惡意使用。這些設計上的改變,都降低了通過潛在的漏洞攻擊服務器的可能性。部分基礎設計上的改變、一些簡單配置的更改(包括取消匿名用戶向web服務器的根目錄寫入權限,和將FTP用戶的訪問隔離在他們各自的主目錄中)都極大地提高了IIS 6.0的安全性。 IIS 6.0是微軟公司在幫助客戶提高安全性上邁出的正確一步。它為Web應用提供了一個可靠的安全的平台。這些安全性的提高應歸功於IIS 6.0默認的安全設置,在設計過程中就對安全性的著重考慮,,以及增強的監視與日志功能。但是管理員不應該認為僅通過簡單的遷移到新平台就可以獲得全面的安全。正確的做法是應該進行多層面的安全設置,從而獲得更全面的安全性。這也與針對Code Red和Nimda病毒威脅而進行的深度安全防御原則是一致的。