軟件開發生命周期中的安全性
我們必須把應用程序的安全性整合到軟件開發的過程中。之后在測試中才關注安全性是不夠的,因為對于修改錯誤來說,那太遲了,而且非常昂貴。微軟的Steve Lipner在上周舉行的RSA大會2011上發表了關于應用程序安全性的演講,其中談到在軟件開發生命周期中的安全性。他向大家介紹了微軟創建的安全性開發生命周期過程,其中包括以下階段:
- 安全性培訓
- 需求分析
- 設計
- 實現
- 驗證
- 發布
- 反饋
另外,SDL框架還有一個敏捷的版本,它支持把安全性因素整合到敏捷開發過程中。敏捷過程中的安全性需求可以歸為三類:
- 每次Sprint(Every-Sprint):這些是高優先級和重要的安全性需求,我們可以使用像威脅建模之類的技術來識別它們。
- 一次(One-time):這類需求包括架構和策略上的需求,像決定編譯器的版本或者設置缺陷跟蹤數據庫等等。
- 大量(Bucket):這類需求包括長期運行或者可以暫緩的需求。比方說文件或者ActiveX fuzzing。
其他演講者也在會上談到了提高應用程序安全性的技術。Alberto Revelli(Cigital)討論了安全設計原則,像黑名單和白名單、內存級別和主機級別上的保護、安全的互操作性、最小權限原則以及區域分割(compartmentalization)等等。
Brian Chess和Jacob West(都來自于Fortify)談到了關于安全編碼技術。現在已經有多種安全缺陷的分類列表,像OWASP Top 10、七種致命錯誤(Seven Pernicious Kingdoms)、常見弱點列表(CWE)、Sans Top 25以及常見易受攻擊點評分系統(CVSS)等等,各個組織可以使用它們來管理應用程序中的安全弱點。Jacob對其中的一些弱點給出了示例,像跨站點腳本攻擊(XSS)、跨站點偽造請求(CSRF)、HTTP響應分割、會話固定攻擊以及SQL注入攻擊等等。Brian推薦了一些安全編碼原則,像默認做出良好的驗證、在應用程序的不同層之間發布信任邊界、間接選擇以及白名單等等。
Chris Eng(Veracode)說明了各種不同的安全測試方法,像靜態、動態、手動的測試以及其中的細節,另外還談到了各種方式的強度和局限性。Reeny Sondhi(EMC公司)也對她的公司中所使用的缺陷響應程序做了概述。