具有更大挑戰性的安全軟件開發
各種類型應用中連接設備數量的持續爆炸性增長加大了開發安全軟件的重要性。每個設備都面臨不同的風險,因此,必須為每個新項目詳細評估軟件安全要求。云計算的廣泛使用也催生了新的攻擊媒介,使軟件安全變得越來越復雜和難以實現。零信任已成為軟件安全的新口頭禪。
本文引用地址:http://www.104case.com/article/202111/429354.htm圖片來源:Gorodenkoff/Shutterstock.com
安全軟件的開發始終是一個巨大挑戰,而且從來都不是一項能夠完美完成的任務。在開發安全軟件的開始,需要了解您要保護的對象、盡量避開的對象、以及各種攻擊的潛在影響。威脅的不斷變化意味著在項目開始時通常無法完全確定安全要求,在開發過程中,可能會出現多次更改。一旦系統或設備投入使用,各種網絡威脅和威脅媒介也會不斷演變。面對不斷變化的威脅,越來越多地使用無線更新和補丁來維護安全性。
不幸的是,軟件漏洞是一種永遠存在的動態風險(圖 1)。因此,必須確保您的代碼安全且受到相應保護,不安全的應用會導致黑客入侵,它們可以直接控制一個設備,或者提供入侵另一個設備的訪問路徑。軟件安全是一個多方面的挑戰,包括安全通信、安全操作系統、安全啟動、安全靜態和傳輸數據、消除漏洞的安全編碼標準和實踐、穩健性測試等。下面將探討什么是安全編碼,并為您提供安全編碼資源示例,包括行業標準、指南、法規以及公認的測試和驗證協議。
圖1 軟件安全是一個多方面且不斷變化的挑戰(來源:buffaloboy/Shutterstock.com)
安全編碼
安全編碼是指通過計算機軟件開發以防止意外引入安全漏洞。通過識別不安全的編碼實踐,您可以在部署之前采取主動措施來減少或消除軟件中的漏洞。安全軟件開發是一個復雜的過程,包括許多國家和國際準則、法規和標準。安全軟件開發從威脅建模開始。
威脅建模
威脅建模和了解所需的安全級別是在新項目開始階段為確定安全代碼開發目標而采取的重要步驟(圖 2)。要保證安全需要一定時間和精力,但這些并不絕對。多個標準和指南采用安全級別、評分或等級來定義安全軟件的功能。因此,您需要清楚了解每個項目的特定安全需求和目標。每種威脅建模方法中的常見元素包括:
● 記錄數據流以識別系統易受攻擊的位置。
● 系統地識別盡可能多的潛在威脅。
● 確定用于降低每個潛在威脅的可能性或影響的控制措施。
圖2 威脅建模是安全軟件開發中復雜而關鍵的第一步(來源:Panchenko Vladimir/Shutterstock.com)
一些常用的威脅建模方法包括:
● Microsoft 安全開發生命周期 (SDL) 是一種工程技術,可用于幫助識別會影響您應用的威脅、攻擊、漏洞和對策。
● 攻擊仿真和威脅分析流程 (PASTA) 是一種以風險為中心的七步方法。它能夠提供一個協調業務目標和技術要求的過程,同時考慮了合規性問題和業務分析。
● 通用漏洞評分系統 (CVSS) 是一個開放框架,用于傳達軟件漏洞的特征和嚴重性。 CVSS 由三個度量標準組組成:Base、Temporal 和 Environmental。
● 混合威脅建模方法 (hTMM) 由卡內基梅隆大學軟件工程研究所于 2018 年開發。它由 SQUARE(安全質量需求工程方法)、Security Cards(由華盛頓大學開發)和 Persona non Grata (PnG,在 DePaul 大學開發)的組合構成。
指導原則和規定
技術規范 ISO/IEC TS 17961 是 C 編程語言的一組編碼規則。該規范定義了確保用 C 語言編寫軟件的安全性、可靠性、安全性和完整性最佳實踐,器目的是使用軟件代碼的靜態分析,降低合規成本。 ISO 的兩個出版物對其進行了定義:
● ISO/IEC TS 17961:2013:信息技術——編程語言、它們的環境和系統軟件接口——C語言安全編碼規則
● ISO/IEC TS 17961:2013/Cor 1:2016:信息技術——編程語言、它們的環境和系統軟件接口——C語言安全編碼規則,技術勘誤表 1
MISRA C 是一組由汽車工業軟件可靠性協會 (MISRA) 開發的 C 編程語言軟件開發指南,它旨在促進代碼的安全性、可移植性和可靠性,特別是那些在 ISO C/C90/C99 中編程的系統。還有一套 MISRA C++ 指南,MISRA C 已發展成為被汽車、航空航天、電信、醫療設備、國防、鐵路等行業的領先開發商廣泛接受的最佳實踐模型。為了使MISRA合規更具有意義,有必要確定:
● 使用嚴格的軟件開發流程。
● 準確地應用了哪些準則。
● 執行方法的有效性。
● 任何偏離準則的程度。
● 在項目之外開發的任何軟件組件狀態。
安全編碼標準
安全啟動或運行前進行代碼驗證是安全編碼越來越重要的方面,這在攻擊風險或潛在影響很高的應用中尤為重要,例如航空電子設備、自動駕駛汽車、醫療和工業系統等。此外,歐洲電信標準協會 (ETSI) (TS 103 645) 和美國國家標準與技術協會 (NIST) (SP 800-193) 的新物聯網設備安全標準也包括運行前進行代碼驗證。
ISA/IEC 62443 系列標準由國際自動化協會 ISA99 委員會制定,并被國際電工委員會 (IEC) 采用,它提供了一個靈活的框架來解決和減少工業自動化和控制系統中當前和未來的安全漏洞。 ISA/IEC 62443-3-2,專注安全風險評估、系統分區和安全級別,該標準正在開發中。
IEC 62443 要求使用靜態代碼分析器來執行安全編碼標準,包括:
● Common Weakness Enumeration (CWE?),這是一個社區開發的軟件和硬件弱點類型列表。它可作為一種通用語言,一種安全工具的衡量標準,也是弱點識別、緩解和預防工作的基準。
● 卡內基梅隆大學軟件工程研究所(Carnegie Mellon University Software Engineering Institute)的 CERT 包括常用編程語言(如 C、C++、Java、Perl 和 Android? 平臺)的編碼標準。
● Open Web Application Security Project? (OWASP?) 是一個致力于提高軟件安全性的非營利基金會。
● 美國國防信息系統局 (DISA) 提供與國防部項目特別相關的安全技術實施指南 (STIG)。
一些額外的安全編碼資源是:
● 常見漏洞和后門(CVE) 是在特定軟件產品中發現的網絡安全漏洞和后門列表。該列表鏈接到來自多個不同漏洞數據庫的信息,用戶可以更輕松地比較安全工具和服務。
● NIST 的國家漏洞數據庫 (NVD) 是美國政府基于標準的漏洞管理數據存儲庫,它與 CVE 列表相關聯并提供附加內容,包括如何修復漏洞、嚴重性評分和影響評級。要計算嚴重性級別,必須使用通用漏洞評分系統 (CVSS),這是用于評估軟件漏洞嚴重性的開放行業標準。
● 支付應用程序數據安全標準(Payment Application Data Security Standard)是一項全球安全標準,適用于支付應用軟件的開發,它以前被稱為支付應用程序最佳實踐 (PABP)。
● NIST 的 SP 800-82 可指導如何保護工業控制系統。NIST 還解決了中型公司對 ICS 安全性的擔憂,并已開始擴展機器人、智能交通和化學處理等領域的測試平臺。 NIST 還制定了安全內容自動化協議 (SCAP)。
測試和驗證
侵入測試是完整安全審計的重要組成部分。侵入測試是對系統的授權模擬網絡攻擊(見圖 3),該測試目的是識別弱點,包括未授權方訪問系統功能和數據的可能性以及所具備的優勢,從而能夠完成全面的風險評估。測試通常包括網絡侵入測試、應用安全測試以及圍繞網絡和應用的控制和流程測試。
例如,支付卡行業數據安全標準(Payment Card Industry Data Security Standard)要求定期和系統更改后進行侵入測試。業內存在一些用于進行侵入測試的標準框架和方法,其中包括開源安全測試方法手冊、侵入測試執行標準、NIST SP 800-115、信息系統安全評估框架和 OWASP 測試指南等。
圖3 侵入測試應考慮網絡外部試圖侵入的惡意行為者(外部測試)和來自網絡內部的攻擊 (來源:Panchenko Vladimir/Shutterstock.com)
通用弱點枚舉 (CWE?) 是社區開發軟件和硬件弱點類型列表。 CWE能夠在下述方面幫助開發人員和安全從業人員:
● 用通用語言描述和討論軟件和硬件的弱點。
● 檢查現有軟件和硬件產品的弱點。
● 評估具備這些弱點工具的覆蓋范圍。
● 利用通用基線標準進行弱點識別、緩解和預防工作。
● 在部署之前防止軟件和硬件漏洞。
設備的評估保證級別 (EAL) 是一個從 1 到 7 的數值,它是采用國際標準化通用標準安全評估進行確定。 EAL級別越高,相應設備安全目標文檔中概述的驗證和測試要求就越詳細。更高的EAL級別不一定代表更安全的設備,它只是表明完全的測試和驗證過程。在兩個設備具有相同安全目標定義的情況下,評級較高的設備應該更值得信賴。
EAL要求也可以提高,以包括比給定EAL所需最低要求更廣泛的保證要求。增強的EAL可以使用“增強”一詞或使用 EAL5+ 中的加號來表示。
結論
軟件安全是一個多方面的挑戰,在各種不同應用中,開發安全軟件的重要性正在日益提高。作為回應,安全編碼標準也變得越來越關鍵,測試和驗證性能的需求同樣越來越重要。如本文所示,開發人員可以訪問從威脅分析到開發過程,再到測試和驗證的各種工具。
評論