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