關(guān)于服務(wù)器軟件漏洞測(cè)試程序的設(shè)計(jì)與實(shí)現(xiàn)
網(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è)試人員去分析代碼來(lái)完成測(cè)試,顯然是滿足不了需求的。網(wǎng)絡(luò)服務(wù)器軟件的漏洞測(cè)試是一個(gè)十分重要的問(wèn)題,設(shè)計(jì)一個(gè)較為自動(dòng)化、通用的漏洞測(cè)試工具是十分必要的。
一般漏洞研究方法是先熟悉軟件功能,分析服務(wù)協(xié)議,檢查程序代碼,然后再推測(cè)什么情況下會(huì)出現(xiàn)漏洞。這是一個(gè)工作量很大的過(guò)程,而且開(kāi)發(fā)出來(lái)的測(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ù)器通過(guò)數(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ù)等問(wèn)題,使得入侵者有機(jī)可乘。如IIS服務(wù)器的UNICODE編碼漏洞,對(duì)于未打補(bǔ)丁的IIS服務(wù)器,如果入侵者輸入類似的請(qǐng)求,IIS服務(wù)器會(huì)將文件路徑中的%255c解釋為“/”,繞過(guò)系統(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è)試程序不能過(guò)多涉及到具體協(xié)議,而測(cè)試數(shù)據(jù)包的格式又要符合具體協(xié)議,這是一個(gè)矛盾。我們采用樣本包和動(dòng)態(tài)鏈接庫(kù)的方法來(lái)解決這個(gè)矛盾。樣本包,即有代表性的數(shù)據(jù)包,依www服務(wù)為例,請(qǐng)求數(shù)據(jù)包“GET /pub/index.htm HTTP/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è)腳本來(lái)描述這些樣本包,要測(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é)果保存在記錄文件中。
腳本
記錄文件
圖2
2.1腳本
腳本是對(duì)樣本包集的描述,服務(wù)器軟件的協(xié)議體現(xiàn)在腳本中。測(cè)試數(shù)據(jù)包就是對(duì)樣本包的某個(gè)域進(jìn)行變換后得到的數(shù)據(jù)包。
為了便于程序處理,定義了幾個(gè)關(guān)鍵字:
SAMPS , 樣本包開(kāi)始;ITEM , 數(shù)據(jù)項(xiàng); SAMPE ,樣本包結(jié)束; RESULT ,返回結(jié)果特征串;
“ ; ”,注釋,如果一行以 “;” 打頭,則這一行是注釋行。
腳本中依次列出各個(gè)樣本包,每個(gè)樣本包分成幾個(gè)數(shù)據(jù)域,每個(gè)數(shù)據(jù)域用一個(gè)數(shù)據(jù)項(xiàng)來(lái)表示。
GET /pub/index.htm HTTP/1.1的腳本描述為:
SAMPS
ITEM COMM GET
ITEM PATH /pub/
ITEM FILE index.htm
ITEM VER HTTP/1.1
RESULT …
SAMPE
每個(gè)數(shù)據(jù)項(xiàng)由三部分組成,以第一個(gè)數(shù)據(jù)項(xiàng)ITEMS COMMI GET 為例: ITEMS,關(guān)鍵字,標(biāo)識(shí)數(shù)據(jù)項(xiàng)開(kāi)始(每個(gè)數(shù)據(jù)項(xiàng)占一行,因此無(wú)須關(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ù)器出問(wèn)題的請(qǐng)求數(shù)據(jù)包,才能發(fā)現(xiàn)服務(wù)器軟件的漏洞所在。但又不能產(chǎn)生過(guò)多的數(shù)據(jù)包,使得測(cè)試效率太低。從統(tǒng)計(jì)測(cè)試的角度來(lái)說(shuō),就是要生成最可能導(dǎo)致服務(wù)器出錯(cuò)的數(shù)據(jù)包的樣本集。
測(cè)試數(shù)據(jù)包生成模塊對(duì)腳本的處理過(guò)程為:從腳本中讀出一個(gè)樣本包,腳本處理函數(shù)構(gòu)造描述樣本包的鏈表,鏈表的結(jié)構(gòu)為:
typedef struct RULELIST
{
rulenode* rulelisthead;
rulenode* rulelistend;
}RULELIST;
樣本包中的每一項(xiàng)為鏈表中的一個(gè)節(jié)點(diǎn)rulenode;
結(jié)點(diǎn)rulenode的定義為
typedef struct _rulenod
{
char type[8]; //數(shù)據(jù)項(xiàng)類型名
char item[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ù)上面的處理過(guò)程,直至腳本結(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 返回 “The remote procedure call failed ” ,就是RPC 服務(wù)出現(xiàn)錯(cuò)誤。由于很多情況下返回信息很難預(yù)料,即便采用人工智能的方法也難判斷服務(wù)器到底出了什么問(wèn)題。所以響應(yīng)信息分析模塊只是檢測(cè)異常,將異常記錄下來(lái),進(jìn)一步的分析判斷還需要人工介入。
本文編號(hào):6512
本文鏈接:http://www.lk138.cn/kejilunwen/jisuanjikexuelunwen/6512.html