Jaikumar Vijayan 楊勇
對于希望通過借鑒實踐案例來加強其網(wǎng)絡(luò)和服務(wù)安全的企業(yè)而言,相對不太成熟的威脅建??赡軙砗艽髥栴}。
開放Web應(yīng)用程序安全項目(OWASP,Open Web Application Security Project)把威脅建模描述為一種結(jié)構(gòu)化的方法,用于識別、量化和處理與應(yīng)用程序相關(guān)的安全風(fēng)險。這實際上涉及在構(gòu)建或者部署系統(tǒng)時應(yīng)從戰(zhàn)略角度考慮威脅問題,這樣,在應(yīng)用程序生命周期的早期階段就實施適當?shù)姆烙蜏p輕威脅的控制措施。
威脅建模當然不是什么新概念,但很少有企業(yè)能夠以有意義的方式來實現(xiàn)它。ThreatModeler軟件公司的創(chuàng)始人兼首席執(zhí)行官Archie Agarwal評論說,威脅模型的最佳實踐仍處于初始階段。他說:“最大的問題是缺乏對威脅建模究竟是什么的理解?!边M行威脅建模有多種方法,而企業(yè)常常遇到的問題是怎樣從過程的角度來弄清楚它,以及怎樣進行擴展。“所有一切仍然都不清晰?!?/p>
據(jù)Agarwal和一些其他人的說法,在進行威脅建模時可能會犯下7個錯誤:
1.過于以應(yīng)用程序為中心
Agarwal指出,企業(yè)構(gòu)建威脅模型時最常犯的錯誤之一就是只關(guān)注應(yīng)用程序本身。他說,對于威脅建模,應(yīng)該試著從整體上去理解,而不僅僅是一個個孤立的應(yīng)用程序。
應(yīng)考慮基礎(chǔ)設(shè)施、數(shù)據(jù)庫、共享組件、第三方交互和部署環(huán)境。威脅會因為不同的場景而有所不同,例如,應(yīng)用程序是在現(xiàn)場還是在云中運行,還是可以通過移動設(shè)備和其他計算端點進行訪問,等等。
如果你要遷移到云中,則需要云的威脅模型。你的應(yīng)用程序和數(shù)據(jù)會在專用基礎(chǔ)設(shè)施或者共享服務(wù)器和數(shù)據(jù)庫上運行嗎?Agarwal指出,關(guān)鍵要記住的是,在威脅建模時,不僅要關(guān)注應(yīng)用程序,還需要關(guān)注涉及到它的所有一切。開發(fā)人員在開發(fā)應(yīng)用程序時應(yīng)考慮一些修補程序,部署應(yīng)用程序時則要考慮應(yīng)處理哪些操作。
2.重視漏洞而忽略了威脅
IDC分析師Pete Lindstrom指出,企業(yè)可能犯的一個錯誤就是過于關(guān)注漏洞,而忽視了威脅。查看數(shù)據(jù)流和控制流并知道應(yīng)用程序中可能存在哪些漏洞,這當然非常重要。然而,更需要明確有哪些威脅,并確定識別可能存在風(fēng)險的輸入和輸出。應(yīng)該考慮攻擊者對企業(yè)的控制進行攻擊的所有可能,這會影響數(shù)據(jù)的機密性、完整性、可用性、工作效率和私有性。
Lindstrom說:“現(xiàn)在我們正在談?wù)揗eltdown和Spectre漏洞攻擊導(dǎo)致的機密泄露。但是完整性和可用性呢?攻擊者有辦法操縱這些內(nèi)存表或者插入數(shù)據(jù)嗎?”如果你僅僅控制了某個特定的漏洞,并不意味著攻擊者找不到利用漏洞的新方法。
3.過分關(guān)注于當天的威脅
SANS研究所新興安全趨勢總監(jiān)John Pescatore認為,在建立威脅模型時,不要急于應(yīng)對最新的威脅,或者過于關(guān)注某一威脅攻擊者和攻擊者的類型。勒索軟件和加密挖礦軟件可能會對企業(yè)的安全造成當前最大的威脅。但是沒必要專門針對這些威脅建模,而應(yīng)把重點放在控制上,以緩解對系統(tǒng)的機密性、完整性和可用性的任何威脅。
Pescatore說,同樣,如果針對企業(yè)的威脅是來自俄羅斯或者塞爾維亞的攻擊者,這真的并不重要。與其把重點放在查找黑客和犯罪團伙在哪里,是否是由國家支持的,不如知道怎樣防范他們所造成的威脅?!凹词贡桓嬷嵌砹_斯攻擊者在攻擊你,也不如知道該怎么辦更重要。”
重點應(yīng)該是構(gòu)建可重復(fù)的過程,這樣,每次出現(xiàn)變化時,企業(yè)都做好了準備。關(guān)鍵是要有一個標準的過程或者方法,不管威脅有多新,每次都以同樣的方式進行處理。Pescatore說,企業(yè)應(yīng)該知道想要保護什么,并從那里開始。
4.將威脅映射誤認為威脅建模
Agarwal指出,如果建立威脅模型的想法是處理一系列威脅,看看自己的應(yīng)用程序是否有這些威脅,那么你所做的就只是威脅映射。Agarwal說,“假如你有一個網(wǎng)上銀行應(yīng)用程序,你會問一系列的問題,比如‘你使用Flash嗎?,或者‘你使用java?,‘你進行身份驗證嗎?”。在這里,你所做的不是威脅建模,因為你沒有去真正了解威脅的環(huán)境。你不知道怎樣使用Flash,不知道在哪里使用它。
同樣,僅僅因為有數(shù)據(jù)庫并不等于就可以不用擔心SQL注入會成為攻擊途徑。只有在Web應(yīng)用程序接受來自外部源的輸入時,SQL注入才成為潛在的問題。Agarwal說,當采用檢查表的方法來評估威脅時,會很容易忽略這種細微的差別。
構(gòu)建適當?shù)耐{模型,關(guān)鍵在于體系結(jié)構(gòu)圖。它能顯示數(shù)據(jù)庫、Web服務(wù)器、操作系統(tǒng)層,以及將運行應(yīng)用程序的基礎(chǔ)設(shè)施,通過這些基礎(chǔ)設(shè)施來訪問應(yīng)用程序。它應(yīng)該顯示所有數(shù)據(jù)的位置和通信流,入口點在哪里,以及這些入口點有什么類型的輸入。Agarwal說,體系結(jié)構(gòu)圖為可顯示出全局和邊緣的情形。
5.沒有把用戶引入到威脅模型中
實際情況是,過于專注于對手怎樣攻擊代碼,而不太關(guān)注他們獲取應(yīng)用程序和數(shù)據(jù)所采取的其他方法。Pescatore說:“建立犯罪分子怎樣攻擊代碼這樣的威脅模型是個不錯的主意。但對網(wǎng)絡(luò)釣魚攻擊的防范是無法構(gòu)建到應(yīng)用程序中的。”
Pescatore指出,應(yīng)該把用戶引入到威脅模型中,并考慮用戶行為可能影響安全性的不同方式。你需要查看權(quán)限管理和基于角色的訪問等內(nèi)容。當用戶訪問云中的應(yīng)用程序,或者通過作為更大的電子商務(wù)解決方案組成部分的移動設(shè)備訪問應(yīng)用程序時,還需要考慮潛在的威脅。
6.采取一次性的方法進行威脅建模
威脅模型不可能是靜態(tài)的。Agarwal提醒說,對于一個關(guān)鍵的應(yīng)用,不可能一次性地為其做一個威脅模型,然后想當然地認為一切就都做好了。如果你的企業(yè)和大多數(shù)企業(yè)一樣,一般都會進行持續(xù)的研發(fā)活動。那么當應(yīng)用程序發(fā)生變化時,其威脅情形也會發(fā)生變化。這意味著當前的威脅模型一般只能適用三個月。Agarwal說:“威脅模型應(yīng)該是一個實時的文檔。你不能只是建立一個威脅模型,然后就把它忘了。要記住,企業(yè)的應(yīng)用程序一直在工作?!?/p>
7.沒有考慮系統(tǒng)對他人的影響
在構(gòu)建威脅模型時,最好考慮一下數(shù)字可信度。一旦你了解了所面臨的所有威脅,弄清楚了控制或者緩解的方法,應(yīng)該看看你的系統(tǒng)會怎樣影響與其接觸的其他人。
IDC的Lindstrom說,應(yīng)該注意到企業(yè)的輸出可能會影響他人的安全態(tài)勢?!袄?,你可能會在一個黑市網(wǎng)站上駐留,有人就可能會非法占用你的域,或者讓你的物聯(lián)網(wǎng)系統(tǒng)發(fā)出DDoS數(shù)據(jù)包。”你可能不接受廣告攔截器,但是如果你的網(wǎng)站上的惡意廣告影響到客戶系統(tǒng),那該怎么辦?當你把東西放在網(wǎng)上時,你的責任是保持它們干凈,這樣下游用戶使用你的系統(tǒng)時才不會受到影響。Lindstrom說,無論從數(shù)字誠信還是責任的角度來看,你在威脅建模時都應(yīng)該努力去這樣做。
作為威脅建模練習(xí)的一部分,應(yīng)確保自己熟悉并了解與開源軟件和第三方組件相關(guān)的風(fēng)險,不僅對你的部門,而且對你服務(wù)的下游用戶也是如此。例如,如果你要提供插件,就應(yīng)該考慮你的數(shù)據(jù)或者服務(wù)可能會影響其他人的輸出。Lindstrom指出:“如果其他人依賴于你提供的GPS數(shù)據(jù),那么就需要考慮這些數(shù)據(jù)的完整性和可靠性。”