淺談基于序列對比的SQL注入攻擊檢測方法
杜文華 民航廣西空管分局
在現(xiàn)代網(wǎng)絡迅猛發(fā)展的背景下,Web應用程序都采用了分布式的三級架構,由于數(shù)據(jù)庫中存在大量敏感的信息數(shù)據(jù),這使其遭受頻繁的網(wǎng)絡攻擊,并尤以SQL注入攻擊為甚,這嚴重影響了網(wǎng)絡應用安全,為此,需要采用新的基于序列比對方法的SQL注入攻擊檢測方法和技術,在滲透測試和程序分析相結合的方式下,實現(xiàn)對SQL注入漏洞的檢測定位。
序列;對比;SQL注入;攻擊;檢測
現(xiàn)代互聯(lián)網(wǎng)正在迅猛發(fā)展,然而各種Web服務器存在一定的漏洞以及程序存在非嚴密性,致使SQL注入攻擊手段成為了針對Web服務器的主流方式,在分布式的Web服務器中,存在三級架構,即:數(shù)據(jù)庫服務器、應用服務器和客戶端,在Web服務器站點膨脹的態(tài)勢下,難免存在SQL注入的缺陷,一些別有用心的用戶可以利用服務器中的疏漏,非法侵入服務器獲取網(wǎng)站管理員的權限,威脅服務器內(nèi)網(wǎng)的系統(tǒng)信息,導致網(wǎng)絡應用安全受到嚴重威脅。我們需要針對SQL注入漏洞進行分析,并提出有效的基于序列對比的SQL注入攻擊檢測方法。
SQL注入攻擊是指Web程序目標系統(tǒng)通過字符串的方式,實現(xiàn)用戶輸入接收,締造對應的SQL語句進行數(shù)據(jù)庫合法操作。由于Web服務器存在一定的漏洞,導致一些攻擊者利用該字符串注入惡意代碼,在數(shù)據(jù)庫系統(tǒng)中進行運行。這是由于沒有對用戶輸入進行驗證處理造成的,被稱為“污染值”,當這些“污染值”累積到達陷入點時,就會引發(fā)SQL注入攻擊。在Java應用程序中,處理數(shù)據(jù)輸入的常見操作的注入點有get Parameter()、get Query String()等;“污染值”傳播的變量賦值等操作有String、String Buffer等;陷入點主要是向數(shù)據(jù)庫提交SQL查詢語句的函數(shù)如:execute Query、Statement、add Batch等。
SQL注入攻擊的方式主要包括以下幾種:
(1)重言式攻擊。這是一種通過在查詢語句中插入一個重言式,而非法獲得網(wǎng)站管理員權限的方法,在Web服務器中的SELECT或UPDATE語句的WHERE條件中,如果插入了重言式,那么,數(shù)據(jù)庫表中的每一行都會被納入到結果集合中。以網(wǎng)上銀行為例,假設用戶登錄到正確的網(wǎng)頁上,查詢當前賬戶的余額,系統(tǒng)通過Account.php? user Name=’test’字符串的形式,向應用程序提交查詢語句,應用程序則通過構造語句:SELECT*FROM Accounts WHERE userName=’test’,返回到用戶賬戶信息。如果非法侵入用戶將這個字符串輸入改變?yōu)椋篈ccount.php?userName=’test’OR 1=’1’,那么,應用程序構造的語句則會相應改變?yōu)椋篠ELECT*FROM Accounts WHERE userName=’test’ OR 1=’1’,這樣,數(shù)據(jù)庫會返回所有用戶的賬戶信息,造成安全威脅。
(2)SQL注釋符攻擊。由于SQL語言涵蓋有注釋符,它們分別為:① # 用于注釋符號后面的本行內(nèi)容;② — 與#類似,在它的后面添加一個空格用于注釋;③ /*…*/ 這是用于注釋符號中間的內(nèi)容。以用戶的注冊系統(tǒng)為例,用戶等級采用userlevel表示;管理者采用1表示;普通用戶用2表示,其應用程序的代碼可以編譯如下:
如果在上述輸入程序中,在email處輸入:netsh@163.com’,’1’)#,那么,這個SQL語句就會相應改變?yōu)椋?/p>
INSERT INTO members VALUES
(’youid’,’youname’,’youpa ss’,’netsh@163.com’,’1’)#,’2’)
那么,插入的用戶等級就會發(fā)生改變,轉(zhuǎn)變?yōu)楣芾韱T等級,形成攻擊威脅。
(3)添加補充語句。在下述的語句之中:SELECT*FROM users WHERE username=’admin’,這個’admin’是用戶輸入語句,而如果將其更改為admin’:DELETE FROM users’,那么,SQL語句就會變?yōu)椋篠ELECT*FROM users WHERE;username=’admin’;DELETE FROM users”,造成惡意的攻擊和破壞。
由于SQL注入攻擊是由于數(shù)據(jù)庫漏洞而導致的,因而,需要對數(shù)據(jù)庫漏洞進行修補,當前可以從兩個方面對SQL注入攻擊進行防御和檢測。
2.1 代碼層防御
這是通過對預先設定好的敏感字符進行過濾,屏蔽出錯的信息,并使用SQL參數(shù)查詢方式,隔離執(zhí)行代碼和數(shù)據(jù),有效防止通過用戶對語句進行惡意的更改?,F(xiàn)在研究較多的是對數(shù)據(jù)的合法性檢測,大體是利用算法得到合法的結構或輸入類型,再與Web應用程序的輸入進行比對,比對匹配則為合法,比對不匹配即為非法侵入。它們主要有:(1)基于序列比對的SQL攻擊檢測。它是利用Needleman-Wunsch算法,進行用戶輸入SQL語句結構和類型的比對,從而判斷其是否受到SQL注入攻擊。(2)防SQL注入攻擊的數(shù)據(jù)庫驅(qū)動。它是通過服務器上的Web程序、后臺數(shù)據(jù)庫進行連接驅(qū)動,去掉執(zhí)行語句中的字符串,經(jīng)由執(zhí)行語句路徑,由hash函數(shù)得到id并加以保存,以檢測是否受到SQL注入攻擊。(3)通過指令集隨機化的SQL注入防御。它是對SQL語句進行改動,在其后加上密鑰,根據(jù)密鑰判定SQL語句是否受到注入攻擊。
2.2 平臺層防御
這是對平臺層進行優(yōu)化處理或配置進行更改,如:Web應用防火墻、數(shù)據(jù)庫防火墻、應用數(shù)據(jù)的鎖定等,這種策略可以減輕SQL注入攻擊,然而,由于它無法替代安全代碼的編寫,因而與安全代碼之間是互補的關系。
這種方法是利用改進的序列比對算法——Needleman-Wunsch算法,對用戶的實際輸入進行比對,通過對輸入語句的結構和類型加以判定,確認和檢測其是否受到SQL注入攻擊。
3.1 改進的NNeedleman-Wunsch算法
這種全局比對算法主要是考慮序列的整體,它利用整體相似度最大化的原則,對兩個序列進行比對,對于不等長度的序列,需要去除一些殘基的方法加以處理,或者采用另一序列進行空位插入處理。
這種算法是基于DNA和RNA序列比對發(fā)展而來的,對算法的回溯過程進行了改進,如果用戶輸入不包含惡意的代碼,那么,字符串則一定可以與目標字符串相匹配,并且可以填充空位的結構和值。
3.2 判定SQL注入攻擊檢測結果
基于序列比對的SQL注入攻擊檢測方法,可以檢測兩種狀況:
這種算法的檢測流程如下圖所示:
該算法的比對過程如下圖所示:
目標T:y1y2……yj yj+1……ym-1 ym
‖‖ ‖‖‖‖ ‖‖
模式P:x1x2……xi xi+1….xi-1 xi
結果R:x1x2……xi xi+1__xi-1____xi
上述算法可以對數(shù)據(jù)庫進行正確性測試,包括對字符串型、數(shù)字型的數(shù)據(jù)庫進行序列比對,從而檢測出以SQL注入攻擊技術為基礎的攻擊語句。
綜上所述,基于序列比對的SQL注入攻擊檢測方法,是運用了改進的序列比對算法——Needleman-Wunsch算法,對用戶的實際輸入進行比對,進而判定出輸入語句的結構和類型,它無須外部數(shù)據(jù)庫的支持,可以基于序列比對方法,快速高效地監(jiān)測出SQL注入攻擊行為,它不依賴于任何學習算法的運算精度限制,可以有效地加以應用和發(fā)揮。
[1] 沈琳. 網(wǎng)絡攻擊特征提取算法在序列比對中的運用分析[J]. 計算機光盤軟件與應用. 2014(15)