91精品人妻互换日韩精品久久影视|又粗又大的网站激情文学制服91|亚州A∨无码片中文字慕鲁丝片区|jizz中国无码91麻豆精品福利|午夜成人AA婷婷五月天精品|素人AV在线国产高清不卡片|尤物精品视频影院91日韩|亚洲精品18国产精品闷骚

您當前位置:首頁 > 新聞頻道 > 技術(shù)動態(tài) > 正文
新型SQL注入及其防御技術(shù)研究與分析

 李鑫,張維緯,隋子暢,鄭力新

 (1.華僑大學工學院,福建泉州362021;2東北林業(yè)大學信息與計算機工程學院,黑龍江哈爾濱150000)

 摘要:SQL注入嚴重威脅Web安全,并在近些年發(fā)展出新的技術(shù)。當前研究主要集中于對傳統(tǒng)SQL注入技術(shù)的檢測與防御,而忽視了新型SQL注入技術(shù)。文章在介紹傳統(tǒng)SQL注入和現(xiàn)有防御技術(shù)的基礎(chǔ)上,詳細介紹了3種新型SQL注入技術(shù)——客戶端SQL注入、防注檢測繞過和二階SQL注入,并從注入的效果、防御方法等方面對傳統(tǒng)與新型SQL注入技術(shù)進行了分析比較。對注入效果的分析結(jié)果表明,新型SQL注入技術(shù)具有危害大、影響范圍廣、依賴手工實施等特點;對防御方法的分析結(jié)果表明,新型SQL注入技術(shù)雖然能夠突破一些傳統(tǒng)的防御方案,但是依賴現(xiàn)有防御技術(shù)能夠?qū)ζ溥M行有效防御。文章并在分析的最后針對每一種技術(shù)提出了適合的Web防御方案。

0引言

 隨著互聯(lián)網(wǎng)的爆炸式發(fā)展,Web服務(wù)受到了廣泛的應(yīng)用。然而,Web服務(wù)也遇到越來越多的安全問題,如SQL注入、XSS、CSRF、緩沖區(qū)溢出等各種漏洞攻擊不斷出現(xiàn)。其中,SQL注入是一種危害極大的Web漏洞,嚴重威脅著互聯(lián)網(wǎng)信息的安全。在開放Web應(yīng)用程序安全項目( OSWAP)近些年的統(tǒng)計中,以SQL注入為主的注入漏洞依然是影響Web應(yīng)用程序安全最嚴重的漏洞【41。雖然在過去幾年許多專家針對傳統(tǒng)SQL注入進行了深入研究,并提出多種檢測和防御方法11,121,但是,目前的大多數(shù)學者都局限于對傳統(tǒng)SQL注入漏洞的研究,而忽視了隨著HTML 5、Web 2.0等新興技術(shù)而發(fā)展的新型SQL注入技術(shù)。

 在關(guān)于SQL注入的大量研究中,馮谷和高鵬提出了3種SQL注入技術(shù):Cookie注入技術(shù)、XPath注入技術(shù)和基于時間差的SQL盲注技術(shù)。Cookie注入可以歸為服務(wù)器變量注入;基于時間差的SQL盲注屬于基于響應(yīng)的SQL盲注技術(shù)。近幾年出現(xiàn)了許多新的SQL注入技術(shù),如客戶端SQL注入、防注檢測繞過技術(shù)和二階SQL注入技術(shù)等,幾乎沒有學者進行研究。這些新發(fā)展出的SQL注入技術(shù)使以往的防御措施失去作用,并在客戶端安全、數(shù)據(jù)安全和內(nèi)網(wǎng)安全等方面產(chǎn)生更加嚴重的威脅。因此,有必要對新出現(xiàn)的SQL注入技術(shù)進行深入研究與分析比較,為新型SQL注入漏洞的檢測及攻擊防御提供依據(jù)。

1SQL注入技術(shù)

1.1 SQL注入概述

 SQL注入是一種通過操縱Web輸入來修改后臺SQL語句以利用代碼進行攻擊的技術(shù)。數(shù)據(jù)庫驅(qū)動的Web應(yīng)用通過接受用戶輸入來構(gòu)造SQL語句,并傳遞給后臺數(shù)據(jù)庫執(zhí)行。如果攻擊者能夠通過構(gòu)造用戶輸入來影響傳遞給數(shù)據(jù)庫的查詢,數(shù)據(jù)庫執(zhí)行攻擊者注入的攻擊載荷后就會產(chǎn)生SQL注入攻擊。SQL注入漏洞主要由缺少用戶輸入驗證及數(shù)據(jù)與控制結(jié)構(gòu)混合在同一傳輸通道中所引起。Web應(yīng)用程序構(gòu)造發(fā)送給數(shù)據(jù)庫執(zhí)行的SQL查詢字符串時采用的動態(tài)拼接技術(shù)導(dǎo)致用戶控制的污染數(shù)據(jù)同SQL查詢字符串混合在一起,從而使得攻擊載荷注入到SQL查詢中被數(shù)據(jù)庫執(zhí)行。而缺少用戶輸入驗證導(dǎo)致攻擊者可以直接構(gòu)造攻擊載荷執(zhí)行數(shù)據(jù)庫操作命令,如UNION、UPDATE、EXEC等。圖1為SQL注入攻擊的過程。

 從圖1可以看出,攻擊者在URL的category參數(shù)中注入攻擊載荷發(fā)送給Web應(yīng)用程序。存在SQL注入漏洞的Web應(yīng)用使用該攻擊載荷構(gòu)造SQL查詢并發(fā)送給數(shù)據(jù)庫,從而導(dǎo)致數(shù)據(jù)庫在執(zhí)行攻擊載荷后返回敏感數(shù)據(jù)給Web應(yīng)用并最終被攻擊者獲得。

1.2傳統(tǒng)SQL注入

 SQL注入的本質(zhì)是污染數(shù)據(jù)(用戶可以控制的數(shù)據(jù))未經(jīng)嚴格過濾到達危險函數(shù),從而導(dǎo)致攻擊者可以通過注入任意命令操縱數(shù)據(jù)庫。傳統(tǒng)SQL注入技術(shù)可以分為非法/邏輯錯誤查詢、聯(lián)合查詢、附帶查詢、重言式、基于響應(yīng)的SQL盲注等5種。

 1)非法/邏輯錯誤查詢

 非法/邏輯錯誤查詢是最常用的傳統(tǒng)SQL注入技術(shù)。攻擊者構(gòu)造注入語句引起數(shù)據(jù)庫錯誤并產(chǎn)生詳細的錯誤提示,,而詳細的數(shù)據(jù)庫錯誤提示會泄露大量信息。數(shù)據(jù)庫錯誤包括語法、類型轉(zhuǎn)換和邏輯錯誤。攻擊者通過引起不同的數(shù)據(jù)庫錯誤獲取信息。例如,通過語法錯誤會獲取查詢中的參數(shù)信息,通過類型轉(zhuǎn)換錯誤推斷參數(shù)的數(shù)據(jù)類型并獲取表中數(shù)據(jù),通過邏輯錯誤獲取數(shù)據(jù)庫的元數(shù)據(jù)。

 2)聯(lián)合查詢

 聯(lián)合( UNION)查詢技術(shù)利用SQL允許通過UNION操作符把不同SELECrr查詢的結(jié)果整合到一個結(jié)果集的特性,在原查詢后拼接一個新的SELECT查詢以獲取信息。攻擊者使用聯(lián)合查詢攻擊時可以結(jié)合重言式攻擊使原查詢WHERE條件為false,這樣結(jié)果集中只包含攻擊者所構(gòu)造的第2個SELECT查詢的結(jié)果。攻擊者想要提取的數(shù)據(jù)就會取代原來的內(nèi)容顯示。

 3)附帶查詢

 附帶查詢攻擊是在不改變原查詢的情況下拼接一條或多條完整的查詢語句,查詢語句之間通過“;”連接。數(shù)據(jù)庫在收到查詢字符串后會連帶所有的SQL語句一起執(zhí)行。使用附帶查詢攻擊時,攻擊者可以進行任意數(shù)據(jù)庫操作,包括添加/刪除/修改數(shù)據(jù),讀/寫底層操作系統(tǒng)文件等。

 4)重言式

 重言式攻擊是通過在原查詢中構(gòu)造重言式改變原查詢WHERE條件的真假。重言式攻擊的目的在于驗證注入點和改變查詢邏輯,其攻擊結(jié)果取決于原查詢的功能。例如,可以通過重言式攻擊繞過原查詢中對用戶的限時,實現(xiàn)修改用戶密碼的功能。

 5)基于響應(yīng)的SQL盲注

 基于響應(yīng)的SQL盲注技術(shù)是通過判斷注入攻擊載荷前后Web的不同響應(yīng)獲取信息。這種注入技術(shù)通常一次請求只能推斷出1位信息(是或否),因此也叫推斷技術(shù)。它又可以分為基于內(nèi)容的SQL盲注和基于時間的SQL盲注兩種;趦(nèi)容的SQL盲注是通過Web頁面內(nèi)容的變化推斷Web應(yīng)用信息和數(shù)據(jù),而基于時間的SQL盲注則是通過Web頁面的響應(yīng)時間進行推斷。

1.3現(xiàn)有防御技術(shù)

 SQL注入漏洞防御技術(shù)通過采用某種策略加強應(yīng)用程序的安全性,防止和抵御SQL注入攻擊。隨著對傳統(tǒng)SQL注入技術(shù)的研究,有大量防御技術(shù)被提出,較為典型的有輸入過濾、參數(shù)化查詢、Web應(yīng)用防火墻、SQL查詢串封裝和SQL指令隨機化等5種。

 1)安全編碼

 安全編碼是在代碼層對SQL注入攻擊進行防御,包括輸入過濾和輸入編碼兩種。在源代碼中輸入過濾采用正則表達式或者字符串匹配的方式,檢測用戶輸入的類型是否有敏感字符。匹配原則包括只允許合法字符的白名單和過濾非法字符的黑名單兩種。輸入編碼是對用戶輸入中的敏感字符進行轉(zhuǎn)義或替換,即對用戶輸入進行消毒處理,是輸入過濾匹配后所采取的措施。安全編碼雖然能在一定程度上防御SQL注入攻擊,但是大量Web應(yīng)用中仍然存在SQL注入漏洞。這是因為一方面安全編碼雖然對開發(fā)人員有較高的要求,但是大量開發(fā)人員安全意識并不高;另一方面Web應(yīng)用的復(fù)雜性使同一安全編碼方案并不能覆蓋所有的情況,從而導(dǎo)致過濾的不全面。

 2)參數(shù)化查詢

 參數(shù)化查詢也是在代碼層對SQL注入攻擊進行防御,即預(yù)編譯包含參數(shù)(替代用戶輸入)的SQL查詢字符串,先行解析其語法結(jié)構(gòu),使得最后拼接的用戶輸入只能作為字符串常量存在。參數(shù)化查詢從SQL注入漏洞產(chǎn)生的根本原因一一數(shù)據(jù)與控制結(jié)構(gòu)混合在同一傳輸通道——進行防御,能有效預(yù)防大多數(shù)SQL注入攻擊的產(chǎn)生。但是參數(shù)化查詢也有其局限性,一方面是其只能參數(shù)化數(shù)據(jù)值,而不能參數(shù)化SQL關(guān)鍵字或標識符,當拼接到SQL查詢中的用戶輸入內(nèi)容為后者時將無法使用參數(shù)化查詢;另一方面,參數(shù)化語句通常作為查詢或存儲過程調(diào)用,當被調(diào)用的數(shù)據(jù)庫功能在函數(shù)或者存儲過程的實現(xiàn)中使用了動態(tài)構(gòu)造SQL查詢時仍會產(chǎn)生SQL注入。被參數(shù)化查詢存儲到數(shù)據(jù)庫中的污染數(shù)據(jù)有可能在Web應(yīng)用其他功能時使用,從而產(chǎn)生SQL注入,也就是本文中將介紹的二階SQL注入。

 3) Web應(yīng)用防火墻

 Web應(yīng)用防火墻(WAF)是一種網(wǎng)絡(luò)設(shè)備或一種添加了安全特性的基于軟件的解決方案,通常以嵌入到Web服務(wù)器或應(yīng)用程序中的模塊存在,基于HTTP/HTTPS的雙向分析為Web應(yīng)用提供防護。WAF是Web防御技術(shù)的發(fā)展趨勢,國內(nèi)安全廠商都有相關(guān)安全產(chǎn)品。WAF雖然有強大的功能,但是其基于污染數(shù)據(jù)特征的檢測方法在目前有大量繞過技術(shù)。而各大WAF廠商也在不斷修補自己的漏洞檢測規(guī)則以完善產(chǎn)品。

 4) SQL查詢串封裝

 SQL查詢串封裝是為了解決大多數(shù)編程語言使用CLI與數(shù)據(jù)庫交互,從而導(dǎo)致SQL注入只有在發(fā)生后才會被發(fā)現(xiàn)而提出的防御技術(shù)。MCCLURE提出的SQL DOM和WR COOK提出的Safe Query Objects通過封裝SQL查詢語句解決這個問題。它們以類型檢查API的系統(tǒng)化方式替代不受限制的動態(tài)SQL查詢字符串構(gòu)造,消除可能導(dǎo)致SQL注入漏洞的代碼。但是這項技術(shù)需要開發(fā)人員重新學習新的編程模型,并不被廣泛使用。

 5) SQL指令隨機化

 BOYD提出的SQLrand是一種基于隨機指令集的技術(shù),它通過代理服務(wù)器攔截由應(yīng)用程序構(gòu)造的SQL查詢字符串以添加隨機指令。由于攻擊者無法預(yù)知所添加的隨機指令,注入的關(guān)鍵字就會被檢測出來。SQL指令隨機化雖然有一定的效果,但是會降低應(yīng)用程序的運行效率,在現(xiàn)實中應(yīng)用并不廣泛。

2新型SQL注入技術(shù)

 相較于傳統(tǒng)的SQL注入技術(shù),新型SQL注入技術(shù)不僅在攻擊方式上有所增加,而且在攻擊深度上有了進一步的發(fā)展。在傳統(tǒng)的SQL注入中,往往只是威脅服務(wù)器端的信息安全,而近幾年利用SQL注入攻擊客戶端的技術(shù)發(fā)展迅猛。其次,以往能夠成功抵御傳統(tǒng)SQL注入攻擊的防護措施在新型防注檢測繞過技術(shù)面前也顯得力不從心。再次,二階SQL注入是一種先把攻擊載荷存儲在持久存儲中,再到達危險函數(shù)的新型技術(shù),它的隱蔽性和攻擊性更強。本部分將介紹客戶端SQL注入、防注檢測繞過技術(shù)和二階SQL注入3種新型SQL注入技術(shù)。

2.1客戶端SQL注入技術(shù)

 HTML 5帶來了眾多新特性,其中之一就是內(nèi)置了通過SQL語言來訪問的數(shù)據(jù)庫?蛻舳丝梢酝ㄟ^JavaScript使用被稱為SQLLite的文件型數(shù)據(jù)庫在客戶端獲取和存儲數(shù)據(jù)。HTML5允許應(yīng)用程序把數(shù)據(jù)存入客戶端數(shù)據(jù)庫以便用戶界面快速檢索所需數(shù)據(jù),這能在加快應(yīng)用響應(yīng)速度的同時減小服務(wù)器負擔。并且它還允許應(yīng)用程序離線運行,應(yīng)用程序處理的數(shù)據(jù)先駐留在客戶端中,聯(lián)網(wǎng)后再與服務(wù)器同步。

 HTML 5在帶來便利的同時也帶來了安全隱患。與服務(wù)器端SQL注入類似,如果客戶端應(yīng)用程序以非安全的方式訪問本地數(shù)據(jù)庫中由攻擊者控制的數(shù)據(jù),就會產(chǎn)生客戶端SQL注入攻擊。客戶端SQL注入主要在兩個方面區(qū)別于傳統(tǒng)SQL注入技術(shù):發(fā)送攻擊數(shù)據(jù)的通道和提取數(shù)據(jù)的機制。利用客戶端SQL注入技術(shù),必須先找到能被攻擊者在本地客戶端控制并且被應(yīng)用程序發(fā)送到其他客戶端數(shù)據(jù)庫中的數(shù)據(jù)片段,如新聞類應(yīng)用中的用戶評論、社交網(wǎng)絡(luò)應(yīng)用中的用戶個人資料等。這些數(shù)據(jù)片段首先被發(fā)送到服務(wù)器,再由服務(wù)器分發(fā)到客戶端數(shù)據(jù)庫,最終數(shù)據(jù)片段中的攻擊載荷在客戶端數(shù)據(jù)庫被執(zhí)行。由于攻擊者客戶端與被攻擊者客戶端間隔服務(wù)器,攻擊者無法獲取被攻擊客戶端是否發(fā)生了錯誤、響應(yīng)狀態(tài)改變、時間延遲等異常。因此客戶端SQL注入是純盲狀態(tài)的,處理SQL盲注的常用技術(shù)不起作用。但是客戶端SQL注入技術(shù)又是白盒環(huán)境的,即攻擊者可以通過觀察自己的客戶端實例了解客戶端應(yīng)用所使用的防御措施、客戶端數(shù)據(jù)庫中敏感數(shù)據(jù)的存儲位置等信息。攻擊者還可以通過加載兩個客戶端實例,以一個客戶端中實施攻擊觀察另一個客戶端的反應(yīng)的方式調(diào)整攻擊方法。

 客戶端SQL注入攻擊的流程如圖2所示。

 由圖2可以看出,客戶端sQL注入可以分為白盒測試和注入攻擊兩個階段。白盒測試階段是客戶端SQL注入技術(shù)相比與其他SQL注入技術(shù)所獨有的階段,主要目的是收集信息。在分析客戶端實例時,攻擊者通過分析客戶端中加載的實例收集應(yīng)用程序使用的防御措施、可以實施SQL注入攻擊的位置、用戶機密數(shù)據(jù)存儲的位置、可以提取數(shù)據(jù)的途徑等信息。通常對于攻擊者能夠直接輸入但是會受到輸入驗證檢測的數(shù)據(jù)和攻擊者可以控制的基于文本的數(shù)據(jù)容易實施客戶端SQL注入攻擊。雙客戶端模擬攻擊階段,攻擊者通過加載兩個客戶端實例來收集每一條攻擊語句執(zhí)行后的效果、繞過防御措施的方法等信息。注入攻擊階段,攻擊者利用在白盒測試階段中收集到的信息編寫攻擊載荷和選擇注入點,然后把攻擊載荷包含在受其控制的一組數(shù)據(jù)中經(jīng)由服務(wù)器發(fā)送給被攻擊客戶端應(yīng)用進行存儲。之后客戶端使用這些數(shù)據(jù)構(gòu)造SQL查詢,導(dǎo)致客戶端SQL注入攻擊。

 社交網(wǎng)絡(luò)、新聞、Web郵件等都是常見并且易受這種攻擊的應(yīng)用。例如,在社交網(wǎng)絡(luò)應(yīng)用中,好友資料被存儲在本地數(shù)據(jù)庫中以便離線查看。攻擊者在自己的資料中添加可以提取用戶敏感資料的攻擊載荷,并發(fā)送到被攻擊客戶端。此時如果被攻擊客戶端為了存儲好友資料而使用動態(tài)拼接方式構(gòu)造SQL查詢字符串,攻擊載荷得以執(zhí)行,即被攻擊客戶端中用戶敏感資料被提取到他自己的個人資料中,繼而被社交網(wǎng)絡(luò)應(yīng)用發(fā)送給攻擊者。

 客戶端SQL注入?yún)^(qū)別于傳統(tǒng)SQL注入技術(shù),威脅客戶端的信息安全。隨著HTML 5、Web 2.0等技術(shù)的普及與發(fā)展,會有更多的客戶端受到此技術(shù)的威脅。

2.2防注檢測繞過技術(shù)

 面對SQL注入攻擊的威脅,Web應(yīng)用通常會使用部署在應(yīng)用代碼中或者以WAF、IDS形式存在的輸入過濾器來防御SQL注入攻擊。本節(jié)將介紹編碼、注釋符、空字節(jié)和動態(tài)查詢等新型防注檢測繞過技術(shù)。

 1)編碼

 通過編碼可以改變注入語句的字符特征,使其在檢測時不會被黑名單匹配到,并且編碼后的語句被服務(wù)器解析后能正常執(zhí)行。最常用到的編碼技術(shù)有URL編碼、UTF-8、十六進制編碼和char()函數(shù)。而新型防注繞過檢測技術(shù)是對傳統(tǒng)編碼技術(shù)的多次復(fù)合使用。例如,使用雙重URL編碼表示“’”“’”,“”’對應(yīng)的URL編碼為%27,“%”對應(yīng)的URL編碼為%25,則雙重編碼后可以用%2527來表示“”’。在許多不得不采用基于黑名單的輸入檢測中,使用多重復(fù)合編碼后的有效載荷能成功繞過檢測,發(fā)動攻擊。

  2)注釋符

  使用內(nèi)聯(lián)注釋符能夠繞過多種模式匹配輸入過濾器。注釋符在SQL代碼中可以代替空格分割每個關(guān)鍵字,避開針對空格的檢查。例如:

 http://www.test.com/u ser.asp?uid=l /**/having/**/l=l

 而在一些數(shù)據(jù)庫如MySQL中,注釋符甚至可以出現(xiàn)在SQL關(guān)鍵字的內(nèi)部,不改變SQL語句的效果。例如:

 http://www.test.com/user.a(chǎn)sp? uid=l/**/ha/**/ving/**/1=1

 關(guān)鍵字內(nèi)部使用注釋符把關(guān)鍵字變成了多個片段,如“ha”和“ving”。單獨來看這些片段是沒有威脅甚至是常用單詞,因此可以繞過防注檢測。上述語句被成功執(zhí)行后會觸發(fā)數(shù)據(jù)庫錯誤并返回當前查詢第一個參數(shù)名稱。

  3)空字節(jié)

  編寫過濾器與應(yīng)用程序時所使用的代碼不同導(dǎo)致它們對空字節(jié)的處理會有所差異。托管代碼編寫的程序會把空字節(jié)連同后面的輸入一起處理,而非托管代碼則會把空字節(jié)當作字符串的結(jié)尾而不做處理。只需在不希望被阻止的字符前面添加空字節(jié)的URL編碼01000,就能實現(xiàn)空字節(jié)繞過過濾器。例如:

 http://www.test.com/product.asp?category=booko/000’;CREATE

 DATABASE Test:——

 上述語句以GET方式發(fā)送給Web服務(wù)器后,非托管代碼所編寫的過濾器遇到空字節(jié)01000就會當作到了數(shù)據(jù)的結(jié)尾,不對后邊內(nèi)容做檢查,而Web應(yīng)用則會把全部數(shù)據(jù)一起處理,導(dǎo)致有效載荷被執(zhí)行。

 4)動態(tài)查詢

 借助于數(shù)據(jù)庫的動態(tài)查詢功能,把要執(zhí)行的SQL查詢轉(zhuǎn)化成字符串傳遞給執(zhí)行查詢的函數(shù),是近期出現(xiàn)的另一種繞過輸入過濾器的方法。這種方法通常會把過濾的查詢語句轉(zhuǎn)化成對應(yīng)的ASCII字符的十六進制編碼。

例如:

 DECLARE@ q VARCHAR(200)

 SELECT @q= Ox44526f50205461526c65207465737

43b /*Drop table test;*/

 EXEC (@q)

 如果上述代碼成功繞過SQL注入防御措施,將會刪掉名為test的數(shù)據(jù)庫,造成巨大損失。

 防注檢測繞過是一種通過攻擊者與安全廠商或開發(fā)人員不斷博弈而發(fā)展的技術(shù)。它可以讓傳統(tǒng)的輸入檢測失去作用,與其他SQL注入結(jié)合使用則會發(fā)揮出巨大作用。

2.3二階SQL注入技術(shù)

 傳統(tǒng)的SQL注入都屬于一階SQL注入技術(shù)。在這種技術(shù)中,由攻擊者控制的污染數(shù)據(jù)會在應(yīng)用程序內(nèi)部直接到達危險函數(shù),進而導(dǎo)致攻擊者可以通過注入任意命令操作數(shù)據(jù)庫。攻擊者利用一階SQL注入漏洞時,只需要在應(yīng)用程序同一位置就可以實現(xiàn)從注入攻擊載荷到獲取數(shù)據(jù)的整個過程。而在二階SQL注入技術(shù)中,污染數(shù)據(jù)需要經(jīng)由PDS(持久存儲),再到達危險函數(shù)。表現(xiàn)在攻擊過程中則是攻擊者首先需要通過應(yīng)用程序的存儲功能把攻擊載荷存儲到服務(wù)器的持久存儲中,接下來在其他功能中使應(yīng)用程序提取攻擊載荷到危險函數(shù),即二階SQL注入漏洞要經(jīng)過存儲和觸發(fā)兩個階段。這兩個階段通常在應(yīng)用程序的不同位置完成,而目前已知的大多數(shù)SQL注入漏洞動態(tài)檢測軟件都是通過對待檢測注入點發(fā)送大量測試用例,觀察應(yīng)用程序當前響應(yīng)來判斷是否存在漏洞。這種在Web應(yīng)用程序的同一位置生成攻擊和觀察響應(yīng)的方法顯然無法有效檢測二階SQL注入攻擊。

 二階SQL注入技術(shù)中的持久存儲是指在服務(wù)器端寫入磁盤的位置,主要包括數(shù)據(jù)庫、SESSION和系統(tǒng)文件3種。其中數(shù)據(jù)庫是最為常見的形式,此時污染數(shù)據(jù)的存儲位置具體到某一個數(shù)據(jù)庫服務(wù)器中一個數(shù)據(jù)庫上一個表的特定列和行。在Web應(yīng)用程序中,大多數(shù)編程語言都提供了統(tǒng)一的內(nèi)置函數(shù)來與數(shù)據(jù)庫進行通信,如PHP中所有的SQL指令都通過mysql_query()發(fā)送給數(shù)據(jù)庫。SQL中插入數(shù)據(jù)的INSERT語句共有3種,分別是:

 而這3種INSERT寫入方式按照是否包含寫入時具體字段名稱,又可以把前兩種稱為顯式寫入,最后一種稱為隱式寫入。在顯式寫入中應(yīng)用程序源代碼顯式包含了數(shù)據(jù)存儲位置的所有信息,通過分析源代碼可以定位到此時的持久存儲點。而隱式寫入由于沒有在代碼中包含數(shù)據(jù)存儲位置的字段信息,;因此無法通過分析源代碼定位污染數(shù)據(jù)的持久存儲點。

 在成功執(zhí)行查詢命令后,mysql_query()函數(shù)會返回一個查詢結(jié)果集。對于查詢結(jié)果集的處理,PHP包括以下3種方式:

 這3種處理結(jié)果集的方式按照是否指明字段名稱,也可被分為顯式讀取和隱式讀取兩種類型。同理,兩種類型也分別對應(yīng)通過分析源代碼能否確定污染數(shù)據(jù)的來源。

  傳統(tǒng)靜態(tài)分析技術(shù)是通過分析源代碼中污染數(shù)據(jù)是否最終走向危險函數(shù)實現(xiàn)檢測SQL注入漏洞。通過上面的分析可以看到,二階SQL注入漏洞的污染數(shù)據(jù)會先經(jīng)過持久存儲再到達危險函數(shù),但是靜態(tài)分析源代碼卻無法準確將污染數(shù)據(jù)的存儲和讀取位置有效聯(lián)系起來。因此,通過靜態(tài)分析的方式檢測二階SQL注入漏洞也無法達到很好的效果。一階SQL注入污染數(shù)據(jù)數(shù)據(jù)流走向如圖3虛線箭頭所示,二階SQL注入如圖3實線箭頭所示。

 傳統(tǒng)Web安全邊界觀認為污染數(shù)據(jù)來自于用戶可以直接控制的輸入,而來自于數(shù)據(jù)庫內(nèi)部的已驗數(shù)據(jù)是安全的。在此思想影響下的傳統(tǒng)SQL注人防御措施大多集中于對用戶輸入的處理,如在用戶輸入時立刻進行的黑/白名單過濾審查、危險字符替換、參數(shù)化查詢等,但對于來自數(shù)據(jù)庫等的已驗數(shù)據(jù)則不做任何處理。從圖3可以看出,二階SQL注入技術(shù)正是通過先把攻擊有效載荷存儲到數(shù)據(jù)庫中再加以利用,繞過SQL注入防御措施,實現(xiàn)注入攻擊。而有效載荷幾乎可以是一階SQL注入中的任何技術(shù),因此二階SQL注入技術(shù)幾乎可以實現(xiàn)一階SQL注入的所有效果,而且它更隱蔽,在Web應(yīng)用程序中的位置也更敏感,一旦被觸發(fā)會造成更大的危害。

3 SQL注入分析

 本文從注入效果和防御方法兩個方面,對比介紹5種傳統(tǒng)和3種新型SQL注入技術(shù)。

 分析SQL注入效果的技術(shù)指標主要有:獲取敏感數(shù)據(jù)、修改原查詢的結(jié)構(gòu)、繞過輸入過濾器、工具實現(xiàn)、上傳文件、獲取后臺權(quán)限、獲取系統(tǒng)權(quán)限、內(nèi)網(wǎng)滲透等。其中,獲取敏感數(shù)據(jù)是SQL注入攻擊的目的,也是評價一種SQL注入技術(shù)好壞的硬性指標。修改原查詢的結(jié)構(gòu)可以使攻擊者注入更加強大的攻擊載荷。目前網(wǎng)站普遍使用輸入過濾器來防御SQL注入攻擊,因此繞過輸入過濾器是發(fā)現(xiàn)注入點后能否進行SQL注入攻擊的關(guān)鍵因素。SQL注入攻擊是一個繁瑣的過程,攻擊者通常要對注入點發(fā)送大量的請求。因此,能否自動化實現(xiàn)SQL注入攻擊決定了這項技術(shù)的可利用性。上傳文件、獲取后臺權(quán)限、系統(tǒng)權(quán)限以及進行內(nèi)網(wǎng)滲透則是進行SQL注入攻擊的目的,也是衡量一種SQL注入技術(shù)好壞的重要指標。本部分將從這些技術(shù)指標深入分析比較傳統(tǒng)和新型SQL注入技術(shù)的不同效果,其中傳統(tǒng)型SQL注入包括非法/邏輯錯誤查詢、聯(lián)合查詢攻擊、附帶查詢、重言式、基于響應(yīng)的SQL盲注等具有代表性技術(shù),新型SQL注入技術(shù)包括客戶端SQL注入、防注檢測繞過技術(shù)、二階SQL注入等技術(shù)。具體分析比較結(jié)果如表l所示,“√”表示SQL注入技術(shù)具有此效果,“×”表示不具有此效果。

 從表1可以看出,傳統(tǒng)SQL注入技術(shù)能夠?qū)崿F(xiàn)除了繞過過濾器之外所有的注入攻擊效果,能夠有效完成一次從搜集信息到獲取系統(tǒng)權(quán)限完整的滲透測試,但是對于繞過現(xiàn)有的過濾器不理想,因此單獨靠傳統(tǒng)的sQL注入技術(shù)很難在今后取得理想的效果。新型SQL注入技術(shù)能夠?qū)崿F(xiàn)除了工具實現(xiàn)之外的所有注入攻擊效果,也能夠完成一次完整的滲透測試,并且能夠有效繞過現(xiàn)有過濾器,應(yīng)用范圍廣。由于3種新型SQL注入需要根據(jù)不同的環(huán)境進行變化,這需要測試人員的人為分析,因此無法通過工具實現(xiàn)。3種新型SQL注入技術(shù)中,客戶端SQL注入攻擊效果側(cè)重于客戶端,能夠竊取受害者的個人敏感數(shù)據(jù)。防注檢測繞過技術(shù)需要與其他SQL注入技術(shù)結(jié)合使用,是能否成功攻擊的關(guān)鍵技術(shù)。二階SQL注入技術(shù)幾乎能夠完成傳統(tǒng)SQL注入所有的效果,也是現(xiàn)在SQL攻防研究中的熱點;并且其十分隱蔽,傳統(tǒng)檢測工具對其沒有較好的檢測能力?偟膩碚f,新型SQL注入檢測技術(shù)是在傳統(tǒng)技術(shù)上的發(fā)展,它以傳統(tǒng)SQL注入技術(shù)為基礎(chǔ)。一次成功的SQL注入攻擊需要多種技術(shù)的聯(lián)合使用。

 以1.3節(jié)介紹的5種現(xiàn)有技術(shù)分析其對5種傳統(tǒng)和3種新型sQL注入技術(shù)的防御效果,分析結(jié)果如表2所示,“√”表示能防御對應(yīng)的SQL注入技術(shù),“○”表示能部分防御對應(yīng)的SQL注入技術(shù),“×”表示不能防御對應(yīng)的SQL注入技術(shù)。

 從表2可以看出,安全編碼技術(shù)能夠部分防御二階SQL注入之外的其他SQL注入技術(shù),且它的防御效果取決于在具體環(huán)境下所采取的編碼措施。它不能夠防御二階SQL注入技術(shù)是因為二階SQL注入技術(shù)通常存在于無法嚴格限制用戶輸入的地方,而且經(jīng)過數(shù)據(jù)庫的存儲能夠還原轉(zhuǎn)義后的字符。參數(shù)化查詢能夠有效防御大多數(shù)SQL注入技術(shù),但是對于二階SQL注入的防御效果取決于其在應(yīng)用程序中的部署情況,因為二階SQL注入通常會在傳統(tǒng)安全邊界以外的一些地方出現(xiàn)。WAF是服務(wù)器端安全措施,不能防御客戶端SQL注入,也不能防御二階SQL注入,因為二階SQL注入的攻擊載荷來自于數(shù)據(jù)庫而不是HTTP請求,對于其他技術(shù)的防御效果取決于其設(shè)置的安全策略。SQL查詢串封裝也是服務(wù)器端安全措施,能夠有效防御除了客戶端SQL注入之外的所有技術(shù)。SQL指令隨機化技術(shù)不能防御非法/邏輯錯誤查詢技術(shù),因為它不能糾正查詢字符串中的語法錯誤;由于其是服務(wù)器端措施,也不能防御客戶端SQL注入技術(shù);但它能夠有效防御其他SQL注入技術(shù)。

 3種新型SQL注入技術(shù)中,客戶端SQL注入由于其位置特點,可以采用安全編碼和參數(shù)化查詢兩種方法進行防御。雖然所有防御方法都能夠?qū)Ψ雷z測繞過技術(shù)起到一定的防御作用,但是綜合考慮穩(wěn)定性和系統(tǒng)開銷,最好的防御措施是參數(shù)化查詢。二階SQL注入可以通過在與數(shù)據(jù)庫交互的地方完全采用參數(shù)化查詢規(guī)避安全邊界盲區(qū),進行有效防御。

4結(jié)束語

 SQL注入長期以來一直是危害最大的安全漏洞之一。防御SQL注入攻擊需要及時了解新出現(xiàn)的SQL注入技術(shù)并采取相應(yīng)的防御措施。本文從傳統(tǒng)和新型SQL注入技術(shù),以及現(xiàn)有的防御技術(shù)等方面進行了介紹,重點介紹了3種代表性的新型SQL注入技術(shù)。文章最后以傳統(tǒng)SQL注入技術(shù)與上述3種技術(shù)做比較,分析傳統(tǒng)與新型SQL注入技術(shù)的攻擊效果和現(xiàn)有技術(shù)下的防御方法,有利于安全人員采取針對性措施加強Web應(yīng)用程序的安全。由于開發(fā)人員的疏忽以及SQL注入技術(shù)的不斷發(fā)展,應(yīng)用程序中難免存在SQL注入漏洞,因此如何在攻擊發(fā)生之前發(fā)現(xiàn)和修補漏洞是接下來研究的重點。

關(guān)鍵字:
About Us - 關(guān)于我們 - 服務(wù)列表 - 付費指導(dǎo) - 媒體合作 - 廣告服務(wù) - 版權(quán)聲明 - 聯(lián)系我們 - 網(wǎng)站地圖 - 常見問題 - 友情鏈接
Copyright©2014安裝信息網(wǎng) m.78375555.com. All rights reserved.
服務(wù)熱線:4000-293-296 聯(lián)系電話:0371-61311617 傳真:0371-55611201 QQ: 郵箱:zgazxxw@126.com 豫ICP備18030500號-4
未經(jīng)過本站允許,請勿將本站內(nèi)容傳播或復(fù)制
安全聯(lián)盟認證