專利名稱:整形溢出漏洞的二進(jìn)制檢測定位裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明提供了一種二進(jìn)制漏洞的檢卿定位裝置,.特別是一種整形溢出漏洞的 二進(jìn)制檢測定位裝置。
背景技術(shù):
整形溢出漏洞是著名的軟件安全漏洞之一,在(:或0++程序中尤為突出。整形
溢出漏洞分為兩類:整形下溢出(IntegerUnderflow); (2)整形上溢出 (IntegerOverflow) 。 2006年CVE(ComraonVulnerabilityandExploit)指出緩沖區(qū) 溢出漏洞(bufferoverflow)呈下降趨勢,而整形溢出漏洞呈上升趨勢。值得注意 的是,2006年整形溢出在系統(tǒng)漏洞中的排名首次升至第二位,僅次于緩沖區(qū)溢出。 更重要的是,整形溢出漏洞往往會(huì)觸發(fā)很嚴(yán)重的攻擊,如任意代碼執(zhí)行 (arbitrarycodeexecution),拒絕月艮務(wù)攻擊(denialofservice), 等等。
整形溢出漏洞一般與程序語義相關(guān),因此很難被檢測和定位。程序員經(jīng)常忽 視,甚至對(duì)整形溢出漏洞知之甚少。標(biāo)準(zhǔn)編譯器,如GCC,對(duì)整形溢出漏洞也不能 提供警告或錯(cuò)誤信息。更糟糕的是,整形溢出漏洞常常與某些攻擊方法結(jié)合,共 同產(chǎn)生內(nèi)存錯(cuò)誤。現(xiàn)有的安全工具幾乎都不能檢測并定位整形漏洞。
此外,與有源代碼的程序相比,二進(jìn)制程序缺少顯式的類型信息,需要從某 些特定的操作和函數(shù)定義中獲得這些信息。
特別是,目前整形溢出漏洞檢測工具很少,而且至少存在如下的缺點(diǎn)之一-(1)需要源代碼(2)人工參與(3)檢測誤報(bào)率和漏報(bào)率高(4)不能定位整形漏洞代 碼。目前,在二進(jìn)制程序分析工具中,典型的工具是Valgrind,它將二進(jìn)制代碼轉(zhuǎn) 換成VEX中間代碼,并在此中間代碼上進(jìn)行分析。在Valgrind上,已經(jīng)出現(xiàn)了許 多功能插件,如內(nèi)存錯(cuò)誤分析插件Memcheck,類型引用插件Catchconv等。本發(fā) 明基于Valgrind以及Catchconv,檢測和定位整形溢出。相關(guān)文獻(xiàn)可見N. Nethercote and J. Seward. Valgrind: A framework for heavy weight dynamic binary instrumentation. In Proceedings of PLDI 2007, San Diego, California, USA, June 2007; J". Seward and N. Nethercote. Using valgrind to detect undefined value errors with bit-precision. In Proceedings of the USENIX05 Annual Technical Conference, Anaheim, California, USA, April 2005; D. A. Molnar and D. Wagner. Catchconv: Symbolic execution and run-time type inference for integer conversion errors. Technical Report UCB/EECS-2007-23, EECS Department, University of California, Berkeley, February 2007。
發(fā)明內(nèi)容
發(fā)明目的本發(fā)明的目的在于針對(duì)現(xiàn)有技術(shù)的不足,提供一種對(duì)沒有源代碼 的二進(jìn)制程序的進(jìn)行保護(hù)的整形溢出漏洞的二進(jìn)制檢測定位裝置。
技術(shù)方案本發(fā)明公開了一種整形溢出漏洞的二進(jìn)制檢測定位裝置,該裝置包括以下單元
用于將二進(jìn)制代碼轉(zhuǎn)換成VEX中間代碼的代碼轉(zhuǎn)換單元;
信息記錄單元,所述信息記錄單元包括用于記錄變量的類型信息的類型信 息提取模塊;用于記錄變量的最新值的數(shù)值^^;i提取模塊;用于記錄算術(shù)運(yùn)算及 其操作數(shù)的算術(shù)運(yùn)算提取模塊;用于記錄賦給變量最新值指令地址的指令地址提 取模塊;
檢測定位單元,所述檢測定位單元包括整形數(shù)上溢出檢測模塊以及整形數(shù) 下溢出檢測模塊。
本發(fā)明中,優(yōu)選地,所述代碼轉(zhuǎn)換單元通過二進(jìn)制分析工具Valgrind將二進(jìn) 制代碼轉(zhuǎn)換成指令代碼集VEX;包括對(duì)寄存器的讀/寫指令、對(duì)內(nèi)存的讀/寫指令、 對(duì)臨時(shí)變量的讀/寫指令、對(duì)常量的讀指令。
本發(fā)明中,優(yōu)選地,所述二進(jìn)制分析工具Valgrind插入類型引用插件 Catchcorw后,所述類型信息提取模塊的類型信息通過符號(hào)跳轉(zhuǎn)指令、庫函數(shù)定義 以及操作數(shù)的大小信息獲得。
本發(fā)明中,優(yōu)選地,類型信息提取模塊提取的類型信息包括寬度信息和符號(hào) 信息;所述寬度信息包括8bits、 16bits、 32bits;符號(hào)信息包括有符號(hào)和 無符號(hào)。
本發(fā)明中,優(yōu)選地,所述數(shù)值信息提取模塊將內(nèi)存寫指令所寫的數(shù)值記錄下 來,并且通過內(nèi)存讀指令,寄存器讀寫指令,臨時(shí)變量讀寫指令,將數(shù)值傳遞給 寄存器以及臨時(shí)變量。本發(fā)明為每個(gè)內(nèi)存變量、寄存器以及臨時(shí)變量分配額外的 數(shù)值空間,用來存放它們的最新值。所謂最新值,是指程序執(zhí)行時(shí)刻該操作數(shù)的 值。分兩種情況記錄數(shù)值信息(1)當(dāng)遇到內(nèi)存寫指令時(shí),將所寫的數(shù)值作為該 內(nèi)存變量最新值記錄下來;(2)當(dāng)遇到內(nèi)存、寄存器或臨時(shí)變量讀指令時(shí),先將 讀出的數(shù)值保存,并將該數(shù)值通過寄存器、臨時(shí)變量寫指令,暫時(shí)保存在寄存器 或臨時(shí)變量中,該數(shù)值會(huì)隨著賦值,運(yùn)算等操作傳播。
本發(fā)明中,優(yōu)選地,所述指令地址提取模塊記錄內(nèi)存寫操作以及算術(shù)運(yùn)算所 對(duì)應(yīng)的指令地址。該地址信息由VEX語句1st—Imark提供,記錄在該指令對(duì)應(yīng)的 操作數(shù)中。本發(fā)明為每個(gè)內(nèi)存變量、寄存器以及臨時(shí)變量分配額外的地址空間, 用來記錄指令地址。
本發(fā)明中,優(yōu)選地,所述整形數(shù)上溢出檢測模塊包括以下步驟
步驟SIOO,根據(jù)信息記錄單元提取的寬度信息,判斷操作數(shù)的長度n,有三 種類型8bits, 16bits, 32bits;
步驟S200,根據(jù)信息記錄單元提取的類型信息,判斷操作數(shù)的符號(hào)類型是無 符號(hào)數(shù),還是有符號(hào)數(shù),并結(jié)合寬度信息,記操作數(shù)的類型為Signed n或者 Unsigned n,如果是有符號(hào)數(shù)則執(zhí)行步驟S300,否則執(zhí)行步驟S400;
步驟S300,則根據(jù)信息記錄單元提取的算術(shù)運(yùn)算信息,判斷與該操作數(shù)相關(guān)的算術(shù)運(yùn)算是加法還是乘法操作,如果是有符號(hào)數(shù)加法運(yùn)算執(zhí)行步驟S500,否則 執(zhí)行步驟S600;如果既不是加法運(yùn)算也不是乘法運(yùn)算,則執(zhí)行步驟S900;
步驟S400,根據(jù)信息記錄單元提取的算術(shù)運(yùn)算信息,判斷與該操作數(shù)相關(guān)的 算術(shù)運(yùn)算是加法還是乘法操作,如果是加法運(yùn)算,則執(zhí)行步驟S700,否則執(zhí)行步 驟S800;如果既不是加法運(yùn)算也不是乘法運(yùn)算,則執(zhí)行步驟S900;
步驟S500,根據(jù)信息記錄單元提取的操作數(shù)最新值信息,即程序運(yùn)行時(shí)該操 作數(shù)當(dāng)前的值,判斷加法運(yùn)算的兩個(gè)操作數(shù)是否同號(hào),如果兩個(gè)操作數(shù)同號(hào),執(zhí) 行步驟S501 ,否則執(zhí)行步驟S900;
步驟S501,根據(jù)信息記錄單元提取的操作數(shù)最新值信息,判斷兩個(gè)操作數(shù)是 否均為負(fù)數(shù),如果兩個(gè)操作數(shù)均為正數(shù)執(zhí)行步驟S502,否則執(zhí)行步驟S503;
步驟S502,判斷是否兩個(gè)正數(shù)相加有整形數(shù)上溢出。,如果有整形上溢出,判 定為漏洞,執(zhí)行步驟SIOOO,否則執(zhí)行步驟S900;
步驟S503,如果兩個(gè)操作數(shù)均為負(fù)數(shù),判斷兩個(gè)負(fù)數(shù)相加是否有整形數(shù)上溢 出發(fā)生;如果有上溢出,判定為漏洞,執(zhí)行步驟SIOOO,否則執(zhí)行步驟S900;
步驟S600,判斷有符號(hào)數(shù)乘法是否溢出,包括以下步驟
步驟S601,判斷乘法運(yùn)算的兩個(gè)操作數(shù)是否同號(hào),如果兩個(gè)操作數(shù)同號(hào),則 執(zhí)行步驟S602,否則執(zhí)行步驟S603;
步驟S602,根據(jù)信息記錄單元提取的操作數(shù)最新值信息,判斷兩個(gè)操作數(shù)是 否均為負(fù)數(shù),如果兩個(gè)操作數(shù)均為負(fù)數(shù)執(zhí)行步驟S604,否則執(zhí)行步驟S605;
步驟S603,判斷第一操作數(shù)argl的符號(hào)。
如果第一操作數(shù)argl是負(fù)數(shù),由步驟S601可知,第二操作數(shù)arg2為正數(shù), 則執(zhí)行步驟S606,判斷是否有整形數(shù)上溢出發(fā)生,如果有上溢出,則判定為漏洞, 并執(zhí)行步驟SIOOO,否則執(zhí)行步驟S900繼續(xù)運(yùn)行;
如果第一操作數(shù)argl是正數(shù),由步驟S601可知,第二操作數(shù)arg2為負(fù)數(shù), 則執(zhí)行步驟S607,判斷是否有整形數(shù)上溢出發(fā)生,如果有上溢出,則判定為漏洞, 并執(zhí)行步驟S1000,否則執(zhí)行步驟S900繼續(xù)運(yùn)行;
步驟S604,判斷是否有整形數(shù)上溢出發(fā)生,如果有,則判定為漏洞,并執(zhí)行 步驟SIOOO,否則執(zhí)行步驟S900繼續(xù)運(yùn)行;
步驟S605,判斷是否有整形數(shù)上溢出發(fā)生,如果有上溢出發(fā)生,則判定為漏 洞,并執(zhí)行步驟SIOOO,否則執(zhí)行步驟S900。
步驟S700,判斷是否有整形數(shù)上溢出發(fā)生,如果有上溢出,則判定為漏洞, 并執(zhí)行步驟SIOOO,否則執(zhí)行步驟S900;
步驟S800,判斷是否有整形數(shù)上溢出發(fā)生,如果有上溢出,則判定為漏洞, 并執(zhí)行步驟SIOOO,否則執(zhí)行步驟S900;
步驟S900,程序沒有檢測到整形上溢出,繼續(xù)正常運(yùn)行。
步驟SIOOO,根據(jù)信息記錄單元提取的指令地址信息,并由信息記錄單元記錄該指令地址信息。該地址信息就是整形上溢出漏洞的定位點(diǎn),報(bào)告該地址,整形 上溢出檢測和定位完成。
本發(fā)明中,優(yōu)選地,所述整形數(shù)下溢出檢測模塊包括以下步驟
步驟SIOIO,根據(jù)信息記錄單元提取的寬度信息,判斷操作數(shù)的長度n,有三 種類型8bits, 16bits, 32bits;
步驟S1020,根據(jù)信息記錄單元提取的類型信息,判斷操作數(shù)的符號(hào)類型是無 符號(hào)數(shù),還是有符號(hào)數(shù),并結(jié)合寬度信息,分別記錄操作數(shù)的類型為Signed n或 者Unsigned n,如果是有符號(hào)數(shù)則執(zhí)行步驟SllOO,否則執(zhí)行步驟S1105;
步驟SllOO判斷與該操作數(shù)相關(guān)的算術(shù)運(yùn)算是否為減法運(yùn)算,如果是有符號(hào) 數(shù)減法操作,則執(zhí)行步驟S1101;如果不是減法運(yùn)算,則執(zhí)行步驟S1107。
步驟SllOl,根據(jù)信息提取單元提取的操作數(shù)最新值信息,并判斷減法操作的 兩個(gè)操作數(shù)是否同號(hào),如果兩個(gè)操作數(shù)異號(hào),則執(zhí)行步驟S1102,否則執(zhí)行步驟 S1107;
步驟S1102,判斷第一操作數(shù)argl的符號(hào)。
如果第一操作數(shù)argl是負(fù)數(shù),由步驟S1101可知,第二操作數(shù)arg2為正數(shù), 則執(zhí)行步驟S1103。判斷是否有整形數(shù)下溢出發(fā)生。如果發(fā)現(xiàn)漏洞,執(zhí)行步驟 S1108,根據(jù)信息提取單元提取的指令地址信息,定位該漏洞,否則執(zhí)行步驟S1107 繼續(xù)運(yùn)行。 ,
如果第一操作數(shù)argl是正數(shù),由步驟S1101可知,第二操作數(shù)arg2為負(fù)數(shù), 則執(zhí)行步驟S1104。判斷是否有整形數(shù)下溢出發(fā)生。如果發(fā)現(xiàn)漏洞,執(zhí)行步驟S1108, 根據(jù)信息提取單元21提取的指令地址信息,定位該漏洞,否則執(zhí)行步驟S1107繼 續(xù)運(yùn)行。
步驟S1105,如果是無符號(hào)數(shù)減法操作則執(zhí)行步驟S1106;如果不是減法運(yùn)算, 則執(zhí)行步驟S1107;
步驟S1106,判斷是否有整形數(shù)下溢出發(fā)生,有則判定為漏洞,并執(zhí)行步驟 S1108,否則執(zhí)行步驟S1107繼續(xù)運(yùn)行;
步驟S1107,指程序沒有檢測到整形下溢出,繼續(xù)正常運(yùn)行。
步驟S1108,根據(jù)信息記錄單元(21)提取的指令地址信息,并由信息記錄單 元記錄該指令地址信息。該地址信息就是整形下溢出漏洞的定位點(diǎn),報(bào)告該地址, 整形下溢出檢測和定位完成。
本發(fā)明的工作流程可以分為三步首先,由代碼轉(zhuǎn)換單元20將二進(jìn)制碼轉(zhuǎn)換 成中間語言VEX,代碼轉(zhuǎn)換單元是由二進(jìn)制分析工具Valgrind完成的。其次,程 序運(yùn)行時(shí),根據(jù)所執(zhí)行的VEX語句和表達(dá)式,由信息記錄單元21提取和記錄相應(yīng) 的信息。最后,由檢測定位單元22根據(jù)記錄的信息,檢測和定位整形溢出漏洞。
有益效果本發(fā)明提出了一種整形溢出漏洞的二進(jìn)制檢測定位裝置,不需要 源代碼,全自動(dòng)的運(yùn)行,不需要人工干預(yù),能準(zhǔn)確定位漏洞代碼。本發(fā)明選取了一些具有代表性的軟件對(duì)本發(fā)明進(jìn)行測試。實(shí)驗(yàn)的主要目的是 評(píng)價(jià)本發(fā)明檢測整形漏洞的有效性。實(shí)驗(yàn)平臺(tái)
IntelPentium(R)DualE21802. OOGHz, 256MB內(nèi)存和Li麗2, 6. 15內(nèi)核。測試程序 均由gcc-3.4.0編譯,以及glibc2.3.2連接。
本發(fā)明選擇了如下軟件評(píng)估檢測整形漏洞的有效性 VLCMediaPlayerO. 8. 6i, PHP5. 2. 5, Linuxkerne12. 6. 19. 2 , GOCRO. 4. 0等。由于整 形溢出漏洞很難被模擬,在實(shí)驗(yàn)中,本發(fā)明從每個(gè)軟件中提取漏洞代碼,加上導(dǎo) 致錯(cuò)誤的輸入,轉(zhuǎn)換成相對(duì)較小的,獨(dú)立的漏洞程序進(jìn)行檢測。這些程序在本發(fā) 明的監(jiān)控下運(yùn)行。
圖9是有效性測試結(jié)果,漏洞均被檢測并定位。本發(fā)明同樣測試了誤報(bào)率, 發(fā)現(xiàn)誤報(bào)率很低,通常發(fā)生在編譯器優(yōu)化時(shí),編譯器添加溢出代碼達(dá)到優(yōu)化的效 果。
與目前的整形溢出漏洞檢測工具相比,本發(fā)明至少有四個(gè)的特點(diǎn)(l)二進(jìn)制 級(jí)不需要源代碼。(2)實(shí)時(shí)檢測程序運(yùn)行時(shí)檢測整形漏洞。(3)低誤報(bào)和漏報(bào) 率。(4)能夠準(zhǔn)確定位整形漏洞代碼。
下面結(jié)合附圖和具體實(shí)施方式
對(duì)本發(fā)明做更進(jìn)一步的具體說明,本發(fā)明的上 述和/或其他方面的優(yōu)點(diǎn)將會(huì)變得更加清楚。 圖1是本發(fā)明的系統(tǒng)結(jié)構(gòu)示意圖。 圖2是VEX指令集構(gòu)成圖。 圖3是本發(fā)明類型信息提取模塊的結(jié)構(gòu)示意圖。 圖4是本發(fā)明由比較操作提取符號(hào)類型信息示意圖。 圖5是本發(fā)明由庫函數(shù)定義提取符號(hào)類型信息示意圖。
圖6是本發(fā)明整形數(shù)上溢出檢測模塊的實(shí)施流程示意圖;其中,MaxU/MinU表 示n位無符號(hào)整數(shù)的最大/最小值;MaxS/MinS表示n位有符號(hào)整數(shù)的最大/最小值。 argl和arg2表示算術(shù)運(yùn)算的第一和第二操作數(shù)。
圖7是本發(fā)明判斷有符號(hào)數(shù)乘法溢出的實(shí)施流程示意圖。
圖8是本發(fā)明整形數(shù)下溢出檢測模塊的實(shí)施流程示意圖。
圖9是本發(fā)明有效性測試結(jié)果。
具體實(shí)施例方式
本發(fā)明建立在Valgrind3. 2. 2和CatchconvO. 1的基礎(chǔ)上。 圖l是本發(fā)明的系統(tǒng)結(jié)構(gòu)示意圖。如圖1所示,本發(fā)明所述的整形溢出漏洞
的二進(jìn)制檢測定位裝置10包括代碼轉(zhuǎn)換單元20,信息記錄單元21,檢測定位
單元22。
所述代碼轉(zhuǎn)換單元20用于將二進(jìn)制代碼轉(zhuǎn)換成與平臺(tái)無關(guān)的Valgrind中間 代碼VEX,所述VEX是一種精簡指令集,VEX指令集的語句有10種,表達(dá)式有12種。圖2是VEX指令集。如圖2所示,VEX指令集分為語句和表達(dá)式。語句和表達(dá) 式的區(qū)別是,語句修改寄存器/內(nèi)存/臨時(shí)變量,而表達(dá)式僅使用寄存器/內(nèi)存/臨 時(shí)變量的值。在VEX指令集中數(shù)據(jù)對(duì)象分為四類寄存器,內(nèi)存,臨時(shí)變量,常 量。對(duì)寄存器的讀寫指令為1st—Put, Iex_Get。對(duì)內(nèi)存的讀寫指令為 Ist_Store, lex—Load。對(duì)臨時(shí)變量的讀寫指令為Ist_tmp, lex—tmp。對(duì)常量的讀 指令為lex—Const。
所述信息記錄單元21根據(jù)程序運(yùn)行時(shí)執(zhí)行到的VEX指令,記錄四類信息來檢 測和定位整形漏洞(1)變量的類型信息,(2)變量的最新值,(3)與變量相關(guān) 的最近的算術(shù)運(yùn)算,(4)賦給變量最新值的指令地址。這四類信息分別由"類型 信息提取模塊211","數(shù)值信息提取模塊212","算術(shù)運(yùn)算提取模塊213"以及"指 令地址提取模塊214"記錄。
所述類型信息提取模塊211是建立在Valgrind插件Catchconv基礎(chǔ)上。類型 信息可以分為寬度信息和符號(hào)信息。寬度信息可以分為,8bits, 16bits, 32bits. 符號(hào)信息可以分為,有符號(hào)和無符號(hào)。圖3是類型信息提取模塊211的結(jié)構(gòu)示意 圖。如圖3所示,寬度信息可以從寄存器/內(nèi)存/臨時(shí)變量讀寫指令中提取。符號(hào) 信息可以從二元運(yùn)算中的比較操作以及庫函數(shù)定義中提取。
圖4是從二元運(yùn)算中的比較操作提取符號(hào)類型信息的示意圖。圖中"〈n〉"可 以取8, 16, 32,分別表示8bits, 16bits,32bits。根據(jù)有符號(hào)比較和無符號(hào)比較 操作,提取符號(hào)類型信息。并將符號(hào)類型信息記錄在比較操作對(duì)應(yīng)的操作數(shù)上。
圖5是從庫函數(shù)定義提取符號(hào)類型信息的示意圖。本發(fā)明從C庫函數(shù)中選取 了較常用的22個(gè)函數(shù),并且根據(jù)定義的函數(shù)參數(shù)的符號(hào)類型,提取符號(hào)類型信息。 并且記錄在參數(shù)對(duì)應(yīng)的操作數(shù)上。
所述數(shù)值信息提取模塊212,將內(nèi)存寫指令I(lǐng)st一Store所寫的數(shù)值記錄下來, 并且通過內(nèi)存讀指令,寄存器讀寫指令,臨時(shí)變量讀寫指令,將數(shù)值傳遞給寄存 器,臨時(shí)變量。本發(fā)明為每個(gè)內(nèi)存變量、寄存器以及臨時(shí)變量分配額外的數(shù)值空 間,用來存放它們的最新值。所謂最新值,是指程序執(zhí)行時(shí)刻該操作數(shù)的值。分 兩種情況記錄數(shù)值信息(1)當(dāng)遇到內(nèi)存寫指令時(shí),將所寫的數(shù)值作為該內(nèi)存變 量最新值記錄下來;(2)當(dāng)遇到內(nèi)存、寄存器或臨時(shí)變量讀指令時(shí),先將讀出的 數(shù)值保存,并將該數(shù)值通過寄存器、臨時(shí)變量寫指令,暫時(shí)保存在寄存器或臨時(shí) 變量中,該數(shù)值會(huì)隨著賦值,運(yùn)算等操作傳播。
所述算術(shù)運(yùn)算提取模塊213,將算術(shù)運(yùn)算及其操作數(shù)記錄下來,為后面漏洞的 檢測提供信息。本發(fā)明考慮三種算術(shù)運(yùn)算,力B、減、乘。本發(fā)明為每個(gè)算術(shù)運(yùn)算 結(jié)果所對(duì)應(yīng)的操作數(shù)分配額外的空間,記錄該算術(shù)運(yùn)算的名稱以及操作數(shù)。
所述地址提取模塊214,將內(nèi)存寫操作Ist_Store以及算術(shù)運(yùn)算所對(duì)應(yīng)的指令 地址Ist—Mark記錄下來。為后面漏洞的定位提供信息。
所述檢測定位單元22包括針對(duì)整形數(shù)上溢出檢測和定位的整形數(shù)上溢出檢測模塊221,針對(duì)整形數(shù)下溢出檢測和定位的整形數(shù)下溢出檢測模塊222。
—圖6J^整形數(shù)上溢出檢測模塊221的實(shí)施流程示意圖。如圖6所示,整形數(shù) 上溢出檢測和定位的步驟具體包括。
如圖6所示,步驟SIOO根據(jù)信息記錄單元21提取的寬度信息,判斷操作數(shù) 的長度n,有三種可能8bits, 16bits,32bits。
步驟S200根據(jù)信息記錄單元21提取的類型信息,判斷操作數(shù)的符號(hào)類型, 即判斷是無符號(hào)數(shù),還是有符號(hào)數(shù)。結(jié)合寬度信息,記操作數(shù)的類型為Signed n 或者Unsigned n。
步驟S300,如果是有符號(hào)數(shù),則根據(jù)信息記錄單元21提取的算術(shù)運(yùn)算信息, 判斷與該操作數(shù)相關(guān)的算術(shù)運(yùn)算是加法(Add)還是乘法(Mul)操作。如果是有 符號(hào)數(shù)加法運(yùn)算執(zhí)行步驟S500,如果是有符號(hào)數(shù)乘法運(yùn)算執(zhí)行步驟S600;如果既 不是加法運(yùn)算也不是乘法運(yùn)算,則執(zhí)行步驟S900;
步驟S500,如果是有符號(hào)數(shù)加法運(yùn)算,則根據(jù)信息記錄單元21提取的操作數(shù) 最新值信息,判斷加法運(yùn)算的兩個(gè)操作數(shù)是否同號(hào)。
步驟S501,如果兩個(gè)操作數(shù)同號(hào),則根據(jù)信息記錄單元21提取的操作數(shù)最新 值信息,判斷兩個(gè)操作數(shù)是否均為負(fù)數(shù)。如果均為正數(shù),則執(zhí)行步驟S502;如果 均為負(fù)數(shù),則執(zhí)行步驟S503。
步驟S502,如果兩個(gè)操作數(shù)均為正數(shù),則判斷是否有整形數(shù)上溢出發(fā)生。判 斷是否溢出的公式為"argK=MaXS-arg2"。如果此公式不滿足,則發(fā)現(xiàn)漏洞,執(zhí) 行步驟SIOOO,根據(jù)信息記錄單元21提取的指令地址信息,定位該漏洞。如果公 式滿足,執(zhí)行步驟S900。其中,根據(jù)操作數(shù)的寬度類型,MaxS是該寬度類型所能 表示的有符號(hào)數(shù)最大值。例如c=a+b, argl為a, arg2為b,假設(shè)a與b均為32 位有符號(hào)正數(shù),那么MaxS: 2147483647。
步驟S503,如果兩個(gè)操作數(shù)均為負(fù)數(shù),則判斷是否有整形數(shù)上溢出發(fā)生。判 斷是否溢出的公式為"argl>=MinS-arg2"。如果此公式不滿足,則發(fā)現(xiàn)漏洞,執(zhí) 行步驟SIOOO,根據(jù)信息記錄單元21提取的指令地址信息,定位該漏洞。如果公 式滿足,執(zhí)行步驟S900。其中,根據(jù)操作數(shù)的寬度類型,MinS是該寬度類型所能 表示的有符號(hào)數(shù)最小值。仍以c^+b為例,argl為a, arg2為b,假設(shè)a與b均為 32位有符號(hào)負(fù)數(shù),那么MinS= -2147483648。
步驟S600,如果是有符號(hào)數(shù)乘法,則執(zhí)行步驟S600,圖7是判斷有符號(hào)數(shù)乘 法的實(shí)施流程示意圖。
如圖7所示,步驟S601判斷乘法運(yùn)算的兩個(gè)操作數(shù)是否同號(hào)。
步驟S602,如果兩個(gè)操作數(shù)同號(hào),則根據(jù)信息記錄單元21提取的操作數(shù)最新 值信息,判斷兩個(gè)操作數(shù)是否均為負(fù)數(shù)。如果均為正數(shù),則執(zhí)行步驟S605;如果 均為負(fù)數(shù),則執(zhí)行步驟S604。
步驟S604,如果兩個(gè)操作數(shù)均為負(fù)數(shù),則判斷是否有整形數(shù)上溢出發(fā)生。判斷溢出的公式為"arg2>=MaxS/argl"。如果此公式不滿足,則發(fā)現(xiàn)漏洞,執(zhí)行步 驟SIOOO,根據(jù)信息記錄單元21提取的指令地址信息,定位該漏洞。如果公式滿 足,執(zhí)行步驟S900。其中,根據(jù)操作數(shù)的寬度類型,MaxS是該寬度類型所能表示 的有符號(hào)數(shù)最大值。以c=a*b為例,argl為a, arg2為b,假設(shè)a與b均為32位有 符號(hào)負(fù)數(shù),那么MaxS=2147483647。
步驟S605,如果兩個(gè)操作數(shù)均為正數(shù),則判斷是否有整形數(shù)上溢出發(fā)生。判 斷溢出的公式為"arg2<=MaXS/argl"。如果此公式不滿足,則發(fā)現(xiàn)漏洞,執(zhí)行步 驟SIOOO,根據(jù)信息記錄單元21提取的指令地址信息,定位該漏洞。如果公式滿 足,執(zhí)行步驟S900。其中,根據(jù)操作數(shù)的寬度類型,MaxS是該寬度類型所能表示 的有符號(hào)數(shù)最大值。以c=a*b為例,argl為a, arg2為b,假設(shè)a與b均為32位有 符號(hào)負(fù)數(shù),那么MaxS=2147483647。
步驟S602,如果兩個(gè)操作數(shù)異號(hào),則根據(jù)信息記錄單元21提取的操作數(shù)最新 值信息,判斷操作數(shù)argl的符號(hào)。
如果argl是負(fù)數(shù),由步驟S601可知,arg2為正數(shù),則執(zhí)行步驟S606,判斷 是否有整形數(shù)上溢出發(fā)生。判斷公式為"arg2<=MinS/arg2"。如果此公式不滿 足,則發(fā)現(xiàn)漏洞,執(zhí)行步驟SIOOO,根據(jù)信息記錄單元21提取的指令地址信息, 定位該漏洞。如果公式滿足,執(zhí)行步驟S900。其中,根據(jù)操作數(shù)的寬度類型,MinS 是該寬度類型所能表示的有符號(hào)數(shù)最小值。以c:a樸為例,argl為a, arg2為b, 假設(shè)a為32位有符號(hào)負(fù)數(shù),b為32位有符號(hào)正數(shù),那么MinS= -2147483648。
如果argl是正數(shù),由步驟S601可知,arg2為負(fù)數(shù),則執(zhí)行步驟S607,判斷 是否有整形數(shù)上溢出發(fā)生。判斷公式為"arg2〉=MinS/arg2"。如果此公式不滿足, 則發(fā)現(xiàn)漏洞,執(zhí)行步驟SIOOO,根據(jù)信息記錄單元21提取的指令地址信息,定位 該漏洞。如果公式滿足,執(zhí)行步驟S900。其中,根據(jù)操作數(shù)的寬度類型,MinS是 該寬度類型所能表示的有符號(hào)數(shù)最小值。以c^樸為例,argl為a, arg2為b,假 設(shè)a為32位有符號(hào)正數(shù),b為32位有符號(hào)負(fù)數(shù),那么MinS: -2147483648。
步驟S400,如果是無符號(hào)數(shù),則根據(jù)信息記錄單元21提取的算術(shù)運(yùn)算信息, 判斷與該操作數(shù)相關(guān)的算術(shù)運(yùn)算是加法(Add)還是乘法(Mul)操作。如果是無 符號(hào)數(shù)加法運(yùn)算,則執(zhí)行步驟S700,如果是無符號(hào)數(shù)乘法運(yùn)算,執(zhí)行步驟S800; 如果既不是加法運(yùn)算也不是乘法運(yùn)算,則執(zhí)行步驟S900。
步驟S700,如果是無符號(hào)數(shù)加法運(yùn)算,則判斷是否有整形數(shù)上溢出發(fā)生。判 斷是否溢出的公式為"argl〈-MaxU-arg2"。如果此公式不滿足,則發(fā)現(xiàn)漏洞,執(zhí) 行步驟S1000,根據(jù)信息記錄單元21提取的指令地址信息,定位該漏洞。如果公式 滿足,執(zhí)行步驟S900。其中,MaxU是根據(jù)操作數(shù)類型而定的最大值。以c=a+b為 例,argl為a, arg2為b。假設(shè)a和b均是32位無符號(hào)數(shù),那么MaxU=4294967295。
步驟S800,如果是無符號(hào)數(shù)乘法運(yùn)算,則判斷是否有整形數(shù)上溢出發(fā)生。判 斷是否溢出的公式為"argl《MaxU/arg2"。如果此公式不滿足,則發(fā)現(xiàn)漏洞,執(zhí)行步驟SIOOO,根據(jù)信息記錄單元21提取的指令地址信息,定位該漏洞。如果公 式滿足,執(zhí)行步驟S900。其中,MaxU是根據(jù)操作數(shù)類型而定的最大值,以c=a*b 為例,argl為a, arg2為b。假設(shè)a和b均是32位無符號(hào)數(shù),那么MaxU= 4294967295。
圖8是整形數(shù)下溢出檢測模塊222的實(shí)施流程示意圖。如圖8所示,所述整 形數(shù)下溢出檢測模塊222包括以下步驟
步驟SIOIO,根據(jù)信息記錄單元21提取的寬度信息,判斷操作數(shù)的長度n, 有三種類型8bits, 16bits, 32bits;
步驟S1020,根據(jù)信息記錄單元21提取的類型信息,判斷操作數(shù)的符號(hào)類型 是無符號(hào)數(shù),還是有符號(hào)數(shù),并結(jié)合寬度信息,分別記錄操作數(shù)的類型為Signed n 或者Unsigned n,如果是有符號(hào)數(shù)則執(zhí)行步驟SllOO,否則執(zhí)行步驟S1105;
步驟SllOO判斷與該操作數(shù)相關(guān)的算術(shù)運(yùn)算是否為減法運(yùn)算,如果是有符號(hào) 數(shù)減法操作,則執(zhí)行步驟S1101;如果不是減法運(yùn)算,程序繼續(xù)正常運(yùn)行。步驟 SllOl,根據(jù)信息提取單元21提取的操作數(shù)最新值信息,并判斷減法操作的兩個(gè) 操作數(shù)是否同號(hào),如果兩個(gè)操作數(shù)異號(hào),則執(zhí)行步驟S1103,否則執(zhí)行步驟S1107;
步驟S1102,判斷操作數(shù)的符號(hào)。
如果argl是負(fù)數(shù),由步驟S1101可知,arg2為正數(shù),則執(zhí)行步驟S1103。判 斷是否有整形數(shù)下溢出發(fā)生。判斷公式為"argl>=MinS+arg2"。如果此公式不滿 足,則發(fā)現(xiàn)漏洞,執(zhí)行步驟S1108,根據(jù)信息記錄單元21提取的指令地址信息, 定位該漏洞。如果公式滿足,執(zhí)行步驟S1107。其中,根據(jù)操作數(shù)的寬度類型,MinS 是該寬度類型所能表示的有符號(hào)數(shù)最小值。以c^-b為例,argl為a, arg2為b, 假設(shè)a為32位有符號(hào)負(fù)數(shù),b為32位有符號(hào)正數(shù),那么MinS= -2147483648。
如果argl是正數(shù),由步驟S1101可知,arg2為負(fù)數(shù),則執(zhí)行步驟S1104。判 斷是否有整形數(shù)下溢出發(fā)生。判斷公式為"argl《MaxS+arg2"。如果此公式不滿 足,則發(fā)現(xiàn)漏洞,執(zhí)行步驟S1108,根據(jù)信息記錄單元21提取的指令地址信息, 定位該漏洞。如果公式滿足,執(zhí)行步驟S1107。其中,根據(jù)操作數(shù)的寬度類型,MinS 是該寬度類型所能表示的有符號(hào)數(shù)最大值。以c^-b為例,argl為a, arg2為b, 假設(shè)a為32位有符號(hào)正數(shù),b為32位有符號(hào)負(fù)數(shù),那么MaxS=2147483647。
步驟S1105,如果是無符號(hào)數(shù)減法操作則執(zhí)行步驟S1106;如果不是減法運(yùn)算, 則執(zhí)行步驟S1107;
步驟S1106,判斷是否有整形數(shù)下溢出發(fā)生,判斷公式為"argl>=arg2"。如
果此公式不滿足,則發(fā)現(xiàn)漏洞,執(zhí)行步驟S1108,根據(jù)信息記錄單元21提取的指
令地址信息,定位該漏洞。如果公式滿足,執(zhí)行步驟S1107。 步驟S1107,指程序沒有檢測到整形下溢出,繼續(xù)正常運(yùn)行 步驟S1108,根據(jù)信息記錄單元21提取的指令地址信息,并由信息記錄單元
21記錄該指令地址信息。該地址信息就是整形下溢出漏洞的定位點(diǎn),報(bào)告該地址,
整形下溢出檢測和定位完成。本發(fā)明提供了一種整形溢出漏洞的二進(jìn)制檢測定位裝置的思路及方法,具體 實(shí)現(xiàn)該技術(shù)方案的方法和途徑很多,以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng) 指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還 可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視為本發(fā)明的保護(hù)范圍。本實(shí)施 例中未明確的各組成部份均可用現(xiàn)有技術(shù)加以實(shí)現(xiàn)。
權(quán)利要求
1、一種整形溢出漏洞的二進(jìn)制檢測定位裝置,其特征在于,該裝置包括以下單元用于將二進(jìn)制代碼轉(zhuǎn)換成VEX中間代碼的代碼轉(zhuǎn)換單元(20);信息記錄單元(21),所述信息記錄單元(21)包括用于記錄變量的類型信息的類型信息提取模塊(211);用于記錄變量的最新值的數(shù)值信息提取模塊(212);用于記錄算術(shù)運(yùn)算及其操作數(shù)的算術(shù)運(yùn)算提取模塊(213);用于記錄賦給變量最新值指令地址的指令地址提取模塊(214);檢測定位單元(22),所述檢測定位單元(22)包括整形數(shù)上溢出檢測模塊(221)以及整形數(shù)下溢出檢測模塊(222)。
2、 根據(jù)權(quán)利要求1所述的整形溢出漏洞的二進(jìn)制檢測定位裝置,其特征在于, 所述代碼轉(zhuǎn)換單元(20)通過二進(jìn)制分析工具Valgrind將二進(jìn)制代碼轉(zhuǎn)換成VEX 中間代碼;包括對(duì)寄存器的讀/寫指令、對(duì)內(nèi)存的讀/寫指令、對(duì)臨時(shí)變量的讀/ 寫指令、對(duì)常量的讀指令。
3、 根據(jù)權(quán)利要求2所述的整形溢出漏洞的二進(jìn)制檢測定位裝置,其特征在于, 所述二進(jìn)制分析工具Valgrind插入類型引用插件Catchconv后,所述類型信息提 取模塊(211)的類型信息通過符號(hào)跳轉(zhuǎn)指令、庫函數(shù)定義以及操作數(shù)的大小信息 獲得。
4、 根據(jù)權(quán)利要求3所述的整形溢出漏洞的二進(jìn)制檢測定位裝置,其特征在于, 類型信息提取模塊(211)提取的類型信息包括寬度信息和符號(hào)信息;所述寬度信 息包括8bits、16bitS、32bitS;符號(hào)信息包括有符號(hào)和無符號(hào)。
5、 根據(jù)權(quán)利要求4所述的整形溢出漏洞的二進(jìn)制檢測定位裝置,其特征在于, 所述數(shù)值信息提取模塊(212)將內(nèi)存寫指令所寫的數(shù)值記錄下來,并且通過內(nèi)存 讀指令,寄存器讀寫指令,臨時(shí)變量讀寫指令,將數(shù)值傳遞給寄存器以及臨時(shí)變里。
6、 根據(jù)權(quán)利要求4所述的整形溢出漏洞的二進(jìn)制檢測定位裝置,其特征在于, 所述指令地址提取模塊(214)記錄內(nèi)存寫操作以及算術(shù)運(yùn)算所對(duì)應(yīng)的指令地址。
7、 根據(jù)權(quán)利要求1所述的整形溢出漏洞的二進(jìn)制檢測定位裝置,其特征在于, 所述整形數(shù)上溢出檢測模塊(221)包括以下步驟步驟S100,根據(jù)信息記錄單元(21)提取的寬度信息,判斷操作數(shù)的長度n, 有三種類型8bits, 16bits, 32bits;步驟S200,根據(jù)信息記錄單元(21)提取的類型信息,判斷操作數(shù)的符號(hào)類 型是無符號(hào)數(shù),還是有符號(hào)數(shù),并結(jié)合寬度信息,記操作數(shù)的類型為Signed n或 者Unsigned n,如果是有符號(hào)數(shù)則執(zhí)行步驟S300,否則執(zhí)行步驟S400;步驟S300,則根據(jù)信息記錄單元(21)提取的算術(shù)運(yùn)算信息,判斷與該操作 數(shù)相關(guān)的算術(shù)運(yùn)算是加法還是乘法操作,如果是有符號(hào)數(shù)加法運(yùn)算執(zhí)行步驟S500, 如果是有符號(hào)數(shù)乘法運(yùn)算執(zhí)行步驟S600;如果既不是加法運(yùn)算也不是乘法運(yùn)算,則執(zhí)行步驟S900;步驟S400,根據(jù)信息記錄單元(21)提取的算術(shù)運(yùn)算信息,判斷與該操作數(shù) 相關(guān)的算術(shù)運(yùn)算是加法還是乘法操作,如果是無符號(hào)數(shù)加法運(yùn)算,則執(zhí)行步驟 S700,如果是無符號(hào)數(shù)乘法運(yùn)算,執(zhí)行步驟S800;如果既不是加法運(yùn)算也不是乘 法運(yùn)算,則執(zhí)行步驟S900;步驟S500,根據(jù)信息記錄單元(21)提取的操作數(shù)最新值信息,即程序運(yùn)行 時(shí)該操作數(shù)當(dāng)前的值,判斷加法運(yùn)算的兩個(gè)操作數(shù)是否同號(hào),如果兩個(gè)操作數(shù)同 號(hào),執(zhí)行步驟S501,否則執(zhí)行步驟S900;步驟S501,根據(jù)信息記錄單元(21)提取的操作數(shù)最新值信息,判斷兩個(gè)操 作數(shù)是否均為負(fù)數(shù),如果兩個(gè)操作數(shù)均為正數(shù)執(zhí)行步驟S502,否則執(zhí)行步驟S503;步驟S502,如果兩個(gè)操作數(shù)均為正數(shù),判斷是否兩個(gè)正數(shù)相加有整形數(shù)上溢 出;如果有整形上溢出,判定為漏洞,執(zhí)行步驟SIOOO,否則執(zhí)行步驟S900繼續(xù) 運(yùn)行;步驟S503,如果兩個(gè)操作數(shù)均為負(fù)數(shù),判斷兩個(gè)負(fù)數(shù)相加是否有整形數(shù)上溢 出發(fā)生;如果有上溢出,判定為漏洞,執(zhí)行步驟SIOOO,否則執(zhí)行步驟S900繼續(xù) 運(yùn)行;步驟S600,判斷有符號(hào)數(shù)乘法是否溢出,包括以下步驟步驟S601,判斷乘法運(yùn)算的兩個(gè)操作數(shù)是否同號(hào),如果兩個(gè)操作數(shù)同號(hào),則 執(zhí)行步驟S602,否則執(zhí)行步驟S603;步驟S602,根據(jù)步驟S500中信息記錄單元(21)提取的操作數(shù)最新值信息, 判斷兩個(gè)操作數(shù)是否均為負(fù)數(shù),如果兩個(gè)操作數(shù)均為負(fù)數(shù)執(zhí)行步驟S604,否則執(zhí) 行步驟S605;步驟S603,判斷第一操作數(shù)argl的符號(hào)如果第一操作數(shù)argl是負(fù)數(shù),則第二操作數(shù)arg2為正數(shù),執(zhí)行步驟S606, 判斷是否有整形數(shù)上溢出發(fā)生,如果有上溢出,則判定為漏洞,并執(zhí)行步驟SIOOO, 否則執(zhí)行步驟S900;如果第一操作數(shù)argl是正數(shù),則第二操作數(shù)arg2為負(fù)數(shù),執(zhí)行步驟S607,判 斷是否有整形數(shù)上溢出發(fā)生,如果有上溢出,則判定為漏洞,并執(zhí)行步驟SIOOO, 否則執(zhí)行步驟S900;步驟S604,如果兩個(gè)操作數(shù)均是負(fù)數(shù),判斷兩個(gè)負(fù)數(shù)相乘是否有整形數(shù)上溢 出發(fā)生,如果有,則判定為漏洞,并執(zhí)行步驟SIOOO,否則執(zhí)行步驟S900;步驟S605,如果兩個(gè)操作數(shù)均是正數(shù),判斷兩個(gè)正數(shù)相乘是否有整形數(shù)上溢 出發(fā)生,如果有上溢出發(fā)生,則判定為漏洞,并執(zhí)行步驟SIOOO,否則執(zhí)行步驟 S900;步驟S700,判斷無符號(hào)數(shù)加法運(yùn)算是否有整形數(shù)上溢出發(fā)生,如果有上溢出, 則判定為漏洞,并執(zhí)行步驟SIOOO,否則執(zhí)行步驟S900;步驟S800,判斷無符號(hào)數(shù)乘法運(yùn)算是否有整形數(shù)上溢出發(fā)生,如果有上溢出, 則判定為漏洞,并執(zhí)行步驟SIOOO,否則執(zhí)行步驟S900繼續(xù)運(yùn)行;步驟S900,程序沒有檢測到整形上溢出,繼續(xù)正常運(yùn)行;步驟SIOOO,根據(jù)信息記錄單元(21)提取的指令地址信息,并由信息記錄單 元(21)記錄該指令地址信息。
8、根據(jù)權(quán)利要求1所述的整形溢出漏洞的二進(jìn)制檢測定位裝置,其特征在于, 所述整形數(shù)下溢出檢測模塊(222)包括以下步驟步驟SIOIO,根據(jù)信息記錄單元(21)提取的寬度信息,判斷操作數(shù)的長度n, 有三種類型8bits, 16bits, 32bits;步驟S1020,根據(jù)信息記錄單元(21)提取的類型信息,判斷操作數(shù)的符號(hào)類 型是無符號(hào)數(shù),還是有符號(hào)數(shù),并結(jié)合寬度信息,分別記錄操作數(shù)的類型為Signed n或者Unsigned n,如果是有符號(hào)數(shù)則執(zhí)行步驟SllOO,否則執(zhí)行步驟S1105;步驟SllOO判斷與該操作數(shù)相關(guān)的算術(shù)運(yùn)算是否為減法運(yùn)算,如果是有符號(hào) 數(shù)減法操作,則執(zhí)行步驟S1101;如果不是減法運(yùn)算,則執(zhí)行步驟S1107;步驟SllOl,根據(jù)信息提取單元(21)提取的操作數(shù)最新值信息,并判斷減法 操作的兩個(gè)操作數(shù)是否同號(hào),如果兩個(gè)操作數(shù)異號(hào),則執(zhí)行步驟S1102,否則執(zhí)行 步驟S1107;步驟S1102,判斷第一操作數(shù)argl的符號(hào)如果第一操作數(shù)argl是負(fù)數(shù),則第二操作數(shù)arg2為正數(shù),執(zhí)行步驟S1103, 判斷是否有整形數(shù)下溢出發(fā)生;如果發(fā)現(xiàn)漏洞,執(zhí)行步驟S1108,根據(jù)信息提取單 元(21)提取的指令地址信息,定位該漏洞,否則執(zhí)行步驟S1107;如果第一操作數(shù)argl是正數(shù),則第二操作數(shù)arg2為負(fù)數(shù),執(zhí)行步驟S1104, 判斷是否有整形數(shù)下溢出發(fā)生;如果發(fā)現(xiàn)漏洞,執(zhí)行步驟S1108,根據(jù)信息提取單 元(21)提取的指令地址信息,定位該漏洞,否則執(zhí)行步驟S1107;步驟S1105,如果是無符號(hào)數(shù)減法操作則執(zhí)行步驟S1106;如果不是減法運(yùn)算, 則執(zhí)行步驟S1107;步驟S1106,判斷無符號(hào)數(shù)減法是否有整形數(shù)下溢出發(fā)生,有則判定為漏洞,并執(zhí)行步驟S1108,否則執(zhí)行步驟S1107;步驟S1107,程序沒有檢測到整形下溢出,繼續(xù)正常運(yùn)行;步驟S1108,根據(jù)信息記錄單元(21)提取的指令地址信息,并由信息記錄單元(21)記錄該指令地址信息。
全文摘要
本發(fā)明公開了一種整形溢出漏洞的二進(jìn)制檢測定位裝置,該裝置包括以下單元用于將二進(jìn)制代碼轉(zhuǎn)換成VEX中間代碼的代碼轉(zhuǎn)換單元;信息記錄單元,所述信息記錄單元包括用于記錄變量的類型信息的類型信息提取模塊;用于記錄變量的最新值的數(shù)值信息提取模塊;用于記錄算術(shù)運(yùn)算及其操作數(shù)的算術(shù)運(yùn)算提取模塊;用于記錄賦給變量最新值指令地址的指令地址提取模塊;檢測定位單元,所述檢測定位單元包括整形數(shù)上溢出檢測模塊以及整形數(shù)下溢出檢測模塊。本發(fā)明提出了一種整形溢出漏洞的二進(jìn)制檢測定位裝置,不需要源代碼,全自動(dòng)的運(yùn)行,不需要人工干預(yù),能準(zhǔn)確定位漏洞代碼。
文檔編號(hào)G06F21/22GK101510241SQ20091002588
公開日2009年8月19日 申請(qǐng)日期2009年3月12日 優(yōu)先權(quán)日2009年3月12日
發(fā)明者逸 王, 兵 茅, 立 謝, 知 辛, 平 陳 申請(qǐng)人:南京大學(xué)