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