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