文 中國信息通信研究院雲計算與大數據研究所雲計算部工程師 吳江偉
隨著 5G、雲計算、人工智能、大數據、區塊鏈等技術的日新月異,數字化轉型進程逐步推進,軟件已經成為日常生產生活必備要素之壹,滲透到各個行業和領域。容器、中間件、微服務等技術的演進推動軟件行業快速發展,同時帶來軟件設計開發復雜度不斷提升,軟件供應鏈也愈發復雜,全鏈路安全防護難度不斷加大。近年來,軟件供應鏈安全事件頻發,對於用戶隱私、財產安全乃至國家安全造成重大威脅,自動化安全工具是進行軟件供應鏈安全防禦的必要方式之壹,針對軟件供應鏈安全及工具進行研究意義重大,對於維護國家網絡空間安全,保護用戶隱私、財產安全作用深遠。
壹、軟件供應鏈安全綜述
軟件供應鏈定義由傳統供應鏈的概念延伸擴展而來。業界普遍認為,軟件供應鏈指壹個通過壹級或多級軟件設計、開發階段編寫軟件,並通過軟件交付渠道將軟件從軟件供應商送往軟件用戶的系統。軟件供應鏈安全指軟件供應鏈上軟件設計與開發的各個階段中來自本身的編碼過程、工具、設備或供應鏈上遊的代碼、模塊和服務的安全,以及軟件交付渠道安全的總和。軟件供應鏈攻擊具有低成本、高效率的特點,根據其定義可知,相比傳統針對軟件自身安全漏洞的攻擊,針對軟件供應鏈,受攻擊面由軟件自身擴展為了軟件自身內部的所有代碼、模塊和服務及與這些模塊、服務相關的供應鏈上遊供應商的編碼過程、開發工具、設備,顯著降低了攻擊者的攻擊難度。同時,軟件設計和開發所產生的任何安全問題都會直接影響供應鏈中所有下遊軟件的安全,擴大了攻擊所造成的影響。
近年來,軟件自身安全防禦力度不斷加大,攻擊者把攻擊目標由目標軟件轉移到軟件供應鏈最薄弱的環節,軟件供應鏈安全事件頻發,對用戶隱私及財產安全乃至國家安全造成重大威脅。最典型的如 2020 年 12 月,美國網絡安全管理軟件供應商“太陽風”公司(SolarWinds)遭遇國家級 APT 組織高度復雜的供應鏈攻擊,直接導致包括美國關鍵基礎設施、軍隊、政府等在內的超過 18000 家客戶全部受到影響,可任由攻擊者完全操控。
軟件供應鏈安全影響重大,各國高度重視,紛紛推行政策法規推動軟件供應鏈安全保護工作。2021 年 5 月 12 日,美國總統拜登簽署發布《改善國家網絡安全行政令》,明確提出改善軟件供應鏈安全,要求為出售給政府的軟件開發建立基線安全標準,不僅提供應用程序,而且還必須提供軟件物料清單,提升組成該應用程序組件的透明度,構建更有彈性且安全的軟件供應鏈環境,確保美國的國家安全。同年 7 月,美國國家標準與技術所(NIST)發布《開發者軟件驗證最低標準指南》,為加強軟件供應鏈安全加碼,明確提出關於軟件驗證的 11 條建議,包括壹致性自動化測試,將手動測試最少化,利用靜態代碼掃描查找重要漏洞,解決被包含代碼(庫、程序包、服務)等。
我國對軟件供應鏈安全問題也給予了高度重視,2017 年 6 月,我國發布實施《網絡產品和服務安全審查辦法》,將軟件產品測試、交付、技術支持過程中的供應鏈安全風險作為重點審查內容。2019 年12 月 1 日,《信息安全技術 網絡安全等級保護基本要求》2.0 版本正式實施,在通用要求及雲計算擴展部分明確要求服務供應商選擇及供應鏈管理。
二、軟件供應鏈安全挑戰
目前,軟件供應鏈安全受到高度重視,但仍面臨多重現實挑戰,可以總結分為以下五大類。
1. 軟件設計開發復雜化成為必然趨勢
隨著容器、中間件、微服務等新技術的演進,軟件行業快速發展,軟件功能及性能需求也不斷提升,軟件設計開發復雜化已經成為必然趨勢。這壹現狀同時帶來了軟件設計、開發及維護難度陡增,設計與開發過程不可避免的產生安全漏洞,為軟件供應鏈安全埋下隱患。
2. 開源成為主流開發模式
當前,開源已經成為主流開發模式之壹,軟件的源代碼大多數是混源代碼,由企業自主開發的源代碼和開源代碼***同組成。根據新思 科技 《2021 年開源安全和風險分析》報告顯示,近 5 年,開源代碼在應用程序中所占比例由 40% 增至超過 70%。開源的引入加快了軟件的研發效率,但同時也將開源軟件的安全問題引入了軟件供應鏈,導致軟件供應鏈安全問題多元化。
3. 快速交付位於第壹優先級
由於業界競爭環境激烈,相較於安全,功能快速實現,軟件快速交付仍處於第壹優先級,雖然軟件通常實現了安全的基本功能需求,如身份認證鑒權、加解密、日誌安全審計等,但整體安全防護機制相對滯後,以後期防護為主,前期自身安全性同步建設往往被忽視,軟件自身代碼安全漏洞前期清除存在短板。
4. 軟件交付機制面臨安全隱患
軟件交付指軟件由軟件供應商轉移到軟件用戶的過程。傳統軟件交付以光盤等存儲設備為載體,隨著互聯網等技術的發展,通過網絡對於軟件進行快速分發已經成為基本模式,不安全的分發渠道同樣會對軟件供應鏈安全產生重大影響。
5. 使用時軟件補丁網站攻擊
針對軟件供應鏈安全防護,軟件的生命周期並非結束於軟件交付之後,而是直到軟件停用下線。軟件在設計及開發過程中難免存在安全缺陷,通過補丁下發部署是修復軟件缺陷漏洞的最通用方式。軟件補丁的下發部署同樣受分發渠道影響,受汙染的補丁下載站點同樣會造成軟件供應鏈安全問題。
三、軟件供應鏈安全防護工具
軟件供應鏈安全涉及眾多元素及環節,參考業界常見劃分,軟件供應鏈環節可抽象成開發環節、交付環節、使用環節三部分。針對交付環節及使用環節安全防護,主要通過確保分發站點及傳輸渠道安全。開發環節與軟件源代碼緊密相關,安全防護較為復雜,囊括編碼過程、工具、設備及供應鏈上遊的代碼、模塊和服務的安全,涉及四類安全工具,包括軟件生產過程中的工具和軟件供應鏈管理工具。
1. 靜態應用程序安全測試工具
靜態應用程序安全測試(SAST)是指不運行被測程序本身,僅通過分析或者檢查源程序的語法、結構、過程、接口等來檢查程序的正確性。源代碼靜態分析技術的發展與編譯技術和計算機硬件設備的進步息息相關,源代碼安全分析技術多是在編譯技術或程序驗證技術的基礎上提出的,利用此類技術能夠自動地發現代碼中的安全缺陷和違背安全規則的情況。目前,主流分析技術包括:(1)詞法分析技術,只對代碼的文本或 Token 流與已知歸納好的缺陷模式進行相似匹配,不深入分析代碼的語義和代碼上下文。詞法分析檢測效率較高,但是只能找到簡單的缺陷,並且誤報率較高。(2)抽象解釋技術,用於證明某段代碼沒有錯誤,但不保證報告錯誤的真實性。該技術的基本原理是將程序變量的值映射到更加簡單的抽象域上並模擬程序的執行情況。因此,該技術的精度和性能取決於抽象域對真實程序值域的近似情況。(3)程序模擬技術,模擬程序執行得到所有執行狀態,分析結果較為精確,主要用於查找邏輯復雜和觸發條件苛刻的缺陷,但性能提高難度大。主要包括模型檢查和符號執行兩種技術,模型檢查將軟件構造為狀態機或者有向圖等抽象模型,並使用模態/時序邏輯公式等形式化的表達式來描述安全屬性,對模型遍歷驗證這些屬性是否滿足;符號執行使用符號值表示程序變量值,並模擬程序的執行來查找滿足漏洞檢測規則的情況。(4)定理證明技術,將程序錯誤的前提和程序本身描述成壹組邏輯表達式,然後基於可滿足性理論並利用約束求解器求得可能導致程序錯誤的執行路徑。該方法較為靈活性,能夠使用邏輯公式方便地描述軟件缺陷,並可根據分析性能和精度的不同要求調整約束條件,對於大型工業級軟件的分析較為有效。(5)數據流分析技術,基於控制流圖,按照某種方式掃面控制流圖的每壹條指令,試圖理解指令行為,以此判斷程序中存在的威脅漏洞。數據流分析的通用方法是在控制流圖上定義壹組方程並叠代求解,壹般分為正向傳播和逆向傳播,正向傳播就是沿著控制流路徑,狀態向前傳遞,前驅塊的值傳到後繼塊;逆向傳播就是逆著控制流路徑,後繼塊的值反向傳給前驅塊。
2. 動態應用程序安全測試工具
動態應用程序安全測試(DAST)技術在測試或運行階段分析應用程序的動態運行狀態。它模擬黑客行為對應用程序進行動態攻擊,分析應用程序的反應,從而確定該應用是否易受攻擊。以 Web 網站測試為例對動態應用程序安全測試進行介紹,主要包括三個方面的內容:(1)信息收集。測試開始前,收集待測試網站的全部 URL,包括靜態資源和動態接口等,每壹條 URL 需要包含路徑和完整的參數信息。(2)測試過程。測試人員將測試所需的 URL列表導入到測試工具中。測試工具提供“檢測風險項”的選擇列表,測試人員可根據測試計劃選擇不同的風險檢測項。測試工具在測試過程中,對訪問目標網站的速度進行控制,保證目標網站不會因為同壹時刻的請求數過高,導致網站響應變慢或崩潰。測試人員在設定測試任務的基本信息時,根據目標網站的性能情況填入“每秒請求數”的最大值。測試工具在測試過程中保證每秒發送請求的總數不超過該數值。(3)測試報告。在安全測試各步驟都完成後,輸出測試報告。測試報告壹般包含總覽頁面,內容包括根據測試過程產生的各種數據,輸出目標網站安全性的概要性結論;測試過程發現的總漏洞數,以及按照不同安全等級維度進行統計的漏洞數據。
3. 交互式應用程序安全測試工具
交互式應用程序安全測試(IAST)通過插樁技術,基於請求及運行時上下文綜合分析,高效、準確地識別安全缺陷及漏洞,確定安全缺陷及漏洞所在的代碼位置,主要在三方面做工作:流量采集、Agent監控、交互掃描。(1)流量采集,指采集應用程序測試過程中的 HTTP/HTTPS 請求流量,采集可以通過代理層或者服務端 Agent。采集到的流量是測試人員提交的帶有授權信息有效數據,能夠最大程度避免傳統掃描中因為測試目標權限問題、多步驟問題導致掃描無效;同時,流量采集可以省去爬蟲功能,避免測試目標爬蟲無法爬取到導致的掃描漏水問題。(2)Agent 監控,指部署在 Web 服務端的 Agent 程序,壹般是 Web 服務編程語言的擴展程序,Agent通過擴展程序監控 Web 應用程序性運行時的函數執行,包括 SQL 查詢函數、命令執行函數、代碼執行函數、反序列化函數、文件操作函數、網絡操作函數,以及 XML 解析函數等有可能觸發漏洞利用的敏感函數。(3)交互掃描,指 Web 應用漏洞掃描器通過Agent 監控輔助,只需要重放少量采集到的請求流量,且重放時附帶掃描器標記,即可完成對 Web 應用程序漏洞的檢測。例如,在檢測 SQL 註入漏洞時,單個參數檢測,知名開源 SQL 註入檢測程序 SQLMAP需要發送上千個 HTTP 請求數據包;交互掃描只需要重放壹個請求,附帶上掃描器標記,Agent 監控SQL 查詢函數中的掃描器標記,即可判斷是否存在漏洞,大大減少了掃描發包量。
4. 軟件組成分析軟件組成分析
(SCA)主要針對開源組件,通過掃描識別開源組件,獲取組件安全漏洞信息、許可證等信息,避免安全與法律法規風險。現有的開源組成掃描技術分為五種。(1)通過進行源代碼片段式比對來識別組件並識別許可證類型。(2)對文件級別提取哈希值,進行文件級哈希值比對,若全部文件哈希值全部匹配成功則開源組件被識別。(3)通過掃描包配置文件讀取信息,進行組件識別從而識別組件並識別許可證類型。(4)對開源項目的文件目錄和結構進行解析,分析開源組件路徑和開源組件依賴。(5)通過編譯開源項目並對編譯後的開源項目進行依賴分析,這種方式可以識別用在開源項目中的開源組件信息。
四、軟件供應鏈安全研究建議
1. 發展軟件安全工具相關技術
軟件供應鏈安全防護的落地離不開安全工具的發展使用。大力發展軟件安全工具技術,解決安全開發難點需求,進行安全前置,實現安全保護措施與軟件設計、開發同步推進。
2. 提升軟件供應鏈安全事件的防護、檢測和響應能力
軟件供應鏈安全防護需要事前、事中、事後的全方位安全防禦體系。軟件供應鏈安全攻擊事件具有隱蔽性高、傳播性強、影響程度深的特點,軟件供應鏈作為壹個復雜、龐大的系統,難免存在脆弱節點,應提升對軟件供應鏈安全攻擊事件的防護、檢測和響應能力,避免安全事件造成重大影響。
3. 構建完善軟件供應鏈安全相關標準體系
通過科研院所及標準機構完善軟件供應鏈安全標準體系,普及軟件供應鏈安全防範意識,提升企業組織對軟件供應鏈安全的重視程度,進行軟件供應鏈安全投入,推進安全建設工作落實。
4. 建立軟件供應鏈安全可信生態
實現軟件供應鏈安全需要各領域企業的***同努力。企業***建安全可信生態將滿足不同用戶、不同行業、不同場景的安全可信需求,提升業界整體軟件供應鏈安全水平。
(本文刊登於《中國信息安全》雜誌2021年第10期)