開源軟件好處多,但供應鏈風險不容忽視
開源組件在軟件開發場景中越來越重要。無論是持續集成/部署、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事件發生時,我們才能立即做出糾正,而不必臨時對成千上萬的應用程序做劃分。但理解軟件構成還只是第一步,我們需要建立保護體系才能真正拒惡意攻擊于邊界之外。”