惡意網絡攻擊者對軟體供應鏈的攻擊,正向「上遊」組件蔓延,再藉助開源軟體的「信任鏈」和影響力,導致的結果之一就是破壞性更大。
Sonatype 的《2020軟體供應鏈報告》報告提出,下一代軟體供應鏈攻擊正在到來,顯著特點就是刻意針對「上遊」開源組件,進行更主動的攻擊。而此類攻擊出現的背景正是開源組件和容器的廣泛採用。
軟體供應鏈及攻擊
軟體供應鏈一詞常出現在科技公司和研究人員的表述中,Dell EMC 的產品管理總監 John Mark Walker 曾通過對比硬體供應鏈,描述傳統軟體供應鏈。
他認為,硬體的供應鏈是來源於不同地區的、許多不同合作夥伴的零部件,傳統軟體供應鏈大多是定義企業內部製作軟體,以及從第三方獲得一些商業軟體的過程。
在此模式下,供應鏈上的大部分來源於公司內部,可能來自多個工程團隊,一小部分軟體來源於公司外部,因此供應鏈主要由內部產品定義,工程團隊負責管理。另外來自第三方供應商的軟體在組合時需要做合規檢查,獲得許可。
另一個流傳較廣的定義是按照階段劃分,認為軟體供應鏈通常包括三個階段:軟體研發階段、軟體交付階段、軟體使用階段。
這種劃分通常也有助於區分不同種類的軟體供應鏈攻擊,許多大型科技公司對此都有專門的討論。騰訊安全平臺曾總結軟體供應鏈攻擊環節,阿里巴巴的工程師也曾例舉不同階段的攻擊面:
一是生產節點被攻擊,包括軟體開發涉及到的軟硬體開發環境、開發工具、第三方庫、軟體開發實施等等,軟體開發實施的具體過程還包括需求分析、設計、實現和測試等,軟體產品在這一環節中形成最終用戶可用的形態。
軟體研發階段的攻擊面包括 IDE 開發工具汙染攻擊、三方庫漏洞和後門攻擊、直接源碼汙染攻擊。
二是交付階段,交付節點被攻擊,如軟體上線的平臺、硬體。用戶通過軟體官網、公共倉庫、在線商店、免費網絡下載、購買軟體安裝光碟等存儲介質、資源共享等方式獲取到所需軟體產品的過程。
受攻擊對象比如著名的軟體下載站、Python 官方鏡像源、Github 等。 攻擊面如軟體存儲替換和篡改攻擊、傳輸劫持和捆綁下載攻擊。
三是軟體使用階段,使用節點即軟硬體的使用者被攻擊。使用軟硬體產品的整個生命周期,包括產品更新升級、維護等過程。 攻擊面包括升級劫持汙染攻擊、運行環境後門和了漏洞攻擊、三方庫 0Day 漏洞攻擊。
以上是從定義方面,較為寬泛地看傳統軟體供應鏈以及一般軟體供應鏈攻擊。但隨著雲原生和開源的發展,一些新的看法與攻擊出現了。
開源與雲原生時代的軟體供應鏈
前文 John Mark Walker 所說的傳統軟體供應鏈,是在對比包含更多開源組件的軟體供應鏈。John Mark Walker 認為,隨著開源軟體應用在增多,情況已經變得混亂了:未經驗證的許可證、未經測試的倉庫、以及狂野的開發者,這些要素使得軟體供應鏈看上去似乎不可管理。開源導致至少增加了一個額外的層次:
某個角度看,開源組件插入到產品中,和第三方商業組件插入到產品中,並沒有本質差別。但實際上,關於上遊開源組件,多數原始碼倉庫沒有任何商業保證。
此時要麼是建立自己內部的審核代碼和應用產品管理流程的方法,或者是靠中間廠商,即採用開源軟體的商業發行版,如 RedHat 和 SUSE 提供的 Linux 企業版產品。
與開源密切相關,並改變傳統軟體供應鏈的還有雲原生。容器概念和 Docker、Kubernetes 等項目的出現,改變了軟體的交付方式,進而影響到軟體供應鏈。
阿里技術團隊曾總結容器和 Kubernetes 的引入帶來的安全軟體供應鏈管理變化:
發布和迭代更加頻繁,容器的易變性也使得安全風險稍縱即逝;更多的不可控三方依賴,一旦一個底層基礎鏡像有了安全漏洞,會像病毒一樣傳遞到上層;更大範圍的全球快速分發,在分發過程中的攻擊也會使得在末端執行的時造成大規模安全風險。《2020軟體供應鏈報告》中提到的「下一代軟體供應鏈」攻擊的變化,也正是基於開源和與原生的發展——下一代軟體攻擊數量激增的背景是,開源加速了創新,也帶來大規模的使用,到2020年,世界各地的開發者對開源軟體組件和容器的需求,將超過1.5萬億個。同時,攻擊也正在積極針對開源項目。
下一代軟體供應鏈攻擊已主動向「上遊」感染
供應鏈成為攻擊媒介已經不是新發現了。Symantec 的調查顯示,2017年供應鏈網絡攻擊激增200%;2018年,CrowdStrike 的供應鏈安全性調查結果顯示,80%的 IT 專業人員認為軟體供應鏈攻擊將是企業組織在未來三年中將面臨的最大網絡威脅之一……
這次的《2020軟體供應鏈報告》提出了「下一代」的軟體供應鏈攻擊正在到來,特點是攻擊更加主動,波及範圍更廣。
數據顯示,在過去12個月,旨在大舉滲透開源的下一代網絡攻擊數量增加了430%。攻擊者正在利用軟體供應鏈達成槓桿和規模效應。
同時,下一代的軟體供應鏈攻擊更加險惡,因為攻擊者不再是等待公開披露的開發源碼漏洞,而是主動、積極地將惡意代碼注入為全球供應鏈提供信息的開源項目,通過感染「上遊」組件,向「下遊」擴散。
出現此種情況的可能原因有三個:
開源項目是協作的,有時難區分良好和惡意的社區成員;開源項目通常包含來自其他開源項目成百上千的依賴項,依賴項中可能含有已知漏洞;開源精神是建立在全球社區的「共同信任」之上,這便於攻擊者輕鬆達成目的。最常見的是類型攻擊,這是一種間接攻擊向量。此類攻擊在搜索流行組件時攻擊開發人員,是他們犯一些無辜的錯誤。如開發人員想要獲取「Iodash」原始碼,卻意外地輸入了「Iodahs」,那麼他們可能會意外地安裝一個名稱類似的惡意組件。
另一常見的是惡意代碼注入。如今年5月,GitHub 安全博客警告了針對 Apache NetBeans IDE 項目的開源供應鏈攻擊 Octopus Scanner。最終統計顯示,有26個開源項目被植入了 Octopus Scanner 後門。
一旦感染,惡意程序會尋找用戶開發系統上的 NetBeans 項目,然後將惡意負荷嵌入項目文件,每次構建都會執行惡意負荷。
如何使開源軟體供應鏈更可信
事實上,隨著軟體供應鏈攻擊的增加,企業和開發者也需要做些什麼來保障安全,提高軟體供應鏈的可信度。
《2020軟體供應鏈報告》認為,選擇開源項目應該是企業軟體開發團隊的重要戰略決策。包括識別模範的開源供應商,具有更新依賴性的項目更加安全。
報告建議項目團隊應該力爭每年至少發布4個版本,並在每個版本中升級至少80%的依賴項,更高頻率的依賴更新會帶來更高的質量和更安全的代碼。
報告還指出,面對更加惡意的軟體供應鏈攻擊,防禦的速度仍是關鍵。一直以來,所有開發者和企業都牢記面對惡意攻擊時,要積極響應。
不過該報告此處尤指開源軟體,組織必須建立起一個「快速升級態勢」,這樣他們就可以通過發現和修復生產應用程式中、脆弱的開源依賴關係,來快速響應新的漏洞披露。
除了報告中提到的「快速升級態勢」,態勢感知也是近年來常被用於確保網絡安全的方式。
「態」強調當前狀態,「勢」強調未來發展的趨勢。網絡安全領域的態勢感知,最重要的是全局視角提升對威脅的發現識別、理解分析、響應處置。態勢感知基於基於環境的、動態、整體地洞悉風險的能力,以大數據為基礎,最終是為了決策與行動,是預測能力的落地,也可看做一種「事前」發現的方式。
具體方式包括通過收集雲上安全組件信息、關聯分析組件提供的海量日誌等,全面感知威脅,得出可被理解的安全事件。又或是通過人工智慧技術,深度挖掘數據,預測雲上資產可能面臨的風險。
最後報告再次提及開源及其安全的重要度:10個開源軟體下載中有1個是脆弱的,而開源組件佔到了現代應用的90%。其研究發現生產力不一定要以降低安全性為代價。
在供應端,通過對部分開源項目的研究發現,頻繁的代碼更新、依賴更新和發布會帶來更好的結果,更新越頻繁,開源項目通常越安全。
綜上,無論是供應端還是需求端,建議都是快速行動,包括快速更新、快速應對。開源或許在某種層面上導致風險更大,但合理利用開源的協同開發,快速發布,也是解決這些風險的絕佳方式。