麻省理工學院開發出自動修復 Bug 的系統,你相信嗎?

知道91 | 站長推薦 | 2015-08-06 | 閱讀:3538

在六月下旬的計算機學會的編程語言設計與實現大會上,MIT 的研究者們展示了一個新系統,可以通過從其他更加安全的應用中自動導入相關功能,借以修復原來軟件中的危險漏洞。

麻省理工學院開發出自動修復 Bug 的系統,你相信嗎?

這個引人注目的系統叫做 CodePhage ,它借用其他程序時并不需要訪問借主應用的源碼。相反,該系統分析這個應用的執行情況,并標記出其安全檢查類別的特性。因此,即使所編寫的語言與被修復應用的語言不同,該系統仍然可以從中導出檢查功能用來修復應用。

CodePhage 將代碼導入易受攻擊的程序后,還會進行進一步分析以確保漏洞被修復。

MIT 計算機科學與人工智能研究室(CSAIL)的研究員,CodePhage 的研發領導人員 Stelios Sidiroglou-Douskos 表示:

“我們在開源庫里有大量代碼可用,數百萬計項目,而且很多項目都有類似的實現了。這些項目總有一些可以與別的許多項目共享功能的子模塊,即便那不一定是該程序的核心功能。” 有了 CodePhage,“你將逐漸建立一個集其他應用最優秀部分于一身的混合系統。”

Sidiroglou-Douskos 和他的共同作者——MIT 計算機科學和工程的教授 Martin Rinard,研究生 Fan Long 和 Rinard 組里的研究員 Eric Lahtinen——將 CodePhage 正在被修復的程序稱作是接受程序,出借功能的程序稱作是捐獻程序。要開始分析,CodePhage 需要兩個輸入樣本:一個導致接受程序崩潰,另一個則不會。今年三月,這個小組報告了一個名為 DIODE 的漏洞定位程序。該程序可以自動產生引起崩潰的輸入信息。但是用戶也許就很容易發現打開特定文件時會崩潰。

承接過去

首先,CodePhage 將“安全的”輸入信息——那些不會導致崩潰的輸入信息——傳入捐獻程序。 然后它將追蹤捐獻程序執行的一系列操作,并用一個符號表達式記錄這些操作。這個符號表達式會是一串描述操作所施加的邏輯約束的字符。

比如說,在某個時候,捐獻程序會檢查輸入信息的大小是否在某些臨界值之下。若是,CodePhage 會在持續增長的符號表達式中加入一個特定的符號,來代表在臨界值之下的狀況。它不會記錄文件的真實大小——僅僅是這次檢查所施加的約束。

接下來,CodePhage 將會導致崩潰的輸入信息傳入捐獻程序。像之前那樣,它建立起一條代表捐獻程序執行操作的符號表達式。當新的符號表達式與舊的不同的時候,CodePhage 就中斷這個過程。這一差異表明,這是一個安全輸入能夠滿足的限制條件,而能夠引起程序崩潰的輸入則不能滿足。因此,它可能是一個接受程序缺失的安全檢查。

CodePhage 分析接受程序,來尋找輸入信息在什么位置能滿足大多數但不是全部新符號表達式描述的限制。接受程序可以按與捐獻程序不一樣的順序來執行操作,它也可以用不同的形式儲存數據。但符號表達描述的是被處理過的數據的狀態,而不是處理過程本身。

在每個識別出來的位置上,CodePhage 都可以免除符號表達式描述的大多數約束,其中也包括接受程序施加的約束。從第一個位置開始,它將剩下的少量約束轉換成接受程序的語言,并將它們插入到源代碼中去。然后,它會用之前引起過崩潰的輸入再次運行接受程序。

假如程序運行良好,那么新代碼就解決了問題。如果程序崩潰了,CodePhage 就移到接受程序的下一個候選位置。如果在嘗試修補了所有的候選位置之后,接收程序依然崩潰,CodePhage 就回到捐獻程序中繼續構建符號表達式,直到它發現了另一個新舊符號表達相異的位置。

自動化未來

研究者們在七個常見的,并已被 DIODE 檢查到漏洞的開源項目上測試了 CodePhage。每個項目從二到四個捐獻程序處引進修補。在所有的實例里,CodePhage 都能夠修補脆弱的代碼,而且每次所花的時間通常在兩分鐘到十分鐘。

這些研究者解釋說,在現代商業軟件里,安全檢查可以占到代碼的百分之八十甚至更多。希望未來版本的 CodePhage 能夠通過自動插入這些檢查,大幅度減少軟件開發者們花費在枯燥工作上的時間。

Rinard 表示:

“長遠愿景是,你再也不用寫別人寫過的代碼。系統會找到那段代碼,并自動幫你把這段代碼,和其它你所需要的、能讓你的程序運作起來的代碼放在一起。”

馬薩諸塞大學埃姆郝思特校區的計算機科學教授 Emery Berger 表示:

“這個從別的有相似功能的程序那里借代碼,并且能用這個方法修補好一個本質上不能運作的程序的技術,是一個很酷的結果。老實說,我很驚訝這個方法居然真的可行。” “捐獻程序和接收程序不是同一群人寫的,他們有不同的編程標準,他們使用不同方式命名變量,他們使用各種不同類型的變量,變量或許是本地的,或者,他們在棧的更高處。 而 CodePhage 可以識別出這些聯系,然后說 ‘這些變量和那些變量有關聯。’ 用器官捐獻來比喻,它可以將從捐獻程序借取的代碼完美移植,就好像代碼本來就是那樣寫的。CodePhage 可行并且有效的這個事實,令人驚訝,太酷了。”

福彩3d开机号 如意彩票网址 tt娱乐小程序赚钱 时时彩怎玩赚钱呢 华彩彩票游戏 祖名豆奶赚钱吗 情侣手机壳定制图片忙着赚钱 手机兼职到底赚不赚钱 捕鱼游戏破解版下载 奇迹娱乐苹果 魔兽世界7.3剥皮去哪赚钱 卖淘宝店铺赚钱 宝马彩票游戏 QQ空间赚钱案例 梦幻西游干啥赚钱啊 赢彩彩票苹果 欧亿彩票首页