ASP.NET 2.0應用程式安全強化縱覽

來源:互聯網
上載者:User
目前,實現Web開發的核心技術之一是ASP.NET 2.0。這種技術能夠協助企業快速開發出功能強大的Web應用程式,深受開發人員喜愛。然而,在開發人員實現商務邏輯的同時,由於各種原因的影響,應用程式的安全性總是不能讓人滿意。本文的主要目的就是協助開發維護人員強化ASP.NET應用程式的安全性。眾所周知,提高ASP.NET應用程式的安全性涉及很多方面的內容,例如安全的程式碼和作業系統、通訊協議與Microsoft ASP.NET自身的經過強化的配置。因此,本文將從總體指導原則、作業系統、資料庫伺服器、Web伺服器以及ASP.NET等五個方面進行講解。

   總體指導原則

   下面列出了一些有關安全強化的總體指導原則。遵守這些規則通常會使系統和應用程式更安全,反之則會降低安全性。

   (1)為伺服器進行準確單一的定位。很多時候都會看到,一個伺服器擔當了多個角色,其既要提供Web服務,又要支援郵件、DNS伺服器等其它角色。這種做法是非常不安全的。首先,如果一個伺服器必須支援多個角色,那麼就會使配置更加複雜,而複雜的事物是安全的天敵。其次,如果在允許系統級訪問的組件中發現一個弱點,那麼會危及同一電腦中的所有其它服務的安全。再次,如果在一個伺服器中配置許多功能,那麼由於某些原因造成其死機,就會喪失多個網路服務。

   (2)最小化伺服器中的軟體和服務。在確定了伺服器在網路中的角色後,應該刪除不屬於這個角色的所有軟體和服務。特別是那些開啟連接埠,並處理網路資訊包的服務。這種做法的優點是使整個系統的配置變得更加簡單。由於只要更新實際使用的服務,所以補丁被極大地簡化。同時,這樣還能夠減少潛在的、易受攻擊的代碼和程式。

   (3)設定最少的許可權。也就是說,系統中的每個使用者或進程應只有完成工作所必須的許可權。此外,Web應用程式應始終運行在最少許可權的安全環境中,並應該只訪問它們需要訪問的資源。這可能會涉及內建的NETWORK SERVICE帳戶或自訂使用者帳戶。不要使用高許可權的帳戶,例如管理員或SYSTEM帳戶。

   (4)及時全面的安裝補丁。伺服器上的所有組件(例如作業系統、資料庫和Microsoft .NET Framework)應及時安裝最新的安全補丁。這種做法的必要性和重要性是顯而易見的。

   (5)配置多方面的防禦實體。這意味著應該始終保有多個防禦措施。例如,安裝防火牆,殺毒軟體,資訊包過濾器等等。即使維護人員配置了這樣的防禦措施,也不能認為就萬事大吉了。可能在維護人員得意洋洋的時候,那些不懷好意的人也在冷笑。

   (6)重點防禦,保護最脆弱的串連。識別應用程式或系統中最脆弱的串連,在其周圍放上額外的防禦措施。例如,ASP.NET中的登陸頁面或網路上的遠端存取網關。因為這些地區都是首選攻擊目標,並且難於防禦,因此通常必須增加更多的監測和防禦措施。

   (7)提供強大的身分識別驗證功能。如果通過身分識別驗證來訪問到應用程式或系統,那麼這個身分識別驗證應始終是強大的。例如,設定強制密碼原則,高的密碼複雜度等。同時,要考慮使用多因素身分識別驗證或替代的技術,例如使用單次密碼等。

    加強作業系統安全

    根據總體指導原則,首先要做的是,當安裝新伺服器的作業系統時,要列出所有的要求和必須提供給它們的服務。在這方面,Windows Server 2003做得很不錯,它是第一個根據初始安裝設定安裝基本系統組件和服務的作業系統。不知道Windows Server 2008是否會採取相同策略。在做好這個方面的工作之後,還要注意完成以下安全措施。

   (1)開啟自動更新功能。在安裝所有必需的組件後(例如,IIS和ASP.NET),應該確定安全最新的補丁。Windows作業系統提供了自動更新服務,該服務能夠定期檢查新的重要補丁更新。通過在控制台中啟用自動更新選項,就可以啟用這個功能。這樣,所有的安全補丁都會被自動下載。需要記住的是,在初始安裝完成和安裝完所有的必要補丁之間,作業系統處於最易受攻擊的階段。此時,流行的蠕蟲等病毒能夠迅速感染這個新系統。為此在安裝時,不要將伺服器直接連接到對外公開的或不受信任的網路上。

   (2)禁用服務和協議。在瞭解了伺服器必須提供的服務後,可以終止其它的服務和協議。最難的是找出需要那些服務和可以安全終止的服務。對於單純的Web伺服器角色而言(只提供HTTP(s)服務,遠端桌面功能只用於管理),可以中止的服務包括:Computer Browser、DHCP Client、Distributed File System、Distributed Link Tracking Client、、Distributed Transaction Coordinator、Error Reporting Service、Help and Support、Print Spooler、Remote Registry、Secondary Logon、Server、TCP/IP NetBIOS Helper、Wireless Configuration、Workstation、Application Management、File Replication、Portable Media Serial Number Service、Remote Access Auto Connection Manager、Remote Access Connection Manager、Remote Desktop Help Session Manager、Resultant Set of Policy Provider、Smart Card、Special Administration Console Helper、Telephony、Upload Manager、Windows Installer、WinHTTP Web Proxy Auto-Discovery Service、File and print sharing、NetBIOS over TCP/IP等。可以看到,預設情況下,作業系統啟用了很多服務,而Web伺服器不需要這些服務。停止這些服務,那麼效能、自由記憶體和穩定性都可以得到提升,並且伺服器更不容易受到攻擊。這是考慮最小化伺服器中軟體和服務的規則的結果。 

(3)配置實現包過濾。通過關閉所有不需要的服務,可關閉大多數的開放連接埠。這可以極大減低伺服器的受攻擊面。可是,有一些連接埠不能被關閉,例如TCP/135,它是RPC,Windows作業系統非常依賴這個協議。另外,還有一些其它連接埠應只針對一部分網路。例如,遠端管理和Terminal Services。通常,只允許從區域網路、特定的子網或特定的IP地址上進行遠端管理,但是不對互連網開放。在面對這種情況時,需要在Web伺服器上本地安裝一個資訊包過濾器,這樣能夠額外增加一個深度安全防禦實體。Windows作業系統有兩個內建的資訊包過濾器:Windows Firewall和Internet Protocol Security(IPSec)。Windows Firewall的優點是它提供了一個簡單的介面來關閉連接埠,但是,它不限制對外的串連。IPSec可以控制內外通訊,但是設定比較複雜。

   (4)配置好Windows檔案分享權限設定。很少有人知道Windows檔案分享權限設定傳輸的資料完全沒有保護措施。其預設情況下,資料是沒有經過加密或完整性保護。管理員可以開啟內建的、簽名機制來進行通訊支援,這可以使惡意使用者修改網路資訊包更加困難,但是,如果使用Windows檔案分享權限設定協議來傳輸敏感性資料,那麼應該進行額外地加密通訊。管理員可以在“本地安全性原則”中開啟簽名。如果還要保密,建議使用IPSec來設定交換受保護資料的電腦的傳輸層安全。

   (5)啟用審核功能。Windows作業系統內建有審核功能。它使作業系統能記錄成功的或失敗的登陸、策略修改和資源訪問。啟用審核分為兩步。首先,必須啟用系統層級的審核,然後,指定要審核的資源。管理員使用資訊安全設定精靈能夠自動地實現這兩個步驟。另外,作業系統還允許管理員手動修改配置,管理員能夠在本地安全性原則視窗中實現人工配置。

    強化資料庫伺服器安全

    多數Web應用程式都涉及資料庫,因此,強化資料庫伺服器的安全性也是非常重要的。除了應用以上有關的安全措施之外,另外還要考慮以下內容:

   (1)資料庫通常由多個服務組成(例如,資料庫引擎、全文檢索搜尋和訊息),其中一些是需要的,另一些則不需要。例如,Microsoft SQL Server 2005包含的Attack Surface Wizard可用來選擇應啟用的服務。

   (2)大多數資料庫都涉及架構概念,其為應用程式及其資料建立了獨立的架構。應用程式帳戶及其使用者應只能訪問這個應用程式的架構。這可以使訪問管理更加容易,同時,還要禁止應用程式訪問系統資料或其它架構中的資料。

   (3)如果有可能,不要將表訪問直接授權給應用程式或使用者。將應用程式的所有資料庫功能打包到預存程序中,並將Execute許可權授權給這些預存程序。之後,可以刪除對基礎資料表的訪問。這可以極大地簡化存取權限管理,並減少資料庫的受攻擊面。

   (4)如果有可能,限制對中繼資料的訪問。例如,SQL注入式攻擊依靠的就是應用程式允許查詢中繼資料,例如資料庫、表和列名等。

   (5)儘可能使用整合的身份審核方式。這樣能夠不在設定檔或代碼中儲存密碼。

   (6)大多數的資料庫以明碼文本的形式傳輸資料。管理員要檢查資料庫系統中所啟用的傳輸安全配置方式。例如,SQL伺服器支援Secure Sockets Layers(SSL)。如果資料庫系統沒有內建的傳輸安全服務,那麼可以使用IPSec來管理資料庫通訊。

提高Web伺服器安全

   提高Web伺服器安全涉及內容很多,但這也沒有什麼可畏懼的。管理員關鍵是要弄清楚哪些類型的主動式內容是允許的,運行應用程式的安全環境和這些應用程式應該訪問的資源等。具體而言,可從以下幾個方面入手實現安全性的提高。

  (1)配置應用程式集區。應用程式集區代表IIS 6中的背景工作處理序。每一個應用程式集區都會獲得一個w3wp.exe的執行個體,該執行個體承載了CLR、ASP.NET和應用程式。管理員可以配置這個背景工作處理序的許多方面,例如回收設定和狀態監視,以便提高安全性。

   (2)配置適當的Web服務擴充。Web服務擴充是一個比較陌生的名字,但是它們的設定定義了伺服器上允許的主動式內容。簡單而言,這是一個全域列表,其顯示了允許調用的ISPAI擴充和CGI網關。管理員應該只允許真正需要的伺服器技術,例如ASP.NET。

   (3)刪除伺服器中不必要的Web內容。例如,應用程式範例,產品說明檔案或不用的應用程式。其原因在於,伺服器上的可執行代碼越多,就越容易被利用進行攻擊。特別是應用程式範例,長久以來它一直是一個易受攻擊的方面。同樣,將Web應用程式目錄移動到非系統磁碟分割中。這樣可以防止所有類型的目錄遍曆攻擊。

   (4)刪除在IIS中所有沒有必要配置HTTP頭。例如,通過ASP.NET刪除X -Powered。管理員可以在HTTP Headers下的Web網站屬性對話方塊中的IIS MMC中找到這個設定。

   (5)為每個網站配置日誌。預設情況下,Referer欄位沒有記錄,如果要分析引用到網站的使用者,必須手動啟用這個措施。要注意,將日誌放置到一個獨立的分區中,並要定期備份它們。在記錄日誌的同時,要記得使用工具分析日誌,例如使用LogParser。

   (6)檢查傳入的請求。這個工作可使用URLScan來完成。URLScan是一個ISAPI過濾器,其通過使用白名單或黑名單的方式定義規則,例如允許或拒絕的擴充、謂詞、URL序列和標題。另外,還可以指定實體、查詢字串和標題的最大長度,還可以從HTTP響應中刪除伺服器頭。

   (7)調整存取控制清單。管理員必須調整三個不同目錄中的ACL,這可以通過使用Aspnet_regiis工具來實現。但是,如果要進行真正的最少許可權配置,仍然建議手動進行調整。需要調整的方麵包括Web應用程式檔案、暫存程序集目錄、Temp目錄。

   (8)啟用SSL。如果在應用程式中處理敏感的資料,應該始終啟用並使用SSL。這有兩個好處:首先,SSL可以鑒別伺服器的身份,並在使用者輸入任何敏感性資料(例如密碼)前,保證會話對象是正確的伺服器。其次,在伺服器身分識別驗證後,所有傳輸的資料都被加密並進行完整性保護。

   (9)設定適當的驗證方式。管理員要要非常清楚身分識別驗證方式的設定。在IIS的診斷工具箱中,可以找到一個工具AuthDiag,它能檢查身分識別驗證的方式、ACL和進程許可權。

    強化ASP.NET配置

   在實現以上所述的安全性方面的內容之後,接著要通過一些配置來提高ASP.NET方面的安全性。在這個方面,管理員要注意鎖死ASP.NET的配置,與安全相關的配置項和先行編譯等方面的相關內容。

   (1)鎖死配置。ASP.NET的特點使用階層配置系統。在這個系統中,下層設定自動繼承上層設定。因此,可以根據伺服器、網站或應用程式來調整配置設定。相關的設定檔如Inetpub\wwwroot\web.config、應用程式根或者子目錄中的Web.config檔案,以及Windows\Microsoft .NET\Framework\ version\Config\web.config和machine.config等。管理員需要瞭解這些檔案中的相關配置項作用,並根據實際情況作出正確有效調整。例如與安全相關的配置屬性allowDefinition,requirePermission等。

  (2)注意與安全相關的配置項。在上一段所介紹的web.config檔案中,包含很多與安全相關的配置項。限於篇幅,筆者僅將這些配置項列出。有關詳細說明,讀者可參考MSDN。這些與安全相關的配置項是<deployment>、<httpRuntime>、<compilation>、<pages>、<caching>、<trace>、<customErrors>、<forms>、<authorization>、<sessionState>、<httpCookies>、<trust>、<connectionStrings>、<membership>和<roleManager>。

   (3)進行先行編譯。預設情況下,ASP.NET應用程式採用命令編譯。也就是說,在頁面和控制項不被使用時將被編譯。隱含地,組成應用程式的所有代碼必須在運行時應用ASP.NET,包括頁面、程式碼後置和App_Code類。顯然,這不適用於實際發布環境。如果在部署前先行編譯應用程式,那麼就可以只部署二進位值和設定檔。建議開發人員使用Visual Studio的一個新附加程式Web Deployment Project,它可以提供一些使用有效額外選項。可選擇先行編譯方式很多,也是開發和管理員需要認真考慮的問題。

    小結

   本文大部分內容相當於一個檢查表,開發和管理員可以在部署和配置過程中用其進行對照檢查。當然,安全性不能通用化,通常要根據環境確定,但是相信本文的指導原則可以是一個好的基礎。遵循這些原則並實施一定措施,可以消除很多嚴重的安全問題。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.