安全軟件生命周期之規(guī)范性安全軟件生命周期流程:接觸點
接觸點
國際軟件安全顧問GaryMcGraw通過編纂構建安全產品的豐富行業(yè)經(jīng)驗,提供了七個軟件安全接觸點。McGraw使用術語接觸點來指代可以納入安全軟件生命周期的軟件安全最佳實踐。McGraw區(qū)分了作為實現(xiàn)錯誤的漏洞和那些是設計缺陷的漏洞。實現(xiàn)錯誤是單段代碼中的局部錯誤,例如緩沖區(qū)溢出和輸入驗證錯誤,使發(fā)現(xiàn)和理解更容易。設計缺陷是代碼設計級別的系統(tǒng)性問題,例如以不安全的方式失敗的錯誤處理和恢復系統(tǒng)或錯誤地包含傳遞信任問題的對象共享系統(tǒng)。Kuhn等人[32]分析了來自美國國家漏洞數(shù)據(jù)庫(NVD)的2008-2016年漏洞數(shù)據(jù),發(fā)現(xiàn)67%的漏洞是實施錯誤。七個接觸點有助于預防和檢測錯誤和缺陷。
下面描述了這七個接觸點,并根據(jù)McGraw多年來對每種實踐的效用的經(jīng)驗按有效性順序提供,因此具有規(guī)范性:
1. 代碼審查(工具)。
代碼審查用于檢測實現(xiàn)錯誤。可以使用手動代碼審查,但要求審核員在嚴格檢查代碼之前了解安全漏洞。“使用工具進行代碼審查”(又名使用靜態(tài)分析工具或SAST)已被證明是有效的,可供工程師使用沒有專家安全知識。有關靜態(tài)分析的進一步討論,請參見第2.1.1節(jié)第9點。
2. 架構風險分析。
架構風險分析,也稱為威脅建模(請參閱第4節(jié)),用于預防和檢測設計缺陷。設計人員和架構師提供目標系統(tǒng)的高級視圖和假設文檔,并識別可能的攻擊。通過架構風險分析,安全分析師可以發(fā)現(xiàn)架構和設計缺陷并進行排序,以便開始緩解。例如,風險分析可以識別可能的攻擊類型,例如攔截和讀取數(shù)據(jù)的能力。這種識別將促使設計人員查看其所有代碼的流量,以查看攔截是否令人擔憂,以及是否有足夠的保護(即加密)。分析提示的審查是發(fā)現(xiàn)設計缺陷的原因,例如敏感數(shù)據(jù)被明文傳輸。
沒有系統(tǒng)是完全安全的,因此必須使用風險分析來確定安全工作的優(yōu)先級,并將系統(tǒng)級問題與對構建軟件的業(yè)務至關重要的概率和影響措施聯(lián)系起來。風險敞口的計算方法是將不良事件發(fā)生的概率乘以與該事件相關的成本。
McGraw提出了架構風險分析的三個基本步驟:
?抗攻擊性分析。攻擊抵抗分析使用清單/系統(tǒng)方法考慮每個系統(tǒng)組件與已知威脅的關系,如第2.1.1節(jié)第4點中討論Microsoft威脅建模中所做的那樣。在分析過程中使用有關已知攻擊和攻擊模式的信息,識別體系結構中的風險并了解已知攻擊的可行性。如第2.1.1節(jié)第4點所述,合并基于STRIDE的攻擊的威脅建模是執(zhí)行攻擊抵抗分析的示例過程。
? 歧義分析。模糊性分析用于捕獲發(fā)現(xiàn)新風險所需的創(chuàng)造性活動。模糊性分析需要兩個或更多經(jīng)驗豐富的分析師在同一系統(tǒng)上并行執(zhí)行單獨的分析活動。通過統(tǒng)一對多重分析的理解,分析師之間的分歧可以發(fā)現(xiàn)歧義、不一致和新的缺陷。
?弱點分析。弱點分析側重于了解與其他第三方組件中的安全問題相關的風險(請參閱第2.1.1節(jié)第7點)。這個想法是了解對第三方軟件的假設,以及當這些假設失敗時會發(fā)生什么。
風險識別、排名和緩解是貫穿整個軟件生命周期的持續(xù)過程,從需求階段開始。
3. 滲透測試。
滲透測試可以由架構風險分析的結果指導(請參閱第2.1.2節(jié)第2點)。有關滲透測試的進一步討論,請參見第2.1.1節(jié),第11點。
4. 基于風險的安全測試。
安全測試必須包含兩種策略:(1)使用標準功能測試技術測試安全功能;(2)基于攻擊模式和架構風險分析結果的基于風險的測試(參見第2.1.2節(jié)第2點)和濫用案例(參見第2.1.2節(jié)第5點)。對于Web應用程序,安全功能的測試可以由OWASP應用程序安全驗證標準(ASVS)項目12開放標準指導,用于測試應用程序技術安全控制。ASVS還為開發(fā)人員提供了安全開發(fā)的要求列表。
利用軟件架構和構造、常見攻擊和攻擊者的心態(tài)知識指導測試非常重要。使用架構風險分析的結果,測試人員可以適當?shù)仃P注攻擊可能成功的代碼區(qū)域。
基于風險的測試和滲透測試之間的區(qū)別在于方法的級別和測試的時間。滲透測試是在軟件完成并安裝在操作環(huán)境中時完成的。滲透測試是由外而內的黑盒測試。基于風險的安全測試可以在軟件完成甚至預集成之前開始,包括使用白盒單元測試和存根。兩者的相似之處在于,它們都應該以風險分析、濫用案例和功能安全要求為指導。
5. 濫用案例
這個接觸點編纂了“像攻擊者一樣思考”。用例描述了仁慈參與者對所需系統(tǒng)的行為。濫用案例[20]描述了系統(tǒng)在受到惡意行為者攻擊時的行為。為了開發(fā)濫用案例,分析師列舉了有動機攻擊系統(tǒng)的惡意行為者的類型。
對于每個不良行為者,分析師為不良行為者希望從系統(tǒng)中獲得的功能創(chuàng)建一個或多個濫用案例。然后,分析師考慮用例和濫用案例之間的交互,以加強系統(tǒng)。考慮一個汽車的例子。參與者是汽車的駕駛員,這個參與者有一個用例“駕駛汽車”。惡意行為者是偷車賊,其濫用案件是“偷車”。此濫用案例威脅到用例。為了防止盜竊,可以添加新的用例“鎖定汽車”,以減輕濫用情況并加強系統(tǒng)。
人為錯誤是造成大量違規(guī)行為的原因。系統(tǒng)分析師還應考慮善意用戶的行為,例如成為網(wǎng)絡釣魚攻擊的受害者,從而導致安全漏洞。這些行為可以被視為濫用案例[21],應該像濫用案例一樣進行分析,考慮濫用案例威脅的用例以及對系統(tǒng)進行強化以減輕濫用案例。
濫用和誤用案例分析確定的攻擊和緩解措施可用作安全要求的輸入(第2.1.1節(jié)第2點)。滲透測試(第2.1.1節(jié)第11點);以及基于風險的安全測試(第2.1.2節(jié)第4點)。
6. 安全要求。
有關安全要求的進一步討論,請參見第2.1.1節(jié)第2點。
7. 安全操作。
網(wǎng)絡安全可以與軟件安全集成,以增強安全態(tài)勢。無論其他接觸點的應用如何,攻擊都不可避免地會發(fā)生。了解攻擊者行為和成功攻擊的軟件是一種基本的防御技術。通過了解攻擊獲得的知識可以反饋到其他六個接觸點。
七個接觸點旨在隨著軟件產品的發(fā)展而多次循環(huán)。接觸點也是與過程無關的,這意味著實踐可以包含在任何軟件開發(fā)過程中。