軟件安全十誡(一)
2012年9月發布的《在成熟模型中構建安全》(BSIMM)的第四版本被媒體大肆宣傳,BSIMM4包含對英特爾和富達案件的詳細的案例分析。筆者認為BSIMM的重要性在于—它是唯一可用于衡量軟件安全計劃的數據驅動模型。BSIMM從事實出發,詳細描述軟件安全狀態。
但BSIMM沒有提供直接的建議來指導你的公司如何處理軟件安全問題。誠然,絕大多數企業才剛剛開始面對軟件安全,他們將受益于多年(集體)直接經驗的可操作性指導。
根據在該行業多年的經驗以及四年解譯BSIMM數據的經驗,筆者提出了軟件安全十誡。
軟件安全十誡:規范性指導
1、你應該通過軟件安全組(SSG)來建立軟件安全計劃(SSI)。
2、你應該依賴采用BSIMM的風險管理和客觀測量來定義SSI的成功來確定SSI的成功,而不是“前十名列表”和漏洞數量。
3、你應該與企業高管溝通,直接將SSI的成功與業務價值聯系,并與公司的競爭對手作比較。
4、你應該創建和采用SSDL方法,如微軟SDL或者Cigital Touchpoints,這些方法整合了安全控制(包括架構風險分析、代碼審查和滲透測試)以及比他們自己運行的工具還更了解軟件安全的人員。
5、你不應該將軟件安全活動僅限于技術SDLC活動,尤其是滲透測試。
6、你應該為你的SSG發展培養軟件安全專家(因為周圍沒有足夠的合格專家)。
7、你應該關注來自業務、運營和事件響應人員的情報信息,并相應地調整SSI控制。
8、你應該仔細追蹤你的數據,并指導數據的位置,無論你的架構多么云計算化。
9、你不能單純地依靠安全特性與功能來構建安全的軟件,因為安全是整個系統的新興資產,它依賴于正確地建立和整合所有部分。
10、你應該修復已識別的軟件問題:漏洞和缺陷。#p#
關于軟件安全十誡的一些解釋和理由,按照先后順序。
通過軟件安全組(SSG)來建立軟件安全計劃(SSI)。BSIMM的51家企業都有一個活躍的軟件安全組。如果沒有軟件安全組,是不太可能建立可行的軟件安全計劃(迄今為止,在該領域沒有出現過例外),所以,在你開始軟件安全活動前,創建一個軟件安全組。軟件安全組有各種規模和形態,所有好的軟件安全組都應該包含具有深度編碼經驗的人和具有架構經驗的人。代碼審查是非常重要的最佳實踐,而執行代碼審查,你必須完全理解代碼(更不用說大量的安全漏洞)。然而,最佳代碼審查人員有時候是非常糟糕的軟件架構師,要求他們執行架構風險分析只會讓他們一片茫然。請確保你的軟件安全組中有架構人員以及代碼人員。滲透測試同樣如此,滲透測試需要以聰明的方式入侵事物(但通常不具有深度編碼技能)。最后,軟件安全組將需要對數百名開發人員進行培訓和指導,并直接與他們合作。溝通能力、教學能力以及良好的咨詢都是必備技能,至少對于部分軟件安全組工作人員而言。
依賴采用BSIMM的風險管理和客觀測量來定義SSI的成功,而不是“前十名名單”和漏洞數量。太多軟件安全專業人士將軟件安全視為“打地鼠”式的漏洞查找。企業應該意識到,發現漏洞并不沒有創建安全的軟件,也不能以此與管理層溝通。事實上,面對不斷擴大的安全問題清單,只會讓高層管理人員感到更加沮喪。如果你將所有時間花費在查找漏洞上,而不花時間來修復這些漏洞,這根本是徒勞無功。同樣地,如果你花時間來修復安全漏洞,但又反復發現同樣的漏洞,這仍然是徒勞。幸運的是,BSIMM為軟件安全計劃提供了一個極好的測量標桿。你可以將你的軟件安全計劃中的活動與同行進行對比,以確定你是遙遙領先、排在中間,還是最后(不要讓自己淪為倒數)。BSIMM測量提供了對軟件安全計劃的詳細快照,這讓高層管理人員很容易理解。一些領先的企業使用BSIMM測量來追蹤進展情況,并為設置軟件安全計劃戰略提供真實的數據。對于你的企業而言,需要何種程度的軟件安全性?這個問題問得好。所幸的是,一些你的同行可能知道。
與企業高管溝通時,直接將SSI的成功與業務價值相聯系,并與公司的競爭對手作比較。正如上訴所說,如果你正面對著不斷擴大的安全問題清單,而你沒有想辦法來解決這些問題,你可能會被視為是問題的一部分。企業高管希望看到你的軟件安全計劃所有方面的一些“關鍵績效指標”。培訓進展如何?你的開發人員學會了如何在最開始避免漏洞嗎?你的漏洞密度比是?也就是說,與六個月前相比,在相同單位內,漏洞數量有所下降嗎?每當你的開發團隊整合新技術堆棧時,是否會出現大量安全漏洞?當你發現和解決架構問題或者修改了的要求時,你展示了這將會為你省下多少苦惱和金錢嗎?與去年相比,通過最近的生命周期滲透測試,你是否發現問題變少了?(應該是這樣)。最后,因為軟件安全計劃具有多個活動部件,BSIMM測量是測量你自己的最可靠的方法。高層管理人員喜歡BSIMM,并能夠即時掌握其效用。
創建和采用SSDL方法,如微軟SDL或者Cigital Touchpoints,這些方法整合了安全控制(包括架構風險分析、代碼審查和滲透測試)以及比他們自己運行的工具更了解軟件安全的人員。因為很多公司都在做軟件安全,所以存在很多不同的SSDL。并不是所有公司都有正式化的SSDL,但他們應該有。你應該從我的書《軟件安全》以及微軟的SDL借鑒一些想法,再加上一些OWASP和SAFEcode的想法。閱讀BSIMM,看看其他公司正在做什么。主要是要認識到,我們知道現在應該如何做軟件安全,這個領域已經很成熟。首先,你需要用代碼審查(最好使用工具)來查找漏洞,用架構風險分析來找出問題,用滲透測試來找出容易忽略的漏洞。請確保當你使用這些工具時,不要盲目地使用它們(或者將這些工具扔給不知所措的開發人員)。請記住這一點:如果所有的開發人員在沒有幫助的情況下,能夠直接利用安全工具的結果并且修復安全漏洞,他們將不會在最開始制造漏洞。你至少需要一名比這些工具更聰明的安全專業人士。真的是這樣,如果你需要確定和建立SSDL,就去尋求幫助,有很多安全顧問靠這個吃飯。