二基于源碼分析的安全測試方法資料_第1頁
二基于源碼分析的安全測試方法資料_第2頁
二基于源碼分析的安全測試方法資料_第3頁
二基于源碼分析的安全測試方法資料_第4頁
二基于源碼分析的安全測試方法資料_第5頁
已閱讀5頁,還剩87頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、二、基于(jy)源碼分析的安全測試方法共九十二頁提綱(tgng)2.1靜態(tài)分析、測試概述(i sh)2.2代碼安全漏洞2.3靜態(tài)安全分析一般性方法2.4基于形式化的方法2.5一種基于安全規(guī)則的方法2.6一種靜態(tài)、動態(tài)相結(jié)合的方法共九十二頁2.1靜態(tài)分析(fnx)、測試概述定義:程序靜態(tài)分析是在不執(zhí)行程序的情況下對其進(jìn)行分析的技術(shù),簡稱為靜態(tài)分析。對比:程序動態(tài)分析:需要實(shí)際執(zhí)行程序 程序理解:靜態(tài)分析這一術(shù)語一般用來形容自動化工具的分析,而人工分析則往往叫做程序理解用途:程序翻譯/編譯 (編譯器),程序優(yōu)化重構(gòu),軟件缺陷檢測等 過程:大多數(shù)情況下,靜態(tài)分析的輸入都是源程序代碼或者(huzh)中

2、間碼(如Java bytecode),只有極少數(shù)情況會使用目標(biāo)代碼;以特定形式輸出分析結(jié)果共九十二頁靜態(tài)分析(fnx)、測試概述對象各種與軟件相關(guān)的有必要進(jìn)行測試的產(chǎn)物,例如各類文檔、源代碼等方法評審對軟件元素或項(xiàng)目狀態(tài)進(jìn)行評估的活動,用以確定與預(yù)期結(jié)果之間的偏差和相應(yīng)的改進(jìn)意見通常由人來執(zhí)行靜態(tài)分析被測程序進(jìn)行特性(txng)分析的一些方法的總稱 通常需要工具輔助共九十二頁靜態(tài)分析、測試(csh)特點(diǎn)靜態(tài)測試不必動態(tài)的執(zhí)行程序,也就是不必進(jìn)行(jnxng)測試用例設(shè)計和結(jié)果判讀等工作;靜態(tài)測試可以由人手工方式進(jìn)行,充分發(fā)揮人的優(yōu)勢,行之有效。解鈴還須系鈴人,由于人的思維及交流障礙而造成的邏輯

3、錯誤,有人通過邏輯思維去解決,是一種非常有效的方法;特別是在充分利用人思維互補(bǔ)的情形,檢驗(yàn)出錯誤的水平非常高。靜態(tài)測試實(shí)施不需要特別條件,容易開展共九十二頁為什么需要靜態(tài)(jngti)測試識別缺陷的成效 靜態(tài)測試的成效:最多識別軟件(run jin)所有缺陷中70-75%的缺陷 動態(tài)測試的成效:最多識別軟件所有缺陷中30-35%的缺陷識別缺陷的成本 需求階段識別一個重要缺陷平均花費(fèi)2-3小時;設(shè)計階段識別一個重要缺陷平均花費(fèi)3-4小時;代碼評審階段識別一個重要缺陷3-5小時;動態(tài)測試識別一個重要缺陷平均花費(fèi)15-25小時 共九十二頁為什么需要靜態(tài)(jngti)測試解決缺陷的成本 需求及設(shè)計階段

4、消除一個重要缺陷花費(fèi)5-10小時代碼評審階段(jidun)消除一個重要缺陷花費(fèi)5-15小時動態(tài)測試識別消除一個重要缺陷平均花費(fèi)30-80小時投入回報比較(實(shí)例)航天飛機(jī)搭乘項(xiàng)目:在設(shè)計或代碼評審時消除一個缺陷的成本為1美元,在系統(tǒng)測試時為13美元,交付使用后為92美元(Paulk etal,1995電信公司審查時發(fā)現(xiàn)和糾正一個缺陷的平均費(fèi)用為200美元,客戶驗(yàn)收測試發(fā)現(xiàn)的缺陷平均花費(fèi)4200美元(Boehm and Basili 2001)印度Infosys公司經(jīng)驗(yàn)表明:在代碼審查上多花費(fèi)一天,這個產(chǎn)品就有期望在后期修改缺陷節(jié)省3-6天共九十二頁靜態(tài)(jngti)測試主要內(nèi)容主要由人工進(jìn)行代碼

5、審查(Code Inspection)代碼走查(Walkthrough)桌面(zhumin)檢查技術(shù)評審廣義的理解,還包括軟件需求分析和設(shè)計階段的技術(shù)評審主要由工具自動進(jìn)行的靜態(tài)分析共九十二頁代碼(di m)審查和代碼(di m)走查由若干(rugn)程序員與測試員組成一個小組,集體閱讀并討論程序,或者用“腦”執(zhí)行并檢查程序的過程分兩步完成預(yù)先作一定的準(zhǔn)備工作然后舉行會議進(jìn)行討論會議的主題是發(fā)現(xiàn)錯誤而不是糾正錯誤共九十二頁桌面(zhumin)檢查程序員閱讀自己所編的程序缺點(diǎn):第一,由于心理上的原因,容易對自己的程序的偏愛,沒有發(fā)現(xiàn)錯誤的欲望(這和已經(jīng)(y jing)知道了程序錯了讀程序找錯誤所

6、在極為不同)第二,由于人的思維定勢,有些習(xí)慣性的錯誤自己不易發(fā)現(xiàn)第三,如果根本對功能理解錯了,自己不易糾正所以這種方法效率不高,可作為個人自我檢查程序中明顯的疏漏或筆誤共九十二頁代碼(di m)審查和代碼(di m)走查的優(yōu)點(diǎn)不僅比桌面檢查優(yōu)越得多,而且(r qi)與動態(tài)測試的方法相比也有很多優(yōu)點(diǎn)第一,使用這種方法測試,一旦發(fā)現(xiàn)錯誤,就知道錯誤的性質(zhì)和位置,因而調(diào)試所花費(fèi)的代價低第二,使用這種方法一次能揭示一批錯誤,而不是一次只揭示一個錯誤如果使用動態(tài)測試,通常僅揭示錯誤的征兆程序不終止運(yùn)行,而對錯誤的性質(zhì)和位置還得逐個查找共九十二頁代碼審查(shnch)和代碼走查的效果經(jīng)驗(yàn)表明,使用這種方法

7、能夠優(yōu)先的發(fā)現(xiàn) 3070的邏輯設(shè)計和編碼錯誤IBM使用代碼審查方法表明,錯誤的檢測(jin c)效率高達(dá)全部查出錯誤的80Myers的研究發(fā)現(xiàn)代碼審查和代碼走查平均查出全部錯誤的30共九十二頁代碼(di m)審查、代碼(di m)走查與動態(tài)測試相互補(bǔ)充研究表明使用代碼審查和代碼走查發(fā)現(xiàn)某類錯誤比用動態(tài)測試更有效,而對另一類錯誤情況可能正好相反由此可見代碼審查和代碼走查方法與使用動態(tài)測試是相互(xingh)補(bǔ)充的,缺少任何一種方法都會使錯誤的檢測率降低共九十二頁技術(shù)(jsh)評審綜合運(yùn)用走查和審查技術(shù),逐頁、逐節(jié)地檢查軟件開發(fā)前期需求分析和設(shè)計的文檔,對軟件的需求,設(shè)計結(jié)構(gòu)等方面(fngmin)

8、提出問題評審也被當(dāng)作一種管理工具,經(jīng)過評審不僅可以提高各階段軟件產(chǎn)品的質(zhì)量,還可以收集到一些有關(guān)該軟件產(chǎn)品質(zhì)量的數(shù)據(jù)技術(shù)評審屬于廣義的測試范疇,也是一種質(zhì)量保證手段軟件開發(fā)過程中每個階段的評審都必須十分正規(guī)的、嚴(yán)格的加以定義,并根據(jù)規(guī)程實(shí)施共九十二頁2.2代碼(di m)安全漏洞數(shù)值泄露返回值泄露Static方法中數(shù)組泄露對象變量合并垃圾(l j)回收器訪問權(quán)限有關(guān)域的相關(guān)問題共九十二頁JAVA語言(yyn)安全漏洞未驗(yàn)證的輸入系統(tǒng)函數(shù)暴露系統(tǒng)資源暴露數(shù)據(jù)庫信息暴露用戶(yngh)信息修改注入其他共九十二頁系統(tǒng)函數(shù)(hnsh)暴露共九十二頁JAVA語言(yyn)安全漏洞濫用API模式(msh)

9、不正確的對象比較不正確的finalize()方法不安全的DNS查詢未檢查返回值共九十二頁JAVA語言(yyn)安全漏洞安全特性缺陷模式(msh)硬編碼密碼問題空字符串用作密碼問題明碼字符串作為密碼的問題不安全的隨機(jī)數(shù)問題未正確處理私密信息問題共九十二頁明碼字符串作為(zuwi)密碼的問題共九十二頁JAVA語言(yyn)安全漏洞競爭條件(tiojin)模式非原子文件操作線程間的數(shù)據(jù)泄露共九十二頁非原子文件(wnjin)操作共九十二頁線程間的數(shù)據(jù)(shj)泄露共九十二頁JAVA語言(yyn)安全漏洞不合理的異常處理模式異常死鎖問題異常反饋信息(xnx)泄露共九十二頁JAVA語言(yyn)安全漏洞低

10、質(zhì)量代碼模式Web應(yīng)用程序中的main方法問題(wnt)臨時文件刪除問題共九十二頁JAVA語言(yyn)安全漏洞封裝不當(dāng)模式返回值泄露方法權(quán)限設(shè)置內(nèi)部(nib)類系統(tǒng)信息暴露垃圾回收器protected OR public共九十二頁C/C+語言(yyn)安全漏洞未驗(yàn)證的輸入緩沖區(qū)溢出LDAP攻擊(輕量目錄訪問協(xié)議)SQL注入攻擊未驗(yàn)證的輸入用于系統(tǒng)(xtng)級別函數(shù)拒絕服務(wù)誘騙安全風(fēng)險共九十二頁C/C+語言(yyn)安全漏洞濫用API模式不恰當(dāng)?shù)腸hroot()系統(tǒng)調(diào)用未清除堆的內(nèi)存釋放不安全(nqun)的DNS查詢Socket綁定問題命名管道的脆弱性共九十二頁C/C+語言(yyn)安全漏洞

11、安全特性缺陷模式不可靠的進(jìn)程創(chuàng)建使用不可靠的宏使用不可靠的注冊不可靠的密碼(m m)不安全的隨機(jī)數(shù)不安全的權(quán)限提升忽略檢查函數(shù)的返回值共九十二頁C/C+語言(yyn)安全漏洞競爭條件模式時間檢查與時間使用產(chǎn)生(chnshng)的競爭條件信號量處理不當(dāng)狀態(tài)同步故障共九十二頁C/C+語言(yyn)安全漏洞低質(zhì)量代碼模式可預(yù)測的臨時文件名暴露絕對路徑堆棧變量地址返回重復(fù)(chngf)釋放釋放資源使用變量未初始化符號數(shù)與無符號數(shù)轉(zhuǎn)換共九十二頁C/C+語言(yyn)安全漏洞封裝不當(dāng)模式系統(tǒng)資源泄露沒有捕獲異常堆棧變量地址返回重復(fù)釋放釋放資源(zyun)使用變量未初始化符號數(shù)與無符號數(shù)轉(zhuǎn)換共九十二頁2.3

12、靜態(tài)(jngti)安全分析一般性方法(基于工具)共九十二頁建模詞法(cf)分析語法分析語義分析跟蹤控制流跟蹤數(shù)據(jù)流共九十二頁建模詞法分析(fnx)語法分析語義分析跟蹤控制流跟蹤數(shù)據(jù)流共九十二頁分析方法過程內(nèi)分析符號執(zhí)行程序(chngx)切片抽象解釋模型檢驗(yàn)過程間分析函數(shù)調(diào)用分析共九十二頁安全缺陷(quxin)模型故障(gzhng)模型內(nèi)存泄露空指針故障數(shù)組越界故障使用未初始化變量的故障共九十二頁安全(nqun)缺陷模型安全漏洞模型緩沖區(qū)溢出模型被感染數(shù)據(jù)漏洞模型競爭條件(tiojin)漏洞模型風(fēng)險操作模型隨機(jī)數(shù)漏洞模型共九十二頁安全(nqun)缺陷模型差性能模型空字符串比較拷貝字符串未聲明為s

13、tatic的內(nèi)部類參數(shù)為常數(shù)(chngsh)的數(shù)學(xué)方法未聲明的變量及方法共九十二頁安全缺陷(quxin)模型并發(fā)故障模型死鎖代碼國際化模型不良習(xí)慣模型垃圾回收、命名、方法調(diào)用、對象(duxing)序列化易誘騙代碼模型歧義、無意義的比較、聲明未使用、永真的判斷共九十二頁缺陷(quxin)模式匹配事先收集足夠多的共性(gngxng)缺陷模式用戶僅輸入待檢測代碼就可以與”類型化”方法關(guān)系密切比較實(shí)用容易產(chǎn)生“誤報”共九十二頁缺陷查找(ch zho)工具準(zhǔn)確?漏報(False Negative, not Complete)誤報(False Positive, not Sound)缺陷知識哪里來程序自帶

14、工具提供(tgng)基本方法基于形式化基于缺陷模式共九十二頁基于缺陷模式(msh)的主要工具Jlint 主要采用數(shù)據(jù)流分析技術(shù),速度快 沒有誤報FindBugs 內(nèi)置較多的缺陷模式 有較好的應(yīng)用(google)PMD 格式為主,可以靈活增加新缺陷模式 以抽象(chuxing)語法樹為基礎(chǔ)建立 Coverify 主要針對操作系統(tǒng)共九十二頁2.4基于(jy)形式化的軟件分析方法形式化軟件(run jin)分析是一種基于數(shù)學(xué)的“自動化”技術(shù):給出一個特定行為的精確描述,該技術(shù)可以“準(zhǔn)確地”對軟件(run jin)的語義進(jìn)行推理主要的形式化方法包括:模型檢測(Model Checking)抽象解釋(A

15、bstract Interpretation)定理證明(Theorem Proving)符號執(zhí)行(Symbolic Execution)共九十二頁基于“有限狀態(tài)自動機(jī)”理論待驗(yàn)證系統(tǒng)的數(shù)學(xué)模型(FSM)描述規(guī)范的形式語言(CTL、LTL)確定數(shù)學(xué)模型是否滿足規(guī)范的方法從代碼中抽取(chu q)有限狀態(tài)轉(zhuǎn)換系統(tǒng)模型,用來表示目標(biāo)系統(tǒng)的行為適合檢驗(yàn)“并發(fā)”等時序方面的特性對于值域等類型的分析比較困難狀態(tài)爆炸SPIN,BLAST,SLAM。模型(mxng)檢測共九十二頁抽象(chuxing)解釋一種基于“格”理論的框架許多形式化分析方法都可以被涵蓋其中主要適合 數(shù)據(jù)流分析(fnx)(Data Flo

16、w Analysis)尤其是對循環(huán)、遞歸等主要思想是對代碼進(jìn)行“近似”,將不可判定問題進(jìn)行模擬共九十二頁定理(dngl)證明(Theorem Proving)演繹方法(Deductive Methods)基于Floyd/Hoare 邏輯用如下形式表示程序的狀態(tài)P C Q C: 可執(zhí)行代碼(di m) P: Pre-condition,執(zhí)行前的狀態(tài)屬性 Q: Post-condition,執(zhí)行后的狀態(tài)屬性利用推理/證明機(jī)制解決 語句復(fù)合問題共九十二頁符號執(zhí)行通過使用抽象的符號表示程序中變量的值來模擬程序的執(zhí)行,克服了變量的值難以確定的問題跟蹤各路徑上變量的可能取值,有可能發(fā)現(xiàn)細(xì)微的邏輯錯誤程序較

17、大時,可能的路徑數(shù)目增長會很快??梢?ky)選取重要的路徑進(jìn)行分析共九十二頁基于(jy)形式化方法的主要工具JPF 模型(mxng)檢測Bandera Slam, BLAST, CMCESC/JavaASTREEPREfix定理證明(Theorem Proving)模型檢測(Model Checking)抽象解釋(Abstract Interpretation)符號執(zhí)行(Symbolic Execution)共九十二頁工具發(fā)展(fzhn)的特點(diǎn)各自優(yōu)勢(yush)不同綜合使用多種分析方法在準(zhǔn)確度與時間開銷上進(jìn)行折中集成?共九十二頁2.5一種基于安全(nqun)規(guī)則的方法軟件安全形勢變得越來越嚴(yán)

18、峻程序源代碼的規(guī)模越來越龐大采用(ciyng)傳統(tǒng)的軟件測試方法來檢測源代碼中潛在安全漏洞的難度增加可被利用的安全漏洞形式也不再局限于以往的常見漏洞共九十二頁基于安全規(guī)則(guz)的源代碼分析方法研究2013-01-2952國內(nèi)外源代碼靜態(tài)(jngti)分析方法國內(nèi)外靜態(tài)安全分析工具詞法語法分析基于抽象語法樹的語義分析規(guī)則檢查分析數(shù)據(jù)流控制流分析字符串匹配和模型化分析PMDFortify SCACheckmarx CxSuiteArmorize CodeSecureCoverity Prevent現(xiàn)有成果存在的問題 可檢測漏洞的范圍受限 & 檢測結(jié)果的效率、準(zhǔn)確率 & 規(guī)則簡易性和描述能力共九

19、十二頁基于安全(nqun)規(guī)則的源代碼分析方法研究基于安全(nqun)規(guī)則的源代碼分析方法2013-01-2953用戶根據(jù)特定領(lǐng)域的需要自定義安全規(guī)則來描述待檢測的安全漏洞模式特征根據(jù)用戶定義的安全規(guī)則自動掃描待檢測的源代碼并解析通過基于安全規(guī)則的靜態(tài)分析技術(shù)來檢測程序源代碼中潛在的安全漏洞共九十二頁基于(jy)安全規(guī)則的源代碼分析方法研究基于(jy)安全規(guī)則的源代碼分析過程2013-01-2954共九十二頁基于安全規(guī)則(guz)的源代碼分析方法研究源代碼預(yù)處理分析(fnx)2013-01-2955 詞法分析 語法分析抽象語法樹的遍歷對源代碼逐個字符地讀取,識別出關(guān)鍵字、標(biāo)識符、常量和特殊符號

20、等,同時過濾掉空格、注釋等無意義字符和行拼接處理將抽象語法樹的遍歷過程分為三個階段,來收集后續(xù)依賴分析和安全分析所需要用到的源代碼信息,并將收集到的信息存在相應(yīng)的中間表示數(shù)據(jù)結(jié)構(gòu)中根據(jù)語法規(guī)則識別出程序的語法結(jié)構(gòu),同時根據(jù)其語義動作構(gòu)造抽象語法樹,過濾掉由于文法等價轉(zhuǎn)換(消除左遞歸、回溯、二義性文法)引入的多余的產(chǎn)生式共九十二頁基于安全(nqun)規(guī)則的源代碼分析方法研究基于安全規(guī)則(guz)的靜態(tài)分析2013-01-2956共九十二頁基于安全(nqun)規(guī)則的源代碼分析方法研究安全(nqun)規(guī)則及其描述語言2013-01-2957安全規(guī)則是使用其描述語言對程序源代碼中潛在的安全漏洞模式的一

21、種特征抽象?;诎踩?guī)則的靜態(tài)分析過程必須根據(jù)用戶輸入的安全規(guī)則才能進(jìn)行模式匹配,查找出源代碼中符合安全規(guī)則描述的安全漏洞。其語言需滿足描述能力較強(qiáng)、語法簡單且擴(kuò)展性良好。共九十二頁基于安全規(guī)則(guz)的源代碼分析方法研究基于(jy)Metal的設(shè)計2013-01-2958用戶只需要了解待檢測源代碼的基本語法,相比于PMD等同類型軟件易用性較好描述形式簡單增加標(biāo)識來特別處理上下文無關(guān)規(guī)則,避免了由于遍歷源代碼的控制流數(shù)據(jù)流信息產(chǎn)生的時間開銷,提高檢測效率。規(guī)則分類處理支持多語言中的類型和表達(dá)式,新增規(guī)則描述輔助類型,簡化了用戶對復(fù)雜規(guī)則的描述,提高了后續(xù)模式匹配的準(zhǔn)確率描述能力強(qiáng)模式中增加類

22、型檢查和值約束,能在模式匹配的時候過濾掉用戶不關(guān)心的變量和表達(dá)式語句,提高分析效率,同時也在一定程度上降低了誤報率模式增強(qiáng)共九十二頁基于安全(nqun)規(guī)則的源代碼分析方法研究基于(jy)有限狀態(tài)機(jī)的安全規(guī)則漏洞檢測模型2013-01-2959F=(S,s0,F(xiàn)u,F(xiàn)s)S是規(guī)則中自定義狀態(tài)的集合;是規(guī)則中自定義漏洞模式的集合;是狀態(tài)轉(zhuǎn)換函數(shù),(si,p)=Sd表示當(dāng)有限狀態(tài)機(jī)處在自定義狀態(tài)si的情況下,如果源代碼與規(guī)則模式匹配成功,則轉(zhuǎn)移到相應(yīng)的目的狀態(tài),由于目的狀態(tài)可能存在多個,所以用集合Sd表示;s0是唯一的初始狀態(tài)start;Fu是規(guī)則中自定義不安全終止?fàn)顟B(tài)的集合;Fs是規(guī)則中自定義安

23、全終止?fàn)顟B(tài)的集合。共九十二頁基于(jy)安全規(guī)則的源代碼分析方法研究基于有限狀態(tài)機(jī)的安全規(guī)則漏洞檢測(jin c)模型2013-01-2960安全執(zhí)行序列s0s1smsn符合漏洞模型的不安全執(zhí)行序列s0s1spsq實(shí)質(zhì):通過對源代碼進(jìn)行漏洞的特征模式匹配,在匹配成功的情況下完成狀態(tài)轉(zhuǎn)移,最后檢測程序源代碼執(zhí)行序列的終止?fàn)顟B(tài)是否在用戶自定義的不安全狀態(tài)集合中共九十二頁安全規(guī)則(guz)的設(shè)計2013-01-2961上下文無關(guān)規(guī)則是一種用于檢測程序源代碼中某些特定類型表達(dá)式的約束信息(xnx)的規(guī)則只對當(dāng)前所匹配的表達(dá)式進(jìn)行約束檢查,與表達(dá)式所處的源代碼上下文信息無關(guān)上下文相關(guān)規(guī)則是一種用于檢測程

24、序源代碼中某些特定類型表達(dá)式序列組合約束的規(guī)則不僅需要當(dāng)前所匹配表達(dá)式的信息,還需要結(jié)合與表達(dá)式的上下文相關(guān)信息,才能判斷出該表達(dá)式的序列組合是否存在潛在的安全漏洞安全規(guī)則分類共九十二頁基于(jy)安全規(guī)則的源代碼分析方法研究安全(nqun)規(guī)則的設(shè)計2013-01-2962狀態(tài)變量:源代碼變量匹配,進(jìn)行狀態(tài)綁定和轉(zhuǎn)移輔助變量:與源代碼變量的類型匹配,值約束檢測虛擬變量:沒有狀態(tài)變量的上下文相關(guān)規(guī)則中充當(dāng) 狀態(tài)變量模式變量:對重復(fù)出現(xiàn)的模式進(jìn)行事先定義轉(zhuǎn)移規(guī)則:由起始狀態(tài)、模式和目標(biāo)狀態(tài)組成。所有的模式匹配都從初始狀態(tài)start開始。只有滿足start狀態(tài)后的模式,變量實(shí)例才進(jìn)行狀態(tài)綁定。狀態(tài)

25、由狀態(tài)變量和狀態(tài)值組成,用于跟蹤狀態(tài)變量或源代碼隨著模式匹配的狀態(tài)轉(zhuǎn)移過程安全規(guī)則核心元素轉(zhuǎn)移規(guī)則變量共九十二頁基于安全規(guī)則(guz)的源代碼分析方法研究3.4 安全(nqun)規(guī)則描述語言2013-01-2963安全規(guī)則聲明部分轉(zhuǎn)移規(guī)則列表變量聲明列表共九十二頁基于(jy)安全規(guī)則的源代碼分析方法研究安全(nqun)規(guī)則庫2013-01-2964方便用戶重復(fù)使用自定義的安全規(guī)則安全規(guī)則庫的設(shè)計:唯一標(biāo)識碼,規(guī)則名稱,規(guī)則描述,規(guī)則的存放路徑,適用的語言類型,規(guī)則分類,漏洞風(fēng)險等級,推薦修復(fù)方案,規(guī)則入庫時間相似安全規(guī)則檢測:基于k-shingle和長度過濾的安全規(guī)則相似度檢測算法規(guī)則描述字符

26、串的k-shingle定義為其中任意長度為k的子串Jaccard相似度:共九十二頁基于安全(nqun)規(guī)則的源代碼分析方法研究安全(nqun)規(guī)則庫2013-01-29651刪去規(guī)則描述字符串中的停用詞,包括常見的“的”、“了”以及“為了”等,從而縮短規(guī)則描述字符串的長度,使得產(chǎn)生的k-shingle的集合變小,同時提高了相似性檢測結(jié)果的準(zhǔn)確率2基于長度的過濾。在刪除停用詞的基礎(chǔ)上,通過比較待檢測相似字符串的長度,提前過濾掉一部分不符合相似度要求的規(guī)則描述,從而避免了產(chǎn)生k-shingle的集合和后續(xù)Jaccard相似度的計算,進(jìn)一步提高算法效率假定兩個安全規(guī)則字符串u和v的Jaccard相似

27、度的上界為J,對于任意一個規(guī)則字符串s,且LuLv,則有u和v的Jaccard相似度SIM(u,v)最大值為Ku/Kv,其中K為k-shingle的集合大小,即Lv需要滿足:共九十二頁基于(jy)安全規(guī)則的源代碼分析方法研究基于k-shingle和長度過濾的安全規(guī)則(guz)相似度檢測算法2013-01-2966算法3.1:基于k-shingle和長度過濾的安全規(guī)則相似度檢測算法輸入:源規(guī)則字符串srcStr,目標(biāo)規(guī)則字符串destStr,相似度sim,k-shingle中的k值 輸出:實(shí)際相似度realSim方法:1: begin2: list initStopWordList(stopWo

28、rdFilePath)3: for word list4: deleteStopWords(srcStr, destStr)5: if sim != 0 & Length(destStr) (Length(srcStr) - k + 1) / sim + k 1 then6: srcSet 7: destSet 8: for i = 0 to Length(srcStr) k /k-Shingle(srcStr)9: srcSet.add(srcStri, i + k - 1)10: for j = 0 to Length(destStr) k /k-Shingle(destStr)11: d

29、estSet.add(destStrj, j + k - 1)12: intersection srcSet destSet13: union srcSet destSet14: realSim Size(intersection) / Size(union)15: else16: realSim -117: return realSim18:end;共九十二頁基于安全(nqun)規(guī)則的源代碼分析方法研究總體(zngt)結(jié)構(gòu)2013-01-2967系統(tǒng)架構(gòu)圖共九十二頁程序中間表示(biosh)的設(shè)計2013-01-2968 保證(bozhng)結(jié)構(gòu)清晰、簡單 保存源代碼中所有的有效信息 記錄源

30、代碼的行號信息程序結(jié)構(gòu)部分語句部分類型部分表達(dá)式部分 常量部分程序中間表示共九十二頁基于安全(nqun)規(guī)則的源代碼分析方法研究源代碼預(yù)處理分析(fnx)模塊2013-01-2969共九十二頁基于(jy)安全規(guī)則的源代碼分析方法研究源代碼預(yù)處理分析(fnx)模塊2013-01-2970算法4.1:加載類庫中指定類的算法輸入:完整類名name(必須使用命名空間加上類名稱),類庫文件絕對路徑path輸出:如果類庫中指定類加載成功,未出現(xiàn)任何異常,則返回true;否則,不做任何加載操作,返回false。1: begin2: type LoadFileAndGetType(path,name)3: i

31、f type != null then4: baseType getBaseType(type)5: list getInterfaceList(type)6: sp getNamespace(name)7: scene.addNamespace(sp)8: if isPublic(type) & isInterface(type) then9: addInterface(sp, type)10: else if isPublic(type) & isEnum(type) then11: addEnum(sp, type)12: else13: addClass(sp, type)14: vi

32、sitClassMembers(type)15: setBaseTypeAndInterfaces(type, baseType, list)16: if isGenericType(type) then17: list getActualTypeArguments(type)18: setGenerics(type, list)19: return true20: else21: return false22:end;共九十二頁基于安全(nqun)規(guī)則的源代碼分析方法研究4.2 源代碼預(yù)處理分析(fnx)模塊2013-01-2971算法4.2:獲取指定泛型的泛型參數(shù)算法輸入:泛型類型t輸出:

33、指定泛型的泛型參數(shù)列表list方法:1: begin2: genericName getGenericTypeDefinition(t)3: if + in genericName then4: i1 genericName.lastIndexOf(+)5: i2 genericName.lastIndexOf()6: if i1 i2 then 7: return null8: else9: list getSymbolIndex(, genericName)10: arguNum 0 /用于記錄占位符后面泛型參數(shù)的個數(shù)11: arguIndex 0 /用于記錄下一次取泛型參數(shù)的索引12:

34、for i list13: s genericNamei, Length(genericName) - 114: if + in s then15: plusIndex i + s.indexOf(+)16: arguNum getGenericArguNum(i + 1, plusIndex)17: else18: arguNum getGenericArguNum(i + 1)19: if !isLastGenericArgu(arguIndex, arguNum) then20: arguIndex arguIndex + arguNum21: for i = arguIndex to

35、arguIndex + arguNum22: typeParams.add(getGenericArguments(t)i)23: return typeParams24: else 25: typeParams getGenericArguments(t)26: return typeParams27:end;共九十二頁基于(jy)安全規(guī)則的源代碼分析方法研究安全規(guī)則靜態(tài)(jngti)分析模塊2013-01-2972共九十二頁基于安全規(guī)則(guz)的源代碼分析方法研究實(shí)驗(yàn)(shyn)及結(jié)果2013-01-2973硬件:CPU:i3-2100 3.10GHz 內(nèi)存:4.00 GB操作系統(tǒng):Mi

36、crosoft Windows 7 旗艦版 (32位)Java開發(fā)平臺:JDK1.6,Eclipse 3.5.2,JRE1.62012年9月發(fā)布的Juliet Test Suite for Java的1.1.1版本,本文從中選取了有代表性的12種漏洞,有針對性的編寫安全規(guī)則來檢測該測試集中的安全漏洞,共有341個文件、353個類、2278個方法和113513行代碼使用SASSR和PMD對實(shí)驗(yàn)數(shù)據(jù)集進(jìn)行基于安全規(guī)則的源代碼安全性分析來檢測源代碼中潛在的安全漏洞,并從規(guī)則的簡潔性、檢測效率、內(nèi)存使用情況以及檢測結(jié)果的準(zhǔn)確性四個維度進(jìn)行對比分析實(shí)驗(yàn)環(huán)境實(shí)驗(yàn)數(shù)據(jù)集實(shí)驗(yàn)方案共九十二頁基于(jy)安全規(guī)則

37、的源代碼分析方法研究2013-01-2974實(shí)驗(yàn)(shyn)結(jié)果規(guī)則定義共九十二頁基于(jy)安全規(guī)則的源代碼分析方法研究實(shí)驗(yàn)(shyn)結(jié)果2013-01-2975漏洞名稱標(biāo)準(zhǔn)漏洞數(shù)SASSRPMD規(guī)則行數(shù)檢測時間(單位:s)漏洞檢測數(shù)規(guī)則行數(shù)檢測時間(單位:s)漏洞檢測數(shù)CWE78_OS_Command_Injection9560.02895231.08095CWE89_SQL_Injection17290.031172352.233158CWE209_Information_Leak_Error3670.02036200.80236CWE327_Use_Broken_Crypto1880

38、.01518240.09418CWE330_Insufficiently_Random_Values1880.01618270.98418CWE547_Hardcoded_Security_Constants1890.01318230.91618CWE597_Wrong_Operator_String_Comparison1870.01818210.35418CWE614_Sensitive_Cookie_Without_Secure18140.03617000CWE698_Redirect_Without_Exit35130.04134000CWE764_Multiple_Locks4130

39、.0476000CWE765_Multiple_Unlocks2140.0414000CWE832_Unlock_Not_Locked4120.0348000共九十二頁基于(jy)安全規(guī)則的源代碼分析方法研究實(shí)驗(yàn)(shyn)結(jié)果2013-01-2976漏洞總數(shù)誤報數(shù)漏報數(shù)準(zhǔn)確率=(漏洞數(shù)-誤報數(shù)-漏報數(shù))/漏洞數(shù)內(nèi)存使用情況(單位:M)SASSR43893(438-9-3)/438 = 97.2%48PMD014(438-0-14)/438 = 96.8%15共九十二頁小結(jié)(xioji)減小內(nèi)存消耗:針對大規(guī)模程序的源代碼中間表示的存儲方式,或者對源代碼中間表示進(jìn)行改進(jìn),去掉不必要的數(shù)據(jù)結(jié)構(gòu)和

40、源代碼信息安全規(guī)則細(xì)化分類(fn li):細(xì)分為控制流相關(guān)規(guī)則、數(shù)據(jù)流相關(guān)規(guī)則和對象流相關(guān)規(guī)則等,通過分類(fn li)綁定指定流圖進(jìn)行分析,提高規(guī)則檢測效率安全規(guī)則及其描述語言擴(kuò)展:支持更多種類的源代碼模式,提高安全規(guī)則語言的描述能力共九十二頁2.6一種靜態(tài)(jngti)、動態(tài)相結(jié)合的方法基于靜態(tài)分析的方法誤報。商用工具20%及以上比例漏報基于動態(tài)分析的方法準(zhǔn)確率高覆蓋的問題(wnt),依賴測試用例集共九十二頁共九十二頁靜動態(tài)(dngti)結(jié)合快速的靜態(tài)分析較全面獲取疑似安全缺陷針對性的進(jìn)行動態(tài)(dngti)執(zhí)行測試指導(dǎo)程序插樁、切片和用例生成降低測試開銷去偽存真共九十二頁一種(y zhn)

41、靜動態(tài)分析結(jié)合的思路首先被測源程序經(jīng)過靜態(tài)檢測后得到候選漏洞報告,利用候選漏洞報告指導(dǎo)(zhdo)生成測試場景和測試用例集,并構(gòu)造程序自動機(jī);然后將測試用例集作為動態(tài)檢測的輸入來驅(qū)動執(zhí)行測試場景,在符合插樁規(guī)則的語句中插入樁代碼;最后將實(shí)時運(yùn)行信息與自動機(jī)狀態(tài)匹配進(jìn)行動態(tài)驗(yàn)證得到篩選后的漏洞報告,而流程中當(dāng)測試用例集生成失敗時會導(dǎo)致需要進(jìn)行手工的動態(tài)驗(yàn)證。 共九十二頁共九十二頁測試場景(chng jng)(片段)測試場景。當(dāng)一個三元組TS=(P,S,n),其中n表示一條感興趣的語句;S表示為測試n的源程序語句集;P表示為測試n的形參列表,那么這個(zh ge)三元組TS被稱為語句n的測試場景。共九十二頁測試場景(chng jng)(片段)生成基于漏洞類型切片(后向)計算語句(yj)脆弱性循環(huán)統(tǒng)一轉(zhuǎn)換為WhileSwitch轉(zhuǎn)換為If-Else結(jié)構(gòu)生成語句集和形參共九十二頁測試場景(chng jng)(片段)生成對于接口類型的形參,如何生成相對應(yīng)的測試用例? 由于基本數(shù)據(jù)類型(包含對應(yīng)的包裝類型)和字符串類型的測試用例容易生成。如果調(diào)用接口類型的形參時,只是取出其中的基本數(shù)據(jù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論