開源組件在軟體開發場景中越來越重要。無論是持續集成/部署、DevOps還是常規軟體更新,開源都為眾多開發者帶來了很大的幫助。
在去年發布的一份報告中,晶片設計自動化廠商Synopsys發現,2021年內有97%的代碼庫中包含開源組件。而在研究涉及的17個行業中,有4個行業(分別為電腦硬體與晶片、網路安全、能源與清潔技術,以及物聯網)參與審計的代碼庫100%包含開源片段,其他垂直行業的最低「開源含量」也有93%。
很明顯,開源的成功已經在提高效率、節約成本和增強開發者生產力方面體現得淋漓盡致。
Synopsys公司高級技術作家Fred Bals在評論博文中寫道,「開源已經是無處不在。」
但與此同時,開源軟體包在應用程序開發中的不斷普及,也給那些打算利用軟體供應鏈傳播後門的惡意黑客群體創造了前所未有的機會。
開源軟體包在開發領域的大規模應用,意味著企業往往不清楚這裡面到底有些什麼。由於在各方之間不斷過手,審查的複雜度開始直線飆升,軟體供應鏈的實際情況也愈發模糊。去年VMware的一份報告發現,由於必須依靠社區來修復漏洞,再考慮到相應的安全風險,人們對開源軟體的安全問題開始保持高度警惕。
Endor Labs是一家專司保障應用開發內開源軟體安全的廠商,該公司聯合創始人兼CEO Varun Badhwar將開源軟體稱為「我們關鍵基礎設施中的骨幹」。但他同時補充稱,也有相當一部分開發者和企業高管沒有意識到自己的應用程序已經被開源軟體所全面滲透。
Badhwar指出,縱觀所有安全漏洞,高達95%的比例源自「依賴項」——也就是由開源軟體包間接引入,而非開發者的主動選擇。
「這是個巨大的隱患,但卻常常被人們所忽視。」
逐漸摸清威脅的真面目
對開源軟體包的依賴早已不是什麼新鮮事。根據軟體供應鏈管理供應商Sonatype聯合創始人兼CTO Brian Fox的介紹,這一習慣在開發者群體中至少已經有十幾年的歷史。
Fox在採訪中表示,開發人員經常將源代碼組件拼湊起來,再向其中添加業務邏輯。通過這種方式,開源就成了軟體成果的基礎。
而近年來最顯著的趨勢性變化,就是除了大規模使用開源組件的開發者之外,人們對於IT運作的普遍認識也有所增強。
「攻擊者也摸清了開發的底細。過去這五年左右當中,出現了影響整個行業的重大變化,也就是針對供應鏈的惡意軟體攻擊開始興起。」
真正為這場變化拉開序幕的,是2020年的SolarWinds攻擊事件。與俄羅斯相關的惡意黑客入侵了該公司軟體系統並植入了惡意代碼,隨後在更新期間,用戶不知不覺間下載了惡意代碼並遭到波及。接下來又有類似的攻擊出現,先是Kaseya、之後是聲量巨大的Log4j。
從Log4j事件說開去
Fox認為,這款基於Java的日誌記錄工具,正是大量合併開源組件所引發風險的直接證明。而且這類實踐在軟體開發當中其實非常普遍。
「Log4j是軟體中的一款簡單組件。它的應用極廣,幾乎可以認為存在於任何一款Java應用程序當中,覆蓋率大概有99.99%。那麼作為攻擊者,自然有必要關注這類影響範圍巨大的目標。只要能找到利用它的辦法,就能在網際網路上「大殺四方」。這跟1990年代那會的情況完全不同,當時攻擊者得一個個研究不同Web應用程序的突破方法,因為那時候的程序會分別使用自己的定製代碼。」
所以從本質上講,企業「已經把90%的開發工作外包給了我們既不認識、也不信任的人。這聽起來很可怕,但過去十年間的事實就是如此。我們現在才剛剛開始探究這到底意味著什麼。」
Log4j還凸顯出軟體供應鏈中的另一個問題,即如何判斷一款軟體對於開源代碼的依賴程度。而且儘管修復補丁早已發布,但估計仍有29%的Log4j下載量對應的是未修復版本。
根據Sonatype公司的分析,企業客戶在大多數情況下使用的都是易受攻擊的組件版本。經過修復的版本不是沒有,但企業很少全貌和。Fox稱,這個問題需要安全意識教育來解決。「96%的問題都出在人們繼續吃「髒東西」上,大家往往沒有意識去挑選乾淨的版本來用。」
矛頭指向代碼倉庫
開源軟體普及帶來的另一大威脅是:黑客開始將惡意軟體注入GitHub、Python軟體包索引(PYPI)和NPM等代碼倉庫當中。利用依賴項混亂揚起的迷霧,惡意黑客開始為各種流行軟體開發惡意版本,並誘導開發者將其納入自家軟體。
比方說,他們可能把正確軟體中的破折號替換成下劃線,這樣粗心的開發者就很可能選定了錯誤的組件。
Fox認為,「這裡的挑戰在於,開發者一旦開始獲取錯誤的組件版本,攻擊就已經開始了。這跟以往通過瀏覽器主動下載不一樣,現在的下載過程被隱藏在了工具中、發生在幕後,這同樣有可能導致惡意軟體的傳播。」
「這類攻擊手段的複雜度不高,有些惡意組件甚至懶得把自己偽裝成合法組件。不編譯、不測試,只是把有效載荷發布出來。就這麼簡單粗暴,也仍不乏受害者上鉤。」
防禦方正在集結
儘管開源軟體存在固有的安全風險,但其優勢仍然不可否認。Fox強調,開源軟體比商業軟體更透明、更清晰。他仍然以Log4j事件為例,當時貢獻團隊在幾天內就放出了修復程序,這是商業組織很難做到的。
網路安全服務商Vulcan Cyber的高級技術工程師Mike Parkin對此表示贊同,他認為開源模型的公開性是把雙刃劍——既有助於緩解網路威脅,也可能拉低潛在的攻擊門檻。
Parkin在採訪中指出,「從歷史角度看,應該還是開發者相對更占優勢。」
SolarWinds事件也讓人們開始認真關注軟體供應鏈的安全問題。以總統拜登的2021年網路安全行政令為基礎,白宮方面於2022年9月正式要求各聯邦機構在使用第三方軟體時必須遵循NIST指南,包括軟體開發商需要自證安全並提交軟體材料清單(SBOM)。
軟體開發商也在推動廣泛努力,希望加強軟體供應鏈的整體安全性。具體手段包括開放軟體供應鏈攻擊參考,發布漏洞可用性交流(VEX)等工具,並使用由各網路安全廠商開發的相關產品。
但這還不夠,Sonatype公司的Fox希望看到更多舉措——例如要求軟體開發商召回存在缺陷的軟體組件。而這項工作的前提條件,就是首先普及軟體材料清單。Fox將其與汽車製造業進行了比較:廠商只需要向買家提供一份零配件清單,即可明確責任劃分。如果證實是其中某一配件的缺陷,則整車本體不需要召回。
「軟體也應該建立起類似的召回機制,這意味著開發商知道用了哪些組件、這些組件來自哪裡,還有應用程序的正常運行依賴於哪些開源軟體版本。只有這樣,安全隱患才有被發現和管理起來的可能。這才是正確的安全發展方向。」
Fox還希望各方能專注於維護開源軟體包。政府在這方面已經有所行動,《歐盟網路彈性法案》也談到了軟體召回問題,只是相關表述還不夠確切。在這方面,美國很可能會走在世界前列。
他也提到了組件級防火牆的想法,這些防火牆的性質類似於檢查網路流量並提前阻斷惡意資訊的數據包防火牆,區別是在組件層級上阻止惡意代碼損害軟體失。
「如果我們壓根不了解軟體里有些什麼,那就不可能搞清楚裡面有沒有惡意軟體。這不僅代表著易受攻擊,甚至可以說是種「我為魚肉」的消極姿態。只要被對方觸及,惡意黑客就能立刻製造傷害。而且很遺憾,大多數人還沒有認真思考過這個問題。」
Sonatype公司的方案是將Nexus防火牆構建至平台當中,依託於衍生自信用卡欺詐保護的技術阻斷惡意代碼。防火牆理解正常運作時的狀態,並利用AI和機器學習技術檢測異常活動。2022年,該防火牆就標記出了108000多次惡意攻擊嘗試。
「很多組織甚至壓根沒有意識到這個問題。但現實就是如此,惡意黑客們仍然逍遙法外、肆無忌憚。」
不止如此,防火牆功能還需要跟軟體材料清單結合起來。
「沒錯,必須了解軟體中的各部分組件在哪。這樣當下一次Log4j事件發生時,我們才能立即做出糾正,而不必臨時對成千上萬的應用程序做劃分。但理解軟體構成還只是第一步,我們需要建立保護體系才能真正拒惡意攻擊於邊界之外。」