安全開發是從根源有效地解決安全漏洞問題,而已在軟體的生命周期内,這樣的開發模式成本更低。
SDL過程:
q 教育訓練
所有的開發人員必須接收适當的安全教育訓練,了解相關的安全知識。
q 安全要求
明确項目的安全要求。
q 品質門/bug欄
品質門和bug欄相當于确定安全和隐私品質的最低可接受級别。
q 安全和隐私風險評估
評估項目中的安全現狀和威脅模型
q 設計要求
在産品設計初期考慮安全問題
q 減小攻擊面
減小攻擊面通過減少攻擊者利用潛在弱點或漏洞的機會來降低風險。減少攻擊面包括關閉和限制對系統服務的通路,應用“最小權限原則”,以及盡可能的進行分層防禦。
q 威脅模組化
建立威脅模型分析項目或産品可能遇到的攻擊,以及給出解決方案
q 使用指定的工具
q 棄用不安全函數
q 靜态分析
q 動态程式分析
q 模糊測試
模糊測試是一種專門形式的動态分析,它通過故意想應用程式引入不良格式或随即資料誘發程式故障。
q 威脅模型和攻擊面評析
需求發生改變時,安全模式也需要相應改變
q 事件響應計劃
産品的釋出需要留下開發人員的聯系方式,以及相應的文檔,友善日後解決問題。
q 最終安全評估
q 釋出/存檔
靈活sdl的思想其實就是以變化的觀點實施安全的工作。需求和功能可能一直在變化,代碼可能也在發生變化,這要求實施SDL時需要在每一個階段更新威脅模型和隐私政策,在必要的環節疊代模糊測試、代碼安全分析等工作。
準則:
q 與項目經理進行充分的溝通,排出足夠的時間
q 規範公司的立項流程,確定所有項目都能通知到安全團隊,避免遺漏
q 樹立安全部門的權威,項目必須由安全部門稽核後才能釋出
q 将技術安放寫入開發、測試的工作手冊
q 給開發工程師教育訓練安全方案
q 記錄所有的安全bug,激勵程式員編寫安全的代碼
應該建立安全程式設計的代碼庫,以及一些比較常見的安全編碼問題。
Sun 的安全編碼指導方針:
q 小心使用 特權代碼
q 小心處理 靜态字段
q 最小化作用域 (scope)
q 小心選擇 公共 (public) 方法和字段
q 适當的 包 (package) 保護性
q 盡可能使用 不可變 (immutable) 對象
q 永遠不要傳回對包含敏感資料的内部數組的引用
q 永遠不要直接存儲使用者提供(user-supplied)的數組
q 小心使用序列化(Serialization)
q 小心使用本地方法(native methods)
q 清除敏感資訊
Java 安全反模式
q 忽略那些全模式的代碼不經意間就會造成漏洞
典型的 Java 安全編碼反模式(Antipatterns):
忽略語言特性 (例如整數溢出 (Integer Overflow) )
不注意使用序列化, 不注意使用 特權代碼
将字段和方法定義到不适當的可見性作用域
在非終态 (non-final) 靜态字段中的隐蔽通道(Covert Channels)
參考資料:http://blog.csdn.net/Test_sunny/article/details/4653783
http://51CTO提醒您,請勿濫發廣告!/ceshi/ceshijishu/aqcs/2013/0715/206456.html
http://51CTO提醒您,請勿濫發廣告!/ceshi/ceshijishu/aqcs/2012/0329/204547.html
本文轉自 夢朝思夕 51CTO部落格,原文連結:http://blog.51cto.com/qiangmzsx/1859569