開源代碼管理:如何安全地使用開源庫?
在開發(fā)內(nèi)部和外部應(yīng)用程序時(shí),企業(yè)越來越多地使用開源代碼——這是合理的。使用免費(fèi)預(yù)構(gòu)建的組件,而不用自行編寫代碼,能夠顯著縮短應(yīng)用開發(fā)時(shí)間和提高軟件開發(fā)成功概率。在開發(fā)應(yīng)用程序時(shí),開發(fā)團(tuán)隊(duì)可以輕松使用上百種以上的開源庫、框架和工具,以及無數(shù)來自互聯(lián)網(wǎng)的代碼。
然而,開源代碼有風(fēng)險(xiǎn)——即使是最廣泛認(rèn)可的代碼庫也一樣。沒有人能保證開源代碼不會(huì)有Bug,也不保證它在開發(fā)過程中采用了符合企業(yè)應(yīng)用要求的開源代碼管理流程。即使開源項(xiàng)目有一個(gè)活躍的用戶社區(qū),它也可能有新舊漏洞。例如,今年開源Ruby on Rails Web應(yīng)用框架已經(jīng)遇到幾次安全漏洞攻擊,估計(jì)有200,000多個(gè)網(wǎng)站可能受到遠(yuǎn)程執(zhí)行代碼的攻擊。更壞的是,這些Bug是在2007年出現(xiàn)的,這意味著6年多來這個(gè)框架的所有版本都有這樣的問題。在本文中,我們將介紹使用開源代碼給企業(yè)應(yīng)用帶來的風(fēng)險(xiǎn)范圍,以及使用開源代碼管理技術(shù)降低風(fēng)險(xiǎn)的方法。
開源代碼與易受攻擊的組件
有人認(rèn)為開源代碼給企業(yè)應(yīng)用帶來的風(fēng)險(xiǎn)很有限,因?yàn)樵S多時(shí)候開源代碼只應(yīng)用于有限的應(yīng)用組件。然而,應(yīng)用的組件幾乎總是擁有整個(gè)應(yīng)用的全部權(quán)限,所以一個(gè)有問題組件的總是可能會(huì)造成嚴(yán)重的后果。
任何代碼的漏洞危害可能很小也可能很嚴(yán)重,攻擊難度也可大可小,但是通用框架、庫或組件上出現(xiàn)的漏洞則明顯有較高的風(fēng)險(xiǎn)?,F(xiàn)在的免費(fèi)黑客工具集更新很快,它們會(huì)將這些新發(fā)現(xiàn)的漏洞添加到自動(dòng)掃描程序中,這樣使用這些問題代碼的應(yīng)用程序就會(huì)很快被搜索到,然后遭受到攻擊,不僅高級(jí)黑客可以發(fā)起攻擊,一些使用自動(dòng)化攻擊工具的初級(jí)黑客也可以攻擊。
在新應(yīng)用中出現(xiàn)這些有漏洞的組件是很嚴(yán)重的問題,因此它出現(xiàn)在最新的OWASP十大應(yīng)用漏洞列表。在前一個(gè)版本的OWASP列表上,它屬于更一般的“安全配置錯(cuò)誤”條目,但是它現(xiàn)在成為一個(gè)獨(dú)立條目——第9條:“使用有已知漏洞的組件”。
例如,OWASP指出,有2個(gè)帶漏洞的組件在2011年下載次數(shù)達(dá)到2200萬。第一位就是繞過Apache CXF的身份驗(yàn)證:Apache CXF框架無法提供一個(gè)身份令牌,因此攻擊者可以有完整權(quán)限去執(zhí)行任何Web服務(wù)。第二位是開源Java框架Spring中濫用的表達(dá)式語言,它允許攻擊者執(zhí)行任意代碼,從而控制整個(gè)服務(wù)器。這樣的后果是什么?只要企業(yè)應(yīng)用程序使用了這些有問題的框架,它們就可能成為了攻擊者手上的玩物。
通過開源代碼管理實(shí)現(xiàn)軟件安全性
使用開源代碼的好處肯定勝過于從零開始開發(fā)應(yīng)用程序所需要的時(shí)間與資源,但是另一方面,企業(yè)仍然必須使用一個(gè)流程保證所有第三方代碼的更新。大多數(shù)開發(fā)團(tuán)隊(duì)甚至不知道其中一些代碼的來歷,更不用說更新版本了。
可是,并非所有開源項(xiàng)目都使用一種可以理解的版本編號(hào)機(jī)制,因此漏洞報(bào)告并不總能夠確切指出有漏洞的組件版本。幸好,CVE和NVD等網(wǎng)站提供了方便搜索與查詢這些信息的服務(wù)。
要改進(jìn)開源代碼的管理,開發(fā)團(tuán)隊(duì)必須先創(chuàng)建和維護(hù)一個(gè)最新的第三方代碼使用列表,其中包括所有依賴代碼和來源。為每一個(gè)來源指定一位負(fù)責(zé)人,專職跟蹤?quán)]件列表、新聞和更新。這不應(yīng)該只是一種被動(dòng)的活動(dòng);因?yàn)椴⒎撬行侣┒炊紩?huì)報(bào)告到一個(gè)集中的信息中心,所以還需要監(jiān)控公共安全郵件列表。有一些團(tuán)隊(duì)可能發(fā)現(xiàn)他們必須減少所使用的代碼來源數(shù)量,才能提高管理效率;而且,肯定還要制定一個(gè)管理代碼使用的策略,如業(yè)務(wù)案例、風(fēng)險(xiǎn)評(píng)估和可接受授權(quán)。
如果一個(gè)應(yīng)用程序使用了有問題的代碼,那么首先要檢查它是否使用了包含漏洞的那部分代碼,然后評(píng)估它是否存在需要處理的風(fēng)險(xiǎn)。一定要注意,許多開源項(xiàng)目并沒有發(fā)布補(bǔ)丁;相反,它們通常都通過發(fā)布新版本來修復(fù)問題。要有緊急響應(yīng)計(jì)劃來處理一些重要版本發(fā)布,因?yàn)樵S多連接互聯(lián)網(wǎng)的應(yīng)用都應(yīng)該嚴(yán)格審查,它們可能需要一種快速響應(yīng)措施,才能防止攻擊者成功攻破漏洞。
使用開源庫的企業(yè)開發(fā)者應(yīng)該知道開源代碼的風(fēng)險(xiǎn)。即使這些代碼能夠顯著減少軟件開發(fā)時(shí)間,使用它們也可能會(huì)不必要地增加企業(yè)應(yīng)用程序的漏洞,從而提高組織的風(fēng)險(xiǎn)級(jí)別,最終需要更多的時(shí)間去處理風(fēng)險(xiǎn)。要預(yù)先注意這些問題,企業(yè)就可以安全地使用開源庫和框架,而不會(huì)將應(yīng)用及整個(gè)組織置于不必要的風(fēng)險(xiǎn)中。