本文檔列舉出一些建議和最佳做法,以保證 Web 上運行 Microsoft Windows 2000 和 Internet Information Services (IIS) 5 的服務器的安全。這些設置側重于安全性而不是性能方面。因此認真閱讀以下的建議并運用它們來獲得適用于自己企業的設置是很重要的。
注意 本文檔是由“Designing Secure Web-Based Applications for Microsoft Windows 2000”,Microsoft Press,ISBN: 0735609950 改編而來。
那些熟悉 Internet Information Server 4 清單的客戶將注意到本列表要遠短于 Internet Information Server 4 的清單。這是因為以下兩點原因:
- 許多 Windows 2000 系統范圍的設置可以通過提供的安全模板 (hisecweb,inf) 進行配置;所以不需要手動配置注冊表設置。
- 在 Windows 2000 和 IIS 5 的默認狀態下,將禁用 Microsoft Windows NT 4 和 Internet Information Server 4 上的某些低安全級別的默認設置。
本文檔的其余部分分為以下幾個部分:
- 一般性安全考慮事項
- Windows 2000 安全考慮事項
- IIS 5 安全考慮事項
本部分內容講述一般性安全問題。
閱讀您企業的安全策略
擁有安全策略是十分重要的。對以下問題,您需要有現成的答案:
- 如何對入侵作出反應?
- 備份存儲在何處?
- 允許誰訪問服務器?
在 SANS Institute、Baseline Software, Inc. 和 Practical Unix & Internet Security (O'Reilly Books, 1996) 中可以找到有關策略信息的比較好資源。
預訂 Microsoft 安全通知服務
您可以在 http://www.microsoft.com/technet/treeview/default.asp?url=/technet/security/bulletin/notify.asp 上預定 Microsoft 安全通知服務,使自己能夠及時知道有關 Microsoft 安全問題和修補程序的信息。您將通過電子郵件獲得有關安全問題的自動通知。
您還應當考慮在桌面上放置 Microsoft 安全顧問程序的快捷方式。要完成此操作,請執行下列步驟:
- 打開 Internet Explorer。
- 導航到 http://www.microsoft.com/technet/security/bulletin/notify.asp。
- 從“收藏”菜單中選擇“添加到收藏夾”。
- 選中“允許脫機使用”復選框。
- 單擊“自定義”。
- 在“脫機收藏夾向導”中單擊“下一步”。
- 選中“是”選項按鈕并指定下載與該頁鏈接的 2 層網頁。
- 單擊“下一步”。
- 選中“創建新的計劃”選項按鈕,然后單擊“下一步”。
- 接受默認設置,再單擊“下一步”。
- 單擊“完成”。
- 單擊“確定”。
- 從“收藏”菜單中選中“整理收藏夾”。
- 在“整理收藏夾”對話框中選擇“Microsoft TechNet Security”快捷方式。
- 單擊“屬性”。
- 單擊“Microsoft TechNet Security 屬性”對話框的“下載”選項卡。
- 取消選中“跟蹤本頁 Web 站點之外的鏈接”復選框。
- 單擊“確定”,然后單擊“關閉”。
現在您可以將 Microsoft TechNet Security 快捷方式從“收藏”菜單拖到桌面上。如果有新的安全消息,圖標上將出現一個小紅標記。
要點 如果出現了新的安全問題,您必須非常重視它們。這一點再怎么強調也不為過。
本部分內容專門講述有關 Windows 2000 的安全問題。
檢查、更新及部署提供的 Hisecweb.inf 安全模板
我們已經包括了名為 Hisecweb.inf 的安全模板,作為適用于大多數安全網站的基準。該模板配置了基本的 Windows 2000 系統范圍策略。
Hisecweb.inf 可以從如下地址下載:
http://download.microsoft.com/download/win2000srv/SCM/1.0/NT5/EN-US/hisecweb.exe
執行下列步驟來使用模板:
- 將模板復制到 %windir%\security\templates 目錄。
- 打開“安全模板”工具,并查看設置。
- 打開“安全配置和分析”工具,并加載模板。
- 右鍵單擊“安全配置和分析”工具,并從上下文菜單中選擇“立即分析計算機”。
- 等待工作完成。
- 檢查查找結果并按需要更新模板。
- 如果您對模板滿意,請右鍵單擊“安全配置和分析”工具,并從上下文菜單中選擇“立即配置計算機”。
配置 IPSec 策略
您應當認真考慮在每一個 Web 服務器上設置 Internet 協議安全性 (IPSec) 包篩選器策略。如果您的防火墻被攻破,該策略將提供額外的安全級別。多級別安全技術通常被認為是很好的做法。
一般而言,除了那些您明顯希望支持的協議與希望打開的端口以外,應當阻止其他所有 TCP/IP 協議。您可以使用 IPSec 管理工具或 IPSecPol 命令行工具來部署 IPSec 策略。
保護 Telnet 服務器安全
如果您打算使用包含在 Windows 2000 中的 Telnet 服務器,您應當考慮限制能夠訪問該服務的用戶。要完成此操作,請執行下列步驟:
- 打開“本地用戶和組”工具。
- 右鍵單擊“組”節點,并從上下文菜單中選擇“新建組”。
- 在“組名”框中輸入 TelnetClients。
- 單擊“添加”以添加對該計算機有 telnet 訪問權限的用戶。
- 單擊“創建”,再單擊“關閉”。
當存在 TelnetClients 組時,Telnet 服務將僅允許那些在組中定義的用戶訪問服務器。
本部分內容專門講述有關 Internet Information Services 5 的安全問題。
為虛擬目錄設置適當的 ACL
雖然此步驟從某種程度上來說取決于應用程序,但一些主要規則仍然適用,如表 F-1 所示。
文件類型
|
訪問控制列表
|
CGI (.exe, .dll, .cmd, .pl)
|
Everyone (X) Administrators(完全控制) System(完全控制)
|
腳本文件 (.asp)
|
Everyone (X) Administrators(完全控制) System(完全控制)
|
包含文件 (.inc, .shtm, .shtml)
|
Everyone (X) Administrators(完全控制) System(完全控制)
|
靜態內容 (.txt, .gif, .jpg, .html)
|
Everyone (R) Administrators(完全控制) System(完全控制)
|
推薦使用的各文件類型的默認 ACL
與為每一個文件單獨設置 ACL 相比,更好的辦法是為每一種文件類型創建新的目錄,在這些目錄上設置 ACL,并允許 ACL 繼承到文件。例如,目錄結構可能如下所示:
- c:\inetpub\wwwroot\myserver\static (.html)
- c:\inetpub\wwwroot\myserver\include (.inc)
- c:\inetpub\wwwroot\myserver\script (.asp)
- c:\inetpub\wwwroot\myserver\executable (.dll)
- c:\inetpub\wwwroot\myserver\images (.gif, .jpeg)
此外,有兩個目錄需要特別注意:
- c:\inetpub\ftproot (FTP server)
- c:\inetpub\mailroot (SMTP server)
這兩個目錄上的 ACL 都是“Everyone(完全控制)”,應當根據您的功能級別覆蓋為更加嚴格的設置。如果要支持“Everyone(寫入)”,請將該文件夾放置到與 IIS 服務器不同的卷中,或者使用 Windows 2000 磁盤空間配額來限制可以寫入這些目錄的數據量。
設置適當的 IIS 日志文件 ACL
請確保 IIS 生成的日志文件 (%systemroot%\system32\LogFiles) 上的 ACL 是:
- Administrators(完全控制)
- System(完全控制)
- Everyone (RWC)
這有助于防止惡意用戶刪除文件以掩飾他們的蹤跡。
啟用日志記錄
當您希望確定服務器是否正受到攻擊時,日志記錄是非常重要的。應當通過下列步驟使用 W3C 擴展日志記錄格式:
- 加載 Internet Information Services 工具。
- 右鍵單擊懷疑有問題的站點,然后從上下文菜單中選擇“屬性”。
- 單擊“網站”選項卡。
- 選中“啟用日志”復選框。
- 從“活動日志格式”下拉列表中選擇“W3C 擴展日志文件格式”。
- 單擊“屬性”。
- 單擊“擴展屬性”選項卡,然后設置下列屬性:
- 客戶端 IP 地址
- 用戶名
- 方法
- URI 資源
- HTTP 狀態
- Win32 狀態
- 用戶代理
- 服務器 IP 地址
- 服務器端口
僅當您將多個 Web 服務器設置在同一計算機上時,后兩個屬性才有用。Win32 Status 屬性非常適合于調試。當您檢查日志時,請注意錯誤 5,即被拒絕的訪問。您可以通過在命令行中輸入 net helpmsg err (其中 err 代表您感興趣的錯誤號碼)來找出其他 Win32 錯誤是什么含義。
設置 IP 地址/DNS 地址限制
這并非要設置的普通選項,但是如果希望限制某些用戶訪問您的網站,這將是一個有用的選項。請注意如果您輸入域名系統 (DNS) 名稱,那么 IIS 將必須執行 DNS 檢查,這將很費時間。
驗證可執行內容的可信度
要了解可執行內容是否可信是很難的。有一個小測試是用 DumpBin 工具來查看可執行內容是否調用了某些 API。許多 Win32 開發工具都含有 DumpBin。例如,如果您希望查看名為 MyISAPI.dll 的文件是否調用 RevertToSelf,請使用下列語法:
dumpbin /imports MyISAPI.dll | find "RevertToSelf"
如果屏幕上未出現結果,MyISAPI.dll 將不直接調用 RevertToSelf。它將可能通過 LoadLibrary 來調用該 API,在此情況下您也可以使用相似的命令來進行查找。
在 IIS 服務器上更新根目錄的 CA 證書
該過程包括兩個步驟:第一步:添加所有信任的新根目錄證書頒發機構 (CA) 證書—尤其是任何通過使用 Microsoft Certificate Services 2.0 創建的新根目錄 CA 證書。第二步:刪除所有不信任的根目錄 CA 證書。請注意如果您不知道發布根目錄證書的公司名稱,那么就不應當信任他們!
所有 IIS 使用的根目錄 CA 證書都存放在計算機的機器存儲中?梢酝ㄟ^下列步驟來訪問該機器存儲:
- 打開 Microsoft Management Console (MMC)。
- 從“控制臺”菜單中選擇“添加/刪除管理單元”,然后單擊“添加”。
- 選擇“證書”并單擊“添加”。
- 單擊“計算機帳戶”選項按鈕。
- 單擊“下一步”。
- 選中所指機器。
- 單擊“完成”。
- 單擊“關閉”,再單擊“確定”。
- 展開證書節點。
- 擴展信任的根目錄證書頒發機構。
- 選擇證書。
右窗格將顯示當前信任的全部根目錄 CA 證書。如果需要,可以刪除多個證書。
注意: 不要刪除 Microsoft 或 VeriSign 根目錄。操作系統會大量使用它們。
禁用或刪除所有示例應用程序
示例僅僅是示例;默認情況下并不安裝它們,并且永遠不應在產品服務器上安裝。請注意,某些示例是安裝的,使它們只能通過 http://localhost 或 127.0.0.1 進行訪問,即使這樣也應將其刪除。
F-2 表列舉了某些示例的默認位置。
示例
|
虛擬目錄
|
位置
|
IIS 示例
|
\IISSamples
|
c:\inetpub\iissamples
|
IIS 文檔
|
\IISHelp
|
c:\winnt\help\iishelp
|
數據訪問
|
\MSADC
|
c:\program files\common files\system\msadc
|
包含在 Internet Information Server 5 中的示例文件。
禁用或刪除不需要的 COM 組件
某些 COM 組件對于多數應用程序都是不需要的,應當將其刪除。尤其需要考慮禁用“文件系統對象”組件,但請注意這樣也會刪除 Dictionary 對象。請注意某些程序可能需要您禁用的組件。例如:Site Server 3.0 使用“文件系統對象”。下列命令將禁用“文件系統對象”:
regsvr32 scrrun.dll /u
刪除 IISADMPWD 虛擬目錄
該目錄允許您重新設置 Windows NT 和 Windows 2000 密碼。這主要是為 Intranet 方案設計的,并且不作為 IIS 5 的一部分來安裝,但是在 IIS 4 服務器升級到 IIS 5 時將不會被刪除。如果您不使用 Intranet 或者您將服務器連接到網站上,則應當將其刪除。有關此功能的詳細信息,請參考 Microsoft Knowledge Base 文章 Q184619。
刪除不使用的腳本映射
IIS 預配置為支持常見的文件擴展名,如 .asp 和 .shtm 文件。當 IIS 接收到針對其中某一類型文件的請求時,該調用由 DLL 進行處理。如果您不會用到其中某些擴展名或功能,請按照如下步驟進行刪除:
- 打開 Internet 服務管理器。
- 右鍵單擊 Web 服務器,并從上下文菜單中選擇“屬性”。
- 主屬性
- 選擇“WWW 服務”|“編輯”|“HomeDirectory”|“配置”
刪除下列引用:
如果您不使用...
|
請刪除項目:
|
基于網站的密碼重置
|
.htr
|
Internet 數據庫連接器(所有 IIS 5 網站應當使用 ADO 或相似技術)
|
.idc
|
服務器端包含程序
|
.stm, .shtm 和 .shtml
|
Internet 打印
|
.printer
|
索引服務器
|
.htw, .ida and .idq
|
注意: “Internet 打印”可以通過組策略和 Internet 服務管理器來配置。如果組策略設置和 Internet 管理器設置有沖突,那么組策略設置優先。如果您通過 Internet 服務管理器刪除“Internet 打印”,請務必驗證不能通過本地或域的組策略重新啟用它。(默認組策略既不啟用也不禁用“Internet 打印”)。請在 MMC 組策略管理單元中,選擇“計算機配置”|“管理模板”|“打印”|“基于 Web 的打印”。
注意: 除非出于危急任務的原因要使用 .htr 功能,否則應當刪除 .htr 擴展名。
檢查 ASP 代碼中的 <FORM> 和查詢字符串輸入
許多站點使用從用戶那得到的輸入來直接調用其他代碼或創建 SQL 聲明。換句話說,它們將該輸入當作有效的、格式良好的、無惡意的輸入。但為了安全起見,卻不應當這樣。因為實際工作中存在很多這樣的攻擊,其中用戶輸入被錯誤的當作有效輸入,使用戶能夠獲得服務器的訪問權限或者產生損害。您應當在將其傳送給另一個過程或方法調用(它們可能會使用外部資源,比如文件系統或數據庫)前,檢查每個 <FORM> 輸入和查詢字串。
您可以使用 JScript V5 和 VBScript V5 常規表達式功能來執行文本檢查。下列示例代碼將去掉那些只包含無效字符(不是 0-9a-zA-Z 或 _ 的字符)的字符串:
Set reg = New RegExp
reg.Pattern = "\W+" ' One or more characters which
' are NOT 0-9a-zA-Z or '_'
strUnTainted = reg.Replace(strTainted, "")
下列示例將去掉 | 運算符后的所有文本:
Set reg = New RegExp
reg.Pattern = "^(.+)\|(.+)" ' Any character from the start of
' the string to a | character.
strUnTainted = reg.Replace(strTainted, "$1")
同樣,使用“腳本文件系統對象”打開或創建文件時請小心。如果文件名是基于用戶輸入,那么用戶可能企圖打開一系列端口或打印機。下列 JScript 代碼會去掉無效文件名:
var strOut = strIn.replace(/(AUX|PRN|NUL|COM\d|LPT\d)+\s*$/i,"");
版本 5 腳本引擎中的模式語法與 Perl 5.0 中的相同。請參考位于 http://msdn.microsoft.com/scripting/default.htm 的 V5 腳本引擎文檔獲取詳細信息,有關范例請訪問 http://msdn.microsoft.com/workshop/languages/clinic/scripting051099.asp。
禁用父路徑
父路徑允許您在調用諸如 MapPath 等功能時使用“..”。默認狀態下,該選項是啟用的,您應當禁用它。按照以下步驟禁用該選項:
- 右鍵單擊網站的根目錄,然后從上下文菜單中選擇“屬性”。
- 單擊“主目錄”選項卡。
- 單擊“配置”。
- 單擊“App 選項”選項卡。
- 取消選中“啟用父路徑”復選框。
在“內容 – 位置”中禁用 IP 地址
“內容 – 位置”首部會暴露通常隱藏在網絡地址轉換 (NAT) 防火墻或代理服務器后的內部 IP 地址。