麻省理工學(xué)院(MIT)發(fā)明漏洞自動(dòng)修復(fù)系統(tǒng)
在上月計(jì)算機(jī)協(xié)會(huì)編程語言設(shè)計(jì)與實(shí)現(xiàn)會(huì)議上(Association for Computing Machinery's Programming Language Design and Implementation),MIT研究人員展示了一個(gè)新的系統(tǒng),能夠通過導(dǎo)入其他更為安全的應(yīng)用程序功能,自動(dòng)修復(fù)危險(xiǎn)的軟件漏洞。
漏洞自動(dòng)修復(fù)系統(tǒng):CodePhage
該系統(tǒng)稱為CodePhage,它在自動(dòng)“借用”其他程序的功能時(shí)并不需要獲取源代碼。因此,被導(dǎo)入程序(即Donor捐獻(xiàn)者,后文簡稱D)的開發(fā)語言并不重要。一旦用于修復(fù)的代碼導(dǎo)入至有漏洞的應(yīng)用程序(即Recipient接收者,簡稱R)中,CodePhage可以提供一個(gè)更深層的分析,以確保漏洞被修復(fù)。
MIT 計(jì)算機(jī)科學(xué)與人工智能實(shí)驗(yàn)室(CSAIL)CodePhage開發(fā)負(fù)責(zé)人Stelios Sidiroglou-Douskos表示,
“在開源庫中,我們有大量的源代碼可供使用,這些數(shù)以百萬計(jì)的項(xiàng)目以及大量規(guī)范相似的項(xiàng)目實(shí)現(xiàn)。隨著時(shí)間的推移,你需要完成的就是從這些項(xiàng)目中獲取***的組件來構(gòu)建CodePhage——這一混合系統(tǒng)。”
開始分析時(shí),CodePhage需要兩個(gè)樣本值輸入:一個(gè)會(huì)造成 R 崩潰,另一個(gè)則不會(huì)。一個(gè)稱為DIODE的漏洞定位程序可自動(dòng)生成引起崩潰(crash-inducing)輸入。但用戶僅僅認(rèn)為是打開了一個(gè)特定文件而引發(fā)的崩潰事故。
系統(tǒng)運(yùn)行過程
首先,CodePhage為 D 提供了一個(gè)不會(huì)引起崩潰的“安全”輸入。然后跟蹤 D 的執(zhí)行操縱序列并使用符號(hào)表達(dá)式記錄下它們,這里的符號(hào)表達(dá)式(symbolic expression,簡稱SE)是一串描述操作系統(tǒng)施加的邏輯約束符號(hào)。
在某些情況下,比如可能會(huì)檢測 D 的輸入是否小于某個(gè)閾值。如果結(jié)果是小于的,CodePhage將添加一個(gè) SE 術(shù)語來表示該情況低于閾值。這里并不記錄文件的實(shí)際大小,僅僅是通過檢測施加限制約束。
接下來,CodePhage為 D 提供一個(gè)引起崩潰的輸入。它再一次構(gòu)建了一個(gè)SE來代表 D 執(zhí)行的操作程序。但是當(dāng)新的SE從舊的當(dāng)中分離出時(shí),CodePhage會(huì)中斷其過程。這一偏差(divergence)就是了安全輸入會(huì)遇到的約束而引起崩潰的輸入不會(huì)遇見。因此,這可能是R安全檢測所缺失的部分。
然后CodePhage分析 R 程序以尋找大多數(shù) SE 所限制輸入的位置,但不是全部。R能以不同的順序執(zhí)行不同的操作,而非完全按照施者所做的,同時(shí)可以儲(chǔ)存不同形式數(shù)據(jù)。在這個(gè)過程之后,SE 描述了數(shù)據(jù)的狀態(tài),而非過程本身。
在每個(gè)標(biāo)識(shí)的位置,CodePhage能夠不受大部分 SE 的約束——同樣適用 R。從***個(gè)位置開始,CodePhage將仍然留在 R 程序語言中的少量約束轉(zhuǎn)化成新代碼,并將其插入源代碼中。然后再次運(yùn)行引起崩潰輸入。
如果程序可以運(yùn)行,則新代碼解決了這個(gè)問題。如果沒有,CodePhage會(huì)移動(dòng)到R的下一個(gè)候選位置。如果項(xiàng)目依舊崩潰,即使在CodePhage已經(jīng)嘗試修復(fù)了所有候選位置之后,它仍會(huì)重返 D 程序,并繼續(xù)建立 SE,直至找到下一個(gè)偏差。
<上述內(nèi)容專業(yè)性很強(qiáng),小編翻譯的比較生澀……具體請(qǐng)查看原文>
自動(dòng)化的未來
研究人員在發(fā)現(xiàn)漏洞的DIODE七個(gè)常見開源項(xiàng)目中測試了CodePhage,每個(gè)從 D 導(dǎo)入了兩個(gè)到四個(gè)數(shù)量不等的漏洞修復(fù)。在所有情況下,CodePhage均能夠修復(fù)漏洞代碼,并且每個(gè)修復(fù)只需要二到十分鐘時(shí)間。
安全檢測占據(jù)了現(xiàn)代商業(yè)軟件80%甚至更多的代碼。研究者希望未來CodePhage的版本中可以實(shí)現(xiàn)自動(dòng)檢查并插入系統(tǒng),從而大大減少軟件開發(fā)者花費(fèi)在繁重工作中的時(shí)間,解放程序員。
開發(fā)者之語
MIT計(jì)算機(jī)科學(xué)與工程教授Martin Rinard說,
“未來的愿景是,你再也不需要寫一段別人曾寫過的代碼。這個(gè)系統(tǒng)能夠發(fā)現(xiàn)代碼,并無論是何種代碼都能自動(dòng)把它們連在一起,讓你的程序運(yùn)行起來。
借用另一個(gè)具有相似功能程序代碼的技巧,并且用來修復(fù)一個(gè)基本上已經(jīng)壞掉的程序,這是非??岬倪^程。說實(shí)話,我很驚訝它竟然能夠運(yùn)行。”
Berger解釋說,
“施者程序并不是相同的人寫的。他們有不同的編碼標(biāo)準(zhǔn);對(duì)變量的命名也不同;使用完全不同的變量;這些變量可以是本地的;或者是更高的堆棧。CodePhage能夠識(shí)別這些鏈接,并判斷‘這些變量與這些變量有關(guān)聯(lián)’。與器官捐贈(zèng)相似,通過遺傳密碼的轉(zhuǎn)移讓個(gè)體更***。它的工作原理及最終成果真的很令人驚訝,這非??帷?rdquo;