Cross-build注入攻擊:注意Web應(yīng)用程序源碼組件
黑客攻防是我們必須了解的,對于Cross-build注入攻擊,我們都知道黑客經(jīng)常查找Web應(yīng)用程序以發(fā)現(xiàn)其結(jié)構(gòu)或者操作漏洞。比較常見的查找漏洞的一種方法,是將代碼注入正在運(yùn)行的程序,這個(gè)過程在SQL注入和跨站腳本中很常見。更復(fù)雜的注入方法是建立緩沖區(qū)溢出(buffer overflow),強(qiáng)行讓程序運(yùn)行攻擊者寫的代碼。
基于注入的攻擊已經(jīng)證明十分有效,它們可能訪問私人數(shù)據(jù)或者控制受感染的計(jì)算機(jī)。軟件供應(yīng)商不斷地努力修復(fù)這些導(dǎo)致攻擊成功的漏洞。但是如果程序在編譯或者創(chuàng)建時(shí)黑客就可能注入惡意代碼,又該怎么辦呢?某些編制程序的方法使應(yīng)用程序變得很容易受到一種叫做“cross-build注入”的攻擊。
利用編制過程
現(xiàn)在的軟件應(yīng)用程序非常復(fù)雜,往往由許多不同的組件組成。為了加快應(yīng)用程序的發(fā)展,開發(fā)人員都是結(jié)合已經(jīng)寫好的源代碼和第三方組件來編制大多數(shù)軟件。畢竟,既然可以很快找到程序部件,并能集成到應(yīng)用程序中,尤其是許多組件又是開放源代碼,可以通過GNU(通用公共授權(quán))免費(fèi)獲得,為什么還要花幾星期的時(shí)間重新開發(fā)程序部件呢?
為進(jìn)一步加速開發(fā)過程,簡化項(xiàng)目管理,以及減少軟件編制時(shí)間,現(xiàn)代的編譯程序允許開發(fā)人員在項(xiàng)目設(shè)置中引用依賴關(guān)系信息(dependency information)。依賴關(guān)系信息可以從適用的代碼庫里檢索預(yù)定組件,從而自動(dòng)編制應(yīng)用程序。例如,Maven是一種非常流行且廣泛使用的編制系統(tǒng),能夠處理依賴關(guān)系管理和多項(xiàng)目關(guān)系。Maven和Ant、Ivy等相似的小工具能幫助開發(fā)人員處理大量的代碼。這類管理會導(dǎo)致cross-build injection問題。
如果開發(fā)人員在編制過程中自動(dòng)檢索開放源碼組件等外部依賴文件,那么攻擊者就有機(jī)會通過感染第三方組件將代碼嵌入目標(biāo)程序。完成這個(gè)過程有兩種方法。
第一,攻擊者能感染裝有組件的服務(wù)器,并以惡意的復(fù)制文件替代組件。第二,惡意軟件編制人員能感染計(jì)算機(jī)的DNS服務(wù)器,將需求轉(zhuǎn)給由攻擊者控制的計(jì)算機(jī)。兩種方法都很有效,因?yàn)殚_發(fā)人員及其采用的工具不會懷疑他們所使用的代碼源及代碼的完整性。大多數(shù)互聯(lián)網(wǎng)用戶都知道不能打開來路不明的郵件附件,然而軟件開發(fā)人員經(jīng)常會下載一些代碼,集成到自己的應(yīng)用程序中,而不會審核代碼究竟對程序產(chǎn)生了什么影響。如果設(shè)置編制過程自動(dòng)從互聯(lián)網(wǎng)檢索代碼,這種方法的危險(xiǎn)也就擴(kuò)大了。
風(fēng)險(xiǎn)加大
用這種方法編制應(yīng)用程序的完整性取決于提供開放源碼組件的網(wǎng)站是否安全。應(yīng)用程序還依賴用于找尋程序的網(wǎng)絡(luò)基礎(chǔ)設(shè)施。避免Cross-build注入攻擊最安全的方法就是不要采用合并依賴關(guān)系解決方案的自動(dòng)工具。如果這種方法不可行,那么開發(fā)團(tuán)隊(duì)就必須創(chuàng)建內(nèi)部代碼庫,制定需要嚴(yán)格執(zhí)行的策略,以控制新代碼或新組件加入代碼庫的過程。這些規(guī)則應(yīng)包括為保證代碼安全且合適所進(jìn)行的復(fù)審。為減輕DNS受到的攻擊,提供代碼庫的服務(wù)器應(yīng)該只提供IP地址。
如果cross-build 注入攻擊變得十分廣泛,它們就會逐漸破壞開放源碼運(yùn)動(dòng),而開放源碼軟件越來越得到認(rèn)可的現(xiàn)象也會受到影響。如果程序在編制的時(shí)候就受到感染,那產(chǎn)生的惡意行為將會毫無限制。從長遠(yuǎn)來看,我認(rèn)為數(shù)字簽名代碼和能檢驗(yàn)簽名的編制工具將會有更廣泛的用途,它們能保證代碼來自已知的出處,而且沒有經(jīng)過任何方式的篡改。
【編輯推薦】