亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種面向安全檢查的代碼靜態(tài)分析方法

文檔序號(hào):8922515閱讀:429來(lái)源:國(guó)知局
一種面向安全檢查的代碼靜態(tài)分析方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及軟件安全漏洞檢測(cè)技術(shù)領(lǐng)域,尤其涉及一種面向安全檢查的代碼靜態(tài)分析方法。
【背景技術(shù)】
[0002]靜態(tài)分析是指在不運(yùn)行待檢測(cè)程序的情況下,通過(guò)分析程序源代碼中的語(yǔ)法、過(guò)程和程序結(jié)構(gòu)等來(lái)驗(yàn)證程序的正確性。它通過(guò)檢查代碼是否與設(shè)計(jì)相符、代碼對(duì)安全編碼標(biāo)準(zhǔn)的遵循程度、代碼中邏輯正確性和結(jié)構(gòu)的合理性,發(fā)現(xiàn)代碼中存在的潛在安全問(wèn)題,包括代碼檢查和代碼結(jié)構(gòu)分析等。靜態(tài)檢測(cè)技術(shù)的檢測(cè)對(duì)象是軟件的源代碼。該類技術(shù)不需要?jiǎng)討B(tài)執(zhí)行程序的源代碼,也不需要獲得程序編譯時(shí)的信息,而是在具體檢測(cè)代碼中存在的問(wèn)題之前,掃描軟件源代碼,運(yùn)用詞法分析、語(yǔ)法分析以及語(yǔ)義分析等技術(shù)生成源代碼的某種中間表示,然后再通過(guò)各種技術(shù)對(duì)中間表示進(jìn)行掃描,生成相應(yīng)的檢測(cè)模型,最后根據(jù)各種檢測(cè)規(guī)則分析模型來(lái)查找程序源代碼中存在的安全缺陷。
[0003]抽象解釋是靜態(tài)分析的形式化框架。靜態(tài)分析僅跟蹤用戶關(guān)心的程序?qū)傩?,所以它?duì)程序語(yǔ)義的解釋是程序?qū)嶋H語(yǔ)義的近似。抽象解釋需要用戶根據(jù)被檢測(cè)安全漏洞設(shè)計(jì)具體的抽象解釋函數(shù)和抽象域。目前,主流的靜態(tài)分析方法都是抽象解釋的實(shí)例。在對(duì)程序進(jìn)行語(yǔ)法分析時(shí),在保持被測(cè)程序原有邏輯完整性的基礎(chǔ)上,可以在程序的不同部位插入一些探針,通過(guò)探針的執(zhí)行獲取程序運(yùn)行測(cè)試用例的特征數(shù)據(jù),如調(diào)用分支的執(zhí)行次數(shù)等。
[0004]數(shù)據(jù)流分析收集程序中每個(gè)點(diǎn)所計(jì)算的值的可能集合,這些集合指明變量的值在何處產(chǎn)生以及在什么地方使用,指明如何處理、存儲(chǔ)、傳遞數(shù)據(jù),以及將數(shù)據(jù)傳遞到何處等。對(duì)程序源碼進(jìn)行數(shù)據(jù)流分析,首先需要將被分析的代碼劃分為基本塊(程序子序列由順序執(zhí)行的指令組成),然后以這些基本塊為結(jié)點(diǎn)給程序構(gòu)造控制流圖。數(shù)據(jù)流分析以基本塊和控制流程圖為基礎(chǔ),控制流圖是函數(shù)體的形式化表示,可以表達(dá)程序結(jié)構(gòu),在安全分析階段起著重要作用??刂屏鲌D通過(guò)遍歷抽象語(yǔ)法樹,依據(jù)程序的執(zhí)行規(guī)則,分析程序的可能執(zhí)行路徑,最終生成程序調(diào)用圖供后續(xù)檢測(cè)工作使用。
[0005]程序調(diào)用圖是靜態(tài)分析安全檢查中常用的描述函數(shù)之間調(diào)用關(guān)系的結(jié)構(gòu)之一,相比于其他結(jié)構(gòu),程序調(diào)用圖更為直觀,易于理解和使用。函數(shù)遞歸調(diào)用可以分為直接遞歸調(diào)用和間接遞歸調(diào)用兩種。一個(gè)可終止的程序在進(jìn)入遞歸調(diào)用后,必定會(huì)在某條件滿足后退出遞歸,否則程序會(huì)永不停息的遞歸下去。因此可以判定構(gòu)成遞歸的所有函數(shù)調(diào)用中,至少有一個(gè)位于條件分支中。
[0006]在自底向上的靜態(tài)安全檢查中,生成拓?fù)湫蛄械那疤崾强刂屏鲌D中沒(méi)有環(huán),但是遞歸函數(shù)的存在使控制流圖存在環(huán),從而無(wú)法確定該環(huán)中各個(gè)函數(shù)的調(diào)用順序,因此必須解除遞歸函數(shù)依賴。解除遞歸函數(shù)的依賴關(guān)系后,相應(yīng)的函數(shù)依賴信息也隨之丟失。
[0007]如圖1和2所示,在圖1中,函數(shù)f2存在直接遞歸函數(shù)調(diào)用f2 — f2,函數(shù)Π、f3、f6和f4,函數(shù)fl、f5、f6和f4均存在間接遞歸函數(shù)調(diào)用,函數(shù)遞歸調(diào)用環(huán)分別為Π — f3 — f6 — f4 — fl和fl — f5 — f6 — f4 — fl?,F(xiàn)有解除遞歸函數(shù)依賴的技術(shù)是基于程序調(diào)用圖通過(guò)比較控制流圖中環(huán)的函數(shù)節(jié)點(diǎn)的入度和出度選擇被解除的邊,即找出遞歸調(diào)用環(huán)中具有最大入度的f(x)和與f(x)相連的出度最小的f(y),刪除二者的調(diào)用關(guān)系。在圖1中的3個(gè)函數(shù)遞歸調(diào)用環(huán)中,直接遞歸函數(shù)調(diào)用f2 — f2直接解除;在間接遞歸函數(shù)調(diào)用fl — f3 — f6 — f4 — fl中,函數(shù)fl節(jié)點(diǎn)具有最大的入度2,在與函數(shù)fl節(jié)點(diǎn)相連的函數(shù)節(jié)點(diǎn)中,函數(shù)f3節(jié)點(diǎn)具有最小的出度1,因此,將fl — f3的函數(shù)依賴關(guān)系解除;同理,在間接遞歸函數(shù)調(diào)用fl — f5 — f6 — f4 — fl中,函數(shù)fl節(jié)點(diǎn)具有最大的入度2,在與函數(shù)fI節(jié)點(diǎn)相連的函數(shù)節(jié)點(diǎn)中,函數(shù)f5節(jié)點(diǎn)具有最小的出度1,因此,將fl — f5的函數(shù)依賴關(guān)系解除。解除遞歸函數(shù)依賴后的程序調(diào)用圖如圖2所示。該技術(shù)只分析了程序的控制流程圖,具有易實(shí)現(xiàn)、速度快的優(yōu)點(diǎn),但其對(duì)程序的語(yǔ)義分析不足,容易解除重要的函數(shù)依賴,造成較大的損失,對(duì)檢測(cè)結(jié)果的精確性影響較大。

【發(fā)明內(nèi)容】

[0008]有鑒于此,本發(fā)明提供了一種面向安全檢查的代碼靜態(tài)分析方法,將兩函數(shù)之間的調(diào)用次數(shù)作為兩者之間條件調(diào)用邊的權(quán)值,并將權(quán)值作為兩函數(shù)依賴重要性,可根據(jù)該依賴的重要性,解除遞歸環(huán)中權(quán)值較小的條件調(diào)用邊,如此,在盡量減少解除邊的數(shù)目的同時(shí)減少重要依賴的損失,提高程序漏洞的檢測(cè)效率。
[0009]為了解決上述技術(shù)問(wèn)題,本發(fā)明是這樣實(shí)現(xiàn)的:
[0010]一種面向安全檢查的代碼靜態(tài)分析方法,包括如下步驟:
[0011]步驟1、對(duì)待分析的程序代碼進(jìn)行詞法分析,即將程序代碼中的字符流分割為獨(dú)立的單詞;
[0012]步驟2、將步驟I分割得到的各個(gè)獨(dú)立的單詞進(jìn)行語(yǔ)法分析,得到抽象語(yǔ)法樹;
[0013]步驟3、基于步驟2的抽象語(yǔ)法樹,得到控制流圖;
[0014]步驟4、根據(jù)步驟3得到的所述控制流程圖,得到函數(shù)調(diào)用圖;
[0015]步驟5、對(duì)程序代碼的函數(shù)依賴關(guān)系進(jìn)行解除,具體為:
[0016]S51、計(jì)算所述函數(shù)調(diào)用圖中兩兩函數(shù)之間的調(diào)用次數(shù);
[0017]S52、在所述函數(shù)調(diào)用圖的基礎(chǔ)上,針對(duì)任意兩個(gè)有調(diào)用關(guān)系的函數(shù),將兩者之間的調(diào)用次數(shù)作為權(quán)值并賦值給該兩個(gè)函數(shù)之間的條件調(diào)用邊,得到帶權(quán)依賴關(guān)系的函數(shù)調(diào)用圖;
[0018]S53、查找所述帶權(quán)依賴關(guān)系的函數(shù)調(diào)用圖中的遞歸環(huán),針對(duì)任意一個(gè)遞歸環(huán)X,檢測(cè)與該遞歸環(huán)X沒(méi)有共用條件調(diào)用邊的遞歸環(huán),將檢測(cè)到的遞歸環(huán)中權(quán)值最小的條件調(diào)用邊解除,遍歷函數(shù)調(diào)用圖中所有的遞歸環(huán),得到解除函數(shù)依賴關(guān)系的函數(shù)調(diào)用圖;
[0019]步驟6、依照所述步驟5得到的解除了函數(shù)依賴關(guān)系的函數(shù)調(diào)用圖,使用靜態(tài)分析方法對(duì)程序代碼進(jìn)行安全缺陷的檢測(cè),并將檢測(cè)結(jié)果以文本形式存儲(chǔ)并輸出,供程序員查看。
[0020]本發(fā)明具有如下有益效果:
[0021](I)本發(fā)明針對(duì)目前軟件安全漏洞檢測(cè)方法在代碼靜態(tài)分析安全檢查中漏報(bào)率和誤報(bào)率無(wú)法與檢測(cè)軟件的運(yùn)行效率兼得的問(wèn)題,本發(fā)明將消除函數(shù)遞歸技術(shù)引入到軟件安全漏洞靜態(tài)分析中:首先生成程序安全檢查的中間表示如控制流圖和程序調(diào)用圖等,獲得程序的函數(shù)依賴關(guān)系;若程序調(diào)用圖中存在遞歸環(huán),則意味著函數(shù)依賴中存在遞歸。其次得到程序調(diào)用圖中各依賴的權(quán)值;最后根據(jù)依賴重要性即權(quán)值決定要解除的依賴關(guān)系,提高程序漏洞的檢測(cè)效率的同時(shí),盡量降低解除遞歸函數(shù)依賴造成的檢測(cè)損失。
【附圖說(shuō)明】
[0022]圖1為現(xiàn)有技術(shù)中存在遞歸的函數(shù)調(diào)用圖。
[0023]圖2為利用現(xiàn)有的方法解除遞歸的函數(shù)調(diào)用圖。
[0024]圖3為利用本發(fā)明的方法解除遞歸的函數(shù)調(diào)用圖。
【具體實(shí)施方式】
[0025]下面結(jié)合附圖并舉實(shí)施例,對(duì)本發(fā)明進(jìn)行詳細(xì)描述。
[0026]步驟1、對(duì)待分析的程序代碼進(jìn)行詞法分析,即將程序代碼中的字符流分割為獨(dú)立的單詞:
[0027]以待分析的程序代碼(源文件)作為輸入,逐行掃描程序文件中的字符,根據(jù)編程語(yǔ)言約束生成的正則表達(dá)式,把源文件中的字符流分割為一個(gè)個(gè)的單詞。該單詞流將作為語(yǔ)法分析器的輸入。此過(guò)程會(huì)自動(dòng)過(guò)濾掉源程序中的空白符、制表符等對(duì)文件分析無(wú)幫助的字符,并將有關(guān)單詞序列的信息寫入符號(hào)表。
[0028]步驟2、將步驟I分割得到的各個(gè)獨(dú)立的單詞進(jìn)行語(yǔ)法分析,得到
當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1