軟件安全技術課件:軟件安全編碼_第1頁
軟件安全技術課件:軟件安全編碼_第2頁
軟件安全技術課件:軟件安全編碼_第3頁
軟件安全技術課件:軟件安全編碼_第4頁
軟件安全技術課件:軟件安全編碼_第5頁
已閱讀5頁,還剩24頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

軟件安全編碼本講要點1.軟件安全編碼概述2.開發語言的安全性3.安全編碼實踐4.應用案例1.軟件安全編碼概述(1)主要工作包括:選擇安全的編程語言版本(配置)管理代碼檢測安全編譯1.軟件安全編碼概述(1)主要工作包括:1)選擇安全的編程語言所謂安全的編程語言是指那些具有對緩沖區、指針和內存進行管理能力而避免發生軟件安全問題的語言。類型安全語言就屬于安全的編程語言。傳統的C語言不是類型安全語言。C#語言擁有內建到語言中的許多安全機制,包括類型安全元素、代碼訪問安全和基于角色的安全,這些安全機制都包括在.NET框架中,因而屬于類型安全語言范疇。Java也屬于類型安全的語言,它可以確保操作僅能應用于適當的類型,使程序員能夠制定新的抽象類型和簽名,防止沒有經過授權的代碼對特定的值實施操作。1.軟件安全編碼概述(1)主要工作包括:2)版本(配置)管理不僅能夠保證開發團隊正在使用的程序版本是正確的,同時在必要的情況下也能提供回退到上一個版本的功能;還提供了跟蹤所有權和程序代碼變化的能力。安全管理專家可以通過對每一個版本的攻擊面分析所隱含的安全問題,把握軟件安全的演化趨勢。可以降低漏洞再生的可能性。例如,已經修復的漏洞補丁在無意中會被覆蓋,從而出現漏洞再生的問題。配置管理貫穿于軟件開發、部署和運維過程。在軟件編碼開發階段,配置管理較多地關注源代碼的版本管理和控制;當軟件完成部署處于運行狀態的時候,配置管理應包括軟件配置參數、操作、維護和廢棄等系列詳細內容。1.軟件安全編碼概述(1)主要工作包括:3)代碼檢測對代碼質量進行檢查,發現是否存在可利用漏洞的過程。根據代碼檢測時代碼所處的狀態,可以將代碼分析分為兩種類型:代碼靜態檢測和代碼動態檢測。代碼靜態檢測是指,不在計算機上實際執行所檢測的程序,而是采用人工審查或類似動態分析的方法,通常借助相關的靜態分析工具。代碼動態檢測是指,實際運行代碼時進行檢測的方法。通常依靠系統編譯程序和動態檢查工具實現檢測,但完成后可能仍會存在與安全相關的、在編譯階段發現不了、運行階段又很難定位的錯誤。工業界目前普遍采用的代碼動態分析是進行模糊測試和滲透測試。1.軟件安全編碼概述(1)主要工作包括:4)安全編譯采用最新的集成編譯環境,并選擇使用這些編譯環境提供的安全編譯選項和安全編譯機制。如在VS中編譯時,開啟/GS選項對緩沖區的安全進行檢查。在一個安全的環境中進行。例如:對代碼編譯系統實施安全訪問控制;使用訪問控制列表防止未授權用戶的訪問;使用軟件版本控制方法;盡量使用自動化編譯工具和腳本。對應用環境的真實模擬多樣化編譯技術應用1.軟件安全編碼概述(2)基本原則包括:CERT安全編碼建議驗證輸入(Validateinput)留意編譯器警告(Heedcompilerwarnings)安全策略的架構和設計(保持簡單性(Keepitsimple)默認拒絕(Defaultdeny)堅持最小權限原則(Adheretotheprincipleofleastprivilege)清潔發送給其他系統的數據(Sanitizedatasenttoothersystems)1.軟件安全編碼概述基本原則包括:CERT安全編碼建議縱深防御(Practicedefenseindepth)使用有效的質量保證技術(Useeffectivequalityassurancetechniques)采用安全編碼標準(Adoptasecurecodingstandard)其他安全編碼原則最少反饋檢查返回2.開發語言的安全性(1)C語言安全編碼C語言安全編碼的注意點對內存訪問錯誤的檢測和修改。指針引用是C中最靈活、最核心、最復雜,也是最易出錯的部分。隨機數的選取和使用問題。C語言沒有提供異常處理機制,其異常檢測處理要由程序員預設完成。2.開發語言的安全性(1)C語言安全編碼C語言中針對緩沖區溢出的主要解決措施使用安全字符串函數如果在開發過程中無法避免使用這些不安全函數,應該遵循以下3個原則:1)應要求代碼傳遞緩沖區的長度;2)探測內存;3)正確使用函數參數。開啟編譯器的安全編譯選項2.開發語言的安全性(2)Java語言安全編碼Java已有的安全機制2.開發語言的安全性(2)Java語言安全編碼語言層安全語言層安全是通過編譯器的編譯來實現,即編譯成功則說明達到了語言層安全性。Java在語言層提供如下安全機制:通過某些關鍵字(如private、protected)定義代碼的可見性范圍(即權限)。通過類型規則確保程序運行時變量的值始終與聲明的類型一致,在函數或方法調用時形參與實參的類型匹配。Java還采用自動內存管理、垃圾收集站、字符串和數組的范圍檢查等方法,來確保Java語言的安全性。2.開發語言的安全性(2)Java語言安全編碼字節碼層安全在字節碼層次,Java提供兩種保障安全的機制:類加載器類加載器主要分為四類:啟動類加載器、標準擴展類加載器、路徑類加載器和網絡類加載器。字節碼驗證器驗證分成靜態和動態兩個階段。2.開發語言的安全性(2)Java語言安全編碼應用層安全一旦類加載器加載了一個類并由字節碼驗證器驗證了它,Java平臺的第3種安全機制,即安全管理器就開始運行:安全管理器是一個由JavaAPI提供的類,即:java.lang.SecurityManager類,它的作用是說明一個安全策略以及實施這個安全策略。安全策略描述了哪些代碼允許做哪些操作。由安全管理器對象定義的安全檢查方法構成了當前系統的安全策略。當這些檢查方法被調用時,安全策略就得以實施。3.安全編碼實踐(1)輸入驗證輸入驗證是一個證明輸入數據的準確性并符合規范要求的過程。對于任何不可信任數據源的輸入進行驗證,這是CERT給程序開發人員安全編碼實踐的第一條建議。1)驗證內容2)驗證方法3)驗證端點4)其他注意點3.安全編碼實踐(1)輸入驗證1)驗證內容程序默認情況下應對所有的輸入信息進行驗證,不能通過驗證的數據應被拒絕尤其是對以下輸入信息進行驗證:HTTP請求消息的全部字段,包括GET數據、POST數據、Cookie和Header數據等;不可信來源的文件;第三方接口數據;從數據庫中檢索出的數據;對來自命令行以及配置文件的輸入;網絡服務;注冊表值;系統性能參數;臨時文件。當輸入數據包含文件名、路徑名、URL等數據時,應先對輸入內容進行規范化處理后再進行驗證。3.安全編碼實踐(1)輸入驗證2)驗證方法應根據情況綜合采用多種輸入驗證的方法,包括以下幾種。檢查數據是否符合期望的類型。檢查數據是否符合期望的長度。檢查數值數據是否符合期望的數值范圍。比如檢測整數輸入的最大值與最小值。檢查數據是否包含特殊字符,如:<、>、"、'、%、(、)、&、+、\、\'、\"等。應使用正則表達式進行白名單檢查,盡量避免使用黑名單法。3.安全編碼實踐(1)輸入驗證3)驗證端點在客戶端驗證的同時,在服務器端也應進行驗證。3.安全編碼實踐(1)輸入驗證4)其他注意點應建立統一的輸入驗證接口,為整個應用系統提供一致的驗證方法。 如日志數據中包含輸入數據,應對輸入數據進行驗證,禁止攻擊者能夠寫任意的數據到日志中。在軟件中設置適當的字符集(如Unicode碼)和輸出語言環境,采用XML格式將數據轉換為標準格式,以避免任何標準化方面的問題。在執行驗證之前使用一次性解碼,將輸入數據首先進行標準化轉換為內部表達的方式,以保證驗證過程不會被繞過。3.安全編碼實踐(2)數據凈化數據凈化是將一些被認為是危險的數據轉化為無害形式的過程。輸入和輸出的數據都可以被凈化。輸入驗證后再次凈化數據是縱深防御的體現。1)輸入數據凈化剝離(Stripping)替代(Substitution)文本化(Literalization)2)輸出數據凈化HTML實體編碼URL編碼3.安全編碼實踐(3)錯誤信息輸出保護編碼時應限制返回給客戶與業務處理無關的信息,禁止把重點保護數據返回給不信任的用戶,避免信息外泄。使用簡潔的、只包含必要信息的錯誤消息。對錯誤信息進行規整和清理后再返回到客戶端。使用將錯誤和例外事件重定向到一個預先定制的默認錯誤處理頁面,并根據用戶登錄地點(本地或是遠程)的上下文情境來確定顯示合適的錯誤消息詳細內容,例如“訪問的網頁不存在”,或返回“404錯誤”。3.安全編碼實踐(4)數據保護在軟件實現中,數據安全保護要注意密碼算法和密碼函數庫的正確應用、密鑰管理,以及充分的訪問控制和審計等問題。1)密碼算法選擇選擇密碼算法及加密強度時,除了根據安全需求,還應參照國家法律和相關行業規定的要求。我國制定了商用密碼管理條例,并陸續推出了我國自主設計的密碼算法,并在商用密碼產品中得到廣泛采用。3.安全編碼實踐(4)數據保護2)常用密碼函數庫MIRACLOpenSSL.NET基礎類庫中的加密服務提供類Java安全開發包3.安全編碼實踐(4)數據保護3)安全的密鑰管理保證密鑰本質上是隨機的或偽隨機的。密鑰的交換需要安全地進行,如PKI。密鑰的存儲需要被保護密鑰的循環要遵從適當的過程密鑰的歸檔和托管需要受適當的訪問控制機制的保護密鑰的銷毀3.安全編碼實踐(4)數據保護4)充分的訪問控制和審計用戶(包括外部用戶和內部用戶)要訪問加密密鑰和加密算法應當經過以下控制。明確地被批準。使用審計和周期性檢查的方法實現對加密機制的監督和控制。不會因為一些無意識或者粗心大意的軟件脆弱點而使加密機制失效,例如不安全的軟件訪問許可配置。與具體環境相適應的保護方法,而不僅僅考慮是單向還是雙向加密。3.安全編碼實踐(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論