使用PQL尋找應(yīng)用程序錯(cuò)誤與安全漏洞_第1頁(yè)
使用PQL尋找應(yīng)用程序錯(cuò)誤與安全漏洞_第2頁(yè)
使用PQL尋找應(yīng)用程序錯(cuò)誤與安全漏洞_第3頁(yè)
使用PQL尋找應(yīng)用程序錯(cuò)誤與安全漏洞_第4頁(yè)
使用PQL尋找應(yīng)用程序錯(cuò)誤與安全漏洞_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、利用PQL發(fā)現(xiàn)程序安全缺陷摘要:許多有效的程序缺陷檢測(cè)工具的機(jī)理是檢查該程序是否滿足已制定好的規(guī)則。那么如何用已制定好規(guī)則這種類,對(duì)相關(guān)對(duì)象集合進(jìn)行處理呢。本文提出了PQL(程序查詢語言),方便程序查找類與相關(guān)對(duì)象之間的匹配,當(dāng)發(fā)現(xiàn)匹配時(shí),記錄相關(guān)信息或者進(jìn)行錯(cuò)誤糾正。本文提出的靜態(tài)分析器能夠查找到所有潛在的匹配,該靜態(tài)分析器使用上下文敏感指針分析。靜態(tài)分析結(jié)果為動(dòng)態(tài)分析減少了代碼執(zhí)行量。1. 概述指針是很多編程語言中所涉及的一種特殊的數(shù)據(jù)類型,指針變量中存儲(chǔ)的是內(nèi)存對(duì)象的地址,用戶可以借此操作程序?qū)ο?。雖然java不存在指針,但是通過new關(guān)鍵字來實(shí)現(xiàn)了調(diào)用對(duì)象,所以從這個(gè)角度講,java語

2、言存在與指針類似的功能,在java語言中同樣可以用指針分析。通過下面例子來說明使用指針分析的理由:序號(hào)代碼1HttpServletRequeset requeset=.;2String s1 = request.getParameter(“name”);3.4StringBuffer sbuf1;5StringBuffer sbuf2;6.7sbuf1.append(s1);8String query = sbuf2.toString();9Connection con = .10con.executeQuery(query);在這段代碼中,如果我們認(rèn)為s1是被污染的,s1通過request.

3、getParameter()獲得,而sbuf1是由s1通過append方法獲得的,最后字符串query通過executeQuery執(zhí)行。這段代碼是否存在缺陷,這要確定sbuf1和sbuf2是否涉及過一個(gè)相同的對(duì)象,否則只能假設(shè)他們之間有交集。因?yàn)槿绻鹲buf1被污染,那么查詢語句query也可能設(shè)計(jì)過被污染的對(duì)象。對(duì)于一般的缺乏指針分析的靜態(tài)檢測(cè)工具很有可能會(huì)根據(jù)上面的判斷直接認(rèn)為第10行的執(zhí)行時(shí)不安全的,只能通過人工審查進(jìn)行判斷,這不僅是誤報(bào)率增大,而且增加了檢測(cè)人員的工作量。con.execute(request.getParameter("query");這行代碼從H

4、TTP請(qǐng)求中讀參數(shù),并且直接把該參數(shù)傳遞給數(shù)據(jù)庫(kù)后臺(tái)。如果使用合適的查詢語句,惡意用戶可以獲得非授權(quán)的訪問權(quán)限,從而破壞數(shù)據(jù)庫(kù)中的內(nèi)容或者在服務(wù)器上執(zhí)行任意的惡意代碼。2. PQL語言使用PQL來查詢程序脆弱性。它是一種查詢語言,它允許用戶使用類似編程語言的語法來表示漏洞查詢,即用戶可以使用展示了一個(gè)特定模式本質(zhì)的代碼片段來指定查詢。PQL是一種BUG模式,它描述了一些列動(dòng)態(tài)事件以及指向動(dòng)態(tài)事件的實(shí)例變量。Matches字句指定對(duì)象變量為了匹配match而必須發(fā)生的事件序列。最后return子句指定當(dāng)查詢成功,即發(fā)現(xiàn)在matches子句中存在一組對(duì)象實(shí)例參與該事件,由查詢返回的對(duì)象。其中use

5、s子句定義該查詢所使用的對(duì)象變量。Matches則解釋為:對(duì)象source必須通過HttpServletRequest.getParameter得到;對(duì)temp對(duì)象調(diào)用StringBuffer.append方法把source作為第一個(gè)參數(shù);對(duì)temp對(duì)象調(diào)用StringBuffer.toString方法來獲得對(duì)象derived;調(diào)用execute方法并且把對(duì)象derived作為參數(shù)執(zhí)行。上述這些操作必須按順序執(zhí)行。最后,return子句指定查詢返回的對(duì)象對(duì)<source,derived>。PQL靜態(tài)分析能夠發(fā)現(xiàn)對(duì)于一個(gè)給定的漏洞查詢的所有可能匹配。PQL系統(tǒng)利用指針分析技術(shù),指針分

6、析按照是否考慮調(diào)用函數(shù)時(shí)的上下文信息可分為兩類,分別是上下文敏感(context-sensitive)指針分析和上下文不敏感(context-insensitive)。上下文敏感分析是指會(huì)區(qū)分同一函數(shù)不同的調(diào)用而產(chǎn)生不同的分析結(jié)果,而上下文不敏感分析則對(duì)于同一函數(shù)的不同調(diào)用只產(chǎn)生一個(gè)近似的結(jié)果。在精度上,上下文敏感分析要比上下文不敏感分析優(yōu)越很多。序號(hào)代碼1Class FindName2 String name;3 FindName(String name)4 T = name;5 6 String getName()7 return ;8 . 9 10 St

7、ring passedName = request.getParameter(“.”)11 FindName name1 = new FindName(passedName);12 String localName = “xxx”;13 FindName name2 = new FindName(localName);14 String s1 = name1.getName();15 String s2 = name2.getName();這段代碼中FindName類對(duì)name進(jìn)行了封裝。構(gòu)造了兩個(gè)FindName類對(duì)象,并且兩個(gè)name對(duì)象都調(diào)用了getName方法。對(duì)于上下不文敏感分析來說

8、,它會(huì)將14,15行合并,因?yàn)樗麄兌颊{(diào)用了getName方法。name1.getName(),name2.getName()都屬于無參數(shù)調(diào)用,所以按照上下文不敏感分析來講,指向的可能是第10行的返回值或者是第12行的返回值“x”。這樣,s1和s2都會(huì)被認(rèn)為是被污染的數(shù)據(jù),但是使用上下文敏感指針分析,只會(huì)判斷s1是被污染的。可以看出,上下文敏感分析要比不敏感分析更精確,但上下文不敏感分析效率更好,比較適合用于某些需要海量源碼分析的系統(tǒng)中。2.1 PQL執(zhí)行跡對(duì)于下面的一段代碼,PQL是如何進(jìn)行查詢匹配的O1是names的對(duì)象,o2,o6是數(shù)組o1的元素。O3是request的對(duì)

9、象,o4,o7是string s的對(duì)象,o5是connection的對(duì)象。2.2 DatalogDatalog是一種演繹數(shù)據(jù)庫(kù)查詢語言。PQL語言作為Datalog查詢的語法糖,這樣用戶可以通過一種語法類似于java的語言來描述缺陷模式。Joeq工具:是系統(tǒng)中程序識(shí)別器,原始java代碼的字節(jié)經(jīng)過joeq識(shí)別后,轉(zhuǎn)換成代表程序原始信息。Bddbddb:解釋器,分析靜態(tài)代碼中的安全漏洞。Datalog對(duì)程序安全漏洞進(jìn)行描述,經(jīng)過bddbddb的分析最后得出程序的靜態(tài)安全漏洞結(jié)果。在bddbddb數(shù)據(jù)庫(kù)中,原代碼參數(shù)、變量的輸入關(guān)系為:1. allocation型:v=new Object()表示在堆中分配了新的對(duì)象h,并使變量v指向?qū)ο骽。2. Simple assignment型:v1=v2 表示如果v2指向h,那么v1也指向h。3. Field store型:v1.m=v2 表示如果變量v1指向?qū)ο骽1,v2指向h2,那么h1.m也指向h2.4. Filed load型:v2=v1.m表示如果變量v1指向?qū)ο骽1,h1.m指向h2,那么v2也指向h2.V: 程序變量H:堆對(duì)象M:方法Datalog與原始語句之間的翻譯過程:拿原始語句h1.m=h2來舉例,表示堆對(duì)象h1.m指向?qū)ο骽2,但在bddbddb中是這樣執(zhí)行的,先進(jìn)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論