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