| 本單元內容 | |
| 目標 | |
| 適用於 | |
| 如何使用本單元 | |
| 概觀 | |
| Web 伺服器設定 | |
| IIS 設定 | |
| Machine.Config | |
| Web 服務 | |
| Enterprise Services | |
| 遠端服務 | |
| 資料庫伺服器設定 | |
| 網路設定 | |
| 總結 |
在即時上線伺服器 (Live Server) 上部署 ASP.NET Web 應用程式後,您必須確定已安全地實作最終部署,以及盡可能保護和鎖定您的 Web 應用程式環境。
如果基礎結構不安全且容易產生安全漏洞,那麼為了保障 ASP.NET Web 應用程式在設計、預設設定和部署過程中的安全 (即,在高度安全和鎖定的伺服器環境中運作的機制) 所做的一切努力,也都無法保障應用程式的安全。不安全的網路或主機組態設定,將會產生易受攻擊的弱點。
本單元提供一份精簡的問題清單,其中包含網路和主機安全性設定等方面的問題。您可以利用此清單當作安全性稽核的執行方法和範圍。
透過本單元即可:
| • | 確認已安全地部署 ASP.NET Web 應用程式,且 ASP.NET Web 應用程式正在安全的環境中執行。 |
| • | 建立執行部署過程的檢閱和安全性稽核的方法和範圍。 |
| • | 透過一系列廣泛的安全性問答,快速找出安全性的漏洞。 |
| • | 檢閱下列已部署項目的設定:網路及主機、基本 Windows 2000、IIS 及 .NET Framework、Web 應用程式及 Web 服務、Enterprise Services、遠端服務、和 SQL Server。 |
本單元適用於下列產品及技術:
| • | Microsoft Windows Server 2000 |
| • | Microsoft .NET Framework 1.1 及 ASP.NET 1.1 |
| • | Microsoft SQL Server |
使用本單元來確保您的 ASP.NET Web 應用程式已安全地部署,並於安全的環境中執行。
若要充分瞭解本單元:
| • | 閱讀並遵循單元 21<程式碼的檢閱>中的內容及方法,以確保安全地部署 Web 應用程式。 | ||||||||||||
| • | 使用設定類別。使用本單元所指定的類別來把握安全性檢閱的重點。 | ||||||||||||
| • | 閱讀本單元之後,接著閱讀本指南第四部之同系列的安全性單元:
| ||||||||||||
| • | 使用同系列的檢查清單
|
Web 應用程式的安全性取決於部署此應用程式的基礎結構安全與否。不安全的網路或主機組態設定,將會產生易受攻擊的弱點。本單元所述的部署過程檢閱項目,會針對網路和主機設定進行檢查。主機包括 Windows 2000 Server,其中可能還包含 IIS (需視伺服器角色而定)、Microsoft .NET Framework、Enterprise Services 和 SQL Server。
進行部署過程的檢閱作業時,所涉及的主要設定元素顯示於 [圖 22.1]。

[圖 22.1]
部署過程的檢閱之核心元素
本階段的檢閱目標在於識別 Web 伺服器中、基本作業系統的安全設定問題。IIS 設定將另行討論,因此不在此贅述。有關本節所提之檢閱問題的其他相關背景資訊,請參閱單元 16<保護 Web 伺服器的安全>。
為了明確界定和組織檢閱作業,此處將檢閱作業分成下列各設定類別:
| • | 補充程式及更新 |
| • | 服務 |
| • | 通訊協定 |
| • | 帳戶 |
| • | 檔案及目錄 |
| • | 共用 |
| • | 連接埠 |
| • | 登錄 |
| • | 稽核和記錄 |
確認您的伺服器是否已安裝最新的 Service Pack 及軟體補充程式。您必須分別檢查作業系統和 .NET Framework。請檢閱下列問題:
| • | 您是否已經執行 MBSA? 修正所找到的安全性弱點,並且安裝最新的補充程式及更新,藉此回應 MBSA 的輸出結果。如需詳細資訊,請參閱單元 16<保護 Web 伺服器的安全>中的「步驟 1:補充程式及更新」 |
| • | 您是否已經安裝 .NET Framework 的更新程式? |
請務必只啟用必要的服務。檢查其他所有服務是否均已停用,以減少伺服器遭受攻擊的風險。若要檢視正在執行和已經啟用的服務,請使用 [電腦管理] 中提供的 [服務及應用程式] 之 [Microsoft Management Console (MMC)] 嵌入式管理單元。若要停用服務,請確實停止該服務,並將其啟動類型設定為手動。
檢閱下列問題來查核您的服務設定:
| • | 您是否執行了不必要的服務? |
| • | 您是否已經停用 Telnet 服務? |
| • | 您是否已經停用 FTP、SMTP、以及 NNTP 服務? 注意 IISLockdown 會停用這些服務。 |
| • | 您是否使用 ASP.NET 工作階段狀態服務? <sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" /> 如果您沒有在 Web 伺服器上使用此服務,那麼請停用它。在服務 MMC 嵌入式管理單元中,此服務列為「ASP.NET 狀態服務」。 有關如何保障 ASP.NET 工作階段狀態安全的詳細資訊,請參閱單元 19<保障 ASP.NET 應用程式及 Web 服務的安全>中的「工作階段狀態」內容。 |
檢閱伺服器上已啟用的通訊協定,並確保未啟用不必要的通訊協定。請使用下列問題來檢閱伺服器上的通訊協定。
| • | 您是否使用 WebDAV? 有關如何保障 WebDAV 安全的資訊,請參閱 Microsoft 知識庫文件 323470《How To: Create a Secure WebDAV Publishing Directory (英文)》有關如何停用 WebDAV 的資訊,請參閱文件 241520《How to Disable WebDAV for IIS 5.0 (英文)》。 |
| • | 您是否已經強化 TCP/IP 堆疊? HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 如果出現以下的子系機碼,代表 TCP/IP 堆疊已經強化:SynAttackProtect、EnableICMPRedirect、及 EnableDeadGWDetect。 有關充分強化堆疊所需的必要機碼和適當數值的完整清單,請參閱本指南中 How To 章節的<How To:強化 TCP/IP 堆疊>。 |
| • | 您是否已經停用外部網路網路卡的 NetBIOS 及 SMB? |
檢閱伺服器上所有 Windows 帳戶的使用情況,以確定其中沒有不必要的帳戶,並確保所有必要帳戶均使用最低權限及必要存取權限來加以設定。下列問題能幫助您找出帳戶的安全性弱點:
| • | 您是否已經刪除或停用所有未使用的帳戶? |
| • | 您是否已經停用「來賓 (Guest)」帳戶? |
| • | 您是否已經重新命名預設的系統管理員帳戶? |
| • | 您是否已經建立自訂的匿名 Web 帳戶? |
| • | 您是否使用增強式密碼原則? |
| • | 您是否有限制遠端登入? |
| • | 您是否已經停用 Null 工作階段? HKLM\System\CurrentControlSet\Control\LSA\RestrictAnonymous=1 |
下列檢閱問題可讓您檢查是否有妥善使用 NTFS 權限來鎖定帳戶 (例如匿名 Web 使用者帳戶)。
| • | IIS 是否安裝在 NTFS 磁碟區上? | ||||||||
| • | 您是否已經限制 Everyone 群組?
| ||||||||
| • | 您是否已經限制匿名 Web 使用者帳戶? 注意 如果您曾經執行 IISLockdown,則 Web 匿名使用者 (Web Anonymous Users) 群組和 Web 應用程式 (Web Applications) 群組就可以用來限制存取。在預設的狀況下,Web 匿名使用者 (Web Anonymous Users) 群組會包含 IUSR 帳戶,而 Web 應用程式 (Web Applications) 群組則包含 Internet Web Application Manager (IWAM)。以系統管理員的立場來看,限制群組存取優於個別帳戶限制。 | ||||||||
| • | 您是否已經保護或移除公用程式及 SDK? | ||||||||
| • | 您是否已經移除未使用的 DSN? |
檢閱下列問題以確保檔案共用不會無謂地開放您的伺服器:
| • | 伺服器上有哪些共用? |
| • | Everyone 群組是否可以存取共用? |
| • | 您是否已經移除系統管理共用? |
檢查伺服器使用的連接埠,以確保未開放不必要的連接埠。若要檢查正在接聽的連接埠,請執行下列 netstat 命令。
netstat -n -a
此命令會產生以下輸出:

[圖 22.2]
Netstat 輸出
此輸出會列出所有連接埠以及其位址與目前狀態。請確定您瞭解每個接聽連接埠所開放的服務,並確認每個服務的必要性。停用任何未使用的服務。
若要從 netstat 輸出濾除特定的字串模式,請與作業系統 findstr 工具搭配使用。以下的範例從輸出中濾出「LISTENING」狀態的連接埠。
netstat -n -a | findstr LISTENING
您也可以使用 Portqry.exe 命令列公用程式來確認 TCP/IP 連接埠的狀態。有關此工具以及如何下載等詳細資訊,請參閱 Microsoft 知識庫文件 310099《Description of the Portqry.exe Command-Line Utility (英文)》。
另請檢閱下列項目:
| • | 將外部網路連接埠限制為 TCP 80 及 443。 |
| • | 限制或加密內部網路的資料傳輸。 |
使用下列問題來檢閱登錄設定的安全性:
| • | 您是否已經限制遠端登錄系統管理? HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winreg 根據 Windows 2000 的預設值,遠端登錄存取僅限於 Administrator 與 Backup Operator 群組的成員。為了確保安全性,使用空的「判別存取控制清單 (DACL)」來限制登錄的所有遠端存取。 注意 某些服務需要使用遠端存取登錄的功能。請參閱 Microsoft 知識庫文件 153183《How to Restrict Access to the Registry from a Remote Computer (英文)》,以瞭解您的方案是否需要限制遠端登錄存取。 |
| • | 您是否已經保障 SAM 的安全? HKLM\System\CurrentControlSet\Control\LSA\NoLMHash |
使用下列問題來檢閱 Windows 稽核的使用情況。
| • | 您是否有記錄所有失敗的登入嘗試? |
| • | 您是否記錄整個檔案系統中所有失敗的動作? |
藉由檢閱和增進 IIS 組態設定的安全性,您能夠有效地減少 Web 伺服器受攻擊的風險。有關本節所提之檢閱重點的詳細資訊,請參閱單元16<保護 Web 伺服器的安全>。
本節的檢閱問題根據下列設定類別來加以分組。
| • | IISLockdown |
| • | URLScan |
| • | 站台及虛擬目錄 |
| • | ISAPI 篩選器 |
| • | IIS Metabase |
| • | 伺服器憑證 |
IISLockdown 工具可識別和關閉各種功能,以便減少 IIS 受攻擊的風險。若要查看您的伺服器是否已執行此工具,請檢查 IISLockdown 產生的下列報告:
\WINNT\system32\inetsrv\oblt-rep.log
有關 IISLockdown 的詳細資訊,請參閱本指南中 "How To" 章節的<How To:使用 IISLockdown>。
URLScan 是與 IISLockdown 一起安裝的 ISAPI 篩選器。URLScan 可防止潛在的有害要求連至伺服器並造成損壞。檢查是否已經安裝並正確設定 URLScan。
| • | 若要查看是否安裝 URLScan:
|
若要檢查 URLScan 設定,請使用 [記事本] 來編輯下列 URLScan 設定檔案。
%WINDIR%\System32\Inetsrv\URLscan\Urlscan.ini
有關 URLScan 的詳細資訊,請參閱本指南 How To 章節中的<How To:使用 URLScan>。
本節的檢閱問題是關於特定的網站設定和應用程式的虛擬目錄。在本節中,您將會檢閱下列類別:
| • | 網站位置 |
| • | 指令碼對應 |
| • | 匿名網際網路使用者帳戶 |
| • | 稽核和記錄 |
| • | Web 權限 |
| • | IP 位址及網域名稱限制 |
| • | 驗證 |
| • | 上層路徑設定 |
| • | Microsoft FrontPage 伺服器延伸 |
檢查您的網站根目錄是否安裝在非系統的磁碟區上。將網站根目錄移至非系統的磁碟區上可避免使用目錄周遊攻擊 (Directory Traversal Attack) 的使用者存取系統工具和執行檔 (例如 Cmd.exe)。
檢查您是否已經將所有非必要的副檔名對應至 404.dll (當您執行 IISLockdown 時便已安裝 404.dll)。
| • | 若要檢閱指令碼對應:
|
確認您的應用程式已設定為使用非預設的匿名網際網路使用者帳戶。如果您的伺服器上有多個 Web 應用程式,請檢查是否已將每個應用程式都設定為使用個別的匿名帳戶。這可讓您針對每個 Web 應用程式設定使用權限以及追蹤活動。
檢查您是否已經設定 IIS 稽核以便偵測進行中的攻擊和診斷攻擊軌跡 (Footprint)。下列檢閱問題能幫助您識別 IIS 稽核中的安全性弱點:
| • | 記錄檔是否位於個別的非系統磁碟區上? |
| • | 您是否限制記錄檔的存取? |
檢閱網站及每個虛擬目錄的預設 Web 權限設定。檢查是否符合下列條件:
| • | 包含目錄限制讀取權。 |
| • | 可供匿名存取的虛擬目錄已設定為限制寫入和執行權限。 |
| • | 寫入權和指令碼來源存取權限僅授與允許撰寫內容的內容資料夾。並且檢查允許撰寫內容的資料夾是否要求驗證和 Secure Sockets Layer (SSL) 加密。 |
您是否使用 IP 及網域名稱限制來限制 Web 伺服器的存取?如果是,您是否將 IP 欺騙的風險列入考量?
檢查站台及虛擬目錄的驗證設定。確認只針對網站的公開存取區域提供匿名存取支援。如果您選取多重驗證選項,請徹底測試應用程式的效果和驗證優先順序。
如果您選取基本驗證,請檢查整個網站是否使用 SSL 來保護憑證。
檢查您是否已經停用上層路徑設定,以防止對 MapPath 等功能的指令碼與應用程式呼叫使用「..」。如此可防止目錄周遊攻擊 (Directory Traversal Attack)。
| • | 若要檢閱上層路徑設定:
|
FrontPage 伺服器延伸是用於存取、撰寫和管理 FrontPage 的網站。請使用這些延伸的最新版本以避免安全性弱點。如果您未使用 FPSE,請停用 FPSE 以減少受攻擊的風險。
如需詳細資訊,請參閱單元 16<保護 Web 伺服器的安全>中的「步驟 11:站台及虛擬目錄」。
確認並未安裝未使用的 ISAPI 篩選器,以避免暴露這些篩選器中潛在的安全性弱點。
| • | 若要檢閱 ISAPI 篩選器:
|
IIS Metabase 包含 IIS 組態設定,其中大部分 (非全部) 是透過 IIS 系統管理工具來設定。此檔案本身必須加以保護,而無法使用 IIS 組態工具來維護的特定設定則必須加以檢查。檢閱下列問題以確保 Metabase 設定的正確性:
| • | 您是否已經限制 Metabase 的存取? %windir%\system32\inetsrv\metabase.bin |
| • | 您是否顯示內部 IP 位址? adsutil GET w3svc/UseHostName 確認已將屬性值設定為 True。如果尚未設定該屬性,則此命令將傳回下列訊息:「尚未設定此節點的參數 'UseHostName' (The parameter 'UseHostName' is not set at this node」)。如需詳細資訊,請參閱單元 16<保護 Web 伺服器的安全>中的「步驟 14:IIS Metabase」。 |
如果您的應用程式使用 SSL,請確認您的 Web 伺服器已經安裝有效的憑證。若要檢視伺服器的憑證內容,請在 IIS 中按一下網站之 [內容] 對話方塊的 [目錄安全性] 頁面上的 [檢視憑證]。請檢閱下列問題:
| • | 您的伺服器憑證是否已經過期? |
| • | 對受信任的根憑證而言,憑證鏈結中的所有公開金鑰是否都有效? |
| • | 您的憑證是否已經撤銷? 查看核發憑證之伺服器的憑證撤銷清單 (CRL) 上是否不包含憑證。 |
您的伺服器上所有應用程式的 .NET Framework 設定都在 Machine.config 中維護。基於安全性檢閱的目的,本節將檢查徹底審查 Machine.config 中的設定,此處會將重點放在與安全性相關的設定上。
絕大部分的安全性設定都包含在 <system.web> 元素中,但需注意 Web 服務設定及 .NET 遠端服務設定例外。本單元稍後會闡述 Web 服務及 .NET 遠端服務設定的檢閱程序。
有關下列檢閱問題所述之詳細資訊及背景,請參閱單元 19<保障 ASP.NET 應用程式及 Web 服務的安全>。本節將檢閱的元素如下:
| • | <trace> |
| • | <httpRunTime> |
| • | <compilation> |
| • | <pages> |
| • | <customErrors> |
| • | <authentication> |
| • | <identity> |
| • | <authorization> |
| • | <machineKey> |
| • | <trust> |
| • | <sessionState> |
| • | <httpHandlers> |
| • | <processModel> |
請務必使用下列設定來停用追蹤。
<trace enabled="false" ... />
請檢查 <httpRunTime> 元素上的 maxRequestLength 屬性值。您可以使用此屬性值來防止使用者上載大型檔案。所允許的最大值是 4 MB。
請檢查並確定您未編譯偵錯二進位碼檔案。請務必將 debug 屬性設定為 False。
<compilation debug="false" ... />
<pages> 元素可控制預設的頁面層次組態設定。基於安全性考量,請檢閱其檢視狀態和工作階段狀態的設定。
| • | 您是否使用檢視狀態? |
| • | 您是否使用工作階段狀態? |
請務必將 mode 屬性設定為 On,以確保詳細的加密資訊不會開放給用戶端。另請檢查預設的錯誤網頁是否是利用 defaultRedirect 屬性來指定。
<customErrors mode="On" defaultRedirect="/apperrorpage.htm" />
此元素可控管應用程式的驗證機制。請檢查 mode 屬性來查看所設定的驗證機制,然後根據特定的檢閱問題來檢討您所設定的驗證模式。
<authentication mode="[Windows|Forms|Passport|None"] />
請檢閱下列問題來查核您的表單驗證設定。
| • | 您是否有針對驗證 Cookie 進行加密? <forms protection="All" .../> All 是指加密和驗證而言 |
| • | 您是否使用 SSL 與表單驗證? <forms requireSSL="true" ... /> |
| • | 您是否限制驗證 Cookie 存留期? <forms timeout="10" ... /> |
| • | 您是否使用 滑動逾時 (Sliding Expiration)? |
| • | 您是否使用唯一 Cookie 路徑及名稱? <forms name=".ASPXAUTH" path="/" ... /> |
| • | 您是否使用 <credentials> 元素? |
| • | 您如何儲存憑證? |
| • | 您是否儲存密碼雜湊? |
| • | 您是否使用增強式密碼? |
下列問題能幫助您檢查在 <identity> 元素上指定的模擬設定:
| • | 您是否模擬原始呼叫者? 請務必設定 ACL,好讓模擬的識別身份只能存取必須取得存取權的資源。 |
| • | 您是否模擬固定的識別身份? 請確定您並未在 <identity> 元素中指定純文字憑證。而是使用 Aspnet_setreg.exe 將加密後的憑證儲存在登錄中。 在 Windows 2000 中,這個方法會強迫您將「充當部分作業系統」使用者權利授與 ASP.NET 處理序帳戶,但不建議您這麼做。如需替代的解決方法,請參閱單元 19<保障 ASP.NET 應用程式及 Web 服務的安全>。 |
此元素可控制 ASP.NET URL 授權,特別還有 Web 用戶端取得特定資料夾、頁面及資源存取權的能力。
| • | 您是否已經使用正確的使用者及角色名稱格式? 使用者名稱的形式為「DomainName\WindowsUserName」。角色名稱的形式為「DomainName\WindowsGroupName」。 注意 本機系統管理員群組稱為「BUILTIN\Administrators」。本機使用者群組稱為「BUILTIN\Users」。 使用 <authentication mode="Forms" /> 時,表示您正在授權由應用程式驗證的識別身份。一般而言,您會根據從資料庫取得的角色來授權。角色名稱是視應用程式而定的。 |
此元素可用來指定加密及驗證金鑰,以及用於保障表單驗證 Cookie 與頁面層次檢視狀態安全的演算法。
| • | 您是否在相同伺服器上執行多個應用程式? <machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="SHA1"/> |
| • | 您是否在 Web 伺服陣列中執行? |
| • | 您是否有保護檢視狀態? |
<trust> 元素可決定用於執行 ASP.NET Web 應用程式及 Web 服務的程式碼存取安全性信任等級。
| • | 您執行哪個 .NET Framework 版本? <!-- level="[Full|High|Medium|Low|Minimal]" --> <trust level="Full" originUrl=""/> |
| • | 您使用什麼信任等級? |
sessionState 元素會設定應用程式的使用者工作階段狀態管理。請檢閱下列問題:
| • | 您是否使用遠端狀態存放區? <sessionState mode="Off|Inproc|stateServer|SQLServer" ... /> 如果您使用遠端狀態存放區,而 mode 屬性設定為 stateServer 或 SQLServer,那麼請分別檢查 stateConnectionString 及 sqlConnectionString 屬性。為了不要讓憑證存放在資料庫中,請確認連線字串已使用 Aspnet_setreg.exe 進行加密並安全地存放在登錄中,或 Windows 驗證已用來連接 SQL Server 狀態存放區。 以下設定顯示當使用 Aspnet_setreg.exe 來加密登錄中的字串時,stateConnectionString 的形式如下。 <!-- aspnet_setreg.exe has been used to store encrypted details --> <!-- in the registry. --> <sessionState mode="StateServer" stateConnectionString="registry:HKLM\SOFTWARE\YourSecureApp\ identity\ASPNET_SETREG,stateConnectionString" /> |
| • | 您是否將 Windows 驗證用於狀態資料庫? 如果您一定要使用 SQL 驗證,請確認登錄中的連線字串已經經過加密,而且資料庫伺服器上已安裝伺服器認證,如此可確保通過網路傳輸的憑證有經過加密。 |
此元素列出處理序針對特定檔案類型所要求的 HTTP 處理常式。請查看並確定您已停用所有未使用的檔案類型。
將未使用的檔案類型對應至 System.Web.HttpForbiddenHandler ,以防止發生 HTTP 擷取。例如,如果您的應用程式並未使用 Web 服務,那麼請依下列方式對應 .asmx 副檔名:
<httpHandlers> <add verb="*" path="*.asmx" type="System.Web.HttpForbiddenHandler"/> </httpHandlers>
ASP.NET 工作者處理序執行時所使用的識別身份是由 Machine.config 中的 <processModel> 元素設定所控制。下列檢閱問題能幫助您檢查處理序識別身份設定:
| • | 您使用什麼識別身份來執行 ASP.NET? <processModel userName="Machine" password="AutoGenerate" . . ./> |
| • | 您是否有針對 <processModel> 憑證進行加密? <processModel userName="registry:HKLM\SOFTWARE\YourSecureApp\processModel\ ASPNET_SETREG,userName" password="registry:HKLM\SOFTWARE\YourSecureApp\processModel\ ASPNET_SETREG,password" . . ./> |
| • | 您是否使用最小權限帳戶? 請檢查並確定該帳戶不屬於 Users 群組的一員,並使用「本機安全性原則」工具來檢視使用者權利指派,以免授與其過度或不必要的權利。請勿授與其「充當部分作業系統」使用者權利。 |
本階段的安全性檢閱目的在於識別 Web 服務設定中的安全性弱點。有關本節所提之檢閱問題的其他相關背景資訊,請參閱單元 17<保障應用程式伺服器的安全>和單元 19<保障 ASP.NET 應用程式及 Web 服務的安全>。
請使用下列問題來幫助您檢閱 Web 服務的安全性設定:
| • | 您是否已經停用 Documentation 通訊協定? |
| • | 您是否已經停用 HTTP Get and Post 通訊協定? |
| • | 您是否限制 WSDL 的存取? |
| • | 您是否有在 SOAP 要求或回應中傳送機密資料? |
| • | 您如何驗證呼叫者? |
| • | 您是否有在 SOAP 標頭中傳送憑證? |
本章節將識別關於 Enterprise Services 應用程式及元件的安全性檢閱重點。有關本節所提及之議題的詳細資訊,請參閱單元 17<保障應用程式伺服器的安全>。
當您檢閱 Enterprise Services 應用程式時,請考量下列主題:
| • | 帳戶 |
| • | 檔案及目錄 |
| • | 驗證 |
| • | 授權 |
| • | 遠端服務的元件 |
如果您使用 Enterprise Services 伺服器應用程式,請檢查您用來執行該應用程式的帳戶。此資訊會顯示在該應用程式之「元件服務」中的 [內容 (Properties)] 對話方塊的 [識別身份 (Identity)] 頁上。請檢閱下列問題:
| • | 您是否使用最小權限帳戶? |
| • | 您是否使用互動式帳戶? |
檢閱下列問題以確保使用正確的 NTFS 權限,藉此保障 Enterprise Services 應用程式之相關檔案的安全:
| • | COM+ 目錄是否受到保護? %windir%\registration 設定下列 ACL: Administrators: Read, Write System: Read, Write Enterprise Services Run-As Account(s): Read |
| • | CRM 記錄檔是否受到保護? |
| • | 您的應用程式 DLL 是否受到保護? Users: Execute Application Run as account: Execute Administrators: Read, Write and Execute 如需詳細資訊,請參閱單元 17<保障應用程式伺服器的安全>。 |
服務的元件可以裝載在程式庫應用程式中,此程式庫應用程式會在用戶端的處理序位址空間中執行,或是裝載在執行於 Dllhost.exe 之個別執行個體中的伺服器應用程式。這將由 [啟動 (Activation)] 頁上指定的啟動類型來決定,該頁位於應用程式的「元件服務」中的 [內容 (Properties)] 對話方塊上 。Enterprise Services 程式庫應用程式的用戶端處理序通常是 ASP.NET Web 應用程式處理序。
以下討論的設定會在應用程式之「元件服務」中的 [內容 (Properties)] 對話方塊的 [安全性 (Security)] 頁上指定。
如果啟動類型已設定為伺服器應用程式,請檢閱下列問題
| • | 您是否有防止匿名存取? |
| • | 您使用什麼模擬等級? |
如果啟動類型設定為程式庫應用程式,那麼驗證及模擬設定將會從主機處理序繼承而來。本章節的檢閱問題假設 ASP.NET 處理序為主機處理序。
| • | 您是否已經停用驗證? |
| • | 您使用什麼驗證等級? |
| • | 您使用什麼模擬等級? <processModel comImpersonationLevel= "Default|Anonymous|Identify|Impersonate|Delegate" .../> |
Enterprise Services 應用程式中服務的元件使用以 COM+ 角色為主的安全性來授權呼叫者。請檢閱下列問題來確保正確授權:
| • | 是否有啟用存取檢查? |
| • | 您使用什麼安全層級? 注意 您必須為程式庫應用程式啟用處理序及元件層級存取檢查,否則無法使用角色型授權。 |
| • | 您是否強制執行元件層級存取檢查? |
如果您使用遠端服務的元件,並透過網路進行通訊,並符合下列問題的範圍。典型的例子是 ASP.NET 用戶端與遠端應用程式伺服器上的 Enterprise Services 應用程式進行通訊。
| • | 您是否傳送機密資料? |
| • | 您是否透過防火牆進行通訊? DCOM 所動態配置的連接埠範圍可以加以限制,或使用端點對應來指定個別連接埠。如需詳細資訊,請參閱單元 17<保障應用程式伺服器的安全>。 |
本章節將識別當您審視應用程式對 .NET 遠端服務的使用情形時,應考量的檢閱重點。有關本節所提之內容的詳細資訊,請參閱單元 17<保障應用程式伺服器的安全>。
當您檢閱 .NET 遠端服務解決方案時,首先請分辨出執行遠端元件的主機。如果您使用 ASP.NET 主機與 HttpChannel,您必須檢查是否已正確設定 IIS 及 ASP.NET 安全性,以便為遠端元件提供驗證、授權和安全通訊服務。如果您使用自訂主機與 TcpChannel,您必須檢討元件安全的保護機制,因為這種主機與通道組合需要使用自訂權限和授權解決方案。
遠端服務並不適用於網際網路用戶端。檢查並確定您的元件所接聽的連接埠並未直接提供給網際網路用戶端存取。連接埠通常會在伺服器端設定檔的 <channel> 元素中加以指定。
如果您使用 ASP.NET 主機,請檢閱下列項目:
| • | 您如何保護透過網路傳輸的機密資料? |
| • | 您如何驗證呼叫者? <authentication mode="Windows" /> |
| • | 您是否使用 ASP.NET 檔案授權? |
| • | 您是否使用 URL 授權? |
| • | 您是否有防止將錯誤細節傳回用戶端? <customErrors mode="On" /> |
| • | 您使用什麼識別身份來執行 ASP.NET? |
如果您使用自訂主機處理序 (例如 Windows 服務),請檢閱下列項目。
| • | 您如何保護透過網路傳輸的機密資料? |
| • | 您如何驗證呼叫者? |
| • | 您是否有限制用戶端? |
| • | 您是否有使用最小權限的處理序識別身份? |
本階段的安全性檢閱目的在於識別 SQL Server 資料庫伺服器設定中的安全性弱點。有關本節所提之檢閱問題的其他相關背景資訊,請參閱單元 18<保護資料庫伺服器的安全>。
為了明確界定和組織檢閱作業,此處將檢閱作業分成下列各設定類別:
| • | 補充程式及更新 |
| • | 服務 |
| • | 通訊協定 |
| • | 帳戶 |
| • | 檔案及目錄 |
| • | 共用 |
| • | 連接埠 |
| • | 登錄 |
| • | 稽核和記錄 |
| • | SQL Server 安全性 |
| • | SQL Server 登入、使用者及角色 |
檢查您的伺服器是否已使用最新的 Service Pack 及軟體補充程式來進行更新。其中包含適用於作業系統和 SQL Server 的 Service Pack 及補充程式。
確認您已經執行 Microsoft Baseline Security Analyzer (MBSA) 工具來找出常見的 Windows 及 SQL Server 安全性弱點,並且找出遺漏的 Service Pack 及補充程式。
修正所找到的安全性弱點,並且安裝最新的補充程式及更新,藉此回應 MBSA 的輸出結果。如需詳細資訊,請參閱單元 18<保護資料庫伺服器的安全>中的「步驟 1:補充程式及更新」。
請務必只啟用必要的服務。檢查其他所有服務是否均已停用,以降低伺服器被攻擊的風險。
| • | 您執行哪些 SQL Server 服務? |
| • | 您是否使用分散式交易? 如果您不使用分散式交易,請務必停用 DTC 服務。 |
藉由禁止使用不必要的通訊協定,您可降低被攻擊的風險。請檢閱下列問題:
| • | SQL Server 針對哪些通訊協定進行設定? |
| • | 您是否已經強化 TCP/IP 堆疊? HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 如果出現以下的子系機碼,代表 TCP/IP 堆疊已經強化:SynAttackProtect、EnableICMPRedirect、及 EnableReadGWDetect。 有關充分強化堆疊所需的必要機碼和適當數值的完整清單,請參閱本指南中<How To>一節的<How To:強化 TCP/IP 堆疊>。 |
請回答下列問題,以檢閱您的資料庫伺服器上所使用的帳戶:
| • | 您是否使用最低特殊權限帳戶來執行 SQL Server? |
| • | 您是否已經刪除或停用未使用的帳戶? |
| • | 您是否已經停用「來賓 (Guest)」帳戶? |
| • | 您是否已經建立新的系統管理員帳戶? |
| • | 您是否使用增強式密碼原則? |
| • | 您是否有限制遠端登入? |
| • | 您是否已經停用 Null 工作階段? HKLM\System\CurrentControlSet\Control\LSA\RestrictAnonymous=1 |
| • | 用戶端是否使用 Windows 驗證來連線? |
下列檢閱問題能幫助您確認資料庫伺服器是否已使用正確的 NTFS 權限。
| • | 您是否已經設定 SQL Server 安裝目錄的使用權限? |
| • | 您是否已經移除 SQL Server 檔案的 Everyone 使用權限? |
| • | 您是否已經保障安裝記錄檔的安全? 有關取得及使用此公用程式的資訊,請參閱 Microsoft 知識庫文件 263968《FIX: Service Pack Installation May Save Standard Security Password in File (英文)》。 |
檢閱下列問題以確保檔案共用不會無謂地開放您的伺服器:
| • | 伺服器上有哪些共用? |
| • | Everyone 群組是否可以存取共用? |
| • | 您是否已經移除系統管理共用? 注意 有些應用程式可能需要使用系統管理共用。範例包括 Microsoft Systems Management Server (SMS) 及 Microsoft Operations Manager (MOM)。如需詳細資訊,請參閱 Microsoft 知識庫文件 318751《How To: Remove Administrative Shares in Windows 2000 or Windows NT4 (英文)》。 |
檢查伺服器使用的連接埠,以確保未開放不必要的連接埠。有關使用 netstat 命列來執行此工作的詳細資訊,請參閱本單元稍早的<Web 伺服器設定>中的「連接埠」小節。接著請檢閱下列問題:
| • | 您是否已經限制 SQL Server 連接埠的存取? |
| • | 您是否將具名執行個體設定為接聽相同的連接埠? |
使用下列問題來檢閱登錄設定的安全性:
| • | 您是否已經保障 SQL Server 登錄機碼的安全? Administrators: Full Control SQL Server service account: Full Control |
| • | 您是否已經保障 SAM 的安全? HKLM\System\CurrentControlSet\Control\LSA\NoLMHash 如需詳細資訊,請參閱 Microsoft 知識庫文件 299656《How to Prevent Windows from Storing a LAN Manager Hash of Your Password in Active Directory and Local SAM Databases (英文)》。 |
檢閱下列問題以檢查您的資料庫伺服器是否已經使用正確的稽核和記錄。
| • | 您是否已經啟用 SQL Server 稽核? |
| • | 您是否有記錄所有失敗的登入嘗試? |
| • | 您是否記錄整個檔案系統中所有失敗的動作? |
檢閱 SQL Server 設定為使用什麼驗證模式。您可以在 Enterprise Manager 中,查看伺服器的 [Properties (內容)] 對話方塊之 [安全性 (Security)] 頁來獲得此資訊。如果您的伺服器設定為支援 SQL Server 及 Windows 驗證,請檢查您的應用程式確實會要求 SQL 驗證。可能的話,請使用只有 Windows 驗證。
如果您的應用程式確定會要求 SQL 驗證,請檢閱這些應用程式如何管理資料庫連線字串。如果應用程式使用 SQL 驗證,這點便非常重要,因為其中會包含使用者名稱及密碼。此外,請確認資料庫伺服器上已經安裝伺服器憑證,以確保當憑證經由網路傳送至資料庫伺服器時會進行加密,或是確認已使用傳輸層加密。
SQL Server 中的授權是透過 SQL Server 登入、資料庫使用者和各種不同的角色類型來管理。檢閱下列問題以確保正確設定這些角色:
| • | 您是否使用增強式 sa (系統管理員) 密碼? 重要 即使您從 SQL 驗證變更為 Windows 驗證,sa 帳戶仍然會處於啟用狀態。 此外,請確定您已經將增強式密碼套用到所有資料庫帳戶,尤其是特殊權限帳戶 (例如,sysadmin 及 db_owner 的成員)。如果您使用複寫,請檢查 distributer_admin 帳戶是否使用增強式密碼。 |
| • | 您是否已經移除 SQL Server Guest 帳戶? 注意 您無法從 Master、tempdb、以及複寫與散發等資料庫中刪除 Guest。 |
| • | 您是否已經移除 BUILTIN\Administrators 伺服器登入? |
| • | 您是否已經移除 Public 角色的權限? |
| • | 共有多少成員屬於系統管理員 (sysadmin) 角色? |
| • | 您是否有授與登入者受限制之資料庫使用權限? |
檢閱下列問題以確保您已經移除不必要的資料庫物件 (包括範例資料庫),並確定預存程序是否已妥善保護。
| • | 您是否已經移除範例資料庫? |
| • | 您是否已經保障預存程序的安全? |
| • | 您是否已經限制 cmdExec 的存取? 若要查明,請使用 SQL Server Enterprise Manager 來展開管理 (Management) 節點。在 [SQL Server 代理程式] 上按一下滑鼠右鍵,並顯示 [SQL Server 代理程式屬性] 對話方塊。按一下 [作業的系統] 索引標籤,並檢查是否已經選取 [只有擁有系統管理員權限的使用者可以執行 CmdExec 及 ActiveScripting] 作業步驟。 |
本階段的安全性檢閱目的在於識別網路設定中的安全性弱點。有關本節所提之檢閱問題的其他相關背景資訊,請參閱單元 15<保障網路的安全>。
為了明確界定和組織檢閱作業,此處將檢閱作業分成下列各設定類別:
| • | 路由器 |
| • | 防火牆 |
| • | 交換機 |
使用下列問題來檢閱您的路由器設定:
| • | 您是否已經套用最新的補充程式及更新? | ||||||||||||||||||||||||
| • | 您是否對輸入與輸出的封包進行篩選? | ||||||||||||||||||||||||
| • | 您是否封鎖 ICMP 流量? | ||||||||||||||||||||||||
| • | 您是否使用數值 0 或 1 來防止存留時間 (TTL) 過期的訊息? | ||||||||||||||||||||||||
| • | 您是否接收或轉寄廣播流量? [表 22.1] 應該要篩選的來源位址
| ||||||||||||||||||||||||
| • | 您是否已經停用未使用的介面? | ||||||||||||||||||||||||
| • | 您是否使用增強式密碼原則? | ||||||||||||||||||||||||
| • | 您是否使用靜態路由? | ||||||||||||||||||||||||
| • | 您是否有稽核 Web 方面系統管理介面? | ||||||||||||||||||||||||
| • | 您是否使用路由器的記錄功能? | ||||||||||||||||||||||||
| • | 您是否有使用入侵偵測系統? |
使用下列問題來檢閱您的路由器設定:
| • | 您是否已經套用最新的補充程式及更新? |
| • | 您是否有記錄經過防火牆的所有資料傳輸? |
| • | 記錄多久循環一次? |
| • | 防火牆時鐘是否與其他網路硬體同步? |
使用下列問題來檢閱您的交換機設定:
| • | 您是否已經套用最新的補充程式及更新? |
| • | 您是否已經停用出廠預設設定? |
| • | 您是否已經停用未使用的服務? |
當您執行部署過程的檢閱時,請務必檢查部署應用程式的基礎結構設定,以及應用程式本身的設定。檢閱網路、主機和應用程式設定,可能的話,邀請基礎結構專家、系統管理員及開發人員等各種團隊一同參與。
請使用本單元所指定的設定類別,來把握檢閱重點。這些類別包含:補充程式及更新、服務、通訊協定、帳戶、檔案及目錄、共用、連接埠、登錄、以及稽核和記錄。