欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于控制流圖動(dòng)態(tài)建模的電網(wǎng)終端程序漏洞檢測方法與流程

文檔序號:40527122發(fā)布日期:2024-12-31 13:36閱讀:11來源:國知局
一種基于控制流圖動(dòng)態(tài)建模的電網(wǎng)終端程序漏洞檢測方法與流程

本發(fā)明涉及電網(wǎng)終端程序,特別是一種基于控制流圖動(dòng)態(tài)建模的電網(wǎng)終端程序漏洞檢測方法。


背景技術(shù):

1、電網(wǎng)終端程序在現(xiàn)代電力系統(tǒng)中扮演著至關(guān)重要的角色,因此其安全性對電網(wǎng)穩(wěn)定和數(shù)據(jù)安全至關(guān)重要。傳統(tǒng)的漏洞檢測方法可能存在一定的局限性,特別是在處理復(fù)雜的電網(wǎng)終端程序時(shí)。

2、固件代碼控制流圖建模中的一個(gè)關(guān)鍵問題就是間接轉(zhuǎn)移指令目標(biāo)地址如何正確獲取。這是靜態(tài)控制流圖建模方法難以解決的問題。

3、固件代碼動(dòng)態(tài)控制流圖建模是通過運(yùn)行程序,獲取執(zhí)行的指令過程,劃分程序基本塊,建立塊與塊之間的關(guān)聯(lián)關(guān)系,從而得到固件程序的控制流圖。

4、動(dòng)態(tài)控制流圖建模顯然受程序執(zhí)行分支的限制,如果某一分支的條件一直無法滿足,即該分支沒有執(zhí)行,那么建模的控制流圖一定不完整。如何最大限度地建模出所有的路徑,是固件代碼動(dòng)態(tài)控制流圖建模技術(shù)研究的重點(diǎn)。目前大多數(shù)動(dòng)態(tài)控制流圖建模技術(shù)都是從如何得到完整輸入集的角度,研究解決路徑建模不完整的問題。其中,動(dòng)態(tài)控制流圖建模的輸入方式主要分為人工式、隨機(jī)式、以及約束條件求解式。

5、人工式是動(dòng)態(tài)控制流圖建模最初始的給定輸入方式,它將目標(biāo)程序運(yùn)行在一個(gè)可調(diào)試的環(huán)境中,由調(diào)試人員根據(jù)自己的經(jīng)驗(yàn)遍歷所有可能的輸入值,反復(fù)執(zhí)行程序,期望能執(zhí)行程序的全部路徑,從而最大限度地建模出完整的控制流圖。這種方式由分析人員的水平和經(jīng)驗(yàn)決定,自動(dòng)化程度低,費(fèi)時(shí)費(fèi)力,也無法保證路徑執(zhí)行的全面性與輸入值集合的完整性。

6、隨機(jī)式屬于自動(dòng)輸入給定方式,其方法是通過自動(dòng)選定輸入值,使程序執(zhí)行不同的路徑。與人工給定輸入值的方式相比,這種方式自動(dòng)化程度有所提高,但程序輸入值的范圍通常都很大。例如,若某目標(biāo)程序僅有一個(gè)整型的輸入變量x,在整數(shù)類型為32比特的計(jì)算機(jī)上,該程序的輸入空間規(guī)模為232;若程序有兩個(gè)整型的輸入變量(x,y),則輸入空間規(guī)模達(dá)到264。可見即便目標(biāo)程序很小,要在巨大的輸入空間中隨機(jī)選擇一些典型的輸入值,進(jìn)而建模出所有路徑,其時(shí)間復(fù)雜度都是相當(dāng)復(fù)雜的。因此,在輸入空間較大,而又隨機(jī)選擇輸入值的條件下,容易出現(xiàn)重復(fù)建模路徑以及無法完整建模出所有路徑的問題。

7、約束條件求解式是根據(jù)路徑約束條件的解析結(jié)果,自動(dòng)確定程序輸入值的一種方式。這種方式通過分析程序執(zhí)行路徑中分支節(jié)點(diǎn)處的路徑約束條件,找出條件與輸入變量的關(guān)系,從而確定程序的輸入值。為便于表述,用c語言代碼描述,研究對象為固件代碼。其中,圖1的(a)是目標(biāo)程序p,圖1的(b)是目標(biāo)程序p的控制流子圖。假設(shè)程序的輸入x為10,則在第一個(gè)分支處,執(zhí)行路徑a;再到下一個(gè)分支處,執(zhí)行路徑b。此時(shí),還有兩條未被建模的路徑c和路徑d。在本例中,路徑c和路徑d未被訪問到的原因是沒有能夠滿足可以執(zhí)行這兩條路徑的輸入值,即給定的輸入值不能滿足對應(yīng)分支點(diǎn)的路徑約束條件。要建模路徑c,可以將目標(biāo)程序回退到第二個(gè)分支點(diǎn)處。由于路徑c的建模依賴于前兩個(gè)路徑約束條件,因此對兩個(gè)路徑約束條件x>3和x<8進(jìn)行條件解析,可知同時(shí)滿足這兩個(gè)路徑約束的輸入值集合為{4,5,6,7},從中任選一個(gè)數(shù)重新對x進(jìn)行賦值,再從第二個(gè)分支點(diǎn)處執(zhí)行路徑c,就可以正確建模出路徑c。通過對第一個(gè)路徑約束條件的解析,可以得到滿足執(zhí)行路徑d的輸入值集合為{0,1,2,3},通過給定輸入值并執(zhí)行程序,便可建模出路徑d。這樣通過約束條件的求解,獲取到滿足路徑執(zhí)行條件的輸入值,便可建模出相應(yīng)的路徑分支。

8、約束條件解析給定輸入值的方式克服了人工和隨機(jī)兩種方式給定輸入條件的低效性和盲目性,顯著提高了動(dòng)態(tài)控制流圖恢復(fù)的效率。然而,基于路徑約束解析的動(dòng)態(tài)控制流圖恢復(fù)技術(shù)強(qiáng)依賴于路徑約束條件的解析結(jié)果,當(dāng)約束條件為不可解時(shí),就無法給出滿足條件的輸入值,從而無法恢復(fù)對應(yīng)的條件分支路徑。

9、動(dòng)態(tài)分析方法雖然能夠有效避免間接轉(zhuǎn)移指令目標(biāo)地址獲取困難的問題,但同時(shí)也存在過分依賴程序的輸入,即存在路徑執(zhí)行可能不全的問題。為此,有不少研究人員在基于動(dòng)態(tài)分析的基礎(chǔ)上開展了多路徑分析技術(shù)的研究。雖然多路徑分析在一定程度上解決了路徑覆蓋的問題,但多路徑分析又嚴(yán)重依賴于對路徑約束條件的求解,當(dāng)遇到復(fù)雜且難求解的路徑條件時(shí),存在執(zhí)行效率不高的問題。


技術(shù)實(shí)現(xiàn)思路

1、有鑒于此,本發(fā)明的目的在于提供一種基于控制流圖動(dòng)態(tài)建模的電網(wǎng)終端程序漏洞檢測方法,通過結(jié)合動(dòng)態(tài)分析和控制流圖建模,能夠更加準(zhǔn)確地識(shí)別和定位程序中的安全漏洞。

2、為實(shí)現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案:一種基于控制流圖動(dòng)態(tài)建模的電網(wǎng)終端程序漏洞檢測方法,包括以下步驟:

3、步驟1:終端程序控制流圖動(dòng)態(tài)建模;

4、步驟2:基于控制流、數(shù)據(jù)流的程序切片。

5、在一較佳的實(shí)施例中,所述步驟1具體為基于路徑驅(qū)動(dòng)的控制流圖動(dòng)態(tài)建模;將目標(biāo)固件程序置于可控的模擬調(diào)試環(huán)境中,采用路徑驅(qū)動(dòng)的方式,動(dòng)態(tài)模擬執(zhí)行目標(biāo)程序,根據(jù)轉(zhuǎn)移目標(biāo)地址以及轉(zhuǎn)移指令類型對程序進(jìn)行模塊劃分操作,并建立塊與塊之間的邏輯關(guān)聯(lián)關(guān)系,最后形成完整的控制流圖。

6、在一較佳的實(shí)施例中,路徑驅(qū)動(dòng)執(zhí)行基本過程如下:在模擬器中逐條執(zhí)行目標(biāo)程序指令,每執(zhí)行一條指令,判斷其類型,如果它是一條順序指令,則繼續(xù)向下執(zhí)行;否則,根據(jù)當(dāng)前輸入和標(biāo)志寄存器的值判斷這條分支指令是否能被執(zhí)行,如果不能被執(zhí)行,則保存轉(zhuǎn)移目標(biāo)地址,并將該分支點(diǎn)標(biāo)記為紅色,反之,保存該分支指令的下一條指令地址,并將該分支點(diǎn)標(biāo)記為紅色,紅色表示只執(zhí)行了其中一條分支,并且保存當(dāng)前狀態(tài);沿著這條分支路徑執(zhí)行,按上述方法進(jìn)行標(biāo)記,直到執(zhí)行完從這條分支路徑出發(fā)的所有路徑;當(dāng)執(zhí)行完畢或程序終止時(shí),檢查程序中是否有紅色的分支點(diǎn);如果有,則回退到最近的一個(gè)紅色分支點(diǎn),恢復(fù)與該分支節(jié)點(diǎn)相關(guān)的狀態(tài),將指令指針指向未被訪問的路徑,并將該分支節(jié)點(diǎn)標(biāo)為黑色,再驅(qū)動(dòng)執(zhí)行該條路徑;重復(fù)上述過程,直至所有的邊都被執(zhí)行完為止;當(dāng)所有的條件分支點(diǎn)都被標(biāo)記為黑色時(shí),表示程序所有路徑都已遍歷,此時(shí)終止程序執(zhí)行。

7、在一較佳的實(shí)施例中,采用部分保存和直接回退策略進(jìn)行狀態(tài)的保存和恢復(fù);部分保存指的是對程序第一個(gè)基本塊,保存所有的寄存器和存儲(chǔ)器狀態(tài)值,對后續(xù)的基本塊,在每個(gè)基本塊最后一條指令處,搜索其后繼基本塊中將被修改的寄存器和存儲(chǔ)器,保存該指令處這些寄存器和存儲(chǔ)器的狀態(tài)值;直接回退是指每當(dāng)需要回退時(shí),不是單條指令的回退,而是回退到上一個(gè)基本塊的最后一條指令處,需要直接將在上一個(gè)基本塊保存的寄存器和存儲(chǔ)器值快照寫回對應(yīng)的寄存器和存儲(chǔ)器,保證程序所處狀態(tài)的正確性,然后再修改pc值,程序就能夠跳轉(zhuǎn)到其它分支指令繼續(xù)執(zhí)行。

8、在一較佳的實(shí)施例中,采用恢復(fù)策略處理建模異常;發(fā)現(xiàn)程序出錯(cuò)時(shí),停止對該塊的處理,并將此塊標(biāo)記為出錯(cuò),然后返回上一個(gè)最近的未遍歷完全的分支節(jié)點(diǎn)處,繼續(xù)向下進(jìn)行控制流恢復(fù),當(dāng)再次到達(dá)標(biāo)記為出錯(cuò)的塊后,繼續(xù)嘗試控制流恢復(fù);如果未出錯(cuò),則撤銷對該塊的反匯編出錯(cuò)的標(biāo)記;如果再次出錯(cuò),仍有新的路徑到達(dá)時(shí),繼續(xù)嘗試控制流恢復(fù),直到所有路徑遍歷完畢。

9、在一較佳的實(shí)施例中,所述步驟2具體包括基于數(shù)據(jù)流方程的二進(jìn)制程序切片算法;

10、定義切片準(zhǔn)則:程序p的切片準(zhǔn)則是一個(gè)二元組(i,v),其中i是p中的一條語句,v是p中變量的子集;

11、定義狀態(tài)軌跡:長度為k的狀態(tài)軌跡<t>k是由程序p中有限個(gè)有序?qū)M成的序列:<(n1,s1),...,(nk,sk)>,其中ni是p中的節(jié)點(diǎn),si是將v中變量映射到值的函數(shù),(ni,si)給出了在執(zhí)行ni之前的v中變量的取值。

12、定義投影:設(shè)<t>k=(t1,...,t2)是一條狀態(tài)軌跡,n是程序p中的節(jié)點(diǎn),s是將變量映射為值的函數(shù),投影

13、

14、式中:

15、s|v——將s限制

16、在v中;∈——空;

17、那么,proj(i,v)(<t>k)=proj′(i,v)(t1)...proj′(i,v)(tk);

18、定義程序切片:程序p基于切片準(zhǔn)則c=(i,v)的程序切片s是滿足下列性質(zhì)的子程序:

19、1)s通過刪除零條或者多條程序p中的語句獲得;

20、2)當(dāng)p在輸入i下能夠停機(jī),其對應(yīng)的狀態(tài)軌跡為t,那么s在輸入i下也能夠停機(jī),其對應(yīng)的狀態(tài)軌跡為t′,并且滿足projc(<t>)=projc′(<t′>),其中c′=(succ(i),v),當(dāng)i本身在s中時(shí)succ(i)=i,否則,succ(i)是p中距離i最近且留在s中的后驅(qū)。

21、與現(xiàn)有技術(shù)相比,本發(fā)明具有以下有益效果:

22、1)精準(zhǔn)檢測:動(dòng)態(tài)建模可以更準(zhǔn)確地捕捉程序運(yùn)行時(shí)的動(dòng)態(tài)行為,克服靜態(tài)分析無法解決的問題,如間接轉(zhuǎn)移指令的目標(biāo)地址不確定性。

23、2)實(shí)時(shí)更新:動(dòng)態(tài)生成的控制流圖反映了實(shí)際運(yùn)行中的控制流情況,能夠?qū)崟r(shí)更新以適應(yīng)程序狀態(tài)的變化,提供最新的安全分析。

24、3)綜合分析:結(jié)合動(dòng)態(tài)和靜態(tài)分析方法,能夠?qū)﹄娋W(wǎng)終端程序進(jìn)行更全面的安全評估,提高漏洞檢測的準(zhǔn)確性和可靠性。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1
土默特左旗| 梓潼县| 尼勒克县| 永昌县| 邯郸市| 峨山| 彭山县| 渭南市| 高青县| 资兴市| 曲松县| 三亚市| 沁阳市| 阿拉尔市| 侯马市| 奇台县| 丹江口市| 大安市| 大洼县| 汝阳县| 蓬安县| 西乡县| 陇西县| 宜良县| 兴安盟| 疏勒县| 泽库县| 万源市| 建昌县| 楚雄市| 潢川县| 西宁市| 枣强县| 都昌县| 天门市| 金沙县| 哈尔滨市| 平阳县| 勃利县| 乌兰县| 太原市|