開發(fā)人員應用軟件安全編碼的最佳實踐
信息安全并不僅僅是保護計算機、網絡、信息免受攻擊和危害。應用軟件缺乏安全性日益成為許多企業(yè)的一種巨大漏洞!
無論是軟件開發(fā)者,還是安全專家,在與攻擊者斗爭的過程中,永遠不可能一勞永逸地解決安全問題。因為攻擊者往往富有創(chuàng)造性并且堅忍不拔,還有金錢的巨大誘惑。除了利用操作系統的漏洞之外,攻擊者還喜歡利用應用軟件的漏洞,而軟件工程師們似乎忽視了這一點。
軟件安全的目標是什么?是構建更好的、無缺陷的軟件。一般情況下,應用軟件都會存在許多缺陷,其中的相當一部分都成為安全問題的源頭。在開發(fā)軟件時,將安全性牢記在心,有助于應對風險并挫敗攻擊;在成功的攻擊面前,這樣做也有助于更快地從災難中恢復過來。
負責軟件開發(fā)的項目管理者需要認真考慮其開發(fā)團隊的知識、技術、技能、能力。構建安全的最佳途徑是在編碼和測試時就考慮應用軟件的安全性。那么,有哪些成熟的做法可有助于軟件開發(fā)安全呢?
1、培訓軟件開發(fā)人員,實施特定語言的安全編碼實踐并確保其應用。
2、使用靜態(tài)分析和其它的代碼分析工具來執(zhí)行源代碼的檢查。
3、理解軟件安全測試與傳統的軟件測試之間的區(qū)別,并將其反映到軟件測試中。
4、執(zhí)行基于風險的安全測試,查找常見的錯誤、可疑的軟件缺陷,并實施減輕風險的方法,確保其運行。
5、使用一種確定的過程,確認安全需求的原因、安全需求的分類、安全需求的優(yōu)先級等內容,根據優(yōu)先級的高低解決安全問題。
6、利用威脅建模和攻擊模式來確認安全威脅。攻擊模式包括發(fā)動攻擊的先決條件、相關漏洞、執(zhí)行攻擊所要求的技巧和資源等。
7、執(zhí)行架構風險分析,評估架構和設計滿足安全需求的能力,以及從相關威脅中的恢復能力。
不管從哪里開始,下面的方法對于開發(fā)安全的軟件總是有幫助的:
1、在確定架構、進行設計和實施、測試、部署應用軟件的過程中,選擇并將安全實踐(如上面所描述的)集成到現有的軟件開發(fā)過程中。將安全性納入到軟件開發(fā)過程中并不是完全推翻現有的過程,而是加入健全的安全實踐和方法。應對安全問題,需要與軟件工程人員解決性能和可靠問題一樣。
2、像攻擊者一樣思考。除了考慮應用軟件的功能、特性,還要思考應用軟件應當做什么,不應當做什么,考慮應用軟件如何才能更好地對抗攻擊,或在遭受攻擊后進行恢復。
3、安全是一個風險管理問題。在每一個軟件的生命周期中,開發(fā)人員和測試人員必須評估和減輕最高級的漏洞和風險。隨著應用軟件的設計、開發(fā)、測試、部署,風險及其優(yōu)先級也會發(fā)生變化。風險管理方法的實施依賴于應用軟件的特征。例如,對一個集成系統的風險分析和評估,就與評估商業(yè)級應用軟件或評估一個基礎架構的組件的風險的需求不同。
每家公司在開發(fā)每個項目時,都要根據自己的目標、限制條件和應用軟件的重要程度,在開發(fā)過程中選擇并調整自己特定的安全實踐和方法,而不要一味地追求速度和性能。