如何構建和配置更加安全的Web站點
發表于:2007-05-25來源:作者:點擊數:
標簽:
摘要:由 Microsoft 工程師使用 Microsoft .NET Framework、Microsoft Windows 2000 Advanced Server、Internet 信息服務 5.0 和 Microsoft SQL Server 2000 構建的 Web 站點,在 eWeek OpenHack 4 競賽中成功頂住了 82,500 多次攻擊,并一舉勝出。本文介紹
摘要:由 Microsoft 工程師使用 Microsoft .NET Framework、Microsoft Windows 2000 Advanced Server、Internet 信息服務 5.0 和 Microsoft SQL Server 2000 構建的 Web 站點,在 eWeek OpenHack 4 競賽中成功頂住了 82,500 多次攻擊,并一舉勝出。本文介紹此
解決方案的構建和配置方法,并為軟件開發人員和系統管理員確保自己的解決方案的安全性提供了最佳方案。(本文包含一些指向英文站點的鏈接。)
簡介
Web 應用程序
Internet 信息服務 (IIS) 5.0
Windows 2000 Advanced Server 操作系統
IP 安全標準 (IPSec) 策略
遠程管理與監視
SQL Server 2000
密碼
小結
更多信息
簡介
eWeek Labs 舉行了第四屆年度 OpenHack 聯機安全性競賽。此次年度競賽(這是 Microsoft® 第三次參加此項賽事)旨在通過將系統暴露在 Web 真實而險惡的環境中來
測試企業的安全性。eWeek 向 Microsoft 和 Oracle 提供了 Web 應用程序示例,要求雙方使用各自的技術重新開發此應用程序。隨后,eWeek 又邀請美國各地的計算機用戶破壞最終站點的安全性,成功者可領取一定數額的獎金??山邮艿钠茐陌缯军c的腳本攻擊、動態 Web 頁面源代碼泄漏、破壞 Web 頁面、向
數據庫發送惡意 SQL 命令以及竊取所用數據庫中的信用卡數據。
Microsoft 使用 Microsoft® .NET Framework 開發其應用程序。Microsoft® .NET Framework 是一個完整的 Windows 組件,支持構建和運行下一代應用程序和 XML Web Service。此應用程序以 Microsoft® Internet 信息服務 (IIS) 5.0 為宿主,并使用 Microsoft® SQL Server™ 2000 作為其數據庫。所有
服務器都運行在 Microsoft® Windows® 2000 Advanced Server 操作系統上。(值得注意的是,如果競賽時已發布帶有 IIS 6.0 的 Microsoft® Windows Server 2003,則當時會使用此版本的操作系統。如果使用 Windows Server 2003,則可以省去競賽中用于“鎖定”操作系統和 Web 服務器的幾個步驟。)
競賽結果可以在 http://www.eweek.com/category2/1,3960,600431,00.asp 中找到??偠灾?,Microsoft 的解決方案頂住了 82,500 多次攻擊。正如它在第一屆和第二屆 OpenHack 競賽中表現的一樣,Microsoft 安然無恙地從 OpenHack 4 競賽中勝出。本文將對競賽中使用的各種技術加以介紹,以說明此解決方案的構建和配置方法,并向確保自己的解決方案安全性的開發人員和系統管理員介紹如何應用這些最佳方案。
Web 應用程序
此應用程序本身模擬 eWeek eXcellence Awards Web 站點。在此站點中,用戶可以登記其公司的產品或服務以參與獲獎評選。用戶可以設置一個帳戶,以輸入產品或服務進行評選,可以提交信用卡號支付報名費,還可以獲取有關獎項本身的信息。Microsoft 使用 .NET Framework 構建其解決方案,.NET Framework 是一個完整的 Windows 組件,用于構建和運行應用程序及 XML Web Service。大多數開發均圍繞 Framework 的 ASP.NET、ADO.NET 和加密類庫進行,這三項技術提供的功能分別用于構建基于 Web 的應用程序,訪問和使用數據,以及加密、解密和確保數據完整性。
窗體身份驗證
Microsoft® ASP.NET 類提供了幾個用于驗證用戶身份的選項(即,使用一些憑據,如用戶名和密碼,來確認給定用戶的身份)。這些選項包括集成的 Windows 身份驗證、基本身份驗證、摘要身份驗證、Microsoft® .NET Passport 以及客戶證書等。對于每個 eWeek 請求,OpenHack 解決方案選擇了基于窗體的或自定義的身份驗證。
當用戶通過窗體身份驗證登錄時,系統將創建一個加密的 cookie,用于在整個站點中跟蹤用戶。(從技術角度而言,cookie 是一個由 Web 站點生成的純文本字符串,可進入用戶的 Web 瀏覽器內存,用于對瀏覽站點的用戶進行標識。)
如果用戶在未登錄的情況下請求一個安全頁面,系統會將此用戶重定向到登錄頁面,所有這些都只需要使用應用程序的基于 XML 的 Web.config 文件進行配置就可以實現。該文件由 Microsoft® Visual Studio® .NET(用于構建基于 .NET Framework 的應用程序的集成開發環境)自動生成,用于存儲 ASP.NET Web 應用程序的配置。
在應用程序的根文件夾中,我們向 Web.config 文件的 部分添加了以下幾行代碼,以請求基于窗體的身份驗證并指定登錄頁的位置。
<authentication mode="Forms">
<forms loginUrl="Login.aspx" name="OPSAMPLEAPP"/>
</authentication>
此頂層配置文件應用到此應用程序的所有頁面。然后,用第二個 Web.config 文件創建子目錄。此文件只應用到應用程序中的少數幾個選定頁面,以防未經身份驗證的用戶(即匿名用戶)對其進行訪問。第二個 .config 文件繼承了頂層 .config 文件的身份驗證信息。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</configuration>
通過這種方式使用這兩個 .config 文件,未經身份驗證的用戶只能訪問主頁和其他少數幾個頁面,而已通過身份驗證的用戶則還可以訪問站點上那些需要用戶登錄的頁面。
登錄頁本身包含供用戶輸入用戶名和密碼的字段,并通過安全套接字層 (SSL) 將其返回給 Web 服務器,從而防止某些用戶“竊取”
網絡中傳遞的憑據。用戶創建新帳戶后,Web 應用程序將使用 Triple DES 算法將新密碼加密(詳見存儲機密信息一節的介紹),并將其與用戶名一同存儲在數據庫中。以后登錄時,Web 應用程序將使用 Triple DES 對在登錄頁輸入的密碼進行加密,然后與數據庫中存儲的加密密碼進行比較。如果這兩個密碼匹配,Web 應用程序將使用 ASP.NET 庫中的 System.Web.Security.FormsAuthentication 類生成一個包含用戶的用戶名和姓名的加密 cookie。此 cookie 將返回給用戶并儲存在用戶的瀏覽器中,直到超時為止。用戶此后向 Web 站點發送的任何請求都會包含此 cookie。所有涉及 cookie 的傳輸都使用 SSL 進行,以防“重放”攻擊(即攻擊者從網絡中竊取到 cookie,然后使用它假冒用戶進行操作)。強烈建議您通過公共網絡發送可用于訪問敏感信息的敏感信息或憑據時使用 SSL。
輸入有效性驗證
OpenHack 在應用程序中實現了不同級別、不同類型的有效性驗證,以確保代碼以外的輸入(即用戶輸入)無法更改應用程序的操作。驗證輸入有效性是一個關鍵的最佳安全方案,有助于防止緩存溢出、跨站點的腳本攻擊以及其他潛在的在應用程序上下文中執行惡意代碼的嘗試。提供多層保護(正如此處所做的)是另一個重要的最佳安全方案,稱為“層層設防”。做最壞的打算并假定解決方案的一層或多層可能遭到破壞,這往往很重要。
第一道防線是由 ASP.NET(特別是 RegularExpressionValidator 類和 RequiredFieldValidator 類)提供的有效性驗證控制,可確保提供了所需的所有輸入,且均為有效數據。只允許使用用于提供所需用戶操作的字符,在本例中,字符范圍很有限。例如,某些字段只允許輸入“[ ',.0-9a-zA-Z_]*”,即空格、單引號、逗號、句號、字母和數字。其他可用于向 Web 站點發送惡意腳本的字符被禁止使用。
除文本框以外,本應用程序還通過“查詢字符串”接受某些輸入,查詢字符串是動態 URL 的一部分,包含用于生成頁面的參數。通過 System.Text.RegularExpressions.Regex 類提供的功能,用正則表達式對數據進行驗證,如下所示:
Regex isNumber = new Regex("^[0-9]+$");
if(isNumber.Match(inputData) ) {
// 使用它
}
else {
// 丟棄它
}
正則表達式是用于匹配文本模式的字符和語法元素集合。在 OpenHack 應用程序中,它們用于確保查詢字符串內容是正確且無惡意的。
此應用程序中的所有數據訪問均通過參數化存儲過程完成,這些存儲過程是使用 T-SQL 語言開發的,并且根據定義在數據庫內運行。將與數據庫的交互限制到存儲過程,這通常是一個最佳方案。如果不存在存儲過程,則 SQL 查詢必須由 Web 應用程序動態構造。如果 Web 層遭到破壞,攻擊者就可以向數據庫查詢中插入惡意命令,以檢索、更改或刪除數據庫中存儲的數據。使用存儲過程,Web 應用程序與數據庫的交互操作僅限于通過存儲過程發送的幾個特定的嚴格類型參數。每當開發人員使用 .NET Framework 調用存儲過程時,系統都會對發送到此存儲過程的參數進行檢查,以確保它們是存儲過程可接受的類型(如整數、8 個字符的字符串等)。這是 Web 層有效性驗證上的又一個保護層,可確保所有輸入數據格式正確,而且不能自行構造為可操作的 SQL 語句。
任何數據在返回給用戶前均采用 HTML 編碼。這只需使用 System.Web.HttpServerUtility 類中的 HtmlEncode 方法即可實現,如下所示。
SomeLabel.Text = Server.HtmlEncode(username);
HTML 編碼有助于防止跨站點的腳本攻擊。攻擊者一旦破壞了數據庫,便可向記錄中輸入腳本,此腳本隨后返回給用戶并在瀏覽器中執行。通過 HTML 編碼,大多數腳本命令都自動轉換為無害文本。
存儲機密信息
安全地存儲機密信息(如提供數據庫登錄信息的數據庫連接字符串)很重要,這樣可以防止攻擊者訪問并使用這些機密信息來讀取、操作數據或重新配置解決方案。由于本解決方案使用了集成的 Windows 身份驗證來訪問數據庫,因此連接字符串的價值對于攻擊者來說已經顯著降低,這是因為連接字符串只包含服務器的位置和數據庫名稱,而不包括特定的憑據(如密碼)。
默認情況下,Visual Studio .NET 中的數據庫連接向導將把連接字符串作為屬性值存儲在“內含代碼”文件(此文件包含應用程序的核心邏輯,這與提供用戶界面定義的文件不同)中。
這為開發人員訪問字符串提供了方便。但是,如果攻擊者設法登錄到包含源代碼和 .config 文件的物理計算機上,便有可能讀取連接字符串并用它來訪問數據庫以進行惡意破壞。
在生產環境中,通常建議您對連接字符串和任何其他所需的憑據進行妥善地保護。一種保護憑據的方法是 OpenHack 4 中采用的方法:加密連接字符串,將其存儲在注冊表中,并使用訪問控制列表 (ACL) 確保只有系統管理員和 ASPNET 輔助進程(IIS 一節中給出了定義)才能訪問注冊表項。
使用 Windows 2000/XP 數據保護 API (DPAPI) 函數 CryptProtectData 和 CryptUnprotectData 將數據庫連接字符串加密,使用這兩個函數可以將機密信息加密,而無需直接管理(或存儲)隨后用于訪問這些機密信息的注冊表項。
盡管 DPAPI 非常適合用于加密用戶或計算機特定數據,但對于加密存儲在共享數據庫中的信息(如信用卡號碼和密碼),卻不是一種很有效的方法。這是因為 DPAPI 函數根據本地計算機和/或用戶信息創建和內部存儲加密密鑰。在 Web 領域方案中,Web 服務器將使用自己的加密密鑰,以防它們訪問相同的加密數據。
因此,為了演示 Web 領域方案中使用的方法,生成了一個隨機的 Triple DES 加密密鑰和初始化向量。此功能是用 .NET Framework 的 System.Security.Cryptography 類中的 TripleDES 類提供的。這些密鑰用于對稱地加密存儲在數據庫中的密碼和信用卡信息。為了存儲信用卡信息,選擇了加密性很強的隨機第一塊作為處理技術。
生成密鑰的備份副本后,我們使用 DPAPI 將其加密并存儲到注冊表中,然后又使用 ACL 將訪問權限僅授予系統管理員和 ASPNET 輔助進程。將密鑰加密,可確保當攻擊者實際定位并訪問數據時,如果不先將密鑰解密,便無法解密數據。這是“層層設防”的又一個典型例子。
Internet 信息服務 (IIS) 5.0
為了防止攻擊者攻擊 Web 服務器本身,我們對 Windows 2000 Advanced Server 中的 Internet 信息服務 (IIS) 5.0 Web 服務器進行了適當的更改。首先,安裝了 TechNet Web 站點上列出的所有公用安全性修補程序,以確保擁有最新的增強功能。運行任何軟件時,安裝最新的 Service Pack 和修補程序是一種非常關鍵的安全方案。
然后,將磁盤上的默認 Web 站點位置從默認位置 c:inetpub 更改到其他卷。因此,一旦系統在某些方面遭到破壞,攻擊者將很難導航到此目錄樹,除非確實了解此目錄樹的實際位置,也就是說,攻擊者無法通過輸入 .. 作為位置說明來輕松地訪問 C: 驅動器。
接著,使用靜態 Web 服務器附帶的模板運行 IIS 鎖定工具。此操作刪除了此應用程序中未使用的所有其他動態內容類型。以這種方式減少暴露給潛在攻擊者的表面區域通常是很重要的最佳方案??梢悦赓M獲得 IIS Lockdown Tool。它是一個很出色的資源,所有運行 IIS 的系統管理員都應該使用它。
此時,我們已經安裝了 .NET Framework Redistributable(它是運行 .NET Framework 應用程序所必需的)、.NET Framework Service Pack 2、最新的 .NET Framework 問題更正和
MDAC 2.7(.NET Framework 所需的組件)。
在此方案中,應用程序只使用帶有 .aspx 擴展名的動態文件和幾個用于圖像與樣式表的靜態內容類型。由于不需要 .NET Framework 安裝的其他 IIS 應用程序映射,因此將這些擴展重新綁定到 IIS 鎖定工具附帶的 404.dll 擴展。這樣做也是為了減少解決方案暴露的表面區域。
此應用程序使用低權限的默認本地服務帳戶(ASPNET 帳戶)運行 ASP.NET 代碼?!白畹蜋嘞蕖痹瓌t對于所有管理人員來說都很重要,決不要向帳戶授予并非絕對需要的權限。以這種方式鎖定解決方案相當于減少暴露的表面區域。
(ASPNET 帳戶是在安裝 .NET Framework Redistributable 時作為本地帳戶創建的,只屬于創建該帳戶的計算機上的“用戶”組。因此它擁有所有與此“用戶”組相關的權限,并可與此用戶組有權訪問的任何資源進行交互。此外,它在默認情況下擁有對 Temporary ASP.NET Files 目錄和 %windir%temp 的完全訪問權限,以及對 Framework 安裝目錄的讀取權限。)
我們將此 ASPNET 帳戶添加到 IIS 鎖定工具創建的本地“Web 應用程序組”,以防進程在被偷襲時運行任何未得到授權的命令行可執行程序。
然后,我們修改了此用戶組的權限,并允許此用戶組中的用戶運行應用程序需要的 .NET Framework C# 編譯器和資源轉換器(Csc.exe 和 Cvtres.exe)。
IIS 鎖定工具安裝了 URLScan 2.5,它是一個 ISAPI 過濾器,可根據查詢長度和字符集等規則監視和過濾發送到 IIS Web 服務器的所有輸入請求。將 URLScan 配置成只允許應用程序中使用的擴展集,并用它阻止較長的請求。這是深度防護的另一個示例,它是防止通過用戶輸入插入惡意代碼的額外保護層。TechNet 和 IIS 鎖定工具中免費提供了 URLScan。與前面提到的 IIS 鎖定工具一樣,URLScan 是一種很出色的資源,所有運行 IIS 的系統管理員都應該使用它。
我們為 Web 內容目錄設置了適當的權限,從而授予 ASP.NET 進程對內容文件的讀訪問權限,授予匿名用戶對所提供內容的適當只讀訪問權限。
只有系統帳戶和系統管理員組的成員才對 IIS 和 URLScan 的日志目錄具有訪問權限。限制對日志文件的訪問通常很有必要,它使攻擊者很難對其進行更改,以覆蓋其中的記錄或隱藏有關所受攻擊的有用信息。
Windows 2000 Advanced Server 操作系統
本次競賽使用的服務器全部運行安裝了 Service Pack 3(它是競賽時最新的 Service Pack)的 Windows 2000 Advanced Server 操作系統。還安裝了自 Service Pack 3 發行以來 TechNet Web 站點上發布的所有安全性修補程序。使用最新的安全性修補程序對系統管理員同樣是一個很重要的最佳安全方案。
安裝這些更新會對某些配置進行更改,從而進一步增強操作系統級的完整性。首先,禁用了所有不必要的操作系統服務,這通常也是一個最佳方案。通過關閉這些服務,可以釋放系統資源并減少暴露給攻擊者的表面區域??梢越玫奶囟ǚ諏㈦S每個解決方案的需要而變化。Messenger、Alerter 和 ClipBook 只是已禁用服務的幾個示例。
強烈建議您閱讀 Windows 2000 Server Resource Kit,以幫助確定不需要的服務。然后進行相應的測試,以確保應用程序在沒有這些服務的情況下也能正常工作。最后,將這些服務的啟動狀態更改為 disabled 以關閉它們。
在應用程序中,我們還使用注冊表編輯器 (Regedit.exe) 更改了四個注冊表設置,以便進一步增強安全性。我們將所有這些都作為最佳方案推薦給您,只要您不需要已禁用的功能即可。
創建注冊表項:nolmhash
(需要說明的是,在 Windows 2000 中,這是一個關鍵字,而在 Windows XP 和 Windows Server 2003 中,這是一個值。)
位置:HKLMSystemCurrentControlSetControlLSA
用途:防止操作系統以 LM 散列格式存儲用戶密碼。此格式只用于不支持 NTLM 或 Kerberos 的 Windows 3.11 客戶端。創建和保留此 LM 散列的風險在于,如果攻擊者設法將以此格式存儲的密碼解密,就可以在網絡上的其他計算機上重復利用這些密碼。
創建注冊表值:NoDefaultExempt
位置:HKLMSystemCurrentControlSetServicesIPSEC
用途:默認情況下,IPSec 將允許源端口為 88 的傳入通信查詢 IPSec 服務,以獲取連接到計算機的信息,而不管使用的是哪種 IPSec 策略。通過設置此值,除了我們設置的 IPSec 過濾器允許的通信(詳見 IPSec 策略一節的介紹)以外,不允許端口之間進行任何通信。
創建注冊表值:DisableIPSourceRouting
位置:HKLMSystemCurrentControlSetServicesTcpipParameters
用途:防止 TCP 數據包顯式確定到最終目標的路由,并防止它要求服務器確定最佳路由。這是一個防止“人在中間”攻擊(即攻擊者通過自己的服務器對數據包進行路由,并在數據包傳遞期間竊取其中的內容)的保護層。
創建注冊表值:SynAttackProtect
位置:HKLMSystemCurrentControlSetServicesTcpipParameters
用途:此注冊表項通過限制分配給傳入請求的資源來防止操作系統受到某種 SYN-flood 的攻擊。換句話說,這將幫助阻止在客戶端和服務器之間試圖使用 SYN(即同步)請求以拒絕服務的攻擊。
另外,盡管與防止攻擊沒有直接關系,我們還啟用了幾個審核日志以覆蓋登錄和注銷事件、帳戶管理、策略更改和系統事件。這有助于我們在競賽中更好地監視服務器。
IP 安全標準 (IPSec) 策略
從 Windows 2000 開始,Microsoft 已經使用 IP 安全標準 (IPSec)(IPv4 協議的擴展)為管理 Internet 協議 (IP) 通信的身份驗證和加密提供支持。下面的圖 1 顯示了“服務器(請求安全設置)屬性”對話框的默認策略。我們特地為競賽創建了一種策略。

"
圖 1:“服務器(請求安全設置)屬性”對話框
IPSec 規則是在 Microsoft 管理控制臺 (MMC) 管理單元的“本地安全設置”中進行配置的,如上所述。這些策略在增強和確保 OpenHack 服務器之間允許的通訊的安全性方面起到了主要作用。這些規則使我們能夠通過以下方法,增強最低特權的最佳方案:
要求在每個系統的 IPSec 策略中,明確且唯一地指定運行和管理應用程序所需的所有通信。
要求使用證書對系統之間的通信進行身份驗證。
要求對用于管理的通信進行身份驗證(使用證書)和加密。
拒絕應用程序或系統管理未明確允許的所有通信,包括 ICMP 和 IP 通信(“默認拒絕”規則)。
IPSec 規則有三個主要部分:標識由 IPSec 處理的通信的過濾器,過濾器找到這樣的通信時要采取的操作,以及用于建立安全性關聯的身份驗證機制。如果要進行通信的兩個系統沒有用于標識通信的規則,兩者之間也沒有公用的身份驗證機制,則它們將無法建立連接。
使用 IPSec 鎖定解決方案的第一步是完全了解不同系統之間的通信路徑,以便建立適當的 IPSec 過濾器。應允許 Web 服務器與 SQL 服務器數據庫進行通信;遠程訪問服務器應允許系統管理員使用虛擬專用網絡 (VPN) 訪問網絡的管理段;管理服務器應授予 VPN 客戶端創建 Windows 2000 終端服務客戶端會話的權限(以便訪問運行于遠程計算機桌面上的應用程序)以及訪問和復制文件以便在管理服務器上共享的權限;所有系統應允許管理服務器為其專用接口生成管理終端服務會話;最后,所有系統應能夠訪問管理系統上共享的特定文件。當系統之間所需的連接按每個端口進行映射時,我們便在每一個系統上創建了 IPSec 過濾器。
然后,必須確定處理通信的方法,因為通信是由系統上的過濾器識別的。對于 OpenHack 4,我們定義了四個可以采取的操作(稱為“過濾器操作”):
阻止通信。
允許通信。
身份驗證和簽名 - 使用證書對通信來源進行身份驗證,使用數據包簽名建立安全性關聯。
身份驗證、簽名和加密 - 使用證書對通信來源進行身份驗證,使用加密和數據包簽名建立安全性關聯。
阻止規則就是丟棄數據包。此規則與“默認拒絕”規則的功能相同,它意味著“如果我們未明確地允許通信,則禁止通信”。允許規則允許通信通過,而無需考慮通信來源。此功能用于允許公開訪問 Web 應用程序。
盡管使用證書對通信進行身份驗證要求我們從公用的證書頒發機構 (CA) 生成并分發 IPSec 證書,但它卻顯著增強了系統進行安全通信的能力。值得注意的是,我們使用了一個獨立的 CA。授予所有證書后,該 CA 將從網絡中刪除。如果生產時不再需要此 CA,請務必遵循此方法,因為這是減少解決方案表面區域的另一個好方法。
使用 IPSec 證書能夠確保源系統和目標系統的標識,包括訪問遠程訪問服務器的遠程系統管理員。通過配置策略以便使用 SHA1 散列對所有傳輸進行簽名,可確保數據包在后端系統之間傳遞時不會被攻擊者成功修改。
我們使用 MD5 加密算法對管理服務器通信進行了加密。使用這種方法,即使攻擊者能夠破壞一個面向 Internet 系統的安全性,也無法竊取專用網絡的通信。這就使得系統管理員能夠安全地連接到實時的 Web 站點以進行應用程序更新。
IPSec 使用具有最高優先權的專用規則來處理規則。因此,每個系統最初具有以下兩個規則:
阻止所有 IP 通信。
阻止所有 ICMP 通信。
然后,針對每個系統構建規則。向 Web 服務器和數據庫服務器之間的通信提供“身份驗證和簽名”過濾器操作;向與管理服務器的通信賦予“身份驗證、簽名和加密”過濾器操作;將對 Web 站點的公開訪問設置為允許訪問。
下面顯示了使用 IPSec 建立的 OpenHack 4 應用程序的邏輯連接。

"
圖 2:使用 IPSec 的應用程序邏輯連接
遠程管理與監視
OpenHack 4 的部分要求是能夠在競賽過程中更新應用程序。這項功能是通過使用第 2 層隧道協議 (L2TP) 創建 VPN、終端服務和受限文件共享實現的。

"
圖 3:用于創建 VPN(終端服務)的 L2TP
首先,L2TP 需要 IPSec 證書以建立連接。我們用適當的證書配置了幾個遠程系統管理員計算機。然后為遠程系統管理員創建啟用了遠程訪問的帳戶。
為了建立 VPN 連接,系統管理員必須在系統上安裝了 IPSec 證書以及遠程訪問帳戶憑據。簡而言之,IPSec 證書以不可導出的格式將證書的專用部分嵌入到本地計算機的證書存儲區中。這意味著此證書將無法移植并在其他系統上使用。實際上,我們能夠確保系統管理員只能在允許的遠程管理工作站中使用 VPN 客戶端帳戶,從而將對解決方案的管理訪問降低到最低程度。
對 L2TP 會話進行身份驗證后,系統管理員工作站將獲得管理網絡上的 IP 地址。建立到管理網絡的 VPN 隧道后,系統管理員即可打開到管理服務器 OHTS 的終端服務會話,并可使用管理服務器上的“收件箱”和“發件箱”文件共享,以丟棄更改的站點內容或檢索文件進行分析。所有系統都是獨立的(即不屬于某個域),因此將共享訪問和終端服務會話配置成通過增強的不明顯的密碼(詳見密碼一節的介紹)使用系統上的本地帳戶。所用的共享被限制為只允許對“發件箱”進行讀操作和對“收件箱”進行寫操作。
大量的管理工作是在管理服務器“終端服務”會話中進行的。在此會話中,系統管理員將連接到任何其他系統的遠程管理終端服務會話,從根本上“嵌套”終端服務會話。然后,可以連接到管理服務器上的“收件箱”和“發件箱”共享,并根據所服務的系統的需要丟棄或檢索文件。支持這些管理功能的所有通信都需要使用 IPSec,如上所述。
SQL Server 2000
OpenHack SQL Server 2000 數據庫運行在專用計算機上,這是一種“層層設防”措施。即使 Web 層崩潰,數據庫及它所包含的所有信息仍會受到隔離和保護。
如上所述,我們的解決方案使用集成的 Windows 身份驗證連接到數據庫。這是一種值得借鑒的方法,因為它不需要開發和安全存儲用于訪問數據庫的密碼。
為了確保向后兼容,Windows 2000 和 Windows XP 支持幾種類型的身份驗證協議。由于只有實現 NTLMv2 身份驗證的計算機才能訪問我們的數據庫服務器,因此強烈建議將 LAN 管理器身份驗證級別更改為“僅限于 NTLMv2”。注意,使用其他配置,Windows 95、Windows 98 和帶有 Service Pack 4 及更高版本的 Windows NT Server 4.0 也可以支持 NTLMv2。通過限制所支持的身份驗證協議的數量,系統管理員最大限度地減少了暴露給攻擊者的表面區域

"
圖 4:設置 LAN 管理器身份驗證級別
使用 SQL Server 與使用 Windows 一樣,我們需要小心地安裝、配置和運行必要的服務,以減少暴露給潛在攻擊者的數據庫表面區域。對于 OpenHack,我們未安裝升級工具、調試符號、復制支持、聯機圖書或 Dev 工具組件。
該安裝是在 NTFS 分區上進行的,因為它可以為 SQL Server 使用的文件和文件夾提供額外的基于 ACL 的安全保護。下一步,通常也是最關鍵的一步,是安裝 SQL Server 2000 Service Pack 2 及所有最新的修補程序。
在服務帳戶為 localSystem 的計算機中通??梢哉业?SQL Server 安裝程序。盡管在鎖定良好的專用網絡中,這是可以接受的,但由于它是基礎計算機上的管理帳戶,因此仍具有遠遠超過 SQL Server 服務真正所需的權限。如果要求服務帳戶能夠訪問網絡資源(如備份到網絡驅動器時、使用日志傳送時或使用復制支持時),則最好選擇低權限的域帳戶。但如果您的環境不需要這些功能,則完全可以選擇低權限的本地帳戶。在本次競賽中,由于不打算使用這些功能,而且為了堅持“最低權限”原則,我們使用了本地用戶帳戶。
我們使用以下設置創建了一個新的 NT 本地用戶帳戶:
創建了一個非常強大的密碼(詳見密碼一節的介紹)。
刪除了使用戶可更改其密碼的功能。
刪除了“終端服務”訪問。
創建新用戶帳戶后,我們使用 SQL Server Enterprise Manager 更改了啟動服務帳戶信息,強制數據庫服務以此用戶的身份運行。

"
圖 5:更改啟動服務帳戶信息
為了堅持只運行所需服務的思想和最佳安全方案,我們使用 Services MMC 管理單元停止 Distributed Transaction Coordinator (MSDTC) 服務,并將其設置為手動啟動,這樣 OpenHack 數據庫就不會運行事務,服務器本身也不會運行 COM+ 應用程序。這里我們看到在專用計算機上運行數據庫服務器的另一個優勢:比與其他服務器和服務并行運行的服務器具有更強的減少周圍表面區域的能力。
還可以通過禁用 SQL Server 代理和 Microsoft 搜索服務進一步減少表面區域,因為我們的數據庫解決方案不需要此功能。
下一步,由于更多考慮的是
可靠性而非安全性問題,我們設置了 Microsoft SQL Server 服務本身的屬性,并將恢復操作更改為出現故障后重新啟動服務。這樣做是為了在出現故障時盡量減少停機時間。

"
圖 6:將恢復操作更改為出現故障后重新啟動服務
然后我們設置了 Server Network 實用程序,并將網絡屬性從“直接客戶端廣播”更改為“隱藏 SQL Server”。還刪除了“命名管道”協議,因為我們只需要 TCP/IP。
作為此配置的一部分,我們返回到前面的配置,為 SA 帳戶設置了非常強大的密碼。即使在 Windows 身份驗證模式下運行,也建議采用這種做法。如果以后通過企業管理器工具或直接通過注冊表從身份驗證模式切換到混合模式,您希望確保系統是安全的(即使系統管理員當時忘記設置 SA 密碼),也可以使用這種方法。在這種方法中,最好做最壞的打算。
我們將默認的登錄審核設置更改為 Failure。此操作將登錄 SQL Server 數據庫的所有失敗嘗試都寫到錯誤日志和事件日志,該信息對識別攻擊數據庫的嘗試非常有用。
然后,我們刪除了默認的 Northwind 和 Pubs 數據庫,以減少暴露給潛在攻擊的表面區域。
完成所有步驟后,我們創建了最終解決方案中使用的 Awards 數據庫。然后仔細檢查表和存儲過程,并確保與應用程序關聯的帳戶對存儲過程只有執行權限,而對實際表沒有任何權限。這使我們能夠控制對存儲過程的訪問并限制對它的操作,而不必擔心針對表直接運行的特殊 SQL 查詢。此外,我們還確保了此帳戶在 SQL Server 中沒有任何其他的特權和權限。
密碼
確保任何服務器安全性的關鍵一步是選擇不會被輕易猜出的長而復雜的密碼。理想情況下,一個出色的密碼應至少包括以下四組字符中的三組:小寫 a 至 z、大寫 A 至 Z、數字 0 至 9,以及非字母數字符號(如“>”、“*”、“&”等)。為了盡可能保證安全,密碼應由以上四組中的每一組字符以及使用 ALT 鍵生成的字符組成。利用這些字符集創建長度至少為八個字符的密碼,可最大限度地降低攻擊者推測出登錄憑據的機會。這是 OpenHack 解決方案中的每個服務器都使用的方法,也是我們極力向您推薦的方法。
小結
確保 OpenHack 解決方案安全性所采取的所有步驟并非適用于每個 Web 解決方案。這些步驟也并不能代表開發人員和系統管理員在確保解決方案的安全性時應采取的所有方法。每個項目都具有獨特性,需要開發人員和管理員一起找出潛在的攻擊因素及預防措施。也就是說,OpenHack 4 表明上述建議非常有價值。即使它們不能全部直接應用到您的解決方案中,也應從中提取一些關鍵的好方案,以便在構建安全解決方案時以一種形式或另一種形式加以應用:
1.在原始設計中考慮安全問題。這包括開發進程以采用最新的 Service Pack 和修補程序。
2.總是安裝最新的 Service Pack 和修補程序。
3.總是使用復雜且不明顯的密碼。
4.關閉所有不必要的功能以減少暴露給攻擊者的表面區域。
5.堅持“最低權限”原則。決不授予并非絕對必需的權限。
6.預測可能發生的故障并總是采用“層層設防”以減少負面影響。
7.使用 IIS 時,運行 IIS 鎖定工具和 URLScan。
8.驗證所有輸入數據。
9.使用參數化的存儲過程,而不是在數據庫上生成動態查詢。 (出處:www.hk20.com)
原文轉自:http://www.kjueaiud.com
老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月
|