本發(fā)明屬于計算機安全,尤其涉及一種基于完全域敏感和源敏感的控制流完整性方法、系統(tǒng)、設備及介質(zhì)。
背景技術:
1、c和c++程序雖然具有出色的直接內(nèi)存訪問能力,但也導致了內(nèi)存破壞攻擊的產(chǎn)生。攻擊者可以通過緩沖區(qū)溢出漏洞篡改內(nèi)存中的函數(shù)指針或返回地址數(shù)據(jù),從而將程序的控制流逆轉(zhuǎn)到非法位置。早期的控制流劫持攻擊通常采用代碼注入的方式,即將惡意代碼(shellcode)注入到目標程序的內(nèi)存中,然后劫持控制流轉(zhuǎn)向執(zhí)行這段惡意代碼。為了防御這種攻擊,后來的計算機系統(tǒng)引入了數(shù)據(jù)執(zhí)行保護(dep)機制,通過限制內(nèi)存頁同時具有寫和執(zhí)行權限來阻止惡意代碼的執(zhí)行。為了繞過dep的防御,攻擊者又探索出了代碼重用攻擊的方式。這類攻擊包括return-to-libc、rop(return?orientedprogramming)和jop(jumporientedprogramming)等。這些攻擊利用目標程序中已有的合法代碼片段(gadgets)進行拼接,從而構造出惡意的控制流轉(zhuǎn)移,達到控制目標系統(tǒng)的目的。這些新型的控制流劫持攻擊手段不依賴于注入惡意代碼,而是利用程序自身的合法代碼,因此更加難以檢測和防御。
2、為了抵御上述新型控制流劫持攻擊,abadi等人提出了控制流完整性(controlflow?integrity,cfi)的概念(martín?abadi,mihai?budiu,erlingsson,and?jayligatti.2005.control-flow?integrity.in?proceedings?of?the?12th?acm?conferenceon?computer?and?communications?security(ccs'05).association?for?computingmachinery,new?york,ny,usa,(pp?340–353).和abadi,m.,budiu,m.,erlingsson,u.,&ligatti,j.(2009).control-flow?integrity?principles,implementations,andapplications.acm?transactions?on?information?and?system?security(tissec),13(1),(pp?1-40).),其核心思想是限制程序運行中的控制轉(zhuǎn)移,使之始終處于預先定義好的控制流圖所限定的范圍內(nèi),從而防御控制流劫持攻擊,但是這種方法只關注控制流轉(zhuǎn)移的目標地址,而忽略了轉(zhuǎn)移的上下文信息。攻擊者可能利用合法的控制流轉(zhuǎn)移,在不同的上下文中執(zhí)行,從而繞過cfi的防護。為了解決早期cfi安全性不足的問題,學者們提出了基于上下文敏感的cfi(van?der?veen,v.,andriesse,d.,e.,gras,b.,sambuc,l.,slowinska,a.,...&giuffrida,c.(2015,october).practical?context-sensitivecfi.in?proceedings?ofthe?22nd?acm?sigsac?conference?on?computer?andcommunications?security(pp.927-940).),上下文敏感的cfi會對執(zhí)行路徑中的控制流邊進行相互關聯(lián)的檢查,考慮執(zhí)行路徑的上下文信息,它不僅關注跳轉(zhuǎn)目標的合法性,還會檢查當前的上下文是否與預期的一致。這種方法能夠更好地捕捉程序的實際控制流,從而提高對控制流劫持攻擊的防御能力。具體來說,上下文敏感的cfi會在靜態(tài)分析階段收集程序的控制流信息,在運行時跟蹤執(zhí)行路徑并與靜態(tài)分析結果進行匹配,從而檢測是否存在控制流劫持。這種方法相比傳統(tǒng)cfi能夠提供更強的安全保護,但同時也會帶來一定的性能開銷。此外,這些方案需要利用intel硬件特性記錄程序運行時的上下文信息,而特定的硬件限制了這些方案的可移植性。
技術實現(xiàn)思路
1、為了克服上述現(xiàn)有技術中的缺點,本發(fā)明的目的在于提供一種基于完全域敏感和源敏感的控制流完整性方法、系統(tǒng)、設備及介質(zhì),利用程序中間代碼中的豐富上下文信息,通過靜態(tài)分析方法實現(xiàn)對函數(shù)指針、其相關變量賦值以及關鍵變量偏移量的精確定位,生成高精度的控制流圖,從而縮小攻擊者的攻擊面;此外,本發(fā)明僅利用intel?mpk硬件技術對運行時的內(nèi)存頁提供保護,可以輕易地替換為其他平臺上的相關內(nèi)存保護技術,提高了本發(fā)明在不同平臺之間的可移植性。
2、為了實現(xiàn)上述目的,本發(fā)明所采用的技術方案如下:
3、一種基于完全域敏感和源敏感的控制流完整性方法,包括如下步驟:
4、步驟1:對開源程序的中間代碼進行靜態(tài)分析,得到開源程序的控制流圖,將控制流圖與中間代碼一起整合成可執(zhí)行文件;所述控制流圖包含關鍵變量偏移量的值、函數(shù)指針值和函數(shù)指針地址;所述關鍵變量偏移量為參與函數(shù)指針地址計算的變量偏移量;
5、步驟2:程序運行時,檢測可執(zhí)行文件中上下文信息并將其存儲到由intel?mpk保護的內(nèi)存中,結合檢測到的上下文信息以及步驟1得到的控制流圖檢查開源程序的間接調(diào)用的函數(shù)指針值是否合法,若合法,則繼續(xù)執(zhí)行程序,若不合法,則立即中止程序;所述上下文信息為關鍵變量偏移量、函數(shù)指針值和函數(shù)指針地址。
6、所述步驟1中對開源程序的中間代碼進行基于源敏感的靜態(tài)分析,得到對函數(shù)指針相關變量的賦值,將對函數(shù)指針相關變量的賦值進行指針分析,得到開源程序的控制流圖;對開源程序的中間代碼進行基于完全域敏感的靜態(tài)分析,得到關鍵變量偏移量的位置。
7、所述步驟1中靜態(tài)分析的具體過程如下:
8、步驟1.1:對中間代碼中當前間接調(diào)用指令的函數(shù)指針的def-use鏈進行遍歷,將間接調(diào)用指令定義為原始指令,沿著函數(shù)指針的def-use鏈進行回溯,直到回溯到def-use鏈的根部;
9、步驟1.2:對def-use鏈的根部指令的use進行遞歸遍歷,當前use指令是否可達原始指令,若當前use指令可達原始指令,則進行如下判斷:
10、完全域敏感判斷:判斷當前use指令是否為取地址指令且包含變量偏移量,若當前use指令為取地址指令且包含變量偏移量,在中間代碼中插入運行時記錄該變量偏移量的指令,得到關鍵變量偏移量的位置;
11、源敏感判斷:判斷當前use指令是否為賦值指令,若當前use指令為函數(shù)指針相關變量的賦值指令,并對賦值指令進行指針分析,得到開源程序的控制流圖,控制流圖包含關鍵變量偏移量的值、函數(shù)指針值和函數(shù)指針地址;
12、步驟1.3:當遍歷完當前間接調(diào)用的函數(shù)指針的def-use鏈之后,繼續(xù)遍歷下一條間接調(diào)用,直到遍歷完所有的間接調(diào)用。
13、所述中間代碼的指令的def-use鏈是樹狀結構,并且除根節(jié)點以外的節(jié)點只有一個子節(jié)點。
14、所述步驟2中當開源程序運行到源點和關鍵變量偏移量的位置時,將源點信息和關鍵變量偏移量信息寫入由intel?mpk保護的hash表中;所述源點信息包括函數(shù)指針值和函數(shù)指針地址;
15、當開源程序繼續(xù)執(zhí)行到間接調(diào)用時,先檢測hash表中是否存在間接調(diào)用的函數(shù)指針值和函數(shù)指針地址;如果不存在,說明函數(shù)指針被攻擊者篡改,要立即中止程序;如果存在,同時在控制流圖中查找是否存在與hash表中匹配的關鍵變量偏移量信息、函數(shù)指針值以及函數(shù)指針地址,不匹配則中止程序,匹配則繼續(xù)執(zhí)行程序。
16、一種用于實現(xiàn)基于完全域敏感和源敏感的控制流完整性方法的系統(tǒng),包括:
17、靜態(tài)分析模塊:用于對開源程序的中間代碼進行靜態(tài)分析,得到開源程序的控制流圖,將控制流圖與中間代碼一起整合成可執(zhí)行文件;
18、程序判斷模塊:用于檢測可執(zhí)行文件中上下文信息并將其存儲到由intel?mpk保護的內(nèi)存中,結合檢測到的上下文信息以及靜態(tài)分析模塊中的控制流圖檢查開源程序的間接調(diào)用的函數(shù)指針值是否合法,若合法,則繼續(xù)執(zhí)行程序,若不合法,則立即中止程序。
19、一種基于完全域敏感和源敏感的控制流完整性設備,包括:
20、存儲器:用于存儲上述的一種基于完全域敏感和源敏感的控制流完整性方法的計算機程序,為計算機可讀取的設備;
21、處理器:用于執(zhí)行所述計算機程序時實現(xiàn)上述的一種基于完全域敏感和源敏感的控制流完整性方法。
22、一種計算機可讀存儲介質(zhì),所述計算機可讀存儲介質(zhì)存儲有計算機程序,所述計算機程序被處理器執(zhí)行時能夠?qū)崿F(xiàn)上述的一種基于完全域敏感和源敏感的控制流完整性方法。
23、與現(xiàn)有技術相比,本發(fā)明的有益效果在于:
24、1、相比現(xiàn)有的基于上下文的控制流完整性方案,本發(fā)明將上下文的范圍擴展到了所有的函數(shù)指針相關變量的賦值,實現(xiàn)了對這些賦值的精確查找和插樁;同時,本發(fā)明將能夠?qū)㈥P鍵變量偏移量納入了上下文的范圍,并通過靜態(tài)指針分析構建出包含關鍵變量偏移量的控制流圖,極大地提高了控制流圖的精度,進而提升了整個方案的安全性。
25、2、本發(fā)明利用intel?mpk硬件技術對運行時上下文所在內(nèi)存頁進行讀寫保護,不僅提高了攻擊者篡改運行時上下文的難度,還降低了運行時的額外性能消耗,并且相比依賴軟件實現(xiàn)的mpx更加健壯可靠。
26、3、本發(fā)明使用intel?mpk硬件技術對程序運行時上下文信息進行保護,同時該技術能夠輕易地替換為其他平臺上的相關內(nèi)存保護技術,提升了系統(tǒng)在各平臺上的可移植性。
27、綜上所述,與現(xiàn)有技術相比,本發(fā)明利用程序中間代碼靜態(tài)單一賦值的特性,對函數(shù)指針的def-use鏈進行深度優(yōu)先的回溯遍歷,以找到所有函數(shù)指針的賦值,并在回溯過程中識別出參與函數(shù)指針地址計算的變量偏移量,這樣基于完全域敏感和源敏感的靜態(tài)分析能夠充分地利用獲得的上下文信息實現(xiàn)對控制流圖的分割,從而極大地提高cfi的精度。此外,為了在程序運行時對這些上下文信息提供保護,利用intel?mpk硬件技術對存儲上下文信息的內(nèi)存進行保護,雖然這也依賴于intel的硬件特性,但其他平臺上具有內(nèi)存保護功能的對應技術也可以對上下文信息的保護,因此本發(fā)明在各平臺上的可移植性有所提高。