“具體含義是這樣的,Carl(我們的普通客戶角色)被繪制為一個外部實體(矩形)。他向我們的 Web 服務(wù)器發(fā)出命令(圓圈可以是任何運行代碼,箭頭指示通信方向)。Web 服務(wù)器將會咨詢數(shù)據(jù)庫(數(shù)據(jù)庫與我們存儲數(shù)據(jù)的任何位置一樣,用兩條平行線表示)。此系統(tǒng)稱為數(shù)據(jù)流關(guān)系圖 (DFD)。
Wikipedia 曾就 DFD 撰寫了一篇很翔實的文章。其中唯一沒有涉及的內(nèi)容是由不同人員控制的不同位置之間用虛線表示的信任邊界。例如,您知道 IT 專業(yè)人員要求我們使用他們的 Active Directory 系統(tǒng)來注冊登錄信息,因此 Active Directory 顯示在我們的控制范圍之外?!?/div>
該工具啟動后,將顯示此圖表屏幕。這是 Paul 使用 Visio 工具和提供的模板來繪制其 DFD 的位置(請參見圖 4)。盡管這是 Paul 第一次使用,但他也感到得心應手,因為作為 SDL 的一部分,左側(cè)的驗證程序根據(jù)他使用威脅建模的體驗為其提供了反饋。當他發(fā)現(xiàn)自己的繪圖有些復雜時,他通過右鍵單擊右上角的上下文文件夾添加了一些附加的詳細信息,以便能夠創(chuàng)建復雜的分層圖。
分析威脅
當 Paul 打開分析屏幕(請參見圖 5)時,他有點猶豫了。屏幕中出現(xiàn)了一個很長的威脅列表,這些威脅都是從哪里來的呢?這些都是此工具使用被稱為“依據(jù)元素的 STRIDE”的 SDL 方法構(gòu)建的。其理念是軟件通常會遇到可預測的一組威脅(如圖 5 中所示的威脅)。一些安全專家希望先追擊黑客,因為這種追擊本身會很有趣。我認為要保護您的家庭財產(chǎn),首先應確保各扇門窗都安裝了某種類型的鎖,然后再考慮報警系統(tǒng)。同理,首先應單擊分析屏幕中的任意行,從“依據(jù)元素的 STRIDE”開始著手。
Paul 首先在元素列表中選擇了 database。他在屏幕頂部發(fā)現(xiàn) "database" 是一個數(shù)據(jù)存儲庫,因此可能會遭到篡改、信息泄漏和拒絕服務(wù)攻擊等威脅。他繼續(xù)往下閱讀,隨后的問題可幫助他思考他人可能會采用什么樣的手段來篡改數(shù)據(jù),他意識到?jīng)]有人指定哪些人能夠連接到該數(shù)據(jù)庫。白板圖表和一些簡單的規(guī)則揭示了第一個威脅!威脅建模得一分。
經(jīng)過幾分鐘的討論之后,他們意識到需要考慮訪問控制和角色。Paul 在兩個威脅中填充了幾點注意事項。第一個注意事項是“無訪問控制計劃”。他還將工作項歸檔到其 Team Foundation Server (TFS) 數(shù)據(jù)庫中。第二個注意事項是“訪問控制計劃需要角色列表”。Paul 然后開始研究 TFS,但又產(chǎn)生了依賴于第一個錯誤的另一個錯誤。
Paul 在研究信息泄漏時,意識到他們的訪問控制計劃需要一些只讀帳戶來進行審核和報表生成。他拿不準這算不算是一個新威脅,后來他認為不是,因為緩解措施完全相同,隨后他在 TFS 中對該錯誤進行了編輯。接下來他決定證明此威脅在其他位置已有所緩解,并寫下 "covered in TFS bug #235"。他并不十分確定這是否合適,但這的確是證書功能的目的(請參見圖 6)。
他還對信息泄漏做了一些考慮,意識到備份磁帶需要加密,但那屬于實施作業(yè)(我稍后將介紹他如何對此進行跟蹤,在那之前先介紹一個相關(guān)功能:位于頂部的“auto-generate threats for this element”(自動為此元素生成威脅)復選框)。
自動生成功能適用于一些大型團隊,他們擁有許多威脅模型,同時還有辦法確保測試人員和項目經(jīng)理都關(guān)注威脅模型中的內(nèi)容。因此,在這種情況下,Paul 可能會說是 Phil 負責他想要針對上下文顯示的多個元素以及它們與此功能交互的方式。默認情況下,自動生成框會被選中,但 Paul 可以取消選中它并聲明自己認為這是 Phil 的功能。
環(huán)境屏幕
由于擔心加密備份磁帶操作,Paul 打開了環(huán)境屏幕,看到了有關(guān)外部安全注意事項的部分(請參見圖 7)。他在那里強調(diào)指出操作必須處理磁帶備份。他必須確保操作具有該工具的副本。
處在此屏幕中時,他想知道文檔標頭部分的內(nèi)容,后來發(fā)現(xiàn)那里有很多指導文本,說明這里正是用來確定誰擁有該威脅模型的地方,另外還可以了解到威脅模型的用途等。他填充了相應的內(nèi)容,并希望可以包括 Contoso 項目跟蹤號碼。
通過系統(tǒng)地遍歷樹中的各個元素,Paul 注意到對 SQL Server 和 Fabrikam Foxy Web Widgets 2.3 小組件庫存在依賴性。Paul 添加了一個備注,讓 Tim 對此進行調(diào)查,以確保它們都是最新的,并且會從 Fabrikam 獲得安全通知。
跟蹤報表
有五個威脅建模報表可供使用:
分析報表 此報表為安全顧問或咨詢?nèi)藛T而設(shè)計,供其查看威脅模型,但實際上任何人都可以使用它來查看哪些圖表驗證問題已建立、哪些空白威脅尚未填充、哪些威脅沒有任何緩解措施、哪些威脅已經(jīng)證明或者已被標記為不生成威脅。
威脅模型報表 此報表包含輸入到威脅模型中的信息,它們都顯示在單個頁面視圖中。
僅圖表 此報表設(shè)計用于簡化圖表的打印。有些人喜歡將工作所需的內(nèi)容打印到紙上,這可以使其在只需要圖表時不必打印整個報表。
錯誤報表 此報表顯示已從威脅模型歸檔的錯誤及其狀態(tài)。
操作菜單
“Action”(操作)菜單下包含幾個很有用的功能:縮略圖視圖、錯誤跟蹤設(shè)置以及團隊主管模式??s略圖視圖使您即使在其他屏幕中,也可以輕松訪問圖表。如果您的圖表非常復雜,而您又想在分析模型時在屏幕上顯示它,則此功能會非常有用。它會自動調(diào)整縮略圖的大小使其占用窗口的大部分區(qū)域,從而使您在重新調(diào)整其大小時整個圖表都在可視范圍內(nèi)。
如果您只想記錄錯誤而不輸入任何錯誤信息,錯誤跟蹤對話框?qū)棾鰜硖崾灸?,但您也可以通過操作菜單隨時調(diào)用此對話框。有一個非常簡單的 XML 文件,利用它可以定義要填充的字段,或者也可以只編輯這些字段(假設(shè)“use template”(使用模板)框未選中)。記錄下來的錯誤會被自動加上 "TM:[threat] affects [element]" 標題,而內(nèi)容將根據(jù)威脅和緩解措施信息進行預填充。這些字段可以被刪除,方法是選中它們并點擊 Delete 鍵。
團隊主管模式會在描述環(huán)境屏幕中顯示一部分新內(nèi)容,被稱為“模板設(shè)置”。它允許團隊主管更改指導問題并設(shè)置一個默認位置來保存威脅模型。團隊主管還可以編輯文檔標頭信息中的字段,添加和刪除一些內(nèi)容以適合具體的環(huán)境。
由于希望早些完成這些操作,故 Paul 添加了 Contoso 項目跟蹤號碼作為新字段。在團隊主管模式中保存的任何威脅模型都可用作模板。(實際上,任何威脅模型都可以用作模板來完成更多其他工作。)
更改指導問題包括編輯 XML 文件,此工作將從 SDL 威脅建模工具的 \Data 文件夾開始。其格式非常容易掌握。
威脅建模會議
當 Paul 給大家發(fā)送其威脅模型時,測試人員 Tim 非常不以為然。所有事情都突然涌向他,他問 Paul:“你們作為項目經(jīng)理始終都認為一切都能正常運行,是吧?”
當您了解到測試人員及其懷疑態(tài)度可能會對威脅模型起到巨大的補充作用時,您可能感到非常驚訝。出于這個原因,許多團隊都要求其測試人員來領(lǐng)導威脅建模過程。在本方案中,在 Tim 接手了威脅模型之后,他召開了兩次威脅建模會議:一次的主題是同步過程并介紹圖表,另一次的主題是審核并簽字認可威脅。
在第一次會議中,Tim 花了 10 分鐘的時間向所有人介紹了 SDL 威脅建模過程。然后,他提取出威脅模型圖表并開始詳細說明。不到五分鐘,就找出了一個非常重要的缺失組件。
幾分鐘后,Tim 和 Paul 開始深入討論 Web 服務(wù)器的實際構(gòu)建方式。這并不是使會議進行下去的理想方法,但所有人最終都認為及早發(fā)現(xiàn)差異會為以后的工作節(jié)省大量時間。
在第二次會議中,團隊遍歷了這些威脅,討論了一些解決方法,并針對威脅模型做簽字認可。他們將文檔簽入到源代碼控制中,然后繼續(xù)進行開發(fā)。
考慮資產(chǎn)
一些已經(jīng)建立了威脅模型的讀者可能會注意到我們根本沒有談及資產(chǎn)。我們發(fā)現(xiàn),許多軟件工程師對其軟件的了解要勝過對資產(chǎn)概念以及哪些資產(chǎn)可能會受到攻擊者青睞的了解。
如果您要對房子進行威脅建模,可能會首先考慮您的家人或那些承載著豐富情感的照片或價值不菲的藝術(shù)品。也可能會首先考慮可能的入侵者以及當前的安全系統(tǒng)?;蛘邥紫瓤紤]一些地形,例如泳池或前廊。這些都與考慮資產(chǎn)、攻擊者或軟件設(shè)計相似。這三種方法中的任何一種都能發(fā)揮作用。
我們這里介紹的威脅建模方法要比 Microsoft 過去實現(xiàn)的方法簡單得多。Microsoft SDL 團隊發(fā)現(xiàn)這種軟件設(shè)計方法對許多團隊而言確實非常有效。我們希望這其中也包括您的團隊。
Adam Shostack 是 Microsoft 安全性開發(fā)生命周期 (SDL) 團隊的項目經(jīng)理。他負責開發(fā) SDL 的威脅建模組件。