本發(fā)明屬于計(jì)算機(jī)技術(shù)領(lǐng)域,特別涉及信息安全領(lǐng)域,特別是涉及一種SQL注入漏洞定位檢測(cè)方法。
背景技術(shù):
隨著互聯(lián)網(wǎng)迅猛發(fā)展,越來(lái)越多的WEB應(yīng)用都采取了三級(jí)架構(gòu):數(shù)據(jù)庫(kù)服務(wù)器、應(yīng)用服務(wù)器和客戶端。用戶在客戶端輸入數(shù)據(jù),應(yīng)用服務(wù)器根據(jù)其輸入構(gòu)建SQL語(yǔ)句,并將SQL語(yǔ)句送至數(shù)據(jù)庫(kù)中執(zhí)行操作,最終將結(jié)果返回給用戶。由于數(shù)據(jù)庫(kù)中存儲(chǔ)著大量敏感信息,導(dǎo)致其頻繁遭到攻擊,其中最嚴(yán)重的就是SQL注入攻擊。SQL注入攻擊是指攻擊者在合法SQL語(yǔ)句中插入SQL關(guān)鍵字或操作符從而改變SQL語(yǔ)句的語(yǔ)義、語(yǔ)法結(jié)構(gòu),將這些惡意的SQL語(yǔ)句提交給數(shù)據(jù)庫(kù),獲取用戶名密碼等敏感信息,進(jìn)而獲取主機(jī)控制權(quán)限等。OWASP于2013年發(fā)布的十大WEB應(yīng)用安全漏洞中,SQL注入攻擊排名第一。
本發(fā)明提出一種利用滲透測(cè)試與程序分析技術(shù)相結(jié)合的方法來(lái)實(shí)現(xiàn)對(duì)SQL注入漏洞的定位。滲透測(cè)試階段輸入網(wǎng)站地址,通過(guò)模擬攻擊確定引起SQL注入的用戶輸入點(diǎn),程序分析階段根據(jù)滲透測(cè)試階段的結(jié)果,在WEB應(yīng)用系統(tǒng)源代碼中通過(guò)數(shù)據(jù)流跟蹤技術(shù)對(duì)漏洞產(chǎn)生過(guò)程進(jìn)行分析。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是提供一種SQL注入漏洞定位檢測(cè)方法,實(shí)現(xiàn)SQL注入漏洞的定位檢測(cè)。
本發(fā)明的目的可以通過(guò)以下技術(shù)方案實(shí)現(xiàn):
一種SQL注入漏洞定位檢測(cè)方法,包括以下步驟:
步驟S1,信息獲取模塊檢測(cè)網(wǎng)站地址的可訪性并獲取網(wǎng)頁(yè)源代碼并傳給模擬攻擊模塊;
步驟S2,模擬攻擊模塊在網(wǎng)頁(yè)中尋找如用戶登陸等方面的可能注入點(diǎn),依次從攻擊字符串庫(kù)調(diào)用攻擊字符串對(duì)網(wǎng)站實(shí)施模擬攻擊,根據(jù)服務(wù)器端返回頁(yè)面檢測(cè)結(jié)果判斷是否攻擊成功,若成功則表示存在SQL注入漏洞,將網(wǎng)站位置及可能注入點(diǎn)保存,以便程序分析階段時(shí)使用;
步驟S3,源代碼載入器根據(jù)模擬攻擊模塊滲透測(cè)試的結(jié)果載入存在SQL注入漏洞的頁(yè)面源代碼,為后來(lái)的漏洞定位做準(zhǔn)備;
步驟S4,標(biāo)識(shí)模塊污染變量,為跟蹤數(shù)據(jù)流做準(zhǔn)備;
步驟S5,數(shù)據(jù)流跟蹤模塊運(yùn)用數(shù)據(jù)流跟蹤技術(shù)跟蹤污染變量在程序中的傳播,若最終組成SQL查詢語(yǔ)句的變量中有來(lái)自用戶輸入的數(shù)據(jù),則斷定該變量為SQL注入點(diǎn),給出該變量輸入點(diǎn)的位置及其傳播路徑;
步驟S6,代碼插樁器在程序中插入信息以監(jiān)測(cè)程序的動(dòng)態(tài)運(yùn)行,是為了收集程序的運(yùn)行時(shí)特征數(shù)據(jù),在被測(cè)程序的特定部位插入一段檢測(cè)程序,但不破壞被測(cè)程序的原有邏輯完整性,生成含探針的程序;其中,插入的探針是為了記錄變量傳播的路徑,在檢測(cè)到變量為引發(fā)SQL注入漏洞的注入點(diǎn)時(shí),拋出其最先接受輸入的位置以及其在程序中的傳播路徑,方便日后對(duì)漏洞的修復(fù);
步驟S7,動(dòng)態(tài)測(cè)試模塊通過(guò)輸入測(cè)試數(shù)據(jù),最終給出污染變量在程序中的傳播路徑,生成SQL注入點(diǎn)報(bào)告。
本發(fā)明的有益效果:本發(fā)明所提出一種SQL注入漏洞定位檢測(cè)方法,先通過(guò)滲透測(cè)試運(yùn)用模擬攻擊的方式來(lái)檢測(cè)WEB程序中是否有SQL注入漏洞,再運(yùn)用程序分析技術(shù)對(duì)源代碼進(jìn)行分析,運(yùn)用數(shù)據(jù)流跟蹤技術(shù)、插樁技術(shù)對(duì)污染變量的傳播進(jìn)行跟蹤,最終給出污染變量在程序中的傳播路徑,便于開發(fā)維護(hù)人員進(jìn)行漏洞的修補(bǔ),本發(fā)明提出了滲透測(cè)試與程序分析技術(shù)相結(jié)合的方法,解決了滲透測(cè)試無(wú)法分析源程序及純粹程序分析浪費(fèi)時(shí)間的缺點(diǎn),為SQL注入漏洞的定位檢測(cè)提供了一種新的思路。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1是本發(fā)明的系統(tǒng)示意圖。
圖2是本發(fā)明的方法流程圖。
具體實(shí)施方式
本發(fā)明的目的是提供一種SQL注入漏洞定位檢測(cè)方法,實(shí)現(xiàn)SQL注入漏洞的定位檢測(cè)。
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
如圖1所示,本發(fā)明提供了一種SQL注入漏洞定位檢測(cè)系統(tǒng),包括滲透測(cè)試單元D110和程序分析單元D120。
所述的滲透測(cè)試單元D110包括信息獲取模塊M211、攻擊字符串庫(kù)DB1和模擬攻擊模塊M212;信息獲取模塊M211檢測(cè)URL可訪性并獲取網(wǎng)頁(yè)源代碼,在網(wǎng)頁(yè)中尋找如用戶登陸等方面的可能注入點(diǎn),依次從攻擊字符串庫(kù)DB1調(diào)用攻擊字符串對(duì)網(wǎng)站實(shí)施模擬攻擊,根據(jù)服務(wù)器端返回頁(yè)面檢測(cè)結(jié)果判斷是否攻擊成功,若成功則表示存在SQL注入漏洞,將網(wǎng)站位置及可能注入點(diǎn)保存,以便程序分析階段時(shí)使用。
所述的程序分析單元D120包括源代碼載入器P1、標(biāo)識(shí)模塊M213、數(shù)據(jù)流跟蹤模塊M214、代碼插樁器P2和動(dòng)態(tài)測(cè)試模塊M215;源代碼載入器P1根據(jù)滲透測(cè)試的結(jié)果載入存在SQL注入漏洞的頁(yè)面源代碼,為后來(lái)的漏洞定位做準(zhǔn)備;標(biāo)識(shí)模塊M213標(biāo)識(shí)污染變量,運(yùn)用數(shù)據(jù)流跟蹤技術(shù)跟蹤污染變量在程序中的傳播,若最終組成SQL查詢語(yǔ)句的變量中有來(lái)自用戶輸入的數(shù)據(jù),則斷定該變量為SQL注入點(diǎn),給出該變量輸入點(diǎn)的位置及其傳播路徑;代碼插樁器P2在程序中插入信息以監(jiān)測(cè)程序的動(dòng)態(tài)運(yùn)行,本發(fā)明中的插樁用于得到污染變量的傳播路徑。
如圖2所示,一種SQL注入漏洞定位檢測(cè)方法,包括以下步驟:
步驟S1,信息獲取模塊M211檢測(cè)網(wǎng)站地址U1的可訪性并獲取網(wǎng)頁(yè)源代碼,并傳給模擬攻擊模塊M212;
步驟S2,模擬攻擊模塊M212在網(wǎng)頁(yè)中尋找如用戶登陸等方面的可能注入點(diǎn),依次從攻擊字符串庫(kù)DB1調(diào)用攻擊字符串對(duì)網(wǎng)站實(shí)施模擬攻擊,根據(jù)服務(wù)器端返回頁(yè)面檢測(cè)結(jié)果判斷是否攻擊成功,若成功則表示存在SQL注入漏洞,將網(wǎng)站位置及可能注入點(diǎn)保存,以便程序分析階段時(shí)使用;
步驟S3,源代碼載入器P1根據(jù)模擬攻擊模塊M212滲透測(cè)試的結(jié)果載入存在SQL注入漏洞的頁(yè)面源代碼,為后來(lái)的漏洞定位做準(zhǔn)備;
步驟S4,標(biāo)識(shí)模塊M213污染變量,為跟蹤數(shù)據(jù)流做準(zhǔn)備;
步驟S5,數(shù)據(jù)流跟蹤模塊M214運(yùn)用數(shù)據(jù)流跟蹤技術(shù)跟蹤污染變量在程序中的傳播,若最終組成SQL查詢語(yǔ)句的變量中有來(lái)自用戶輸入的數(shù)據(jù),則斷定該變量為SQL注入點(diǎn),給出該變量輸入點(diǎn)的位置及其傳播路徑;
步驟S6,代碼插樁器P2在程序中插入信息以監(jiān)測(cè)程序的動(dòng)態(tài)運(yùn)行,是為了收集程序的運(yùn)行時(shí)特征數(shù)據(jù),在被測(cè)程序的特定部位插入一段檢測(cè)程序(探針),但不破壞被測(cè)程序的原有邏輯完整性,生成含探針的程序P3;本發(fā)明中插入的探針是為了記錄變量傳播的路徑,在檢測(cè)到變量為引發(fā)SQL注入漏洞的注入點(diǎn)時(shí),拋出其最先接受輸入的位置以及其在程序中的傳播路徑,方便日后對(duì)漏洞的修復(fù);
步驟S7,動(dòng)態(tài)測(cè)試模塊M215通過(guò)輸入測(cè)試數(shù)據(jù),最終給出污染變量在程序中的傳播路徑,生成SQL注入點(diǎn)報(bào)告。
本發(fā)明所提出一種SQL注入漏洞定位檢測(cè)方法,先通過(guò)滲透測(cè)試運(yùn)用模擬攻擊的方式來(lái)檢測(cè)WEB程序中是否有SQL注入漏洞,再運(yùn)用程序分析技術(shù)對(duì)源代碼進(jìn)行分析,運(yùn)用數(shù)據(jù)流跟蹤技術(shù)、插樁技術(shù)對(duì)污染變量的傳播進(jìn)行跟蹤,最終給出污染變量在程序中的傳播路徑,便于開發(fā)維護(hù)人員進(jìn)行漏洞的修補(bǔ),本發(fā)明提出了滲透測(cè)試與程序分析技術(shù)相結(jié)合的方法,解決了滲透測(cè)試無(wú)法分析源程序及純粹程序分析浪費(fèi)時(shí)間的缺點(diǎn),為SQL注入漏洞的定位檢測(cè)提供了一種新的思路。
為了描述的方便,描述以上裝置時(shí)以功能分為各種單元、模塊分別描述。當(dāng)然,在實(shí)施本申請(qǐng)時(shí)可以把各單元、模塊的功能在同一個(gè)或多個(gè)軟件和/或硬件中實(shí)現(xiàn)。
通過(guò)以上的實(shí)施方式的描述可知,本領(lǐng)域的技術(shù)人員可以清楚地了解到本申請(qǐng)可借助軟件加必需的通用硬件平臺(tái)的方式來(lái)實(shí)現(xiàn)?;谶@樣的理解,本申請(qǐng)的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品可以存儲(chǔ)在存儲(chǔ)介質(zhì)中,如ROM/RAM、磁碟、光盤等,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請(qǐng)各個(gè)實(shí)施方式或者實(shí)施方式的某些部分所述的方法。
以上所描述的裝置實(shí)施方式僅僅是示意性的,其中所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部模塊來(lái)實(shí)現(xiàn)本實(shí)施方式方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動(dòng)的情況下,即可以理解并實(shí)施。
本申請(qǐng)可用于眾多通用或?qū)S玫挠?jì)算系統(tǒng)環(huán)境或配置中。例如:個(gè)人計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、手持設(shè)備或便攜式設(shè)備、平板型設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、置頂盒、可編程的消費(fèi)電子設(shè)備、網(wǎng)絡(luò)PC、小型計(jì)算機(jī)、大型計(jì)算機(jī)、包括以上任何系統(tǒng)或設(shè)備的分布式計(jì)算環(huán)境等等。
本申請(qǐng)可以在由計(jì)算機(jī)執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計(jì)算環(huán)境中實(shí)踐本申請(qǐng),在這些分布式計(jì)算環(huán)境中,由通過(guò)通信網(wǎng)絡(luò)而被連接的遠(yuǎn)程處理設(shè)備來(lái)執(zhí)行任務(wù)。在分布式計(jì)算環(huán)境中,程序模塊可以位于包括存儲(chǔ)設(shè)備在內(nèi)的本地和遠(yuǎn)程計(jì)算機(jī)存儲(chǔ)介質(zhì)中。
在本說(shuō)明書的描述中,參考術(shù)語(yǔ)“一個(gè)實(shí)施例”、“示例”、“具體示例”等的描述意指結(jié)合該實(shí)施例或示例描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)包含于本發(fā)明的至少一個(gè)實(shí)施例或示例中。在本說(shuō)明書中,對(duì)上述術(shù)語(yǔ)的示意性表述不一定指的是相同的實(shí)施例或示例。而且,描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)可以在任何的一個(gè)或多個(gè)實(shí)施例或示例中以合適的方式結(jié)合。
以上內(nèi)容僅僅是對(duì)本發(fā)明結(jié)構(gòu)所作的舉例和說(shuō)明,所屬本技術(shù)領(lǐng)域的技術(shù)人員對(duì)所描述的具體實(shí)施例做各種各樣的修改或補(bǔ)充或采用類似的方式替代,只要不偏離發(fā)明的結(jié)構(gòu)或者超越本權(quán)利要求書所定義的范圍,均應(yīng)屬于本發(fā)明的保護(hù)范圍。