何謂軟件移植?它們?nèi)绾涡迯?fù)受損代碼?它會在企業(yè)軟件生命周期中占據(jù)一席之地嗎?此外,它們是否會導(dǎo)致更多的軟件漏洞和安全漏洞?
Michael Cobb:軟件開發(fā)人員喜歡從網(wǎng)上復(fù)制和粘貼密碼。不管是關(guān)于一個(gè)函數(shù)如何工作的、一個(gè)代碼片段還是多行開源庫。這節(jié)省了大量的時(shí)間和金錢,且可以讓開發(fā)人員能快速添加特性和功能,而無需從頭開始創(chuàng)建。
在開發(fā)一個(gè)應(yīng)用時(shí),開發(fā)團(tuán)隊(duì)可以很輕易地使用從網(wǎng)上找來的一百種以上的開源庫、框架和帶有代碼片段的工具?!?014 Sonatype開源開發(fā)調(diào)查》發(fā)現(xiàn),一個(gè)典型應(yīng)用的90%都是由開源組件“組裝”而成的,其中有很多也帶有已知的安全漏洞。
這是一個(gè)十分嚴(yán)重的問題:同樣的受損代碼可被成千上萬的應(yīng)用重復(fù)使用。實(shí)際上在最近的OWASP前10名應(yīng)用程序漏洞列表上這已經(jīng)顯現(xiàn)出來。
為了解決這一問題,麻省理工學(xué)院的研究人員想出了一種方法——用從其他運(yùn)行正確的程序的代碼替代受損代碼,這是最佳的一種自我完善的模式。他們的系統(tǒng)被稱作CodePhage,它能識別并解決常見的編程錯(cuò)誤,例如越界訪問、整數(shù)溢出和“除以0”的錯(cuò)誤。
CodePhage通過分析受損代碼如何處理數(shù)據(jù)不會造成奔潰或故障以及會造成失誤的代碼來工作的。然后會將帶有錯(cuò)誤的輸入內(nèi)容反饋給原來的程序并記錄究竟是哪些檢查并約束其安全地處理輸入,通常都是一個(gè)函數(shù)或?qū)彶檩斎霐?shù)據(jù)的程序。之后檢查一下嵌入的代碼是否已經(jīng)修正這個(gè)錯(cuò)誤。如果還沒有,它會繼續(xù)尋找兩個(gè)程序在處理輸入方面的差異。CodePhage不需要訪問來源應(yīng)用的開源代碼,它能夠從已用編程語言寫好的應(yīng)用中開啟檢查,而不是從正在修復(fù)的程序中。
對各種常用開源程序(在這些程序中他們包括錯(cuò)誤輸入的產(chǎn)生器DIODE已被發(fā)現(xiàn)存有漏洞)進(jìn)行早期測試看上去是非常有前景的,每次在2~4個(gè)來源應(yīng)用中使用,受損代碼可在2~10分鐘解決。
因?yàn)楹芏嗑幋a時(shí)間可確保數(shù)據(jù)輸入不會干擾到程序的預(yù)期流動,CodePhage能夠通過在開發(fā)過程中自動糾正代碼錯(cuò)誤從而節(jié)省開發(fā)時(shí)間。作為一個(gè)自動代碼分析和修復(fù)工具,CodePhage前途無量,企業(yè)開發(fā)團(tuán)隊(duì)可時(shí)刻關(guān)注其動向,如果有可能的話將其納入到自己的構(gòu)建過程中。如果開發(fā)人員棄安全代碼實(shí)踐于不顧,而只是依賴將其嵌入至重要安全檢查中,那么這將是對該技術(shù)的濫用。