專利名稱:一種跨站點(diǎn)偽造請(qǐng)求的動(dòng)態(tài)檢測(cè)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及Web應(yīng)用安全性測(cè)試中的跨站點(diǎn)偽造請(qǐng)求(Cross-Site Request Forgery, CSRF)的動(dòng)態(tài)檢測(cè),特別涉及通過分析HTTP參數(shù)和SQL語句操作數(shù)之間的對(duì)應(yīng)關(guān) 系來偽造HTTP請(qǐng)求,動(dòng)態(tài)檢測(cè)Web應(yīng)用中存在的CSRF漏洞。
背景技術(shù):
Web應(yīng)用中的某些操作需要一定的權(quán)限,這種權(quán)限一般和用戶的賬號(hào)關(guān)聯(lián)。用戶執(zhí) 行這些操作時(shí),Web應(yīng)用驗(yàn)證用戶賬戶是否擁有相應(yīng)的權(quán)限。顯然不能要求用戶每執(zhí)行一 次操作都輸入賬戶來進(jìn)行驗(yàn)證。現(xiàn)通用的做法是用戶登錄之后,由用戶的瀏覽器保存其賬 戶信息,用戶繼續(xù)執(zhí)行操作時(shí),用保存的信息驗(yàn)證用戶的權(quán)限。Web應(yīng)用是基于HTTP協(xié)議的,然而HTTP協(xié)議是一種無狀態(tài)協(xié)議,協(xié)議本身無法保 存用戶的賬戶信息,故通常用瀏覽器以COOKIE的形式保存用戶的賬戶信息。在COOKIE失 效之前,所有從該瀏覽器發(fā)出的請(qǐng)求都將把這些COOKIE發(fā)送給對(duì)應(yīng)的Web應(yīng)用,即使該請(qǐng) 求不是用戶自主發(fā)送的。要獲取他人的賬戶信息比較困難,但是要了解Web應(yīng)用的特性相對(duì)容易,特別是 開源的和公用的Web應(yīng)用,如論壇、網(wǎng)上銀行等。攻擊者很容易了解Web應(yīng)用收到何種請(qǐng)求 會(huì)執(zhí)行何種操作,如網(wǎng)上銀行收到何種請(qǐng)求將試圖執(zhí)行轉(zhuǎn)賬操作。故攻擊者可根據(jù)Web應(yīng) 用的特性,事先偽造一個(gè)請(qǐng)求;估計(jì)受害者已經(jīng)登錄獲得相應(yīng)權(quán)限時(shí),通過某種方式讓受害 者的瀏覽器執(zhí)行該請(qǐng)求達(dá)到攻擊目的,這就是跨站點(diǎn)偽造請(qǐng)求(CSRF)攻擊??缯军c(diǎn)偽造請(qǐng)求是當(dāng)今Web應(yīng)用面臨的十大安全威脅之一?,F(xiàn)在研究者們關(guān)注的 大都是如何防范CSRF攻擊,常用的防范方法有(1)所有重要的HTTP請(qǐng)求都附加難以猜測(cè) 的token,收到請(qǐng)求時(shí)驗(yàn)證token ; (2)通過HTTP Refer驗(yàn)證發(fā)出請(qǐng)求的前一頁面是不是期 望的頁面;(3)通過Ajax來發(fā)送請(qǐng)求,在請(qǐng)求中添加驗(yàn)證信息。這些方法或者嚴(yán)重影響Web 應(yīng)用的性能,或者難于實(shí)現(xiàn),給使用者帶來較大不變。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是針對(duì)如何動(dòng)態(tài)檢測(cè)Web應(yīng)用中的CSRF漏洞,而提供 一種跨站點(diǎn)偽造請(qǐng)求的動(dòng)態(tài)檢測(cè)方法,該方法實(shí)現(xiàn)以較少的代價(jià)、快速、準(zhǔn)確的發(fā)現(xiàn)Web應(yīng) 用中的CSRF漏洞。為實(shí)現(xiàn)發(fā)明上述目的,本發(fā)明采用以下步驟1)收集HTTP請(qǐng)求信息;2)根據(jù)收集到的信息,檢測(cè)每個(gè)請(qǐng)求是否為CSRF嫌疑請(qǐng)求;3)針對(duì)每個(gè)CSRF嫌疑請(qǐng)求,找出其所包含的全部嫌疑參數(shù),為每個(gè)嫌疑參數(shù)生成 一個(gè)偽造參數(shù),再利用每個(gè)偽造參數(shù)生成一個(gè)對(duì)應(yīng)的偽造請(qǐng)求,而每一個(gè)偽造請(qǐng)求再生成 一個(gè)測(cè)試用例;4)在生成嫌疑請(qǐng)求的環(huán)境重現(xiàn)時(shí),執(zhí)行每一個(gè)步驟3)生成的測(cè)試用例所對(duì)應(yīng)的偽造請(qǐng)求,執(zhí)行過程中,收集偽造請(qǐng)求的執(zhí)行信息;5)根據(jù)嫌疑請(qǐng)求、嫌疑請(qǐng)求的執(zhí)行信息、偽造請(qǐng)求和偽造請(qǐng)求的執(zhí)行信息,檢測(cè)偽造請(qǐng)求是否發(fā)現(xiàn)了 Web應(yīng)用中的CSRF漏洞,并形成報(bào)告,幫助Web應(yīng)用開發(fā)者修復(fù)漏洞。上述步驟1)的具體過程是設(shè)計(jì)一個(gè)HTTP信息收集模塊,并部署在待測(cè)試的Web 應(yīng)用中;該HTTP信息收集模塊分成兩個(gè)部分,其一是請(qǐng)求信息收集模塊,收集HTTP請(qǐng)求中 的信息為(1)請(qǐng)求的URL、時(shí)間和請(qǐng)求方法,(2) GET數(shù)據(jù)和POST數(shù)據(jù);其二是SQL語句收 集函數(shù),收集HTTP請(qǐng)求中的信息為(3)動(dòng)態(tài)生成的SQL語句。步驟2)的檢測(cè)CSRF嫌疑請(qǐng)求的具體過程為首先根據(jù)收集到的HTTP請(qǐng)求獲取 GET參數(shù)和POST參數(shù)集合;然后獲取HTTP請(qǐng)求對(duì)應(yīng)的修改型SQL語句操作數(shù)集合;最后分 析HTTP參數(shù)和SQL操作數(shù)之間的關(guān)聯(lián);如果至少存在一個(gè)HTTP參數(shù)的值和某個(gè)操作數(shù)的 值相等,那么該請(qǐng)求即為嫌疑請(qǐng)求,和操作數(shù)值相等的HTTP參數(shù)為嫌疑參數(shù)。步驟3)的生成偽造參數(shù)過程是針對(duì)嫌疑請(qǐng)求Rs,首先找出Rs的嫌疑參數(shù)集合, 為每個(gè)嫌疑參數(shù)生成一個(gè)偽造參數(shù),偽造參數(shù)的name和嫌疑參數(shù)的name相同,偽造參數(shù)的 value按三種情況處理整型數(shù),浮點(diǎn)型數(shù)和字符串型;構(gòu)造偽造參數(shù)value的對(duì)應(yīng)規(guī)則如 下規(guī)則1.如果value為一個(gè)整型數(shù),分兩種情況處理a)如果value為一個(gè)大于1的整數(shù),則value減1 ;b)如果value為一個(gè)小于或者等于1的整數(shù),則value加1 ;規(guī)則2.如果value為浮點(diǎn)型數(shù)。則將value最后一位加1再對(duì)10取余;規(guī)則3.如果value為字符串型,分三種情況處理 a)如果value最后兩個(gè)字符不相同,則把這兩個(gè)字符互換位置;b)如果value最后兩個(gè)字符相同,則比較倒數(shù)第一個(gè)和倒數(shù)第三個(gè),如果也相同, 則繼續(xù)往前找,直到找到一個(gè)和最后一個(gè)字符不相同的字符為止;再把它們交換位置;c)如果value只包含一個(gè)字符或者所有字符都相同,且最后一個(gè)字符不是‘a(chǎn)’,則 直接把最后一個(gè)字符用‘a(chǎn)’替換;如果value只包含一個(gè)字符或者所有字符都相同,且最后一個(gè)字符是‘a(chǎn)’,則直接 把最后一個(gè)字符用‘b’替換。而偽造請(qǐng)求生成測(cè)試用例分兩種情況情況1.如果請(qǐng)求方法為GET,此時(shí)用一個(gè)圖像(IMG)標(biāo)簽來表示該請(qǐng)求。請(qǐng)求的 GET參數(shù)附加在原URL之后形成新的URL ;該URL設(shè)置為IMG標(biāo)簽的源(SRC)屬性;在該IMG 標(biāo)簽之外添加HTML文檔聲明之后,保存為一個(gè)靜態(tài)文件,這個(gè)靜態(tài)文件即測(cè)試用例;情況2.如果請(qǐng)求方法為POST,此時(shí)用一個(gè)表單(FORM)標(biāo)簽來表示該請(qǐng)求;請(qǐng)求 的GET參數(shù)附加在原URL之后形成新的URL ;該URL設(shè)置為FORM標(biāo)簽的動(dòng)作(ACTION)屬 性;請(qǐng)求的POST參數(shù)作為隱藏域放在FORM標(biāo)簽中;在該FORM標(biāo)簽之外添加HTML文檔聲明 之后,保存為一個(gè)靜態(tài)文件,這個(gè)靜態(tài)文件即測(cè)試用例。步驟4)的測(cè)試用例執(zhí)行過程為首先用瀏覽器打開嫌疑請(qǐng)求所在的Web應(yīng)用,重 現(xiàn)生成嫌疑請(qǐng)求的環(huán)境條件;然后用同一瀏覽器逐個(gè)執(zhí)行嫌疑請(qǐng)求的測(cè)試用例,即打開對(duì) 應(yīng)的靜態(tài)HTML文件;最后運(yùn)用HTTP信息收集模塊收集測(cè)試用例的執(zhí)行信息。步驟5)的CSRF漏洞的檢測(cè)過程為首先提取每一個(gè)測(cè)試用例的執(zhí)行信息,該信息對(duì)應(yīng)一個(gè)偽造請(qǐng)求Rf,找出偽造請(qǐng)求Rf所對(duì)應(yīng)的嫌疑請(qǐng)求Rs、Rf所有的嫌疑參數(shù)、Rf對(duì) 應(yīng)的偽造參數(shù)、以及偽造參數(shù)對(duì)應(yīng)的嫌疑參數(shù);如果Rf偽造參數(shù)的值成為了 Rf某個(gè)修改型 SQL語句的操作數(shù),且其偽造參數(shù)的值所在的SQL語句和嫌疑參數(shù)的值所在SQL語句相似, 且這兩個(gè)值在各自SQL語句中的位置相同,那么通過這個(gè)請(qǐng)求就發(fā)現(xiàn)了 Web應(yīng)用中的CSRF 漏洞??缯军c(diǎn)偽造請(qǐng)求CSRF已經(jīng)成為Web應(yīng)用安全的重要威脅之一。目前尚缺乏行之 有效的CSRF漏洞防范和檢測(cè)方法。文發(fā)明方法通過記錄特權(quán)操作的HTTP請(qǐng)求信息和對(duì)應(yīng) 的修改型SQL語句,基于操作數(shù)比對(duì)查找HTTP請(qǐng)求的CSRF嫌疑參數(shù),再根據(jù)嫌疑參數(shù)逐一 生成測(cè)試用例。采用動(dòng)態(tài)測(cè)試的方法檢測(cè)CSRF漏洞,可以用較 少的代價(jià),快速而準(zhǔn)確的發(fā) 現(xiàn)Web應(yīng)用中存在的CSRF漏洞。其中唯一可能影響Web應(yīng)用性能的數(shù)據(jù)記錄和采集操作同 Web應(yīng)用的日志操作類似,實(shí)驗(yàn)表明其影響可以忽略。采用本發(fā)明方法對(duì)多個(gè)實(shí)際應(yīng)用的 Web網(wǎng)站實(shí)施測(cè)試,測(cè)試結(jié)果表明本發(fā)明方法具有較高的測(cè)試效率和準(zhǔn)確性。特別對(duì)一些在 防范CSRF方面做了很多工作的網(wǎng)站,本發(fā)明方法仍能夠以較高的效率發(fā)現(xiàn)其中的CSRF漏 洞。下面結(jié)合附圖進(jìn)行詳細(xì)說明。
圖1是跨站點(diǎn)偽造請(qǐng)求的動(dòng)態(tài)檢測(cè)方法框架圖,圖2是HTTP請(qǐng)求信息收集模塊的流程圖,圖3是CSRF嫌疑請(qǐng)求檢測(cè)模塊的流程圖,圖4是獲取一個(gè)SQL語句的操作數(shù)集合的流程圖,圖5是測(cè)試用例生成模塊的流程圖,圖6是測(cè)試用例執(zhí)行模塊的流程圖,圖7是CSRF漏洞檢測(cè)模塊的流程圖。
具體實(shí)施例方式如圖1所示,本發(fā)明由HTTP請(qǐng)求信息收集模塊,CSRF嫌疑請(qǐng)求檢測(cè)模塊,測(cè)試用 例生成模塊,測(cè)試用例執(zhí)行模塊和CSRF漏洞檢測(cè)模塊五個(gè)模塊按照“流”的體系構(gòu)成。首 先收集的HTTP請(qǐng)求信息為下一步分析所用;根據(jù)收集到的信息,可以分析一個(gè)請(qǐng)求是否為 CSRF嫌疑請(qǐng)求,以及請(qǐng)求中哪些參數(shù)可能成為攻擊時(shí)的利用對(duì)象,這些參數(shù)被稱為嫌疑參 數(shù);利用嫌疑參數(shù)可為每個(gè)嫌疑請(qǐng)求生成若干偽造請(qǐng)求,進(jìn)而生成測(cè)試用例;待生成嫌疑 請(qǐng)求的條件滿足時(shí)(用戶瀏覽器獲得了必要的認(rèn)證信息),執(zhí)行測(cè)試用例;根據(jù)嫌疑請(qǐng)求、 嫌疑請(qǐng)求的執(zhí)行信息以及偽造請(qǐng)求和偽造請(qǐng)求的執(zhí)行信息,可分析出是否發(fā)現(xiàn)了 Web應(yīng)用 中的CSRF漏洞,最后給出詳細(xì)的報(bào)告信息以便開發(fā)者修復(fù)漏洞。1、HTTP請(qǐng)求信息收集如圖2所示,為動(dòng)態(tài)收集HTTP請(qǐng)求信息,本發(fā)明中設(shè)計(jì)了一個(gè)信息收集模塊部署 在待測(cè)試的Web應(yīng)用中。對(duì)每個(gè)HTTP請(qǐng)求,依次收集以下信息(1)請(qǐng)求的基本信息,包括 請(qǐng)求的URL、時(shí)間、以及請(qǐng)求方法(GET或者POST) ; (2)GET數(shù)據(jù)和POST數(shù)據(jù);(3)動(dòng)態(tài)生成 的SQL語句。
Web應(yīng)用普遍擁有以下兩個(gè)特點(diǎn)其一 Web應(yīng)用中存在一個(gè)全局模塊,用來完成 Web應(yīng)用的基本配置,如數(shù)據(jù)庫連接。所有HTTP請(qǐng)求處理模塊都先加載該模塊,然后執(zhí)行 其它操作。其二 Web應(yīng)用中存在一個(gè)數(shù)據(jù)庫操作模塊,所有的數(shù)據(jù)庫操作都由該模塊來完 成。為收集信息(1)和(2),只需在全局文件中加入信息收集模塊,并調(diào)用其中的信息收集 函數(shù);為收集信息(3),只需在數(shù)據(jù)庫操作模塊中加入SQL語句收集函數(shù)(包含在信息收集 模塊中),讓SQL語句在執(zhí)行之前被收集起來,這樣就可以完成對(duì)所有HTTP請(qǐng)求的信息的收 集。 如果Web應(yīng)用不具備上述兩個(gè)特點(diǎn),為收集信息(1)和(2),必須在所有HTTP請(qǐng)求 處理模塊的開始出加載信息收集模塊,并調(diào)用信息收集函數(shù);為收集信息(3),必須在所有 SQL語句執(zhí)行之前,調(diào)用SQL語句收集函數(shù)。GET數(shù)據(jù)和POST數(shù)據(jù)都是以〈name,value〉的形式存在,如果name不變但是value 是可變的,則稱其為GET參數(shù)和POST參數(shù),本發(fā)明統(tǒng)稱它們?yōu)镠TTP參數(shù)。2、CSRF嫌疑請(qǐng)求檢測(cè)如果一個(gè)請(qǐng)求可以被攻擊者所利用,使Web應(yīng)用遭受CSRF攻擊,那么該請(qǐng)求是 CSRF請(qǐng)求。該模塊是本發(fā)明獨(dú)創(chuàng)點(diǎn)之一,主要功能有(1)判斷一個(gè)HTTP請(qǐng)求R是否為CSRF 嫌疑請(qǐng)求;(2)如果R為嫌疑請(qǐng)求則找出R的所有嫌疑參數(shù)。如圖3所示,R默認(rèn)為非嫌疑請(qǐng)求,根據(jù)HTTP請(qǐng)求信息收集模塊收集到的信息,取 出R的GET參數(shù)和(或)POST參數(shù)構(gòu)成集合gp_set ;取出R中所有的修改型SQL語句。運(yùn) 用圖4所示方法,可得到這些SQL語句的操作數(shù)集合operancLset。遍歷gp_set中的參數(shù)P,如果ρ的值和operand_set中的任意一個(gè)操作數(shù)op的 值相等,那么HTTP參數(shù)ρ就是一個(gè)嫌疑參數(shù)。只要請(qǐng)求R中至少存在一個(gè)嫌疑參數(shù),那么 R就是一個(gè)CSRF嫌疑請(qǐng)求。因?yàn)樵谠撜?qǐng)求中,攻擊者可能通過偽造參數(shù)的值修改后端數(shù)據(jù) 庫。該階段處理后的輸出為(I)R是否為一個(gè)嫌疑請(qǐng)求;(2)如果是,R中嫌疑參數(shù)的集合。本發(fā)明把SQL語句分為兩類(1)修改型SQL語句,如插入(insert)、修改 (update)、和刪除(delete)語句,(2)查詢型語句,即查詢語句(select)。因?yàn)椴樵冃驼Z句 不會(huì)修改后端數(shù)據(jù)庫狀態(tài),故不會(huì)被CSRF攻擊所利用。如圖4所示,在2. 1. 1步,輸入一個(gè) 修改型SQL語句,逐個(gè)讀取語句中的單詞,如果一個(gè)單詞為運(yùn)算符的運(yùn)算對(duì)象,則該單詞為 操作數(shù),故把其加入到SQL語句的操作數(shù)集合中。成批輸入修改型SQL語句時(shí),只需對(duì)這些 語句逐個(gè)掃描即可找出它們的所有操作數(shù)以構(gòu)成operancLset。3、測(cè)試用例生成一個(gè)CSRF嫌疑請(qǐng)求,需要進(jìn)一步證實(shí)才能確定其是否為真正的CSRF請(qǐng)求。利用 CSRF嫌疑請(qǐng)求可生成若干偽造請(qǐng)求,進(jìn)而形成測(cè)試用例。通過執(zhí)行測(cè)試用例可證實(shí)一個(gè) CSRF嫌疑請(qǐng)求是否為真正的CSRF請(qǐng)求。本模塊是本發(fā)明的另一個(gè)獨(dú)創(chuàng)點(diǎn),如圖5所示,輸入為一個(gè)CSRF嫌疑請(qǐng)求Rs,輸出 為Rs對(duì)應(yīng)的測(cè)試用例集。輸入Rs可取到其所有嫌疑參數(shù)(由CSRF嫌疑請(qǐng)求檢測(cè)模塊輸 出)構(gòu)成一個(gè)集合sp_set。對(duì)每一個(gè)嫌疑參數(shù)ps生成一個(gè)與之對(duì)應(yīng)的偽造參數(shù)pf,pf的 name和ps的name —致;pf的value生成遵循一個(gè)原則對(duì)Pf的value做改變(偽造),且 只做盡可能小的改變。數(shù)據(jù)庫中的數(shù)據(jù)大致可分為兩類字符串型和數(shù)值型;其中數(shù)值型又主要包括整型和浮點(diǎn)型。鑒于整型數(shù)和浮點(diǎn)型數(shù)的區(qū)別較大,故本發(fā)明分三種情況來生 成偽造value,具體生成規(guī)則如下規(guī)則1.如果ps的value只包含數(shù)字且符合整數(shù)書寫規(guī)則,則其value為一個(gè)整 型數(shù),分兩種情況處理a)如果ps的value為一個(gè)大于1的整數(shù),則pf的value為ps的value減1 ;
b)如果Ps的value為一個(gè)小于或者等于1整數(shù),則Pf的value為ps的value加 1 ;規(guī)則2.如果ps的value只包含數(shù)字和小數(shù)點(diǎn)且符合浮點(diǎn)數(shù)書寫規(guī)則,則其value 為浮點(diǎn)型數(shù)。此時(shí)將Ps的value最后一位加1再對(duì)10取余,并把新的浮點(diǎn)型value作為 Pf 的 value。規(guī)則3.如果不是以上兩種情況,本發(fā)明把ps Wvalue視為字符串型。在偽造新 字符串時(shí),采用以下方法a)如果value最后兩個(gè)字符不相同,則把這兩個(gè)字符互換位置,生成新的字符串;b)如果value最后兩個(gè)字符相同,則比較倒數(shù)第一個(gè)和倒數(shù)第三個(gè),如果也相同, 則繼續(xù)往前找,直到找到一個(gè)和最后一個(gè)字符不相同的字符為止;再把它們交換位置生成 新的字符串;c)如果value只包含一個(gè)字符或者所有字符都相同,則直接把最后一個(gè)字符用 ‘a(chǎn)’(若最后一個(gè)字符不是‘a(chǎn)’ )或者‘b’(若最后一個(gè)字符是‘a(chǎn)’ )替換。把偽造的新字符串作為pf的value。遍歷sp_set后,可得到Rs的偽造參數(shù)集合fp_set。對(duì)fp_set中的每一個(gè)偽造參 數(shù)Pf,本發(fā)明生成一個(gè)偽造請(qǐng)求Rf,Rf的URL (不包含后面的GET參數(shù))、請(qǐng)求方法和Rs保 持一致。本發(fā)明首先按照選定偽造參數(shù)Pf生成一個(gè)GET參數(shù)賦給Rf,再把Rs中除偽造參數(shù) 以外其它的GET參數(shù)和POST參數(shù)拷貝給Rf。接下來根據(jù)Rf生成測(cè)試用例,分兩種情況情況1.如果Rf對(duì)應(yīng)的請(qǐng)求方法為GET,則Rf只有GET參數(shù)。此時(shí)本發(fā)明用一個(gè) 圖像(IMG)標(biāo)簽來表示該請(qǐng)求。Rf的參數(shù)以GET參數(shù)的形式附加在Rf的URL之后,形成新 的URL,并把該URL設(shè)置為IMG標(biāo)簽的源(SRC)屬性。在該IMG標(biāo)簽之外添加HTML文檔聲 明之后,保存為一個(gè)靜態(tài)文件,這個(gè)靜態(tài)文件即測(cè)試用例。情況2.如果Rf對(duì)應(yīng)的請(qǐng)求方法為POST,則Rf會(huì)同時(shí)擁有GET參數(shù)和POST參數(shù)。 此時(shí)本發(fā)明用一個(gè)表單(FORM)標(biāo)簽表示該請(qǐng)求。Rf的GET參數(shù)附加在Rf的URL之后,形 成的新URL,并把該URL設(shè)置為FORM標(biāo)簽的動(dòng)作(ACTION)屬性;Rf的POST參數(shù)形成為隱 藏域(〈INPUT TYPE = “HIDDEN” />),放在FORM標(biāo)簽之中。在FORM標(biāo)簽之外添加HTML文 檔聲明之后,保存為一個(gè)靜態(tài)文件,這個(gè)靜態(tài)文件即測(cè)試用例。遍歷fp_set中的所有參數(shù),分別生成對(duì)應(yīng)的偽造請(qǐng)求Rf后,就可得到針對(duì)嫌疑請(qǐng) 求Rs的測(cè)試用例集tc_set。4、測(cè)試用例執(zhí)行得到嫌疑請(qǐng)求Rs的測(cè)試用例集tc_set后,就可以展開測(cè)試了。如圖6所示,測(cè)試 時(shí)先用瀏覽器打開Rs所在的Web應(yīng)用,并重現(xiàn)產(chǎn)生Rs的環(huán)境(用戶用瀏覽器登錄Web應(yīng) 用,獲得權(quán)限信息)。對(duì)tc_set中的每個(gè)測(cè)試用例t (用HTML文件表示),用瀏覽器打開它。打開HTML文件的過程即執(zhí)行測(cè)試用例的過程。測(cè)試用例執(zhí)行時(shí),在Web應(yīng)用服務(wù)器端將收到偽造請(qǐng)求Rf的執(zhí)行要求,此時(shí)第1 階段部署的HTTP信息收集模塊將記錄Rf的執(zhí)行信息。tc_set中的所有測(cè)試用例執(zhí)行結(jié)束 后,就得到嫌疑請(qǐng)求Rs的測(cè)試結(jié)果集rs_set。為提高執(zhí)行效率,可以用同一瀏覽器一次打開多個(gè)測(cè)試用例。 5、CSRF漏洞檢測(cè)本模塊也是本發(fā)明的獨(dú)創(chuàng)點(diǎn)。如圖7所示,得到Rs的測(cè)試結(jié)果集rs_set后,就可 分析通過上述測(cè)試是否發(fā)現(xiàn)了 Web應(yīng)用中的CSRF漏洞。對(duì)rs_set中每條記錄對(duì)應(yīng)的偽造 請(qǐng)求Rf,找出以下內(nèi)容= (I)Rf對(duì)應(yīng)的原始請(qǐng)求Rs ;(2)Rf自身的所有嫌疑參數(shù);(3)偽造請(qǐng) 求Rf所用的偽造參數(shù)Pf,以及Pf對(duì)應(yīng)的嫌疑參數(shù)Ps。檢測(cè)分兩種情況情況1.如果pf的值沒有成為Rf某個(gè)修改型SQL語句的操作數(shù),則通過Rf沒有發(fā) 現(xiàn)Web應(yīng)用中的CSRF漏洞。情況2.如果pf的值成為了 Rf某個(gè)修改型SQL語句的操作數(shù),且該值所在的修改 型SQL語句和ps值所在的SQL語句相似(這兩個(gè)SQL語句除嫌疑參數(shù)值和自動(dòng)變更的參數(shù) 值不同外,其它都是相同的);且這兩個(gè)值在兩個(gè)SQL語句的位置也相同,那么通過該Rf就 發(fā)現(xiàn)了 Web應(yīng)用中的CSRF漏洞。這是因?yàn)镽f用偽造參數(shù)pf,通過修改型SQL語句更改了 后端數(shù)據(jù)庫。針對(duì)嫌疑請(qǐng)求Rs,若rs_set中至少有一條記錄對(duì)應(yīng)的Rf發(fā)現(xiàn)Web應(yīng)用的CSRF漏 洞,則通過Rs可構(gòu)造CSRF攻擊,同時(shí)分析Rs可幫助修復(fù)或避免Web應(yīng)用的CSRF漏洞。本發(fā)明被實(shí)現(xiàn)為一個(gè)Web應(yīng)用測(cè)試工具。從中國站長站下載的五個(gè)被廣泛使用的 PHP Web應(yīng)用作為測(cè)試對(duì)象。這五個(gè)Web應(yīng)用的基本信息如表1所示。五個(gè)測(cè)試對(duì)象具有 一定代表性,體現(xiàn)在以下三個(gè)方面(1)規(guī)模,既有大型的Web應(yīng)用,如=Discuz !、織夢(mèng)內(nèi)容管理系統(tǒng);也有小型的 Web 應(yīng)用,如BZCMS ;(2)類別,五個(gè)Web應(yīng)用來自四個(gè)不同應(yīng)用類別,包括博客和論壇等;(3)成熟度,既有推出數(shù)百個(gè)版本的Discuz !和織夢(mèng)內(nèi)容管理系統(tǒng),也有只推出 1.1版本的BZCMS系統(tǒng)。其中Discuz !被數(shù)十萬用戶所使用。表 1 從表2的測(cè)試結(jié)果數(shù)據(jù)可知,本發(fā)明提出的方法能夠有效發(fā)現(xiàn)CSRF嫌疑請(qǐng)求和漏洞。大多數(shù)識(shí)別出的嫌疑請(qǐng)求經(jīng)動(dòng)態(tài)檢測(cè)發(fā)現(xiàn)了 CSRF漏洞,識(shí)別準(zhǔn)確率最高達(dá)100 %,總平 均可達(dá)45%。另外生成的測(cè)試用例發(fā)現(xiàn)CSRF漏洞的成功率也很高,最高達(dá)63. 2%,總平均 有31. 1%,具有較高的測(cè)試效率。特別值得一提的是Discuz !和織夢(mèng)內(nèi)容系統(tǒng),它們經(jīng)過 多年的更新,在防范CSRF方面做了很多工作,但本發(fā)明方法還是能夠在這些Web應(yīng)用中檢 測(cè)出CSRF漏洞。表權(quán)利要求
一種跨站點(diǎn)偽造請(qǐng)求的動(dòng)態(tài)檢測(cè)方法。其特征在于以下步驟1)收集HTTP請(qǐng)求信息;2)根據(jù)收集到的信息,檢測(cè)每個(gè)請(qǐng)求是否為CSRF嫌疑請(qǐng)求;3)針對(duì)每個(gè)CSRF嫌疑請(qǐng)求,找出其所包含的全部嫌疑參數(shù),為每個(gè)嫌疑參數(shù)生成一個(gè)偽造參數(shù),再利用每個(gè)偽造參數(shù)生成一個(gè)對(duì)應(yīng)的偽造請(qǐng)求,而每一個(gè)偽造請(qǐng)求再生成一個(gè)測(cè)試用例;4)在生成嫌疑請(qǐng)求的環(huán)境重現(xiàn)時(shí),執(zhí)行每一個(gè)步驟3)生成的測(cè)試用例所對(duì)應(yīng)的偽造請(qǐng)求,執(zhí)行過程中,收集偽造請(qǐng)求的執(zhí)行信息;5)根據(jù)嫌疑請(qǐng)求、嫌疑請(qǐng)求的執(zhí)行信息、偽造請(qǐng)求和偽造請(qǐng)求的執(zhí)行信息,檢測(cè)偽造請(qǐng)求是否發(fā)現(xiàn)了Web應(yīng)用中的CSRF漏洞,并形成報(bào)告,幫助Web應(yīng)用開發(fā)者修復(fù)漏洞。
2.根據(jù)權(quán)利要求1所述的跨站點(diǎn)偽造請(qǐng)求的動(dòng)態(tài)檢測(cè)方法,其特征在于步驟1)的具體 過程是設(shè)計(jì)一個(gè)HTTP信息收集模塊,并部署在待測(cè)試的Web應(yīng)用中;該HTTP信息收集模 塊分成兩個(gè)部分,其一是請(qǐng)求信息收集模塊,收集HTTP請(qǐng)求中的信息為(1)請(qǐng)求的URL、時(shí) 間和請(qǐng)求方法,(2) GET數(shù)據(jù)和POST數(shù)據(jù);其二是SQL語句收集函數(shù),收集HTTP請(qǐng)求中的信 息為⑶動(dòng)態(tài)生成的SQL語句。
3.根據(jù)權(quán)利要求1或2所述的跨站點(diǎn)偽造請(qǐng)求的動(dòng)態(tài)檢測(cè)方法,其特征在于步驟2)的 檢測(cè)CSRF嫌疑請(qǐng)求的具體過程為首先根據(jù)收集到的HTTP請(qǐng)求獲取GET參數(shù)和POST參數(shù) 集合;然后獲取HTTP請(qǐng)求對(duì)應(yīng)的修改型SQL語句操作數(shù)集合;最后分析HTTP參數(shù)和SQL操 作數(shù)之間的關(guān)聯(lián);如果至少存在一個(gè)HTTP參數(shù)的值和某個(gè)操作數(shù)的值相等,那么該請(qǐng)求即 為嫌疑請(qǐng)求,和操作數(shù)值相等的HTTP參數(shù)為嫌疑參數(shù)。
4.根據(jù)權(quán)利要求1或2所述的跨站點(diǎn)偽造請(qǐng)求的動(dòng)態(tài)檢測(cè)方法,其特征在于步驟3)的 生成偽造參數(shù)過程是針對(duì)嫌疑請(qǐng)求Rs,首先找出Rs的嫌疑參數(shù)集合,為每個(gè)嫌疑參數(shù)生成 一個(gè)偽造參數(shù),偽造參數(shù)的name和嫌疑參數(shù)的name相同,偽造參數(shù)的value按三種情況處 理整型數(shù),浮點(diǎn)型數(shù)和字符串型;構(gòu)造偽造參數(shù)value的對(duì)應(yīng)規(guī)則如下規(guī)則1.如果value為一個(gè)整型數(shù),分兩種情況處理a)如果value為一個(gè)大于1的整數(shù),則value減1;b)如果value為一個(gè)小于或者等于1的整數(shù),則value加1;規(guī)則2.如果value為浮點(diǎn)型數(shù)。則將value最后一位加1再對(duì)10取余;規(guī)則3.如果value為字符串型,分三種情況處理a)如果value最后兩個(gè)字符不相同,則把這兩個(gè)字符互換位置;b)如果value最后兩個(gè)字符相同,則比較倒數(shù)第一個(gè)和倒數(shù)第三個(gè),如果也相同,則繼 續(xù)往前找,直到找到一個(gè)和最后一個(gè)字符不相同的字符為止;再把它們交換位置;c)如果value只包含一個(gè)字符或者所有字符都相同,且最后一個(gè)字符不是‘a(chǎn)’,則直接 把最后一個(gè)字符用‘a(chǎn)’替換;如果value只包含一個(gè)字符或者所有字符都相同,且最后一個(gè)字符是‘a(chǎn)’,則直接把最 后一個(gè)字符用‘b’替換。
5.根據(jù)權(quán)利要求4所述的跨站點(diǎn)偽造請(qǐng)求的動(dòng)態(tài)檢測(cè)方法,其特征在于偽造請(qǐng)求生成 測(cè)試用例分兩種情況情況1.如果請(qǐng)求方法為GET,此時(shí)用一個(gè)圖像(IMG)標(biāo)簽來表示該請(qǐng)求。請(qǐng)求的GET參數(shù)附加在原URL之后形成新的URL ;該URL設(shè)置為IMG標(biāo)簽的源(SRC)屬性;在該IMG標(biāo) 簽之外添加HTML文檔聲明之后,保存為一個(gè)靜態(tài)文件,這個(gè)靜態(tài)文件即測(cè)試用例;情況2.如果請(qǐng)求方法為POST,此時(shí)用一個(gè)表單(FORM)標(biāo)簽來表示該請(qǐng)求;請(qǐng)求的GET 參數(shù)附加在原URL之后形成新的URL ;該URL設(shè)置為FORM標(biāo)簽的動(dòng)作(ACTION)屬性;請(qǐng)求 的POST參數(shù)作為隱藏域放在FORM標(biāo)簽中;在該FORM標(biāo)簽之外添加HTML文檔聲明之后,保 存為一個(gè)靜態(tài)文件,這個(gè)靜態(tài)文件即測(cè)試用例。
6.根據(jù)權(quán)利要求1或2所述的跨站點(diǎn)偽造請(qǐng)求的動(dòng)態(tài)檢測(cè)方法,其特征在于步驟4) 的測(cè)試用例執(zhí)行過程為首先用瀏覽器打開嫌疑請(qǐng)求所在的Web應(yīng)用,重現(xiàn)生成嫌疑請(qǐng)求 的環(huán)境條件;然后用同一瀏覽器逐個(gè)執(zhí)行嫌疑請(qǐng)求的測(cè)試用例,即打開對(duì)應(yīng)的靜態(tài)HTML文 件;最后運(yùn)用HTTP信息收集模塊收集測(cè)試用例的執(zhí)行信息。
7.根據(jù)權(quán)利要求1或2所述的跨站點(diǎn)偽造請(qǐng)求的動(dòng)態(tài)檢測(cè)方法,其特征在于步驟5)的 CSRF漏洞的檢測(cè)過程為首先提取每一個(gè)測(cè)試用例的執(zhí)行信息,該信息對(duì)應(yīng)一個(gè)偽造請(qǐng)求 Rf,找出偽造請(qǐng)求Rf所對(duì)應(yīng)的嫌疑請(qǐng)求Rs、Rf所有的嫌疑參數(shù)、Rf對(duì)應(yīng)的偽造參數(shù)、以及偽 造參數(shù)對(duì)應(yīng)的嫌疑參數(shù);如果Rf偽造參數(shù)的值成為了 Rf某個(gè)修改型SQL語句的操作數(shù),且 其偽造參數(shù)的值所在的SQL語句和嫌疑參數(shù)的值所在SQL語句相似,且這兩個(gè)值在各自SQL 語句中的位置相同,那么通過這個(gè)請(qǐng)求就發(fā)現(xiàn)了 Web應(yīng)用中的CSRF漏洞。
全文摘要
本發(fā)明公開了一種跨站點(diǎn)偽造請(qǐng)求的動(dòng)態(tài)檢測(cè)方法,其步驟為收集HTTP請(qǐng)求信息;根據(jù)收集到的信息,分析一個(gè)請(qǐng)求是否為CSRF嫌疑請(qǐng)求;針對(duì)嫌疑請(qǐng)求生成測(cè)試用例,找出嫌疑請(qǐng)求所包含的全部嫌疑參數(shù)。利用嫌疑參數(shù)生成若干偽造請(qǐng)求,每一個(gè)偽造請(qǐng)求形成一個(gè)測(cè)試用例;在生成嫌疑請(qǐng)求的環(huán)境重現(xiàn)時(shí),執(zhí)行每一個(gè)測(cè)試用例所對(duì)應(yīng)的偽造請(qǐng)求;檢測(cè)CSRF漏洞。根據(jù)嫌疑請(qǐng)求、嫌疑請(qǐng)求的執(zhí)行信息、偽造請(qǐng)求和偽造請(qǐng)求的執(zhí)行信息,分析偽造請(qǐng)求是否發(fā)現(xiàn)了Web應(yīng)用中的CSRF漏洞,并形成報(bào)告,幫助Web應(yīng)用開發(fā)者修復(fù)漏洞。本發(fā)明采用動(dòng)態(tài)測(cè)試的方法檢測(cè)CSRF漏洞,可以用較少的代價(jià),快速而準(zhǔn)確的發(fā)現(xiàn)Web應(yīng)用中存在的CSRF漏洞。
文檔編號(hào)H04L12/26GK101883024SQ20101020635
公開日2010年11月10日 申請(qǐng)日期2010年6月23日 優(yōu)先權(quán)日2010年6月23日
發(fā)明者彭樹深, 陳道蓄, 顧慶 申請(qǐng)人:南京大學(xué)