軟體供應鏈安全毫無疑問是近年最受關注的資安議題之一,在近期最受關注的開源軟體安全性之前,長年以來,資安界就有持續提倡的安全軟體開發生命週期(SSDLC),再加上後起的軟體物料清單(SBOM),其發展同樣是備受關注,然而,在眾說紛紜、各行其是的狀況下,大家都期待出現有公信力的組織,能訂出廣受認可的標準,使這類議題能夠持續推行。

現在我們終於看到出現這樣的軟體開發安全框架,其全名為:Secure Software Development Framework,簡稱SSDF,由美國國家標準暨技術研究院(NIST)訂定,足以成為實踐上的重要參考,今年2月新出爐,已引起資安業者關注。例如,提供物聯網設備資安檢測服務的安華聯網科技,持續關注NIST相關標準發展之餘,也在今年臺灣資安大會介紹SSDF,該公司軟體工程師暨資安研究員楊力學(Aspen Yang)談及此框架內容,也解析當中重點。

NIST發布 SSDF 1.1,提供降低軟體漏洞風險的方針

關於安全軟體開發生命週期,有不少資深的IT人員都知道它的重要性,畢竟,軟體驅動一切,每個軟體都有資安風險,若要確保安全性,需在開發過程的每個環節,落實相關的設計與驗證。

目前有不少著名的安全軟體開發流程的標準或方法論,可做為推動這項工作實務上的借鏡。

例如,微軟發布的安全開發生命週期(MS SDL),由OWASP發布的軟體保障成熟度模型(OWASP SAMM),算是最為知名。近年也看到國內有在談Synopsys發布的軟體安全建構成熟度模型(BSIMM)等。

而從產業面來看,也有一些實例,但可能比較不那麼為人所熟知,像是楊力學就提到,在支付卡產業安全領域的PCI SSLC,以及在工控安全標準IEC 62443-4-1當中,其實也都有相關需求規範。

特別的是,現在美國NIST也針對這個領域提出實踐框架,其全名是Secure Software Development Framework(SSDF),也就是NIST SP 800-218,這份文件歷時近兩年完成,最終審定1.1版正式發布,當中針對減少軟體漏洞及網路風險的重要行動,做出通盤介紹。

框架本身具通用性,可在開發流程彈性運用

NIST SSDF有何特點?簡單來說,就是適用廣泛,具通用性與彈性。

在這場介紹中,我們可以了解它的一些特性,而我們也直接檢視了NIST SSDF的文件,當中的內容亦有充分的說明。

根據NIST指出,要確保正在開發的軟體足夠安全,就要將安全軟體開發的實踐,增加到每個軟體開發生命週期(SDLC)模型之中。

而SSDF本身就是提供基本、健全的安全軟體開發實踐,定義安全軟體開發的通用語言,並且是高層次的框架,因此並不會規定每項實踐要如何進行,重點在於實踐的結果,而不是這樣做的工具、技術與機制,所以,不論規模大小或網路安全水準高低,任何部門、組織都可以使用SSDF。

關於SSDF這方面特性的意義,楊力學也做出具體整理,例如,SSDF支援多樣SSDLC標準因而具有延展性,也就是說,大家可依照參照的SSDLC標準進行文件化,適用範圍可大可小,而且,該框架並不會只針對專門程式語言、軟體開發流程框架、實作軟體、開發環境與維運環境,因此可以整合現有工具鏈與工作流程。此外,能適用IT、ICS、CPS與IoT領域開發的軟體。

將安全軟體開發分4大構面,20項實踐

整體而言,SSDF使用類似NIST CSF的表格形式來呈現。在表格中除了定義出框架的4大構面,各欄則是組成要素與結構,包括:實踐(Practices)、工作(Tasks)、概念實施範例(Notional Implementation Examples ),以及參考資訊(References)。

對於NIST SSDF的實踐內容,楊力學有更清楚的說明。他表示,在這份實踐文件中,主要有4大構面:組織要做的準備,保護軟體,產出良好安全的軟體,回應弱點。

由於有了4大構面的區分,他認為,這突顯當前環境存在一些觀念偏差。很多人可能誤以為,要讓軟體程式開發增加安全,只要做源碼檢測、程式碼審核,但事實上不是這樣,要做的事其實是更多樣的,而從SSDF的框架即可看出。

1.組織要做的準備

首先,在組織要做的準備上,有5個實踐項目,分別是:定義軟體開發的安全需求,實施角色與職責,實施支援工具鏈,定義與使用軟體的安全標準查核表,以及實施與維護軟體開發的安全環境。

在此當中,楊力學指出,把安全需求定義清楚,是最重要的工作。他並引用一張Open Security Architecture的分類圖,指出當中著重在「安全架構」與「控制措施」,並概要列舉出常見SSDLC在這兩者之下,會需要實作的資安需求,常見有13項,包含:安全架構與安全設計、資安控制措施、軟體弱點辨識、以不可逆方式保存密碼、進行身分認證、權限設計與授權管理、用金鑰加解密、機密敏感性檔案處理、安全連接與通訊、安全傳輸檔案、簽署資料、驗證資料完整性,以及數位證據保存。

綜觀這裡的5個實踐,不僅是定義安全需求,準備工作也涵蓋到要有軟體安全標準的查核表,以及實施與維護。

2.保護軟體

其次,在保護軟體上,主要分3個實踐,簡單來說,可聚焦在3個概念:首先,要防範未經授權的存取與竄改,並且是所有狀態的程式碼;其次,是提供機制驗證軟體釋出的完整性;最後,是每次的軟體釋出都進行庫存與保護。

尤其是最後一點,楊力學強調,因為,其中一個工作項目的內容,就是關於蒐集、維護每個軟體所有元件的出處資料,也就是目前相當熱門的軟體物料清單(SBOM)。

而這方面主要可以分成兩個重點來看,分別是SBOM報告格式,以及弱點可利用性資訊交換標準(VEX)。對此,他也引用美國CISA對於SBOM的介紹中,指出近年美國國家電信暨資訊管理局(NTIA),已經提供相當多關於SBOM介紹、導入、技術資源、PoC教訓等文件,其中在SBOM 報告格式要求方面,主要有三種選擇,分別是ISO/IEC 5962:2021的SPDX、NIST的SWID,以及OWASP的CycloneDX。

還有更重要的是,要將SBOM跟弱點結合在一起,因此需要VEX這樣的機制配合。如此一來,SBOM才真正有作用,可以使得供應鏈資安變得透明化。

3.產出良好安全的軟體

在產出良好安全的軟體上,這裡有9個實踐項目,楊力學認為,這是整個文件中最重要的部分。

除了軟體設計要能與資安需求相符並緩解資安風險,以及複驗軟體設計,也要驗證第三方軟件是否符合安全要求。

並且,在可行情況下使用現有安全可靠的軟體,也就是不要重複造輪;程式設計本身在撰寫程式碼時,也要堅持安全設計原則;在使用直譯器、編譯器及Build流程中,要將這些流程的組態設定提高安全性,以提高可執行檔,以及系統載入執行期間的安全性。他並舉例,C語言與C++語言會面臨很多這方面的問題。

接下來,進行程式碼審核,審查與分析人工可讀的程式碼以識別弱點;然後是測試可執行程式碼以識別弱點,並透過自動化方式降低檢測漏洞的資源與成本;最後是軟體的預設值,必須是安全的組態。

4.回應弱點

最後,在回應弱點上,主要有3個實踐項目,包括:於現有的基礎持續辨認與確認弱點,評估、訂定優先順序與修復弱點,以及分析弱點以辨認根因。

對於弱點的認知,除了普遍熟知的CVE漏洞編號,美國MITRE從2005年發展出的CWE通用弱點列表,許多人同樣都很熟悉,一直是軟體安全相關領域研究人員的重要參考。

這方面楊力學也用了CWE來舉例,鼓勵軟體工程師在學習上,可由此瞭解現在軟硬體弱點的根因,事實上,有了根本原因才會產生弱點,有弱點才會有可利用性。

同時,他也簡單說明,實務上會產生軟硬體弱點的5大原因,包括隕石式開發流程的緊急要求、未導入安全開發流程、開發與維運人員缺乏資安領域知識、人力資源不足,以及一時粗心,都是容易造成問題的主因。

在NIST SSDF框架中,第一個要實踐的工作,就是將安全需求定義清楚,安華聯網科技軟體工程師暨資安研究員楊力學藉由OSA分類圖,說明應著重於「安全架構」與「控制措施」,並列舉出13項SSDLC常見需要實作的資安需求。

在NIST SSDF的「保護軟體」構面中,有項實踐的工作是關於軟體物料清單(SBOM)。這方面有兩點需要注意,一是SBOM報告格式,現今主流有SPDX、SWID與CycloneDX,另一是弱點可利用性資訊交換標準(VEX),需要搭配才能讓SBOM發揮作用。

經過這場介紹後,我們也實際了解NIST SSDF(SP 800-218)文件的內容,這裡使用了類似NIST CSF的表格形式呈現,從內容架構來看,除了分為4大構面,20項實踐,並統計出共有47項工作。

舉例來說,在第一個構面「組織要做的準備」(PO)中,共有5個實踐項目,若以第一個實踐「定義軟體開發的安全需求」(PO.1)來看,又分成3項工作,第一項工作是「識別並記錄組織軟體開發基礎設施與流程的所有安全要求,並隨著時間的推移維護這些要求」(PO.1.1)。

值得注意的是,會後我們向楊力學確認相關資訊時,他也特別提到一點,就是這當中有4個工作項目,在白皮書經審定公告為標準後,已移動到其他實踐。

要如何具體實踐這些內容?NIST建議,可查閱框架所提的實施範例,以及參考資訊,同時,使用者也應獲取有關實施這些實踐的額外資訊。而我們發現,這裡的參考資訊內容,已包括數個標準與指引,以其中一項實踐工作為例,參照的資訊就有:BSA FSS、BSIMM、IEC 62443、MS SDL、NIST CSF、OWASP SAMM、PCI SSLC、SC AGILE、SC FPSSD、SC SIC、SP 800-53、SP 800-160、SP 800-161、SP 8001-181等,還有美國總統拜登行政命令EO 14028。

不過,在這些標準與指引當中,我們對於SC FPSSD、SC AGILE、SC SIC較為陌生,因此也請楊力學協助說明,他表示,像是SC FPSSD,指的就是Safe Code組織(https://safecode.org)的SSDLC標準。

熱門新聞

Advertisement