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