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