王 丹, 趙文兵, 丁治明
( 北京工業(yè)大學(xué)計算機學(xué)院, 北京 100124)
?
Web應(yīng)用常見注入式安全漏洞檢測關(guān)鍵技術(shù)綜述
王 丹, 趙文兵, 丁治明
( 北京工業(yè)大學(xué)計算機學(xué)院, 北京 100124)
針對各種動態(tài)Web技術(shù)的應(yīng)用和發(fā)展加劇了Web應(yīng)用注入式惡意攻擊防范難度的問題,圍繞Web應(yīng)用典型的SQL注入和XSS注入漏洞,綜述了近年來提出的、適用于Web應(yīng)用注入式漏洞檢測的研究進展. 介紹了Web應(yīng)用常見的注入式安全漏洞的分類,總結(jié)了這類漏洞的成因,梳理了安全漏洞檢測的復(fù)雜性;闡述了注入式安全漏洞檢測的關(guān)鍵技術(shù),包括漏洞注入點的分析和識別、符號執(zhí)行和污點分析以及基于軟件分析和測試模型的漏洞檢測方法;最后給出了研究展望.
Web應(yīng)用;注入式;漏洞檢測
互聯(lián)網(wǎng)技術(shù)迅猛發(fā)展,各行各業(yè)普遍采用Web應(yīng)用系統(tǒng),對其安全性的要求日益提高. 遺憾的是,目前,Web安全技術(shù)的發(fā)展仍落后于Web應(yīng)用技術(shù)本身的發(fā)展,Web應(yīng)用本身及其運行環(huán)境目前仍比較脆弱,其運行環(huán)境容易被偽造或修改,使得Web應(yīng)用逐漸成為被惡意者攻擊的對象,頻繁遭到攻擊. 常見的Web應(yīng)用漏洞大致有注入式漏洞、信息泄露漏洞、請求偽造漏洞和權(quán)限控制漏洞等幾種,其中注入式漏洞以其攻擊者的主觀惡意性位于安全威脅之首,它是指攻擊者利用Web應(yīng)用系統(tǒng)的用戶輸入和信息上傳的動態(tài)特性,將一些惡意數(shù)據(jù)或代碼上傳到Web應(yīng)用系統(tǒng)中運行,導(dǎo)致系統(tǒng)崩潰、篡改數(shù)據(jù)、信息泄露、偽造登錄等[1-3].
然而,由于Web應(yīng)用系統(tǒng)結(jié)構(gòu)的復(fù)雜性、交互的動態(tài)性和數(shù)據(jù)的海量性,尤其是各種動態(tài)Web技術(shù)的不斷出現(xiàn)[4-6],大大增加了Web應(yīng)用注入式安全漏洞檢測的復(fù)雜性,為該問題的研究提出了不小的挑戰(zhàn)[7-9]. 首先,Web應(yīng)用系統(tǒng)的規(guī)模不斷擴大,動態(tài)性日趨增強,頁面的生成更靈活,用戶與Web應(yīng)用的交互不斷增強,Web頁面中的接口類型越來越豐富[10-12],同時也為攻擊者提供了更加豐富、隱匿的途徑,進行注入式攻擊. 同時,廣泛使用的瀏覽器腳本和種類繁多的鏈接實現(xiàn)方式給攻擊檢測的過程設(shè)置了許多障礙. 其次,JavaScript語言的動態(tài)特性、Ajax技術(shù)的引入和普及更好地滿足了用戶對Web應(yīng)用的實時性、交互性和響應(yīng)性的需求,然而這種架構(gòu)下Web應(yīng)用程序的安全問題更加難以發(fā)現(xiàn)和檢測,腳本語言的動態(tài)性和靈活性對安全漏洞的分析和檢測提出了新的挑戰(zhàn). 同時,Web應(yīng)用系統(tǒng)存在可攻擊注入點眾多、漏洞反應(yīng)各異等系統(tǒng)差異的多樣性,使Web應(yīng)用注入式漏洞檢測的有效實施增加了難度. 精準(zhǔn)發(fā)現(xiàn)Web應(yīng)用的注入式漏洞、降低誤報和漏報、提高檢測的自動化程度、擴大檢測覆蓋率,是目前Web應(yīng)用設(shè)計開發(fā)、測試以及安全領(lǐng)域面臨的緊迫問題.
注入式漏洞攻擊源于Web應(yīng)用程序?qū)ν獠坑脩糨斎氲臄?shù)據(jù)缺乏有效的驗證和過濾[13],在未對外部輸入數(shù)據(jù)進行有效驗證的情況下,就對該類數(shù)據(jù)進行了可能存在安全敏感性的使用,從而引發(fā)安全問題并造成損失.
采用OWASP(Open Web Application Security Project)[14]描述,根據(jù)注入對象的不同,Web應(yīng)用注入式漏洞包括:SQL(structure query language)注入、XSS(cross site scripting)注入、XML(extensible marked-up language)注入、XPATH注入等幾種類型,本文圍繞比較常見的SQL注入、XSS注入展開.
1.1 SQL注入漏洞攻擊
SQL注入漏洞攻擊是指通過數(shù)據(jù)庫外部接口把惡意代碼插入數(shù)據(jù)庫操作語句中,以控制數(shù)據(jù)庫甚至操作系統(tǒng),是Web應(yīng)用系統(tǒng)中較為常見并且危害較大的一種漏洞[15].
SQL注入漏洞的成因是由于開發(fā)人員缺乏Web安全方面的知識或者安全編程方面的經(jīng)驗,編寫的代碼不完善,常見問題有:1) 使用字符串聯(lián)結(jié)的方式組合多條SQL指令,導(dǎo)致數(shù)據(jù)和控制結(jié)構(gòu)使用同一傳輸通道;2) 應(yīng)用程序連接數(shù)據(jù)庫時使用的帳戶權(quán)限過大;3) 未對用戶輸入進行徹底的驗證和過濾;4) 數(shù)據(jù)庫開放了權(quán)限過大的功能;等等.
SQL注入漏洞主要有[16]:1) GET型. URL鏈接中的參數(shù)可以被惡意擴展而成為注入漏洞. 2) POST型. 注入漏洞存在于用戶與數(shù)據(jù)庫產(chǎn)生交互的地方,諸如用戶輸入的對話框、搜索框等. 用戶的輸入中可能包含惡意代碼,會作為SQL語句的一部分提交給后臺處理. 3) Cookie注入型. 若服務(wù)器未對瀏覽器提交的數(shù)據(jù)進行處理和過濾,而將這些數(shù)據(jù)直接用于數(shù)據(jù)庫交互,就可能產(chǎn)生Cookie型注入漏洞.
1.2 XSS攻擊
XSS攻擊同樣產(chǎn)生于Web應(yīng)用系統(tǒng)對用戶的輸入過濾不足. 攻擊者利用網(wǎng)站漏洞,把惡意的HTML代碼和客戶端JavaScript腳本代碼注入網(wǎng)頁中,當(dāng)用戶瀏覽這些網(wǎng)頁時,瀏覽器會執(zhí)行其中的惡意代碼,竊取用戶Cookie,對用戶進行會話劫持或釣魚欺騙,使用戶蒙受損失[16].
XSS漏洞產(chǎn)生的主要原因是JavaScript語言和Web瀏覽器的同源策略(same origin policy),即JavaScript語言允許Web服務(wù)器發(fā)送可執(zhí)行代碼給瀏覽器,這給Web應(yīng)用帶來了安全風(fēng)險. XSS漏洞就是攻擊者越過同源策略,運用JavaScript腳本控制瀏覽器,從而獲得會話Cookie等,進行進一步攻擊. XSS漏洞一般分為以下4類[17-19]:
1) 反射型XSS. 攻擊者設(shè)計包含惡意代碼的網(wǎng)址鏈接,通過一些手法誘使用戶訪問,一旦鏈接被打開,惡意代碼即被執(zhí)行. 由于其只能被點擊觸發(fā)執(zhí)行1次,因此叫作反射型. 此類攻擊通常隱匿于網(wǎng)頁的搜索欄、登錄入口等處,以竊取客戶端Cookie或進行釣魚欺詐.
2) 存儲型XSS. 存儲型XSS也稱持久型XSS,攻擊者提前將惡意代碼上傳或存儲到服務(wù)器中,藏匿在評論、留言板、日志等交互處. 只要瀏覽器訪問到包含這些惡意代碼的頁面,惡意代碼就會被執(zhí)行,無需用戶點擊特定的鏈接.
3) DOM型. XSS的文檔對象模型(document object model,DOM)是W3C組織推薦的處理可擴展標(biāo)志語言的標(biāo)準(zhǔn)編程接口,與瀏覽器、平臺、語言無關(guān). 可以把DOM看作JavaScript的輸出頁面,基于DOM的XSS也是出現(xiàn)在JavaScript代碼中的漏洞,通過修改頁面的DOM節(jié)點形成的. 它和反射型XSS、存儲型XSS的區(qū)別在于:DOM型XSS代碼并不需要服務(wù)器解析響應(yīng)的直接參與,瀏覽器端的DOM解析即可觸發(fā)XSS,攻擊完全發(fā)生在客戶端.
4) Flash型XSS. 許多Web應(yīng)用大多引用Flash形式的動態(tài)內(nèi)容,F(xiàn)lash文件可以執(zhí)行Action Script腳本代碼,而Action Script提供了許多接口與Java-Script腳本進行通信,所以Flash動態(tài)文件常常被利用為執(zhí)行惡意代碼的通道,進而實現(xiàn)跨站攻擊.
Web應(yīng)用程序所面臨的注入式攻擊的威脅主要源自程序?qū)τ脩糨斎肴狈︱炞C和過濾,導(dǎo)致惡意輸入可作為數(shù)據(jù)庫的內(nèi)容被使用或者被作為腳本而執(zhí)行,從而破壞網(wǎng)站的數(shù)據(jù)完整性. 廣義地看,Web應(yīng)用注入式安全漏洞的檢測是個分類問題,即在Web應(yīng)用中如何全面、準(zhǔn)確、高效地區(qū)分正常輸入與惡意輸入,針對不同的攻擊形式,遇到的分類問題又有不同的內(nèi)涵.
2.1 SQL注入攻擊剖析
1) 基于重言式的攻擊. 利用插入重言式,使SQL語句的條件子句部分恒真,從而導(dǎo)致原限定條件失效. 比如,根據(jù)某個條件搜索后臺數(shù)據(jù)庫中相符記錄時,若將條件子句改為重言式,則匹配條件失效,SQL查詢會返回表中所有記錄. 重言式攻擊的簡單有效使其常被使用,攻擊者只需找到適當(dāng)?shù)臈l件子句注入點輸入重言式即可. 攻擊途徑通常需要繞過認(rèn)證機制.
2) 聯(lián)合查詢. 通過在SQL查詢語句中輸入形如“UNION 〈查詢語句〉”的求并集子句,獲取UNION引領(lǐng)的查詢語句得到的查詢結(jié)果. 聯(lián)合查詢通過額外插入“合法的”查詢語句獲得額外信息,在竊取特定信息方面與重言式攻擊相比更勝一籌.
3) 多命令語句(piggybacked queries)攻擊. 通過輸入額外的可執(zhí)行命令發(fā)動攻擊. 相比聯(lián)合查詢攻擊以“UNION”為命令語句之間的分隔符,多命令語句攻擊形式更為多樣,不局限于以“SELECT”為單一動詞來構(gòu)造SQL語句,故而攻擊效果不只涉及數(shù)據(jù)查詢結(jié)果的泄露,可能從數(shù)據(jù)定義、數(shù)據(jù)操縱、數(shù)據(jù)控制等層面全方位地實現(xiàn)任意攻擊的目的.
4) 異常命令語句(malformed queries)攻擊. 構(gòu)造錯誤的 SQL 語句誘發(fā)系統(tǒng)返回出錯信息,通過收集含有提示性內(nèi)容的報錯信息進行綜合分析,從而獲得系統(tǒng)的內(nèi)部信息,比如推斷數(shù)據(jù)庫管理系統(tǒng)類型、數(shù)據(jù)的部分邏輯結(jié)構(gòu)等. 與插入并執(zhí)行命令語句直接實施攻擊的方式相比,異常命令語句的攻擊需要通過日志分析發(fā)現(xiàn).
5) 推斷(inference)攻擊. 構(gòu)造查詢條件相互對立的SQL語句, 觀察、收集系統(tǒng)在對立查詢條件下的不同反應(yīng),從而獲知系統(tǒng)內(nèi)部信息. 典型的有時間推斷攻擊(timing attack),通過輸入時間條件式的推斷命令,觀察后臺數(shù)據(jù)庫的反應(yīng)延時情況,判定條件式的成立與否,進而推斷系統(tǒng)內(nèi)部信息. 推斷攻擊不產(chǎn)生出錯信息,無需命令執(zhí)行結(jié)果,攻擊手段隱蔽.
6) 輸入編碼偽裝(alternate encodings)攻擊. SQL 注入經(jīng)常需要使用特定的關(guān)鍵字或特殊字符,比如SQL 命令動詞、分號、單引號等. 一些簡單的防御機制通過過濾用戶輸入的這些特定字符來阻止注入. 輸入編碼偽裝的SQL注入,利用十六進制、ASCII以及 Unicode 編碼等方式,在保持相同語義的前提下,將攻擊輸入轉(zhuǎn)化為截然不同的形式,成功欺騙只過濾非編碼SQL關(guān)鍵字符的防御機制. 由于可以對Web應(yīng)用進行不同層次的攻擊,輸入編碼偽裝攻擊在某種意義上防不勝防[20].
7) 存儲過程(leveraging stored procedures)攻擊. 存儲過程通過為系統(tǒng)提供額外的抽象層而增強數(shù)據(jù)庫業(yè)務(wù)處理的規(guī)范性,并獨立于具體的Web 應(yīng)用邏輯,原本可以成為有效防御 SQL 注入的措施,但是存儲過程的傳遞參數(shù)行為同樣存在SQL 注入攻擊可能性. 因此,僅僅使用存儲過程并不能杜絕 SQL 注入攻擊,Web應(yīng)用的安全性取決于編程實現(xiàn)的方式以及對攻擊防御的充分性.
2.2 XSS攻擊剖析
2.2.1 同源策略
同源策略(same origin policy)是由Netscape提出的著名安全策略,所謂同源是指域名、協(xié)議、端口相同,要求動態(tài)內(nèi)容只能讀取或者修改與之同源的那些HTTP應(yīng)答和Cookie,不能處理非同源的內(nèi)容. 該策略目前被所有支持JavaScript 的瀏覽器采用,對腳本的資源訪問做出限制. 即使在同一個域中,不同子域仍然會受限于同源策略.
為了對沖使用上的不便,同源策略允許同一個域中不同子域的頁面間互相訪問. 在這種違反同源策略的場景中,攻擊者向一個頁面成功注入了Java-Script代碼,就能影響同域的其他任何一個頁面.
并且,同源策略存在允許頁面跨域應(yīng)用Java-Script腳本文件和圖片等元素的弱點,可能被攻擊者利用GET方式傳遞參數(shù),將攻擊對象的隱私信息發(fā)送到指定鏈接,根據(jù)用戶類型返回相應(yīng)的Java-Script代碼,實現(xiàn)跨域雙向通信,成功進行XSS攻擊. 攻擊者可能在被攻擊的頁面中創(chuàng)建Form表單,以POST的方式提交數(shù)據(jù),從而突破GET請求提交的數(shù)據(jù)量每次不能超過2 KB的限制. 對于提交Form表單后用戶頁面自動跳轉(zhuǎn)到指定鏈接從而暴露XSS攻擊的可能性,XSS攻擊者往往事先載入隱藏的iframe,將Form 表單置入iframe中提交,以提高攻擊的隱蔽性.
2014年10月,萬維網(wǎng)聯(lián)盟制定完成了面向Web應(yīng)用的HTML5標(biāo)準(zhǔn)規(guī)范,針對HTML5的注入式攻擊開始進入公眾視野[21].
2.2.2 Cookie安全模型
從HTTP狀態(tài)管理規(guī)范RFC2109起,為Cookie定義了類似于同源策略的安全策略,給Cookie配置安全屬性以保護Cookie中存儲的用戶隱私信息,比如Domain、Path、Secure、Expires和HttpOnly等. 服務(wù)器定義為Cookie的主控制器,對Cookie進行讀寫操作. 但是Cookie安全策略建立在同源策略基礎(chǔ)上,通過編寫JavaScript腳本,Cookie的安全屬性仍然可以被完全繞過,不能防范 Cookie的被盜. 比如在 HTML5中,跨iframe的DOM操作即可繞過path所設(shè)置的訪問路徑,實現(xiàn)跨路徑讀取Cookie.
Cookie大都包含用戶的身份信息,在XSS攻擊中,盜取目標(biāo)用戶的Cookie是主要目標(biāo). 安全屬性HttpOnly設(shè)定只能在 HTTP 層面上傳輸 Cookie,客戶端無法采用 JavaScript 的 document.cookie 讀寫該 Cookie,此舉能夠防范一部分XSS攻擊. 然而,服務(wù)器端的響應(yīng)可能仍然會使跨站腳本很容易地獲取同域內(nèi)的設(shè)定了HttpOnly屬性的 Cookie.
為了提高用戶對個人隱私性信息的控制權(quán),W3C制定了關(guān)于Cookie的隱私保護標(biāo)準(zhǔn)P3P (platform for privacy preferences project)規(guī)范:瀏覽器在處理Cookie時,需要提示用戶所訪問的網(wǎng)站對隱私信息的處理標(biāo)準(zhǔn). 若網(wǎng)站對用戶信息的收集行為符合用戶的預(yù)期,則二者自動締結(jié)關(guān)于個人隱私信息的協(xié)定,此后用戶可以隨意訪問該站點;否則,瀏覽器在用戶決定首先修改自己的個人隱私策略之前,不允許用戶自由瀏覽該網(wǎng)站. 網(wǎng)站和用戶之間通過雙向選擇達(dá)成用戶個人隱私保護的協(xié)定.
實際應(yīng)用中,P3P策略也可能導(dǎo)致悖論情境:如果網(wǎng)站使用的P3P策略有效,瀏覽器將允許第三方的Web請求自動帶上Cookie,從而升高XSS攻擊的風(fēng)險;若網(wǎng)站未設(shè)置P3P策略或者使用的P3P策略無效,第三方的Web請求將不會帶有該網(wǎng)站的Cookie,從而在一個層面杜絕了XSS攻擊的可能性.
2.2.3 Flash攻擊策略剖析
Flash對多媒體的支持:因為可以讀取用戶本地文件,訪問用戶的攝像頭和麥克風(fēng)等本地設(shè)備,并支持在線視頻流媒體等,使其超越JavaScript成為Web瀏覽器插件中最流行的一種. 在Flash輔助下的XSS攻擊,不僅攻擊更加隱蔽,而且能夠?qū)崿F(xiàn)許多JavaScript無法企及的功能. 比如,利用Socket類的套接字,創(chuàng)建連接至所有可達(dá)域的原始TCP套接字連接,進而偽造任意頭部信息的HTTP請求,掃描從外部無法訪問的內(nèi)部網(wǎng)絡(luò)的計算機和端口等. 使用XML和URL Loader這2類可以以用戶的名義發(fā)送HTTP請求和瀏覽器的Cookie信息到所有可達(dá)域. 在某些Flash安全策略的設(shè)定下,即可輕易實現(xiàn)跨域通信,不受同源策略的限制.
Flash的安全策略并不為同源策略所限制,可以經(jīng)過Flash的getURL()函數(shù)發(fā)送跨域的GET請求. 只要不同域上的安全策略準(zhǔn)許Flash應(yīng)用程序所在域之間進行通信,F(xiàn)lash即允許跨域通信. 針對該問題,Adobe公司特別定義了Flash的跨域策略:在域的根目錄下建立名為crossdomain.xml的跨域通信策略文件,讓用戶定義允許與當(dāng)前域通信的域. 不過如果用戶對該文件配置失誤,則會使Flash失去同源策略的保護,招致攻擊.
3.1 漏洞注入點的分析和識別
完整、準(zhǔn)確、高效的漏洞注入點分析、發(fā)現(xiàn)和提取是增強Web應(yīng)用系統(tǒng)注入式漏洞攻擊檢測能力、減少漏報誤報的關(guān)鍵問題之一. 如何以Web應(yīng)用系統(tǒng)中復(fù)雜、多類型的公共接口作為分析對象,充分利用Web應(yīng)用系統(tǒng)具有較強的結(jié)構(gòu)特征相關(guān)性的特點,從頁面、事件、鏈接的內(nèi)容和結(jié)構(gòu)特征出發(fā),研究Web應(yīng)用系統(tǒng)注入點的分析和識別問題面臨著一定的挑戰(zhàn). 常用的方法可以歸結(jié)為以下幾類.
3.1.1 基于網(wǎng)絡(luò)爬蟲的方法
文獻(xiàn)[22]在Web頁面的信息收集階段,先靜態(tài)分析找出可能的輸入向量,并通過域或分組進行組織,再動態(tài)檢測攻擊后的反應(yīng)而獲得注入點的信息. 文獻(xiàn)[23]提出了一種改進的爬蟲技術(shù),可以自動生成輸入并填入應(yīng)用表單,從而發(fā)現(xiàn)更多的注入點. 文獻(xiàn)[24]提出了提高覆蓋度的爬蟲方法. 索引爬蟲是獲取所有的Web應(yīng)用程序接口的一種常用手段,它利用鏈接索引全部Web應(yīng)用系統(tǒng)頁面,實現(xiàn)對Web信息的抓取. 然而這種方法針對海量數(shù)據(jù)的大型Web應(yīng)用系統(tǒng),檢測效率低下,亦不能有效抓取動態(tài)Web內(nèi)容. 文獻(xiàn)[25] 對Web應(yīng)用中隱藏頁面的爬取問題進行了研究. 文獻(xiàn)[26]提出的基于爬蟲的自動化XSS漏洞檢測工具,主要是以傳統(tǒng)的靜態(tài)網(wǎng)頁爬蟲爬取頁面,通過獲取目標(biāo)站點的目錄結(jié)構(gòu),對各個頁面的源碼進行解析,處理網(wǎng)頁中的〈form〉標(biāo)記,從中提取相應(yīng)的屬性以及〈form〉包含的全部子元素. 其中“method”屬性和“action”屬性分別規(guī)定了HTTP協(xié)議通信的方法和請求信息的URL,依據(jù)這些內(nèi)容構(gòu)造注入點列表,提交后分析服務(wù)器的響應(yīng)數(shù)據(jù),通過特征匹配來確定XSS注入漏洞. 文獻(xiàn)[27]通過對客戶端JavaScript腳本的解析,實現(xiàn)了對Ajax應(yīng)用中頁面的抓取. 由于過程煩瑣,未能有效模擬腳本環(huán)境下的事件響應(yīng)機制,抓取時仍然會遺漏一些頁面. 文獻(xiàn)[28]提出了對爬取的XSS漏洞自動修補的方法.
然而在Web 2.0環(huán)境下,Ajax通過異步方式向服務(wù)器發(fā)送請求,從服務(wù)器獲取數(shù)據(jù)后動態(tài)修改Web頁面內(nèi)容的方式,使得上述方法爬取的頁面內(nèi)容遠(yuǎn)少于真正呈現(xiàn)的內(nèi)容. 腳本大量應(yīng)用于瀏覽器的客戶端,現(xiàn)有方法無法對其內(nèi)容和執(zhí)行結(jié)果進行分析,也就無法全面檢查頁面中的信息和數(shù)據(jù). 同時,目前大多數(shù)Web應(yīng)用的爬蟲使用窮盡的搜索技術(shù),旨在實現(xiàn)完全覆蓋Web應(yīng)用的狀態(tài)和功能空間. 然而,由于大多數(shù)Web應(yīng)用擁有巨大的狀態(tài)空間,無論寬度優(yōu)先、深度優(yōu)先還是隨機搜索都會產(chǎn)生狀態(tài)空間的爆炸而使傳統(tǒng)爬蟲的完全覆蓋事實上失效.
3.1.2 非爬蟲的方法
文獻(xiàn)[29]提出了基于源代碼分析的Web應(yīng)用注入點查找方法,可比基于爬蟲的爬行方式查找到更多的漏洞注入點. 文獻(xiàn)[30]建立了一個針對Ajax程序的基于事件的探測系統(tǒng),通過點擊頁面上的元素,建立狀態(tài)轉(zhuǎn)換的狀態(tài)圖. 文獻(xiàn)[25]基于用戶日志和會話數(shù)據(jù)識別與Web應(yīng)用的用戶輸入數(shù)據(jù)有關(guān)的向量,然而數(shù)據(jù)不是很完備. 文獻(xiàn)[31]通過逆向工程的手段獲取客戶端Ajax代碼的狀態(tài),有助于發(fā)現(xiàn)Web應(yīng)用中服務(wù)器端注入點,并更好地理解查詢接口的復(fù)雜性和層次結(jié)構(gòu).
隨著Web技術(shù)的發(fā)展,Web頁面越來越復(fù)雜,注入點可能不僅存在于第一次Web請求所返回的頁面中,還要用戶觸發(fā)事件才能生成,且外部注入數(shù)據(jù)對Web應(yīng)用運行過程中數(shù)據(jù)流、控制流影響的多變性,使得人們很難完全準(zhǔn)確地描述、精確地獲取基于交互接口的注入點信息,尤其對隱藏接口的識別面臨較大的困難. 因此,有時也會采用一些數(shù)學(xué)方法(比如模糊邏輯、威脅建模等)來評估潛在注入漏洞的風(fēng)險[32-33].
3.2 基于軟件分析技術(shù)的漏洞檢測方法
3.2.1 基于靜態(tài)分析的方法
靜態(tài)分析技術(shù)通過對Web應(yīng)用系統(tǒng)的源代碼或者目標(biāo)代碼進行詞法和語法分析及邏輯結(jié)構(gòu)和數(shù)據(jù)處理過程分析,以期在開發(fā)階段發(fā)現(xiàn)存在的安全隱患,主要包括基于語法分析的方法[15],神經(jīng)網(wǎng)絡(luò)機器學(xué)習(xí)和語義分析的方法[16,34-36],基于輸入、輸出特征數(shù)據(jù)檢測的方法[18],基于字符串評價的方法[19,37],基于異常行為監(jiān)控的方法[38]及JavaScript腳本分析[39]等.
3.2.2 基于動態(tài)分析的方法
動態(tài)分析的方法[40]包括控制流分析和數(shù)據(jù)流分析,觀察執(zhí)行過程中程序的運行狀態(tài)、內(nèi)存使用狀況以及寄存器的值等動態(tài)屬性以發(fā)現(xiàn)漏洞. 控制流分析通過設(shè)置斷點實時跟蹤目標(biāo)程序的控制狀態(tài)轉(zhuǎn)換來檢測函數(shù)調(diào)用的缺陷. 數(shù)據(jù)流分析通過構(gòu)造邊界數(shù)據(jù)嘗試觸發(fā)其潛在的漏洞.
3.2.3 靜態(tài)分析和動態(tài)分析相結(jié)合的方法
該方法將靜態(tài)代碼檢查與運行時的實時監(jiān)控結(jié)合起來,充分利用靜態(tài)分析和動態(tài)分析的優(yōu)點[29,41],例如:文獻(xiàn)[15]利用靜態(tài)和動態(tài)SQL查詢的對比對SQL注入攻擊進行檢測;文獻(xiàn)[37]開發(fā)的ViewPoints通過自動抽取輸入驗證函數(shù),采用字符串自動機對客戶端和服務(wù)器進行冗余驗證來發(fā)現(xiàn)兩端檢測的不一致性;文獻(xiàn)[42]利用動靜態(tài)結(jié)合分析的方法分析輸入接口參數(shù)的凈化過程,能夠自動檢測和修改凈化函數(shù)和上下文的不一致性;文獻(xiàn)[43]中脆弱性特征自動化生成使用字符串分析技術(shù);文獻(xiàn)[2]的上下文無關(guān)文法建模使用字符串分析方法,并通過追蹤它來檢測SQL注入漏洞;文獻(xiàn)[1]設(shè)計了一個在運行時檢查查詢語句的語法結(jié)構(gòu),進行運行時動態(tài)監(jiān)控;文獻(xiàn)[44]提出一種基于模型檢測不合法SQL語句的漏洞的靜態(tài)分析與動態(tài)檢測相結(jié)合的技術(shù),使用靜態(tài)分析方法建立各種不同的合法的數(shù)據(jù)庫訪問查詢語句模型,動態(tài)階段在SQL語句執(zhí)行之前,建立攔截檢查策略,檢查它們是否違反靜態(tài)階段建立的模型,如果違反靜態(tài)模型,即認(rèn)為是SQL注入. 該檢測的精確性依賴于靜態(tài)分析階段建立的查詢模型,某些模型如果不準(zhǔn)確,就有可能導(dǎo)致整個檢測的失敗.
綜上所述,基于源碼的高覆蓋率和豐富程度是靜態(tài)分析中安全檢測全面性的保證,往往具有較高的誤報率,能處理的程序類型非常有限. 同時,針對輸入的檢測是源碼分析技術(shù)的盲區(qū),造成無法發(fā)現(xiàn)程序輸入和系統(tǒng)運行環(huán)境相關(guān)的安全缺陷. Web應(yīng)用開發(fā)所采用的腳本語言固有的動態(tài)特性,使得靜態(tài)分析技術(shù)無法保證測試的準(zhǔn)確度和全面性. 目前,綜合性分析工具有Fortify[45]、CodeSecure[46]、Rational Software Analyzer[47]等. 此外,專門應(yīng)用于Web應(yīng)用程序安全漏洞檢測的靜態(tài)工具有Pixy[48]等,能夠?qū)HP源碼中的XSS攻擊和SQL注入進行有效檢測,提供賦值序列和基于數(shù)據(jù)依賴的切片. 動態(tài)分析和監(jiān)控的方法不會產(chǎn)生誤報,精確度較高,但是檢測覆蓋率較低.
3.3 基于軟件測試技術(shù)的漏洞檢測方法
在發(fā)現(xiàn)漏洞注入點的位置之后,可以通過相關(guān)的測試技術(shù)對從該注入點進入到系統(tǒng)中的數(shù)據(jù)進行觀察和相應(yīng)處理來判斷漏洞是否存在. 其中可以通過白盒測試來跟蹤數(shù)據(jù)的流動和使用,通過黑盒測試觀察服務(wù)器的反饋來獲得該數(shù)據(jù)對系統(tǒng)產(chǎn)生的影響. 同時,測試用例必須全面反映注入攻擊的手段和輸入形式,以確定Web應(yīng)用防御機制的充分性,精確定位注入安全漏洞.
3.3.1 基于白盒測試的方法
利用白盒測試分析Web應(yīng)用系統(tǒng)源碼的詞法和語法,進行靜態(tài)檢測或動態(tài)檢測,發(fā)現(xiàn)應(yīng)用系統(tǒng)在開發(fā)和代碼編寫階段存在的安全問題. 白盒測試以通過檢測代碼特征來發(fā)現(xiàn)其中的缺陷和問題為主要手段,而Web應(yīng)用存在編程環(huán)境異構(gòu)、多種數(shù)據(jù)庫混合、業(yè)務(wù)邏輯復(fù)雜等特點,面對這些特點,白盒分析工具的檢測能力非常有限,它對程序邏輯數(shù)據(jù)處理中出現(xiàn)的問題不能有效檢測,對編程語言的類型也有一定的要求. 同時,檢測能力受限于基于Web源代碼產(chǎn)生的分析模型的精確性以及源代碼的框架,可擴展性不足.
3.3.2 基于黑盒測試的方法
對于黑盒測試發(fā)現(xiàn)的漏洞,測試者不需要分析服務(wù)器或者客戶端的源代碼,也不需要了解數(shù)據(jù)庫的結(jié)構(gòu),可以在外部提交測試用例后直接分析返回的結(jié)果以判斷是否存在漏洞. 由于是直接對接口進行功能性測試,測試結(jié)果較為準(zhǔn)確,可以輔助研究人員對Web應(yīng)用系統(tǒng)的安全問題進行分析[22]. 滲透測試是另一種常用于Web安全的黑盒測試技術(shù):分析Web應(yīng)用系統(tǒng)中各個接口的特征,產(chǎn)生大量測試用例,利用接口將測試數(shù)據(jù)提交給應(yīng)用系統(tǒng),通過觀察、收集系統(tǒng)處理請求后的響應(yīng),分析響應(yīng)消息的內(nèi)容來實現(xiàn)安全檢測的目的. 但是,目前該方法由于缺乏有效的輸入數(shù)據(jù)構(gòu)造方法,因此,存在冗余輸入,導(dǎo)致覆蓋率低[24,49]. 文獻(xiàn)[18]提出了有指導(dǎo)的測試用例產(chǎn)生技術(shù),以滿足測試用例的多樣性. 它使用窮盡搜索技術(shù),設(shè)計網(wǎng)絡(luò)爬蟲爬行Web應(yīng)用程序,獲得業(yè)務(wù)規(guī)則相關(guān)數(shù)據(jù). 文獻(xiàn)[5,7,12]亦對如何獲取Web應(yīng)用的接口問題進行了分析.
綜上所述,Web應(yīng)用漏洞測試的相關(guān)研究,大都集中于改進測試信息收集方法和反應(yīng)分析方法以提高測試充分性和準(zhǔn)確性,還有一些工作致力于評價滲透測試效果、分析各種Web應(yīng)用安全漏洞檢測工具、比較其性能等方面的問題[22,29]. 其他相關(guān)的研究關(guān)注測試數(shù)據(jù)的有效產(chǎn)生、測試接口的識別[12, 24]以及如何判定實際的輸出是否與預(yù)期相符. 目前,在Web應(yīng)用系統(tǒng)安全檢測中常用的黑盒檢測工具有IBM的AppScan[50]、HP的Weblnspect[51]、OWASP的開源項目WebScarab[52]等.
3.4 基于符號執(zhí)行技術(shù)的漏洞方法
靜態(tài)符號執(zhí)行方法[53-54]是在不執(zhí)行程序的前提下,用符號值表示變量的值,通過模擬程序執(zhí)行來進行相關(guān)分析的技術(shù),其優(yōu)點就是理論上可以通過搜集執(zhí)行過程中產(chǎn)生的約束給出程序執(zhí)行到某處的全部可能輸入值,通過模擬輸入發(fā)現(xiàn)程序執(zhí)行過程中的漏洞. 在符號執(zhí)行過程中,遇到條件分支語句時,會產(chǎn)生新的狀態(tài)分支,使得執(zhí)行路徑總數(shù)呈指數(shù)級增長,存在路徑狀態(tài)空間爆炸問題.
動態(tài)符號執(zhí)行方法利用一組具體值啟動程序,在目標(biāo)程序執(zhí)行過程中的條件語句分支處獲取關(guān)于程序輸入的符號約束條件,根據(jù)預(yù)定義的測試路徑遍歷規(guī)則,生成新的路徑約束條件,使用約束求解器求解生成新的測試輸入,使程序沿著可選擇的程序分支執(zhí)行. 目前,已有一些基于符號執(zhí)行自動生成測試數(shù)據(jù)的研究成果和相應(yīng)的產(chǎn)品,比如EXE[55]、KLEE[56]、JPF-SE[57]、S2E[58]等,但這些工具大都集中于處理傳統(tǒng)的C程序. 其中,S2E利用選擇符號執(zhí)行技術(shù)和執(zhí)行模型的一致性原理,利用自動化的多路徑分析技術(shù)來檢測二進制程序的脆弱性. 文獻(xiàn)[22]利用符號執(zhí)行技術(shù)檢測PHP和Java語境中SQL注入漏洞、反射型和存儲型的XSS漏洞. 文獻(xiàn)[11]提出了用符號執(zhí)行技術(shù)探測JavaScript的運行空間,自動發(fā)現(xiàn)針對客戶端代碼缺乏對輸入數(shù)據(jù)的驗證,存在運行空間爆炸的問題. 文獻(xiàn)[15]使用符號執(zhí)行技術(shù)分析Web程序,其優(yōu)點是考慮了路徑的可行性并產(chǎn)生較多的精確信息. 文獻(xiàn)[49]通過動態(tài)符號執(zhí)行發(fā)現(xiàn)客戶端HTML表單輸入的約束,然后使用這些約束產(chǎn)生輸入值,對服務(wù)器端的輸入進行驗證,但是僅采用動態(tài)符號執(zhí)行技術(shù)很難保證接口的全覆蓋.
3.5 基于污點分析技術(shù)的漏洞檢測方法
污點分析的核心思想是將來自于非信任源的數(shù)據(jù)標(biāo)記為被污染的(tainted),通過對受污染數(shù)據(jù)的傳播和使用過程追蹤,根據(jù)各種安全策略監(jiān)測污染數(shù)據(jù)的使用以發(fā)現(xiàn)安全漏洞,這是一種信息流分析技術(shù),為跟蹤數(shù)據(jù)的使用過程提供了有效的手段. 例如,污點分析技術(shù)將外部輸入數(shù)據(jù)及其運算產(chǎn)生的新數(shù)據(jù)均標(biāo)記為被污染,同時保證這些標(biāo)記污染的數(shù)據(jù)不向外傳播到可能導(dǎo)致安全威脅的區(qū)域. 一旦檢測到被污染數(shù)據(jù)的跳轉(zhuǎn)、調(diào)用以及作為數(shù)據(jù)移動的目的地址,這些操作都會被視為非法. TAJ[59-60]是針對Java語言編寫的Web應(yīng)用,利用動態(tài)污點分析檢測漏洞的工具. 文獻(xiàn)[61]應(yīng)用動態(tài)污點分析技術(shù),通過追蹤、記錄變量、寄存器和存儲器的值,檢測數(shù)據(jù)的非法使用,發(fā)現(xiàn)程序執(zhí)行過程中數(shù)據(jù)污染的擴散,確定攻擊路徑以獲取漏洞信息. 文獻(xiàn)[40]采用修改PHP解釋器的方法動態(tài)跟蹤PHP程序中的污點數(shù)據(jù). 文獻(xiàn)[62]中符號化執(zhí)行污點跟蹤并根據(jù)污點信息變化輸入,產(chǎn)生具體的攻擊代碼,自動生成針對PHP程序的SQL注入和XSS漏洞測試用例. 文獻(xiàn)[63]通過插樁在二進制級別上跟蹤信息流,利用Taint Structure數(shù)據(jù)結(jié)構(gòu)記錄污點的相關(guān)信息,從而在攻擊重現(xiàn)和特征碼提取方面獲得了較高的準(zhǔn)確度,然而該數(shù)據(jù)結(jié)構(gòu)的引入同時也帶來了更高的內(nèi)存消耗和時間代價. 文獻(xiàn)[13]設(shè)計的瀏覽器驗證型漏洞測試工具使用外部的、手工開發(fā)的測試用例,通過有指導(dǎo)的動態(tài)污點滲透測試方法尋找客戶端的JavaScript代碼的注入式攻擊. 文獻(xiàn)[64]采用動態(tài)污點分析技術(shù)分析與程序錯誤有關(guān)的輸入數(shù)據(jù)集合. 文獻(xiàn)[65]提出了一種基于策略的分析方法驗證客戶端的輸入驗證是否與給定的策略相一致. 文獻(xiàn)[66]設(shè)計的面向XSS的漏洞檢測系統(tǒng),采用動態(tài)污點分析技術(shù)跟蹤Web瀏覽器中敏感信息的流動. 如果敏感信息被傳遞到第三方,則需要通過判斷來決定是否將敏感信息傳遞給客戶端.
有效的污點傳播規(guī)則的建立、提高分析準(zhǔn)確性、降低漏報率、擴大跟蹤程序的覆蓋率,這些要素決定了污點分析技術(shù)在Web漏洞檢測中的收效.
3.6 基于模型的軟件漏洞檢測方法
構(gòu)建軟件漏洞模型,以模型規(guī)范或指導(dǎo)檢測過程并改進檢測效果,是一種常見的漏洞檢測方法[67-69]. 文獻(xiàn)[70] 將Web應(yīng)用開發(fā)過程與滲透測試活動相結(jié)合,提出了模型驅(qū)動的滲透測試框架;文獻(xiàn)[71] 對SQL注入攻擊建模采用攻擊樹建模的方法;文獻(xiàn)[72]采用圖的網(wǎng)絡(luò)進行漏洞檢測;文獻(xiàn)[50] 利用開發(fā)者提供的規(guī)范尋找Web應(yīng)用的接口信息,以便有效識別輸入數(shù)據(jù)的接口;文獻(xiàn)[73]使用符號分析和模型檢測的方法處理Web應(yīng)用服務(wù)器端的代碼,靜態(tài)選擇路徑并進行模型轉(zhuǎn)化,但未對程序分支進行有效驗證;文獻(xiàn)[74]通過動態(tài)分析并觀察Web應(yīng)用的反應(yīng),使用模型檢測技術(shù)和符號執(zhí)行技術(shù)推理得到Web應(yīng)用的簡單的行為規(guī)范,獲得Web應(yīng)用某種邏輯錯誤的類型.
總的來講,基于模型的檢測方法需構(gòu)造抽象模型、邏輯匹配規(guī)則庫,其驗證完整可靠,但檢驗規(guī)模龐大,復(fù)雜度高,對大型Web程序面臨著挑戰(zhàn)[75-76].
1) 如何進一步有效分析Web應(yīng)用系統(tǒng)各種注入式漏洞靜態(tài)特征描述和動態(tài)執(zhí)行路徑之間的內(nèi)在聯(lián)系和相互制約,妥善地處理各種復(fù)雜關(guān)系和約束條件,建立全面、快速地發(fā)現(xiàn)Web應(yīng)用系統(tǒng)中的注入點發(fā)現(xiàn)機制,是一個Web應(yīng)用注入式安全漏洞檢測的重要研究方向.
2) 通過多種技術(shù)和模型的有效結(jié)合,建立常見的Web應(yīng)用注入式漏洞分析、表示和檢測相關(guān)模型,研究相關(guān)實現(xiàn)技術(shù),探索自動化漏洞分析(包括詳盡的漏洞模式的自動化構(gòu)造,漏洞發(fā)現(xiàn)規(guī)則的自動化構(gòu)造和漏洞分析自動化開展),提高測試用例輸入規(guī)則生成和表達(dá)能力以及漏洞注入點發(fā)現(xiàn)能力,形成針對性強、自動化程度高的Web應(yīng)用注入式漏洞檢測系統(tǒng),支撐Web應(yīng)用軟件漏洞檢測的分析和檢測問題的研究.
3) 在時間和資源條件有限的情況下,整合多種技術(shù)以緩解漏洞分析精度和資源消耗之間的矛盾,仍是Web應(yīng)用系統(tǒng)中注入式漏洞分析和檢測需要解決的技術(shù)難題之一.
[1] WASSERMANN S G. The essence of command injection attacks in Web applications[C]∥Proceedings of Conference of the 33rd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages. Charleston: ACM, 2006: 372-382.
[2] WASSERMANN S G, SU Z. Sound and precise analysis of Web applications for injection vulnerabilities[C]∥Conference on Programming Language Design and Implementation. San Diego: ACM, 2007: 2-41.
[3] JIAO A, NUNO N, MIGUE C, et al. Vulnerability discovery with attack injection [J]. IEEE Transactions on Software Engineering, 2010, 36(3): 357-370.
[4] CHEN X, ZHENG Z, YU Q, et al. Web service recommendation via exploiting location and QoS information[J]. Parallel & Distributed Systems IEEE Transactions on, 2014, 25(7): 1913-1924.
[5] SCHOLTE T, BALZAROI D, ROBERTSON W, et al. An empirical analysis of input validation mechanisms in Web applications and languages[C]∥Proceedings of the 27th Annual ACM Symposium on Applied Computing. Trento : ACM, 2012: 1419-1426.
[6] AKIROGA. Core characteristics of Web 2.0 services [EB/OL].[2016-05-12]. http: ∥www. akiroga. com/core-characteristics-of-web-20-services. html#.
[7] HALFOND W, ANAND S ORSO A. Precise interface identification to improve testing and analysis of Web applications[C]∥Proceedings of the 18th International Symposium on Software Testing and Analysis. Chicago: ACM, 2009: 285-296.
[8] THUMMALAPENTA S, LAKSHMI K V, SINHA S, et al. Guided test generation for Web applications [C]∥Proceedings of the International Conference on Software Engineering. San Francisco: IEEE, 2013: 162-171.
[9] BALDUZZI M, GIMENEZ C T, BALZAROTTI D, et al. Automated discovery of parameter pollution vulnerabilities in Web applications [C]∥Proceedings of Network and Distributed System Security Symposium. San Diego: ISOC, 2011: 1-10.
[10] ZHENG Q, WU Z, CHENG X, et al. Learning to crawl deep Web[J]. Information Systems, 2013, 38(6): 801-819.
[11] ARTZI S, DOLBY J, JENSEN S, et al. A framework for automated testing of JavaScript Web applications [C]∥Proceedings of International Conference on Software Engineering. Honolulu: IEEE, 2011: 571-580.
[12] VON DEURSEN M A, LENSELINK S. Crawling Ajax-based Web applications through dynamic analysis of user interface state changes[J]. ACM Transactions on the Web, 2012, 6(1): 3.
[13] PRATEEK S, STEVE H, PONGSIN P, et al. FLAX: systematic discovery of client-side validation vulnerabilities in rich Web applications [C]∥17th Annual Network and Distributed System Security Symposium. San Diego: ISOC, 2010: 1-17.
[14] Open Web Application Security Project. OWASP Top10-2013[R/OL]. [2016-03-03]. Maryland: OWASP, 2013. http:∥www. owasp. org. cn/owasp-project/download/OWASPTop102013V1. 2. pdf.
[15] BUEHRER G T, WEIDE B W, SIVILOTTI P A G. Using parse tree validation to prevent SQL injection attacks[C]∥Proceedings of the 5th International Workshop on Software Engineering and Middleware. Lisbon: ACM, 2005: 106-113.
[16] CIAMPA A, VISAGGIO C A, DIPENTA M. A heuristic-based approach for detecting SQL-injection vulnerabilities in Web applications[C]∥Proceedings of the 2010 ICSE Workshop on Software Engineering for Secure Systems. Cape Town: IEEE, 2010: 43-49.
[17] SALAS M I P, MARTINS E. Security testing methodology for vulnerabilities detection of XSS in Web services and WS-security[J]. Electronic Notes in Theoretical Computer Science, 2014, 302(302): 133-154.
[18] ISMAIL O, ETOH M, KADOBAYASHI Y, et al. A proposal and implementation of automatic detection/collection system for cross-site scripting vulnerability[C]∥Proceedings of the 18th International Conference on Advanced Information Networking and Applications. Fukuoka: IEEE, 2004: 145-151.
[19] BATES D, BARTHS A, JACKSON C. Regular expression considered harmful in client-side XSS filter [C]∥Proceedings of the 19th International World Wide Web Conference. Raleigh: W3C, 2010: 91-100.
[20] APPELT D, NGUYEN C D, BRIAND L C, et al. Automated testing for SQL injection vulnerabilities: an input mutation approach[C]∥Proceedings of the 2014 International Symposium on Software Testing and Analysis. Bay Area: ACM, 2014: 259-269.
[21] JIN X, HU X C, YING K L, et al. Code injection attacks on HTML5-based mobile apps: characterization, detection and mitigation[C]∥Proceedings of the 2014 ACM SIGSAC Conference on Computer and Communications Security. Scottsdale: ACM, 2014: 66-77.
[22] HALFOND W G J, CHOUDHARY S R, ORSO A. Penetration testing with improved input vector identification [C]∥Proceedings of the 2nd International Conference on Software Testing, Verification and Validation. Piscataway: IEEE, 2009: 346-355.
[23] BOZDAG M E, VAN DEURSEN A. Crawling Ajax by inferring user interface state changes[C]∥Proceedings of the International Conference on Web Engineering. Yorktown Heights: IEEE, 2008: 122-134.
[24] MCALLISTER S, KIRDA E, KRUEGEL C. Leveraging user interactions for in-depth testing of Web applications [C]∥Proceedings of the 11th International Symposium on Recent Advances in Intrusion Detection. Cambridge: Springer, 2008: 191-210.
[25] RAGHAVAN S, GARCIA-MOLINA H. Crawling the hidden Web[C]∥Proceedings of the 2001 International Conference on Very Large DataBases. Roma: VLDB, 2001: 129-138.
[26] CHEN J M, WU C L. An automated vulnerability scanner for injection attack based on injection point[C]∥2010 International Computer Symposium. Tainan: IEEE, 2010: 113-118.
[27] VAN DEURSEN A, MESBAH A, NEDERLOF A. Crawl-based analysis of Web applications: prospects and challenges[J]. Science of Computer Programming, 2015, 97: 173-180.
[28] PARAMESHWARAN I, BUDIANTO E, SHINDE S, et al. Auto-patching DOM-based XSS at scale[C]∥Proceedings of the 10th Joint Meeting on Foundations of Software Engineering. Bergamo: ACM, 2015: 272-283.
[29] HALFOND W G J, CHOUDHARY S R, ORSO A. Improving penetration testing through static and dynamic analysis[C]∥Proceedings of the Second IEEE International Conference on Software Testing, Verification and Validation. West Sussex: John Wiley and Sons Ltd, 2011: 195-214.
[30] HAO J, MENDES E. Usage-based statistical testing of Web applications[C]∥Proceedings of the International Conference on Web Engineering. Como: Springer, 2006: 17-24.
[31] AMALFITANO D, FASOLINO A, TRAMONTANA P. Reverse engineering finite state machines from rich Internet applications[C]∥2008 15th Working Conference on Reverse Engineering. Antwerp: IEEE, 2008: 69-73.
[32] SHAHRIAR H, HADDAD H. Risk assessment of code injection vulnerabilities using fuzzy logic-based system[C]∥Proceedings of the 29th Annual ACM Symposium on Applied Computing. Gyeongju: ACM, 2014: 1164-1170.
[33] KAUR N, KAUR P. Mitigation of SQL injection attacks using threat modeling[J]. ACM SIGSOFT Software Engineering Notes, 2014, 39(6): 1-6.
[34] VISHNU B A, JEVITHA K P. Prediction of cross-site scripting attack using machine learning algorithms[C] ∥Proceedings of the 2014 International Conference on Interdisciplinary Advances in Applied Computing. Amritapuri: ACM, 2014: 1-5.
[35] SHEYKHKANLOO N M. Employing neural networks for the detection of SQL injection attack[C]∥Proceedings of the 7th International Conference on Security of Information and Networks. Glasgow: ACM, 2014: 318.
[36] SHEYKHKANLOO N M. SQL-IDS: evaluation of SQL attack detection and classification based on machine learning techniques[C]∥Proceedings of the 8th International Conference on Security of Information and Networks. Sochi: ACM, 2015: 258-266.
[37] ALKHALAF M, CHOUDHARY S R, FAZZINIY M, et al. ViewPoints: differential string analysis for discovering client and server-side input validation inconsistencies[C]∥International Symposium on Software Testing and Analysis. Minneapolis: ACM, 2012: 56-66.
[38] ZANERO S, CRISCIONE C. Masibty: an anomaly based intrusion prevention system for Web applications [C]∥Proceedings of Black Hat Europe. Amsterdam: Black Hat Briefings, 2009: 1-17.
[39] GUPTA S, GUPTA B B. PHP-sensor: a prototype method to discover workflow violation and XSS vulnerabilities in PHP Web applications[C]∥Proceedings of the 12th ACM International Conference on Computing Frontiers. Ischia: ACM, 2015: 1-8.
[40] LAM M S, MARTIN M, LIVSHITS B, et al. Securing Web applications with static and dynamic information flow tracking[C]∥Proceedings of the 2008 ACM SIGPLAN Symposium on Partial Evaluation and Semantics Based Program Manipulation. New York: ACM, 2008: 3-12.
[41] NGUYEN-TUONG A, GUARNIERI S, GREENE D, et al. Automatically hardening Web applications using precise tainting[C]∥Proceedings of the 20th IFIP International Information Security Conference. Chiba: Springer, 2005: 372-382.
[42] SAXENA P, MOLNAR D, LIVSHITS B. SCRIPTGARD: automatic context-sensitive sanitization for large-scale legacy Web applications[C]∥Proceedings of the 18th ACM Conference on Computer and Communications Security. Chicago: ACM, 2011: 601-614.
[43] SHANNON D, HAJRA S, LEE A, et al. Abstracting symbolic execution with string analysis[C]∥Proceedings of the Testing: Academic and Industrial Conference Practice and Research Techniques. Windsor: IEEE, 2007: 13-22.
[44] HALFOND W G, ORSO A. AMNESIA: analysis and monitoring for neutralizing SQL-injection attacks[C]∥International Conference on Automated Software Engineering. Long Beach: ACM, 2005: 174-183.
[45] 上海市軟件評測中心有限公司. 關(guān)于Fortify [EB/OL]. [2016-05-13]. http: ∥www. itesting. cn/index. php?_m=mod_article&_a=article_content&article_id=126.
[46] 深圳市九州安域科技有限公司. CodeSecure代碼安全檢測[EB/OL]. [2016-05-13]. http: ∥www. mainway. net/chanpin/code_secure. html.
[47] Informer Technologies, Inc. Rational AppScan source edition[EB/OL]. [2016-05-13]. http: ∥softadvice. informer. com/Rational_Appscan_Source_Edition. html.
[48] JOVANOVIC N, KRUEGEL C, KIRDA E. Pixy: a static analysis tool for detecting Web application vulnerabilities[C]∥Proceedings of 2006 IEEE Symposium on Security and Privacy. Oakland: IEEE, 2006: 258-263.
[49] BISHT P, HINRICHS T, SKRUPSKY N, et al. NoTamper: automatic blackbox detection of parameter tampering opportunities in Web applications[C]∥Proceedings of the ACM Conference on Computer and Communications Security. Chicago: ACM, 2010: 607-618.
[50] MARTIN M, LAM M S. Automatic generation of XSS and SQL injection attacks with goal-directed model checking[C]∥Proceedings of the 17th Conference on Security Symposium. San Jose: USENIX Association, 2008: 31-43.
[51] Hewlett Packard Enterprise Development LP. WebInspect 動態(tài)應(yīng)用安全測試[EB/OL]. [2016-05-13]. http: ∥www8. hp. com/cn/zh/software-solutions/asset/software-asset-viewer. html?asset=936485&module=1830243&docname=4AA1-5363ENW.
[52] OWASP. Category: OWASP WebScarab Project[EB/OL]. [2016-05-13]. https: ∥www. owasp. org/index. php/ Category: OWASP_WebScarab_Project.
[53] SEN K. DART: directed automated random testing[C]∥International Haifa Verification Conference on Hardware and Software: Verification and Testing. Israel: Springer-Verlag, 2009: 213-223.
[54] CADAR C, SEN K. Symbolic execution for software testing: three decades later[J]. ACM Communication, 2013, 56(2): 82-90.
[55] CADAR C, GANESH V, PAWLOWSKI P M, et al. EXE: automatically generating inputs of death[C]∥ACM 13th Conference on Computer and Communication Security. New York: ACM, 2006: 322-335.
[56] CADAR C, DUNBAR D, ENGLER D. KLEE: unassisted and automatic generation of high-coverage tests for complex systems programs[C]∥8th USENIX Symposium on Operating Systems Design and Implementation. San Diego: USENIX Association, 2008: 209-224.
[57] ANAND S, PASAREANU C S, VISSER W. JPF-SE: a symbolic execution extension to Java pathfinder[C]∥Proceedings of the 13th International Conference on Tools and Algorithms for the Construction and Analysis of Systems. Berlin: Springer-Verlag, 2007: 134-138.
[58] CHIPOUNOV V, KUZNETSOV V, CANDEA G. S2E: a platform for in-vivo multi-path analysis of software systems[J]. ACM SIGARCH Computer Architecture News, 2011, 39(1): 265-278.
[59] 黃強, 曾慶凱. 基于信息流策略的污點傳播分析及動態(tài)驗證[J]. 軟件學(xué)報, 2011, 22(9): 2036-2048. HUANG Q, ZENG Q K. Taint propagation analysis and dynamic verification with information flow policy[J]. Journal of Software, 2011, 22(9): 2036-2048. (in Chinese)
[60] TRIPP O, PISTOLA M, FINK S J, et al. TAJ: effective taint analysis of Web applications[C]∥Proceedings of the 2009 ACM SIGPLAN Conference on Programming Language Design and Implementation. New York: ACM, 2009: 87-97.
[62] NEWSOME J, SONG D. Dynamic taint analysis for automatic detection, analysis, and signature generation of exploits on commodity software[C]∥Proceedings of the Network and Distributed System Security Symposium. San Diego: ISOC, 2005: 720-724.
[63] CLAUSE J, ORSO A. Penumbra: automatically identifying failure-relevant inputs using dynamic tainting[C]∥Proceedings of Symposium on Software Testing and Analysis. Chicago: ACM, 2009: 19-23.
[64] ALKHALAF M, BULTAN T, GALLEGOS J L. Verifying client-side input validation functions using string analysis[C]∥Proceedings of the 2012 International Conference on Software Engineering. Zürich: IEEE, 2012: 947-957.
[65] VOGT P, NENTWICH F, JOVANOVICH N, et al. Cross-site scripting prevention with dynamic data tainting and static analysis[C]∥Proceedings of Network and Distributed System Security Symposium. San Diego: ISOC, 2007: 28-37.
[66] ARMANDO A, CARBONE O, COMPAGNA U, et al. Model-checking driven security testing of Web-based applications[C]∥Proceedings of the Third International Conference on Software Testing, Verification and Validation Workshops. Paris : IEEE, 2010: 361-370.
[67] GORANKO V. Logic in computer science: modelling and reasoning about systems[M]∥Logic in Computer Science: Modelling and Reasoning About Systems. Cambridge: Cambridge University Press, 2004: 117-120.
[68] 繆淮扣, 陳圣波, 曾紅衛(wèi). 基于模型的Web 應(yīng)用測試[J]. 計算機學(xué)報, 2011, 34(6): 1012-1028. MIAO H K, CHEN S B, ZENG H W. Model-based testing for Web application[J]. Chinese Journal of Computers, 2011, 34(6): 1012-1028. (in Chinese)
[69] XIONG P L, PEYTON L. A model-driven penetration test framework for Web applications[C]∥Proceedings of the 2010 Eighth Annual International Conference on Privacy Security and Trust. Ottawa: IEEE, 2010: 173-180.
[70] MARBACK A, DO H, HE K, et al. Security test generation using threat trees[C]∥Proceedings of the ICSE Workshop on Automation of Software Test. Vancouver: IEEE, 2009: 62-69.
[71] 劉強, 殷建平, 蔡志平, 等. 基于不確定圖的網(wǎng)絡(luò)漏洞分析方法[J]. 軟件學(xué)報, 2011, 22(6): 1398-1412. LIU Q, YIN J P, CAI Z P, et al. Uncertain graph based method for network vulnerability analysis[J]. Journal of Software, 2011, 22(6): 1398-1412. (in Chinese)
[72] BULTAN T. Modeling interactions of Web software[C] ∥Proceedings of the 2nd International. Workshop on Automated Specification and Verification of Web Systems. Cyprus: IEEE, 2006: 45-52.
[73] FELMETSGER V, CAVEDON L, KRUEGEL C, et al. Toward automated detection of logic vulnerabilities in Web applications [C]∥Proceedings of the 19th USENIX Conference on Security. Washington, D C: USENIX Association, 2010: 143-160.
[74] BENJAMIN K, VON BOCHMANN G, JOURDAN G V, et al. Some modeling challenges when testing rich Internet applications for security [C]∥Proceedings of the 3rd International Conference on Software Testing, Verification and Validation Workshops. Paris: IEEE, 2010: 403-409.
[75] JOVANOVIC N, KRUEGEL C, KIRDA E. Static analysis for detecting taint-style vulnerabilities in Web applications[J]. Journal of Computer Security, 2010, 18(5): 861-907.
[76] HUANG J M, WANG H X, FUXMAN A, et al. Toward query centric Web modeling and crawling[C]∥Proceedings of 2011 Very Large Database. Seattle: VLDB, 2011: 37.
(責(zé)任編輯 梁 潔)
Review of Detection for Injection Vulnerability of Web Applications
WANG Dan, ZHAO Wenbing, DING Zhiming
(College of Computer Science, Beijing University of Technology, Beijing 100124, China)
To overcome the difficulties of prevention Web applications to be maliciously injected which are increased by all kinds of dynamic Web technologies applied, centered on SQL and XSS injection, the research progresses of Web application injection vulnerabilities detection in recent years were reviewed. Firstly, the classification and causes of the Web application injection security vulnerabilities were summarized; Then, the complexity of security vulnerabilities detection was analyzed; Thirdly, the key technologies of the existing detection approached, including analyzing and identifying the injection points, injection delectations by software analysis and testing, by symbolic execution, by taint analysis and models were elaborated; Finally, its future development direction was presented.
Web application; injection; vulnerability detection
2016- 02- 26
國家自然科學(xué)基金重大資助項目(91546111);北京市教育委員會資助項目(PXM2015_014204_500221)
王 丹(1969—), 女, 教授, 主要從事分布式、計算機軟件、Web安全、可信軟件方面的研究, E-mail:wangdan@bjut.edu.cn
TP 308
A
0254-0037(2016)12-1822-11
10.11936/bjutxb2016020026