服務(wù)器軟件漏洞測(cè)試程序的設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
服務(wù)器軟件漏洞測(cè)試程序的設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
服務(wù)器軟件漏洞測(cè)試程序的設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

服務(wù)器軟件漏洞測(cè)試程序的設(shè)計(jì)與實(shí)現(xiàn)

摘要:服務(wù)器軟件漏洞是導(dǎo)致網(wǎng)絡(luò)不安全的重要因素,當(dāng)前還沒有什么方法能保證服務(wù)器軟件沒有漏洞,因此漏洞測(cè)試在網(wǎng)絡(luò)安全方面占有重要地位。本文給出了一個(gè)通用漏洞測(cè)試程序的設(shè)計(jì)與實(shí)現(xiàn),設(shè)計(jì)方案采用腳本、樣本包及動(dòng)態(tài)鏈接庫(kù)技術(shù),使得測(cè)試程序與協(xié)議無關(guān),提高了通用性。關(guān)鍵詞:網(wǎng)絡(luò)安全;漏洞測(cè)試;樣本包;動(dòng)態(tài)鏈接庫(kù)網(wǎng)絡(luò)安全是當(dāng)前的熱門話題,互聯(lián)網(wǎng)安全性差的重要表現(xiàn)是服務(wù)器軟件大多存在漏洞,黑客的入侵行為大多是利用服務(wù)器漏洞實(shí)現(xiàn)的。現(xiàn)在,每天都有新的服務(wù)器軟件出現(xiàn),但這些軟件基本上都存在著漏洞,按照傳統(tǒng)的測(cè)試方法,依靠測(cè)試人員去分析代碼來完成測(cè)試,顯然是滿足不了需求的。網(wǎng)絡(luò)服務(wù)器軟件的漏洞測(cè)試是一個(gè)十分重要的問題,設(shè)計(jì)一個(gè)較為自動(dòng)化、通用的漏洞測(cè)試工具是十分必要的。一般漏洞研究方法是先熟悉軟件功能,分析服務(wù)協(xié)議,檢查程序代碼,然后再推測(cè)什么情況下會(huì)出現(xiàn)漏洞。這是一個(gè)工作量很大的過程,而且開發(fā)出來的測(cè)試程序也是針對(duì)特定軟件,不能通用。我們的測(cè)試軟件要做到通用,就要找出網(wǎng)絡(luò)服務(wù)器軟件的共同特性,采用易于配置,易于擴(kuò)展的結(jié)構(gòu)。1.網(wǎng)絡(luò)服務(wù)的共性及漏洞產(chǎn)生原因網(wǎng)絡(luò)服務(wù)基本上都是基于客戶機(jī)-服務(wù)器模型。

請(qǐng)求數(shù)據(jù)包響應(yīng)數(shù)據(jù)報(bào)

圖1客戶機(jī)發(fā)出請(qǐng)求數(shù)據(jù)包,服務(wù)器返回響應(yīng)數(shù)據(jù)包,即Request-Response方式。服務(wù)的共性就在于客戶機(jī)與服務(wù)器通過數(shù)據(jù)包進(jìn)行通信。每個(gè)服務(wù)都有自己的應(yīng)用層協(xié)議。服務(wù)器軟件的應(yīng)用層協(xié)議決定了服務(wù)器對(duì)請(qǐng)求數(shù)據(jù)包里的內(nèi)容怎么解釋,所以協(xié)議也就體現(xiàn)在數(shù)據(jù)包中。服務(wù)器軟件的漏洞一般是因?yàn)榉?wù)器對(duì)異常的請(qǐng)求數(shù)據(jù)包不能正確響應(yīng)。對(duì)于異常的請(qǐng)求數(shù)據(jù)包,像數(shù)據(jù)包里有太長(zhǎng)的文件名或文件目錄路徑包含特殊字符等,如果服務(wù)器軟件不能正確處理,就可能導(dǎo)致緩沖區(qū)溢出、泄露服務(wù)器重要信息、拒絕服務(wù)等問題,使得入侵者有機(jī)可乘。如IIS服務(wù)器的UNICODE編碼漏洞,對(duì)于未打補(bǔ)丁的IIS服務(wù)器,如果入侵者輸入類似http://x.x.x.x/scripts/..%255c../winnt/system32/cmd.exe/c+dir+c:\的請(qǐng)求,IIS服務(wù)器會(huì)將文件路徑中的%255c解釋為“/”,繞過系統(tǒng)安全策略,在服務(wù)器上執(zhí)行dir命令,并將結(jié)果返回給客戶端。利用這種方法,可在服務(wù)器上執(zhí)行任何系統(tǒng)命令,能輕而易舉的控制整個(gè)服務(wù)器。我們的測(cè)試程序就是要能自動(dòng)生成各種可能導(dǎo)致服務(wù)器不正常工作的請(qǐng)求數(shù)據(jù)包,并分析返回的響應(yīng)信息,找出漏洞所在。2.測(cè)試程序的設(shè)計(jì)方案為了通用,測(cè)試程序不能過多涉及到具體協(xié)議,而測(cè)試數(shù)據(jù)包的格式又要符合具體協(xié)議,這是一個(gè)矛盾。我們采用樣本包和動(dòng)態(tài)鏈接庫(kù)的方法來解決這個(gè)矛盾。樣本包,即有代表性的數(shù)據(jù)包,依www服務(wù)為例,請(qǐng)求數(shù)據(jù)包“GET/pub/index.htmHTTP/1.1”可以很好的代表一類請(qǐng)求,就可以作為一個(gè)樣本包。如果只對(duì)這個(gè)樣本包中的某個(gè)數(shù)據(jù)域進(jìn)行變換,則生成數(shù)據(jù)包的格式一般也是滿足www服務(wù)通信協(xié)議的。對(duì)于一個(gè)具體服務(wù),它的協(xié)議體現(xiàn)在通信所用的數(shù)據(jù)包中,我們可以收集一個(gè)足以體現(xiàn)該服務(wù)協(xié)議的樣本包集,采用一個(gè)腳本來描述這些樣本包,要測(cè)試不同的服務(wù)軟件,只須編寫與之對(duì)應(yīng)的腳本即可。測(cè)試程序只對(duì)腳本進(jìn)行處理,不必與具體協(xié)議相關(guān),也就實(shí)現(xiàn)了通用性。整個(gè)測(cè)試程序的系統(tǒng)框圖如圖2所示,測(cè)試數(shù)據(jù)包生成模塊處理腳本,生成測(cè)試數(shù)據(jù)包,發(fā)送給服務(wù)器;響應(yīng)信息分析模塊分析返回信息,并將分析結(jié)果保存在記錄文件中。腳本記錄文件圖22.1腳本腳本是對(duì)樣本包集的描述,服務(wù)器軟件的協(xié)議體現(xiàn)在腳本中。測(cè)試數(shù)據(jù)包就是對(duì)樣本包的某個(gè)域進(jìn)行變換后得到的數(shù)據(jù)包。為了便于程序處理,定義了幾個(gè)關(guān)鍵字:SAMPS,樣本包開始;ITEM,數(shù)據(jù)項(xiàng);SAMPE,樣本包結(jié)束;RESULT,返回結(jié)果特征串;“;”,注釋,如果一行以“;”打頭,則這一行是注釋行。腳本中依次列出各個(gè)樣本包,每個(gè)樣本包分成幾個(gè)數(shù)據(jù)域,每個(gè)數(shù)據(jù)域用一個(gè)數(shù)據(jù)項(xiàng)來表示。GET/pub/index.htmHTTP/1.1的腳本描述為:SAMPSITEMCOMMGET

ITEMPATH/pub/

ITEMFILEindex.htmITEMVERHTTP/1.1RESULT…SAMPE每個(gè)數(shù)據(jù)項(xiàng)由三部分組成,以第一個(gè)數(shù)據(jù)項(xiàng)ITEMSCOMMIGET為例:ITEMS,關(guān)鍵字,標(biāo)識(shí)數(shù)據(jù)項(xiàng)開始(每個(gè)數(shù)據(jù)項(xiàng)占一行,因此無須關(guān)鍵字標(biāo)識(shí)數(shù)據(jù)項(xiàng)結(jié)束);COMM:數(shù)據(jù)項(xiàng)類型名,數(shù)據(jù)項(xiàng)類型名決定了它的變換處理函數(shù);GET:數(shù)據(jù)項(xiàng)的內(nèi)容。2.2測(cè)試數(shù)據(jù)包生成模塊測(cè)試數(shù)據(jù)包生成模塊是整個(gè)測(cè)試工具的關(guān)鍵所在,只有生成最可能導(dǎo)致服務(wù)器出問題的請(qǐng)求數(shù)據(jù)包,才能發(fā)現(xiàn)服務(wù)器軟件的漏洞所在。但又不能產(chǎn)生過多的數(shù)據(jù)包,使得測(cè)試效率太低。從統(tǒng)計(jì)測(cè)試的角度來說,就是要生成最可能導(dǎo)致服務(wù)器出錯(cuò)的數(shù)據(jù)包的樣本集。測(cè)試數(shù)據(jù)包生成模塊對(duì)腳本的處理過程為:從腳本中讀出一個(gè)樣本包,腳本處理函數(shù)構(gòu)造描述樣本包的鏈表,鏈表的結(jié)構(gòu)為:typedefstructRULELIST{

rulenode*rulelisthead;

rulenode*rulelistend;}RULELIST;樣本包中的每一項(xiàng)為鏈表中的一個(gè)節(jié)點(diǎn)rulenode;結(jié)點(diǎn)rulenode的定義為typedefstruct_rulenod{chartype[8];//數(shù)據(jù)項(xiàng)類型名charitem[128];

//數(shù)據(jù)項(xiàng)內(nèi)容_rulenode*nextnode;//指向下一個(gè)結(jié)點(diǎn)的指針}rulenode;構(gòu)造好鏈表后,對(duì)該樣本包里一個(gè)數(shù)據(jù)項(xiàng)的內(nèi)容進(jìn)行變換,而保持其它數(shù)據(jù)項(xiàng)不變,生成測(cè)試數(shù)據(jù)包,發(fā)送給服務(wù)器,分析返回信息,將測(cè)試結(jié)果寫入記錄文件,處理完該樣本包的所有數(shù)據(jù)項(xiàng)后,釋放鏈表,讀出下一樣本包,重復(fù)上面的處理過程,直至腳本結(jié)束。模塊中對(duì)數(shù)據(jù)項(xiàng)內(nèi)容進(jìn)行變換的處理函數(shù)做成DLL動(dòng)態(tài)鏈接庫(kù),調(diào)用時(shí)根據(jù)數(shù)據(jù)項(xiàng)類型名進(jìn)行調(diào)用。這樣使得該測(cè)試程序易于擴(kuò)展,如果被測(cè)試軟件的數(shù)據(jù)包中有原測(cè)試程序未定義的數(shù)據(jù)項(xiàng)類型,只需在腳本中加入新的數(shù)據(jù)項(xiàng)類型,同時(shí)將對(duì)應(yīng)的處理函數(shù)做成DLL動(dòng)態(tài)鏈接庫(kù)的形式,拷貝至測(cè)試程序目錄下即可,而原有的程序一點(diǎn)也不必改動(dòng)。2.3響應(yīng)信息分析模塊響應(yīng)信息分析模塊主要對(duì)返回信息進(jìn)行特征串搜索,記錄下服務(wù)器軟件出現(xiàn)異常時(shí)的情況。特征串定義在腳本中,特征串搜索采用Boyer-Moore字符串匹配算法.如果返回信息中有匹配的字符串,就意味著服務(wù)器可能出錯(cuò).例如,IIS返回“Theremoteprocedurecallfailed”,就是RPC服務(wù)出現(xiàn)錯(cuò)誤。由于很多情況下返回信息很難預(yù)料,即便采用人工智能的方法也難判斷服務(wù)器到底出了什么問題。所以響應(yīng)信息分析模塊只是檢測(cè)異常,將異常記錄下來,進(jìn)一步的分析判斷還需要人工介入。3.實(shí)現(xiàn)中的關(guān)鍵問題測(cè)試程序用vc++6.0寫成,在實(shí)現(xiàn)中有幾個(gè)關(guān)鍵問題:3.1樣本包的獲取樣本包可以通過分析網(wǎng)絡(luò)服務(wù)器軟件的協(xié)議,手工設(shè)置;也可以通過截包程序來獲得樣本包。要想得到好的測(cè)試效果,這兩種方法要綜合應(yīng)用。另一個(gè)問題是特殊字符的處理,如“\r”,”\n”等,測(cè)試程序利用它們作為分隔符,但樣本包中也可能包含這些字符。對(duì)于這類字符,在腳本中用“%”后加特殊字符的ASCII碼來表示,”\r”即為“%0D”。從腳本中讀取特殊字符后的轉(zhuǎn)換函數(shù)為….if(s=='%')//字符串s中s為%,s[i+1],s[i+2]為特殊字符的ASCII碼{

str[j]=(isdigit(s[i+1])?(s[i+1]-'0'):(toupper(s[i+1])-'A'+10))*16

+(isdigit(s[i+2])?(s[i+2]-'0'):(toupper(s[i+2])-'A'+10));//轉(zhuǎn)換后存入str[j]

i+=2;

j++;}3.2數(shù)據(jù)項(xiàng)的變換函數(shù)這是影響測(cè)試工具效果最重要的因素,在某種程度上也是與協(xié)議相關(guān)的,具體的實(shí)現(xiàn)要根據(jù)經(jīng)驗(yàn),甚至分析協(xié)議,一定要變換出各種特殊情況。例如,對(duì)文件名,需要測(cè)試文件名過長(zhǎng)、文件名為空、文件名中包含特殊字符等,對(duì)基于Windows的系統(tǒng),尤其要測(cè)試系統(tǒng)對(duì)不同類型文件(如有.exe,.asp,.php,.htr等擴(kuò)展名的文件)的響應(yīng)情況,IIS服務(wù)器的許多漏洞都與此有關(guān)。變換函數(shù)的原型為intTEANSER(FILE*fp,char*item);一個(gè)數(shù)據(jù)項(xiàng)有很多種變換結(jié)果,為了實(shí)現(xiàn)方便,處理時(shí),一次得出一個(gè)數(shù)據(jù)項(xiàng)的所有變換結(jié)果,寫入臨時(shí)文件,再?gòu)呐R時(shí)文件中讀出變換后所得的數(shù)據(jù)項(xiàng)內(nèi)容,組包后發(fā)送給服務(wù)器。這樣變換函數(shù)不需要保持狀態(tài),編程起來就容易多了。變換函數(shù)做成DLL動(dòng)態(tài)連接庫(kù)形式,如果有新的數(shù)據(jù)項(xiàng)類型,只需在腳本中定義新的數(shù)據(jù)項(xiàng)類型名,編寫對(duì)應(yīng)的DLL庫(kù),處理時(shí),處理函數(shù)會(huì)自動(dòng)調(diào)用它來進(jìn)行變換處理。實(shí)現(xiàn)自動(dòng)調(diào)用的主要代碼如下:….typedefVOID(*MYPROC)(FILE*,char*);//函數(shù)原型FILE*fp

//臨時(shí)文件指針;…..

if(!deffunc(idx->type)//idx為指向當(dāng)前結(jié)點(diǎn)的指針,deffunc判斷當(dāng)前數(shù)據(jù)項(xiàng)類型是否//已在測(cè)試工具中定義,如已定義,返回真。

{//如果數(shù)據(jù)類型未定義HINSTANCEh;CStringstr;MYPROCproc;If((h=LoadLibrary(idx->type))==NULL)//裝入對(duì)應(yīng)的動(dòng)態(tài)鏈接庫(kù){CStringstr;

str.Format("can‘tloadthelibrary%s.dll",idx->type);

MessageBox(str,"ERROR");}proc=(MYPROC)GetProcAddress(h,idx->type);//取得變換函數(shù)地址(proc)(fp,idx->item);//調(diào)用變換函數(shù),執(zhí)行變換}els

溫馨提示

  • 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)論