開源軟件的供應鏈是否存在安全風險?
去年發生了一些令人震驚的攻擊,這使得開源軟件供應鏈的安全性備受質疑。成千上萬的計算機被一個免費的安全軟件工具CCleaner故意損壞,同一周內一群黑客向Python Package Index(PyPI)(Python的公共軟件包存儲庫)添加了故意損壞的Python庫,這些軟件包成功使得企業、政府和軍事網站工作的Python程序員中招。這些攻擊發生在臭名昭著的Equifax泄露事件發生后的幾個月,Equifax泄露事件利用了開源Java Web框架庫。從那以后,很多組織增加了對安全態勢的重視程度。Python軟件基金會迅速為PyPI添加了黑名單功能,防止任何人更新流行的Python軟件包。此外,GitHub開始向RubyGems for Ruby和npm for Javascript中的已知易受攻擊庫的項目維護人員發出警報,并計劃在今年晚些時候為Python添加警報。
那么,這是否意味著開源軟件可以安全地再次使用?
答案是不完全是,企業為了更好地保護自己,需要了解開源軟件供應鏈的工作原理,我們生活中幾乎所有的設備都包含一個嵌入式開源軟件和運行時庫的復雜系統。
開源軟件的開發任何人都可以創建軟件包,任何人都可以使用其他軟件包。這種混雜的共享可以提高每個人的工作效率,開發人員可以借用并改進其他人的工作,從而減少必須單獨編寫的代碼量。
不幸的是,要理解別人上傳的軟件非常困難,人們可能會惡意地改變供應鏈中的數據包或庫。以PyPi為例,攻擊者會使用“typosquatting”,他們上傳了一個名為“bzip”的庫,模仿“bz2file”。很多臨時使用庫的用戶不知道其中的差異,當他們使用修改后的庫時,數據包的開發者能夠看到這些庫的使用。在另一次攻擊中,有人簡單地提交了現有標準庫軟件包的新版本,名稱相同但是內容是惡意的版本。
讓事情變得復雜的原因之一是,普遍的感染往往不是攻擊者的動機。以CCleaner為例,超過10萬臺感染機器只是附帶損害,襲擊者初始的目標只是大約18家公司,他們需要的只是這些公司使用的一個妥協包。
Python基金會,GitHub和其他公司已經在采取這些類型的漏洞方面采取了重要措施,但企業和開源社區可以做更多的事情來阻止它們。
開源軟件的開發任何人都可以創建軟件包,任何人都可以使用其他軟件包。這種混雜的共享可以提高每個人的工作效率,開發人員可以借用并改進其他人的工作,從而減少必須單獨編寫的代碼量。