一種基于ret指令與jmp指令的rop攻擊檢測(cè)方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及軟件安全領(lǐng)域,具體涉及一種基于RET指令與JMP指令的ROP攻擊檢 測(cè)方法。
【背景技術(shù)】
[0002] 緩沖區(qū)溢出(Buffer Overflow)是普遍且危害巨大的漏洞,它源于程序設(shè)計(jì)的缺 陷,發(fā)生在進(jìn)程試圖向緩沖區(qū)存儲(chǔ)超過(guò)其容量的數(shù)據(jù)時(shí),超出容納范圍的額外信息可能導(dǎo) 致該緩沖區(qū)的正常數(shù)據(jù)被覆蓋。額外的數(shù)據(jù)可能就是攻擊代碼,其觸發(fā)某些惡意行為,可能 會(huì)竊取用戶數(shù)據(jù)、阻礙程序運(yùn)行以及使系統(tǒng)崩潰等,更嚴(yán)重的情況下,可能得到系統(tǒng)權(quán)限, 對(duì)系統(tǒng)進(jìn)行進(jìn)一步破壞。
[0003] ROP攻擊便是基于緩沖區(qū)溢出漏洞的攻擊。返回導(dǎo)向編程(ROP)是一種代碼重用 的安全開(kāi)發(fā)技術(shù)。通過(guò)從目標(biāo)程序中鏈接已存在的短小指令,ROP允許遠(yuǎn)程攻擊者在不注入 任何惡意代碼的情況下去執(zhí)行圖靈完備計(jì)算。ROP攻擊主要的思路是復(fù)用已存在的代碼空 間中的指令去實(shí)施惡意行為。ROP攻擊主要分兩個(gè)步驟:1)從完整的代碼片段中確定一系 列有用的指令語(yǔ)句,稱為Gadget。例如,應(yīng)用程序代碼和共享庫(kù)。2)通過(guò)精心設(shè)計(jì)的有效 載荷去將選中的Gadget存入Gadgets鏈。值得注意的是,這些Gadgets沒(méi)有被限制使用對(duì) 齊指令,例如在x86平臺(tái)上,一串非對(duì)齊指令可能會(huì)轉(zhuǎn)換成可用的指令。一個(gè)典型的Gadget 有代碼片段去完成計(jì)算操作(例如,分配給通用CPU寄存器一個(gè)值),另外,一個(gè)連接片段通 過(guò)操作控制流去連接Gadget。通過(guò)間接跳轉(zhuǎn)指令例如RET和JMP/CALL指令去實(shí)現(xiàn)控制流 操作。根據(jù)不同的連接片段,ROP攻擊可以分為基于RET的攻擊,基于JMP的攻擊和R0P。 在現(xiàn)實(shí)的ROP攻擊中,攻擊者可能會(huì)綜合各類ROP攻擊。用于ROP攻擊的Gadgets有以下 幾個(gè)典型特點(diǎn)。
[0004] 小尺寸。Gadget的代碼段通常是很小的,例如,由2至5個(gè)指令組成,這導(dǎo)致單一 的Gadget缺乏功能性。雖然有大段代碼的Gadget可以進(jìn)行更多的操作,但是必然導(dǎo)致更 多的副作用,其中一些將會(huì)與其它的Gadget發(fā)生沖突。例如,一個(gè)Gadget意外地改變棧指 針,這可能導(dǎo)致下一個(gè)Gadget的執(zhí)行失敗。事實(shí)上,攻擊者通常傾向于收集只與預(yù)期操作 相關(guān)的Gadget,而不是使用長(zhǎng)的Gadgets。因此,一個(gè)真正的ROP攻擊通常需要許多這樣的 Gadget0
[0005] 分布稀疏。雖然Gadget分布在整個(gè)代碼空間,但是由于分布稀疏,存在那些滿足 攻擊者需求卻得不到確認(rèn)的Gadget。為了有較高的成功率,攻擊者通常需要一個(gè)大的代碼 庫(kù),收集到足夠的Gadgets去執(zhí)行惡意操作。實(shí)驗(yàn)結(jié)果表明,在任何時(shí)間內(nèi),如果能夠限制 可執(zhí)行代碼的大小在20KB以內(nèi),將會(huì)降低攻擊者去觸發(fā)一個(gè)有意義的ROP攻擊的概率。如 果能進(jìn)一步減少其大小,可能性會(huì)持續(xù)下降。
[0006] 由于ROP攻擊的巨大威脅,近幾年,已經(jīng)有許多的方法建議被見(jiàn)證用于防御ROP攻 擊。DROP, ROPDefender,ROPGuard和返回少許內(nèi)核等方法只是關(guān)注ROP指令的結(jié)束返回 指令(例如,基于RET的指令),其允許攻擊者去利用其它指令(例如,基于JMP的指令)。
[0007] DROP 通過(guò)設(shè)定 Gadget 數(shù)目的閥值,利用 Dynamic Binary Instrumentation-- Valgrind獲取RET指令,若連續(xù)Gadget的數(shù)目超過(guò)閥值,則判定為ROP攻擊。
[0008] DROP僅以連續(xù)Gadget的數(shù)目作為判定是否存在ROP攻擊的依據(jù),會(huì)產(chǎn)生較高的 誤報(bào)率。ROPDefender 基于影子棧利用 Dynamic Binary Instrumentation 實(shí)現(xiàn) ROP 攻擊 檢。當(dāng)進(jìn)程執(zhí)行過(guò)程中發(fā)生函數(shù)調(diào)用時(shí),返回地址被保存在影子棧當(dāng)中。ROPDefender截 獲到RET指令后,將Shadow Stack棧頂內(nèi)容彈出,并與實(shí)際返回地址的值進(jìn)行比較,如果 兩者不相同則說(shuō)明檢測(cè)到ROP攻擊。但是,函數(shù)的調(diào)用與返回存在著多種復(fù)雜情況,某些時(shí) 候,并不遵循后進(jìn)先出原則,因此檢測(cè)結(jié)果的準(zhǔn)確性不能得到保證。
【發(fā)明內(nèi)容】
[0009] 針對(duì)上述現(xiàn)有技術(shù),本發(fā)明目的在于提供一種基于RET指令與JMP指令的ROP攻 擊檢測(cè)方法,其旨在解決現(xiàn)有應(yīng)對(duì)ROP攻擊的方法只有一種類型或一個(gè)步驟的ROP攻擊檢 測(cè)驗(yàn)證,不能夠充分地識(shí)別ROP攻擊指令的本質(zhì)性特征,不能夠檢測(cè)到深度隱藏的ROP攻擊 指令,并存在匹配精度低,誤判率高且檢測(cè)通用性差等技術(shù)問(wèn)題。
[0010] 為達(dá)到上述目的,本發(fā)明采用的技術(shù)方案如下: 一種基于RET指令與JMP指令的ROP攻擊檢測(cè)方法,包括創(chuàng)建循環(huán)隊(duì)列;利用二進(jìn)制插 粧工具啟用目標(biāo)程序;跟蹤目標(biāo)程序并進(jìn)行指令匹配;加載對(duì)應(yīng)指令的檢測(cè)模塊以及檢測(cè) 模塊生成疑似ROP攻擊指令;將疑似ROP攻擊指令加入循環(huán)隊(duì)列并判斷其是否超出閥值。
[0011] 上述方法中,進(jìn)一步地,所述的利用二進(jìn)制插粧工具啟用目標(biāo)程序,包括插入器通 過(guò)Ptrace函數(shù)獲取目標(biāo)進(jìn)程的控制權(quán)限和上下文;加載插粧動(dòng)態(tài)鏈接庫(kù)至地址空間;二進(jìn) 制插粧工具啟動(dòng)目標(biāo)程序;調(diào)度器啟動(dòng)編譯器,編譯器編譯插粧代碼,完成后并存儲(chǔ);執(zhí)行 已存儲(chǔ)的插粧代碼并輸出。
[0012] 優(yōu)選地,二進(jìn)制插粧工具選用二進(jìn)制動(dòng)態(tài)插粧工具Pin,獲取目標(biāo)進(jìn)程的當(dāng)前指 令,并從此條指令起生成線型代碼序列,隨后將控制權(quán)轉(zhuǎn)移至新生成的代碼序列上;Pin不 需要再次重復(fù)編寫源代碼并能夠支持插粧程序生成動(dòng)態(tài)代碼。
[0013] 上述方法中,進(jìn)一步地,所述的跟蹤目標(biāo)程序并進(jìn)行指令匹配,包括將目標(biāo)程序進(jìn) 行RET指令匹配和/或JMP指令匹配。顯著地并實(shí)質(zhì)地,增加了匹配精度,拓展了被檢測(cè)特 征范圍,實(shí)現(xiàn)了深度ROP攻擊特征匹配。
[0014] 上述方法中,進(jìn)一步地,所述的加載對(duì)應(yīng)指令的檢測(cè)模塊以及檢測(cè)模塊生成疑似 ROP攻擊指令,包括利用二進(jìn)制插粧工具加載基于RET指令的檢測(cè)模塊和/或基于JMP指令 的檢測(cè)模塊。對(duì)疑似ROP攻擊指令進(jìn)行進(jìn)一步檢測(cè),并不是直接將疑似ROP攻擊直接判斷 為ROP攻擊,顯著地并實(shí)質(zhì)地,提升了判別精度。
[0015] 上述方法中,進(jìn)一步地,所述的加載對(duì)應(yīng)指令的檢測(cè)模塊以及檢測(cè)模塊生成疑似 ROP攻擊指令,疑似ROP攻擊指令包括基于異常事件的RET指令和/或JMP指令。對(duì)疑似 ROP攻擊進(jìn)行分類,進(jìn)行兩次事件檢測(cè);對(duì)于高偽裝性特征的ROP攻擊進(jìn)行本質(zhì)性特征檢 驗(yàn);顯著地并實(shí)質(zhì)地,深度拓展了檢測(cè)范圍且提升了檢測(cè)精度。
[0016] 上述方法中,進(jìn)一步地,所述的疑似ROP攻擊指令包括基于異常事件的RET指令 和/或JMP指令,異常事件包括在RET指令執(zhí)行跳轉(zhuǎn)后,目標(biāo)地址單元的上一單元格內(nèi)不是 CALL指令。提供ROP攻擊的本質(zhì)性特征檢驗(yàn)標(biāo)準(zhǔn)。
[0017] 上述方法中,進(jìn)一步地,所述的疑似ROP攻擊指令包括基于異常事件的RET指令和 /或JMP指令,異常事件還包括基于JMP指令的檢測(cè)模塊所獲取JMP指令目標(biāo)地址與當(dāng)前地 址的差值較大。提供ROP攻擊的本質(zhì)性特征檢驗(yàn)標(biāo)準(zhǔn)。
[0018] 上述方法中,進(jìn)一步地,所述的將疑似ROP攻擊指令加入循環(huán)隊(duì)列并判斷其是否 超出閥值,包括在異常事件出現(xiàn)后,基于RET指令的和/或基于JMP指令的檢測(cè)模塊將疑似 ROP攻擊指令加入對(duì)應(yīng)指令的循環(huán)隊(duì)列,對(duì)應(yīng)的檢測(cè)模塊判斷其是否超出閥值。根據(jù)上述方 法中提供的ROP攻擊本質(zhì)性特征檢驗(yàn)標(biāo)準(zhǔn),對(duì)疑似ROP攻擊指令進(jìn)行循環(huán)反復(fù)的驗(yàn)證,反復(fù) 檢驗(yàn)是否存在ROP攻擊指令的本質(zhì)性特征以暴露高偽裝性的ROP攻擊指令;顯著地并實(shí)質(zhì) 地,徹底解決了深度隱藏ROP攻擊指令的檢測(cè)問(wèn)題。
[0019] 上述方法中,進(jìn)一步地,所述的將疑似ROP攻擊指令加入循環(huán)隊(duì)列并判斷其是否 超出閥值,包括,在循環(huán)隊(duì)列中,存在至少2個(gè)RET指令和/或存在JMP指令目標(biāo)地址與當(dāng) 前地址差值的方差超過(guò)10。
[0020] 與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)在于: 在不影響兼容性情況下,實(shí)現(xiàn)兩種類型指令的匹配、檢測(cè)、識(shí)別和驗(yàn)證循環(huán);充分地檢 驗(yàn)是否存在ROP攻擊指令的本質(zhì)性特征以暴露高偽裝性的ROP攻擊指令;顯著地并實(shí)質(zhì)地, 提升了匹配、檢測(cè)和識(shí)別精度,并且徹底解決了深度隱藏ROP攻擊指令的檢測(cè)問(wèn)題。
【附圖說(shuō)明】
[0021] 圖1為插粧模塊整體架構(gòu)。
[0022] 圖2為基于RET指令檢測(cè)模塊設(shè)計(jì)圖。
[0023] 圖3為基于JMP指令檢