ASP.NET Web應用程式安全解決方案淺析

iDotNetSpace發表於2009-07-30
一、ASP.NET Web應用程式架構安全隱患

1.      對於程式集主要威脅:未驗證的訪問、反向工程、程式碼注入、通過異常獲得程式資訊、未稽核訪問。 

2.      客戶端與Web應用程式之間的安全隱患:程式碼注入(跨站點指令碼或緩衝區溢位攻擊)、網路監控(密碼和敏感應用程式資料探測)、引數破解(表單欄位、查詢字串、Cookie、檢視狀態、HTTP頭資訊)、會話狀態變數ID取得、資訊獲取(通常使用異常)。 

3.      Web應用程式客戶端與企業服務之間的安全隱患:非稽核訪問、破解配置資料、網路監視、未約束代理、資料複製。 

4.      Web服務客戶端及其服務之間的安全隱患:非稽核訪問、引數破解、配置資料取得、網路監、訊息回覆。 

5.      Remoting客戶端及伺服器之間的安全隱患:非稽核訪問、引數破解、序列化、網路監控。

6.      客戶端到資料之間的安全隱患:非稽核訪問、SQL注入、破解資料模型和連結詳細資訊、網路監控、破解配置資料、破解面幹應用程式資料。


* ASP.NET安全架構注意事項
1.      在瀏覽器認證使用者;

2.      在瀏覽器和防火牆通路中1)保護敏感資料2)阻止引數破解3)阻止會話攻擊和Cookie回覆攻擊

3.      Web應用程式側1)提供安全配置2)處理異常3)稽核使用者4)驗證輸入

4.      應用程式伺服器1)認證和稽核上傳身份2)稽核並記錄活動和事務

5.      在應用程式伺服器和資料庫間保護敏感資料

6.      資料庫中加密或者雜湊加密敏感資料

 

二、ASP.NET Web應用程式安全性隱患防治辦法

1.      防止跨站點指令碼攻擊(Cross-Site Scripting Attack

攻擊方法:在頁面通過輸入指令碼或HTML內容獲取敏感資料。
威脅指數:6

攻擊結果:應用程式拒絕服務或重啟,獲得錯誤堆疊資訊(※)推測程式碼進行下一步攻擊。

※注:在ASP.NET配置檔案中如果未關閉CustomErrors則可能導致在出現系統異常時顯示錯誤行程式碼或資料庫連線字串,洩漏配置資料,造成危險隱患。

預防措施:ASP.NET控制元件驗證或伺服器端輸入驗證。

採用客戶端驗證和伺服器端驗證結合的方式對使用者輸入進行驗證,通過比較控制元件輸入和其HTML譯碼值的一致性確認輸入字串中是否含有HTML特殊符號,以此作為依據轉化HTML特殊符號,防止指令碼在回發表示時觸發。

 

2.      防止SQL注入攻擊(SQL Injection Attack

攻擊方法:通過畫面輸入或URL引數修改,利用其作為SQL查詢條件的特殊性,將輸入SQL文注入並返回結果的攻擊。

威脅指數:9

攻擊結果:可查詢敏感資料並可修改系統資料。

預防措施:在資料更新和查詢時使用資料庫引數物件或使用自定義方法轉換輸入引數,以使注入SQL文失效。

3.      驗證使用者輸入

通過客戶端驗證為主、伺服器端驗證為輔(當禁用客戶端Javascript時伺服器端驗證就尤為重要)

客戶端驗證主要負責驗證使用者輸入的型別、長度、關聯關係的驗證(此功能由系統擴充套件控制元件提供);

伺服器端驗證分為兩部分:

1)      輸入驗證

輸入驗證需要對使用者輸入文字的HTML特殊字元進行驗證,含有特殊字元的要丟擲系統錯誤;資料的長度控制儘量在畫面通過控制元件的允許輸入長度進行控制;

2)      資料驗證

驗證資料型別、長度等;此驗證行為在物件上進行。

4.      使用Hash演算法儲存密碼

使用ASP.NET Membership管理使用者,使用者密碼使用Hash演算法和Salt加密,安全性高;

對於其它需要儲存的密碼,系統基礎結構將提供Hash加密演算法進行不可反向加密,作為驗證憑據,或者先取先用不儲存在資料儲存中。

5.      資料安全性

1)      加密敏感資料:基礎結構應提供Hash加密演算法支援資料加密。

2)      XML資料安全性:防止XML資料攻擊。

攻擊方法:XPath注入和XXE(擴充套件XML實體)注入攻擊。

威脅指數:8

攻擊結果:獲得XML檔案資訊。

預防措施:不在XML中儲存敏感資訊,所有配置檔案中的敏感資訊需要加密儲存,對於要寫入XML的資料應先通過驗證。

3)      ViewState資料安全性:防止從ViewState獲取敏感資料。

攻擊方法:通過解碼ViewState獲得敏感資訊。

威脅指數:6

攻擊結果:獲得ViewState中的敏感資訊。

預防措施:禁用ViewState或避免,使用簡單控制元件採用加密方式儲存敏感資訊。

關聯問題:使用JSON字串時注意敏感資料的處理。

6.      儲存安全資訊到登錄檔和配置檔案

控制遠端使用者對配置檔案的訪問許可權,保護配置檔案中的敏感資料。

7.      再發布前修正配置檔案

為防止錯誤堆疊資訊推測以及通過其它資訊查獲手段進行攻擊,ASP.NET Web應用程式在釋出前應對配置檔案進行修正。

錯誤堆疊資訊推測攻擊

攻擊方法:造成系統異常,通過錯誤頁上的堆疊資訊推測程式碼進行下一步攻擊。

威脅指數:6

攻擊結果:推測系統版本和程式碼邏輯。

防措施:捕異常使用理不表示錯誤資訊,將自定義錯誤節即可防止錯誤資訊表示給遠;同時應閉除錯開關防止通過除錯資訊洩漏源代注入。


同時應該關閉
Trace優化效能並防止方法攻擊者利用Trace推測程式碼執行過程和詳細內容:

對於Web服務要防止遠端使用者利用WSDL描述進行推測攻擊。

攻擊方法:訪問Web服務WSDL檔案,獲得Web服務相關資訊。

威脅指數:4

攻擊結果:獲得Web服務方法描述,推測Web服務引數,進行下一步攻擊。

預防措施:在配置檔案中指定不表示Web方法描述內容,配置檔案改修如下:

              

 

8.      使用Session但不使用CookielessSession

原因:CookielessSession將在URL中曝露SessionID,使別人易於利用進行攻擊。

9.      預防方向工程

攻擊方法:獲得程式集使用工具進行反向工程。

威脅指數:9

攻擊結果:瞭解程式邏輯,盜取開發成果。

預防措施:在釋出時進行強加密和混淆工程。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-610902/,如需轉載,請註明出處,否則將追究法律責任。

相關文章