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