如何通過威脅建模構建安全的Web應用程序
譯文【51CTO.com快譯】一、概述
在當前的網絡計算環境中,各種形式的安全已經成為所有Web應用程序的普遍需求。保密性、完整性和保密性的需求日益增加,可以說安全已經成為了一種至關重要的互聯網技術。為了設計出一個安全的Web應用程序,對潛在威脅進行分析和建模是非常必要的。
威脅建模是一套過程:首先要通過識別各種目標對象的漏洞來優化網絡、應用以及互聯網安全,然后確定應對的措施,從而防范或緩解威脅對系統的影響。
威脅是一種具有惡意(如DoS攻擊)或偶然(信息泄漏)性質的,潛在或實際存在的不良事件。因此威脅建模就是一個識別和評估應用程序威脅與漏洞的活動計劃。
同時,威脅建模也是一個持續的過程,各個公司需要專門制定和實施一個框架來緩解威脅。
本文目的是在Web應用程序中識別相關的威脅和漏洞,通過建立一套安全框架,來設計出一個安全的Web應用程序。
二、威脅建模的各種實用工具
Web應用程序里會出現各種各樣的漏洞,如果這些漏洞被利用,就會給組織的各項功能和資產構成威脅,因此企業應該根據漏洞對自身的影響程度來進行防范。
威脅建模可用于:
- 識別那些可以被用來利用和攻擊組織資產的潛在威脅。
- 設計應用程序,以滿足安全目標。
- 在對潛在的威脅進行排序時,有助于關鍵性的工程決策。
- 識別重要且特定環境中,如公司網絡中的各種漏洞。
- 對在開發和運營過程中所產生的安全問題進行優先級排序和風險的緩解。
三、Web應用程序的威脅建模過程
與Web應用程序的威脅建模有關的主要步驟如下:
- 安全目標的識別
- 資產的識別
- 應用程序的排查
- 系統建模
- 威脅的識別
- 漏洞的識別
- 威脅代理的選擇
- 威脅歷史的檢查
- 資產和漏洞的優先級排序
- 威脅影響的分析
1. 安全目標的識別
安全的目標與約束關系到客戶數據和應用程序的機密性、完整性和可用性。
具體包括:
- 保護客戶賬戶的詳細信息和客戶的信用記錄,防止攻擊者獲得敏感的客戶數據,包括密碼、個人信息、金融歷史、客戶信用卡號碼、銀行相關細節、或旅游行程。
- 確保應用程序的隨時可用性,如:滿足應用程序可用性的服務水平協議(SLA)或標準的合規要求。
- 防止未經授權的用戶任意修改信息,尤其是財務信息。
- 保證公司的客戶數據的可用性與機密性,如:保護公司在線業務的可靠性,或對客戶數據保密性與完整性的信譽承諾。
2. 資產的識別
根據場景的不同,資產對應的資源價值也不盡相同。對于業務來說,資產可能是信息的可用性,或是其信息本身,比如說是客戶的數據。識別并創建一張包含有公司內每項潛在資產的列表是非常必要的。該列表應能體現資產項是否符合“安全邊界”的標準。以下列出了各種敏感資產的一些共性:
- 電腦與筆記本
- 路由器和網絡設備
- 打印機和傳真機
- 存有公司敏感信息的數字型或模擬型相機
- 銷售、客戶信息、員工信息類型數據
- 公司的智能手機/掌上電腦
- VoIP電話、IP交換機(數字型電話交換機)、相關的服務器
- VoIP或常規電話的錄音和記錄
- 電子郵件
- 員工的日程表和活動日志
- 網頁,特別是那些要求客戶填寫詳細信息,并支持網絡數據庫查詢的腳本
- Web服務器
- 安全攝像頭
- 員工門禁卡
- 服務訪問點(如:任何掃描儀和受控房間的入口)
對攻擊者而言,這些資產可以被用來實現對應用程序的濫用,進而對數據或各種特權操作的非法獲取。
3. 應用程序的排查
該步驟涉及到Web應用程序的功能、通信和安全機制等,因此這里應該盡可能多地獲取目標應用的信息。通過收集應用程序的主要功能、特點、作用、關鍵用途、技術和安全機制等,來輔助識別出相關的威脅。
下面就是在創建應用程序排查時,所需要考慮的事項:
(1) 詳細收集部署的拓撲結構、關鍵服務的邏輯層次、通信端口和各種協議。
(2) 識別應用程序中的用戶角色,比如:誰可以做什么、有哪些特權用戶組、內部用戶、管理員、來賓用戶和互聯網普通用戶,以同樣的方法去標識Web服務和數據庫的各個角色。
(3) 識別應用程序的關鍵使用場景也是非常重要的。主要是找出應用程序的重要功能和它是如何實現的。其中一些典型的應用場景包括:用戶瀏覽和搜索各種產品,將它們放入購物車;已注冊用戶登錄,并通過購物車下訂單。通過識別應用程序的功能和使用,將有助于您更好地區分它們是如何被正常使用,還是被誤用了。
(4) 識別并羅列出應用程序所用到的技術和軟件。例如:操作系統的類型、Web服務器與數據庫的類型與版本。比如:.Net、C#或其他。這不僅有助于把更多的注意力放在特定技術的威脅上,也能幫助我們確定正確的、且最為合適的緩解技術。
(5)識別應用程序正在使用哪些安全機制。此方面所涉及到的要點包括:
- 輸入數據的有效性
- 認證與授權機制
- 會話管理
- 使用到的加密技術
- 審計與日志
4. 系統建模
在威脅建模過程的開始階段,安全設計者們需要對系統有足夠的了解。應用系統的模型是在用例和架構模型的基礎上創建的。因此,您對應用程序的了解越多,就越容易揭露威脅和發現漏洞。可見,在該步驟中,應用程序會被徹底解析,以創建出一個安全的配置原型。
在對應用程序的解析過程中,會涉及對每個組件(網站,Web服務或數據庫),及其相互連接的解讀,定義使用場景,以及識別各種前提條件與內外部依賴關系(如AD、郵件系統等)。
我們可以用不同的技術來對計算系統進行建模。下面就是在創建應用程序和系統模型時需要考慮的事項:
- 識別系統的信任邊界,如:邊界防火墻,或Web應用程序與第三方服務的邊界點。
- 繪制應用程序的數據流程圖(Data Flow Diagram,DFD),它能將應用程序分解為不同的功能部件,并標注出進出系統組件各個部分的數據流向,其中包括有:用戶登錄的方式,Web應用程序、數據庫服務器、第三方服務或Web服務之間的數據流。
- 識別應用程序的接入點,當然它們可能也是攻擊的入口。比如說:通過端口80或端口443的Web請求,內、外部用戶的登錄頁面,管理界面等。
- 識別退出點,因為它們也可能就是攻擊的向量。比如說:一個搜索頁面可以記錄用戶的搜索字符串和相應的結果、以及包含能夠顯示產品細節的索引頁。
我們所要建立的系統模型是一個能反映系統本質特征,并有助于識別各種由于應用程序用到了特殊邏輯或技術而引發的威脅。可以說我們的建模越完整、越詳細,就越有助于其他階段的成功實現。
5. 威脅的識別
在這一階段,那些可能會影響到系統、并攻擊資產的威脅會被識別出來。可以說威脅的識別正是系統安全的關鍵。威脅的識別一般包括:分析每一個入/出口,逐層逐步地檢查應用程序及其各種特性。
下面列出了可能會影響到應用程序的各種威脅:
- 基于字典的蠻力攻擊。
- 發生在瀏覽器和Web服務器之間的網絡竊聽,進而捕獲客戶端的信任憑證。
- 攻擊者可能捕獲的具有身份信息的cookies。
- SQL注入,即:攻擊者能夠利用輸入驗證上的漏洞,在數據庫中執行命令,從而訪問和/或修改各種數據。
- 通過注入腳本代碼生成的跨站點腳本。
- 信息的泄漏。
- 攻擊者控制Web服務器,獲取對數據庫的非授權訪問,通過運行針對數據庫的命令,從而未經授權地訪問Web服務器資源和靜態文件。
- 發現數據庫中用于加密敏感數據的密鑰(包含有客戶的信用卡號碼)。
6. 漏洞的識別
為了找出與上述威脅相對應的漏洞,我們應當對應用的各個層面進行審查。通過既定的漏洞類別,對錯誤經常出現的領域予以關注。
下面是常見的應用程序漏洞:
(1) 與漏洞相關的身份驗證,如:缺乏密碼的復雜性、或是缺少密碼重試的邏輯管理。
(2) 無效數據的輸入
- 所有輸入是否都有效?
- 如何進行驗證?
- 是否對類型、長度、格式和取值范圍進行驗證?
- 良好的數據參照標準是什么?
- 哪個模塊負責驗證?
(3) 異常處理
- 哪些信息需要被用作故障處理?
- 哪些信息應該呈現給最終用戶?
- 攻擊者能獲取到的有用異常信息細節。
- 向最終用戶/客戶提供的詳細錯誤消息。
(4) 被用在錯誤算法中的弱加密密鑰
(5) 通過Web應用程序暴露的管理功能模塊
(6) 遠程代碼執行的漏洞
(7) SQL注入、跨站腳本
(8) 用戶名枚舉
(9) 參數調整
(10) 特殊授權操作和用戶權限升級
(11) 會話和cookie
7. 威脅代理的選擇
威脅代理是指有能力產生各種威脅的人或事件。根據上述提到的場景,主要的威脅代理/事件有:
- 內部人員和一般用戶
- 黑客和黑客團體
- 各種蠕蟲、木馬和病毒
- 自然和環境的事件(洪水、火災等)
8. 威脅歷史的檢查
現在我們已經編制了一份當前威脅的清單,但如果能把將來可能出現的威脅也考慮進去就更好了。因此如果您要預測將來的威脅,第一步就是要檢查公司的各種記錄,并與曾經見證過公司有關安全威脅的員工進行交流。
大多數威脅都會自我重演,所以通過對公司過去經歷和您自己清單上的相關威脅的編錄,您就會得到自己公司有關漏洞的“全景圖”。
9. 資產和漏洞的優先級排序
我們現在已經制定出了一張公司可能面臨的資產和安全威脅的完整列表。我們不能將每個資產或威脅的優先級一概而論。在該步驟中,我們通過對資產和漏洞排定優先級,來獲知公司存在的最大安全風險。
下列步驟有助于排定資產和漏洞的優先級:
計算并制定風險和概率的矩陣
- 計算風險。
- 計算概率。
- 計算影響。
各種對策的實施一般取決于資產和漏洞的危險程度。我們可以用各種技術來進行排序。其中微軟的DREAD(危害程度、可重復性、可利用性、受影響的用戶、可發現性)模型就是一種流行的威脅和漏洞排序方法。
10. 威脅影響的分析
術語影響指的是威脅對資產所構成的結果。威脅的影響可分為如下幾類:
- 輕微:少量業務資產的損失,尚未改變業務秩序。
- 中等:業務中斷,適度影響到了業務的運作。
- 主要:立即部署對策,不然會導致“歇業”。
- 災難性:威脅一發生就會導致“歇業”。
威脅的影響可能會導致市場份額、商業資本、用戶、股東和業務合作伙伴、以及公司聲譽的損失。
威脅對資產所產生的直接結果包括:信息的泄漏、修改、破壞、損耗、干擾和未經授權的訪問。
11. 安全威脅響應計劃的制定
該步驟主要是基于資產和漏洞的優先級列表,來制定針對特定威脅的響應計劃。雖然這些安全響應并非是應對安全威脅的唯一選擇,但它們能涵括公司所面臨絕大部分的威脅。
除了一些基本的威脅應對計劃之外,下面的安全實施策略也是需要的:
- 實施網絡訪問控制列表(ACLs)
- 實施IDS/IPS
- 實施互聯網下載管理(譯者注:Internet Download Manager,IDM)
- 各種備份
- 內容與郵件過濾
- 實施物理安全
三、結論
應用程序的建模對于識別應用的威脅和漏洞是非常重要的,它會直接影響到公司的業務運營。同時,它有助于更好地理解公司資產、應用程序和整體業務所面臨的各種風險。
我們討論到了各種應用的潛在威脅和威脅建模過程中的各種需求。可見,威脅建模為Web應用程序的加固提供了一個良好的安全框架。
使用該框架將有助于識別系統中的各種威脅和漏洞。在創建和實施Web應用程序安全框架時,下面兩個關鍵點是值得重視的:
- 開發人員最常犯的錯誤
- 最有效的改進
有研究表明:對于應用程序當前和將來威脅與漏洞的建模,可以很大程度上提高公司的安全水平。安全策略在具體實踐中能夠有助于保護網絡不受威脅和漏洞的困擾,并保持系統的機密性、完整性和可用性。
最后,要提醒大家的是:“黑客無假期”,在如今的技術環境中,我們要時刻提防各類攻擊者和那些“腳本小子”。
原文標題:Web Application Threat Modeling,作者:Akash Shrivastava
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】