鐘志文
淺談數據庫SQL注入攻擊防御與對策
鐘志文
以SQL注入漏洞為研究對象,在總結SQL注入攻擊的涵義的基礎上,提出建立SQL注入防御體系的基本原則和建議,有助于在SQL數據庫和相關安全技術方面起到積極的作用。
數據庫;SQL;SQL注入
隨著WWW快速發展,Web技術日益成熟,在電子商務等眾多領域得到了廣泛應用,給人們帶來了極大的便利,但是隨之而來的是Web應用安全問題也日益突出。目前,Web應用程序安全隱患主要為非授權訪問、信息泄露以及拒絕服務攻擊等。攻擊者利用這些Web安全漏洞攻擊Web站點,使網站形象受損,給Web應用管理者和用戶造成了極大的麻煩以及巨大的經濟損失,因此大家更加注重Web應用程序的安全。OWASP(The Open Web Application Security Project)的統計表明,2010年SQL注入攻擊位于全球十大Web攻擊之首[1]。本文主要以SQL注入漏洞為研究對象,探討SQL注入攻擊防御模型的設計與實現,對Web安全理論、Web安全測試理論和安全Web應用體系有積極的促進作用,也對如何設計安全的Web應用程序以及相關的安全技術的發展具有一定程度的指導作用。
(一)SQL注入攻擊的涵義
SQL語言是一種解釋型語言,基于解釋型語言的執行方式,攻擊者可以提交惡意輸入,即構造的輸入中包含對解釋型語言語法具有特定意義的句法,這樣攻擊者構造的輸入的一部分被解釋作為程序指令執行,因而打破了Web應用程序原來的程序執行邏輯,形成了SQL注入攻擊漏洞。因此一旦Web應用程序處理SQL語句的方式不正確,就會不經意間形成SQL注入漏洞。一旦Web應用存在的SQL注入攻擊漏洞被攻擊者發現并且通過構造惡意輸入成功利用,攻擊者就可以利用其獲得的僅有權限,不管是通過橫向權限拓展還是縱向權限拓展提升其權限,此時對數據庫的危害將是不可估量的。
(二)SQL注入攻擊類型
SQL注入攻擊類型按照其分類方式不同,分類結果也不一樣。按照階數可分為一階SQL注入攻擊和二階SQL注入攻擊。其中二階SQL攻擊是指攻擊者利用具有特殊意義的字符精心構造惡意的輸入,這些輸入在Web服務器上處理時是不會產生任何問題的,并且對Web應用程序是安全的,此時并不會形成SQL注入攻擊漏洞。而當這些信息被存入數據庫,并再次對數據庫進行請求時,數據庫返回之前存入的信息,當返回的特殊構造的語句成功執行后造成的SQL注入攻擊就是上面所說的二階SQL注入攻擊;而一階SQL注入攻擊是指通過構造的惡意輸入對Web應用程序直接造成的注入攻擊漏洞,其與二階注入攻擊最大的不同點就是此時輸入的信息不先借助數據庫的存儲而后再返回形成注入攻擊漏洞,而是直接對Web進行攻擊。
按照攻擊類型[1]可分為數字型SQL注入攻擊、字符型SQL注入攻擊、搜索型SQL注入攻擊。所謂數字型SQL注入攻擊是指攻擊者攻擊的字段類型是數字型的,因此相對應的字符型SQL注入攻擊指攻擊者攻擊的字段類型是字符型的,而搜索型SQL注入攻擊是指攻擊者攻擊的字段類型是通過SQL匹配機制來實現的。
(一)基本原則
SQL注入攻擊漏洞對Web應用程序危害巨大,因此采取相應措施防御SQL注入攻擊對于Web應用程序安全來說非常重要。這里可以采用的方式如下:第一,特殊字符過濾機制,就是在客戶端以及服務器端對用戶輸入的信息進行過濾,將一些對于Web應用程序具有特殊意義的字符過濾掉,防止其破壞Web應用程序的邏輯處理流程結構,以避免對Web應用程序造成較大危害;第二,在查詢過程中使用參數化查詢方式,即Web應用程序事先為相關查詢定義好查詢結構,在查詢結構中將需要用戶輸入的部分先用一些變量進行填充,并且Web應用程序運用長度和類型限制對該變量進行了界定,這樣就無法破壞SQL語句結構,起到防御SQL注入攻擊的作用[2];第三,可以采用存儲過程方式,即在數據庫中事先建立好Web應用程序需要的SQL語句存儲過程,利用安全設計的存儲過程來避免SQL注入攻擊漏洞,因為設計不規范的存儲過程也是存在SQL注入攻擊的,安全的存儲過程設計將在下面進行介紹。

圖1 SQL注入攻擊防御體系
SQL注入攻擊安全防御體系是基于三層Web應用模型構造的注入攻擊防御安全體系,針對傳統三層在Web服務器層和數據庫層之間加入一層Web服務來提供強大的SQL注入攻擊防御能力。同時針對傳統三層,在每一層上面提供相對應的防御措施,來構造一個多層次動態的安全防御體系,以保證Web應用程序安全。
(二)防御體系“三個方面”
1.數據安全傳輸。數據安全傳輸是保證信息在傳輸過程中的保密性和完整性。其中保密性是通過加密技術對傳輸的信息進行加密,這里主要采用對稱加密算法,主要是出于效率上的考慮,因為當需要加密的信息比較多的時候,對稱加密算法相對于非對稱加密算法來說速度更快。通過采用加密技術,就可以保證信息在傳輸過程中對攻擊者是不可見的,像Web代理工具或者竊聽工具等都將失去作用,因而可以防止信息泄露,保證信息的安全傳輸。
完整性主要是采用信息摘要算法對傳輸的信息進行摘要處理,然后將摘要信息通過加密安全傳輸,這里可以采用非對稱加密算法,因為信息摘要信息量比較少,當另一方收到傳輸的信息時,通過相同的摘要算法對信息進行同樣的操作,然后通過對比兩個摘要來判定信息在傳輸過程中是否遭到篡改,如果通過對比兩個摘要完全相同,那么就可以斷定收到的信息是完整的。當然這是以犧牲成本和效率為代價的,對于安全性要求比較高的Web應用程序,這些都是處于可接受的范圍內,畢竟對于這樣的Web應用程序,安全性才是第一位的,然而,對于安全性要求不是特別高的Web應用程序,數據安全傳輸是可選的。通過數據的安全傳輸,可以保證用戶信息的安全性,防止用戶信息被竊取以及被惡意修改等。
2.授權認證。授權認證主要用來保證用戶實體的真實性。它包括兩個方面,即在數據的安全傳輸過程中用來認證用戶實體的真實性以及在數據庫認證過程中保證數據用戶的真實性,這里主要采用訪問控制方式。訪問控制分兩步,第一步通過授權,采用最小權限原則,將能夠滿足需求的最低權限分配給合法的使用者;第二步當用戶使用Web應用程序時,通過審核來檢查用戶是否是合法的使用者,以及使用者是否具有訪問該資源的權限,通過授權認證可以防止非法使用者使用以及獲取相關信息。比如用戶需要訪問一個Web管理頁面,首先,需要檢查用戶是否有權限登錄Web后臺管理系統,即用戶是否得到授權訪問后臺管理系統;其次,如果用戶得到了相應的授權,接著就需要檢查用戶是否得到授權訪問該Web管理頁面,如果用戶沒有權限訪問該Web頁面,即使用戶可以登錄后臺管理系統也不能訪問該頁面,其實質是一個動態多層次的訪問控制措施。
3.資源保護。Web應用程序在運行過程中需要不斷訪問各種資源,包括文件資源訪問和數據庫資源訪問。其中文件資源主要指Web頁面,比如上文提到的后臺管理頁面不能被未授權使用;數據庫資源主要指數據庫中保存的信息,比如Web應用程序的用戶密碼信息或者其他相關機密信息。像這樣的信息是否得到合理的保護關系到Web應用程序是否能夠正常運行,這些信息對應用程序來說是至關重要的,必須得到合理的保護。
隨著WWW快速發展,Web技術的日益成熟,Web技術在電子商務等眾多領域得到了廣泛應用,給人們帶來了極大的便利。但是隨之而來Web應用安全問題也日益突出,數據庫的安全成為人們普遍關注的對象。本文基于SQL注入攻擊原理,對Web安全理論、Web安全滲透測試理論和安全Web應用體系具有積極的促進作用和指導意義,也對如何設計實現安全的Web應用程序防御SQL注入攻擊,以及Web安全技術的發展具有一定的現實意義和借鑒作用。
[1]幻泉.注入中的數字型、字符型、搜索型的區別.http://www.2cto.com/Article/201012/80898.html
[2]Dafydd Stuttard,Marcus Pinto著,石華耀等譯.黑客攻防技術寶典:Web 實戰篇.北京:人民郵電出版社,2009,8
[3]Padmanabhuni S.,Singh V.,Senthil kumar K.M.,Chatterjee A.Preventing Service Oriented Denial of Service (PreSODoS):A Proposed Approach.Web Services (ICWS),IEEE International Conference on;Chicago,IL,2006
[4]Hamisi N.Y.,Mvungi N.H,Mfinanga D.A,Mwinyiwiwa B.M.M,Intrussion detection by penetration test in an organization network.Adaptive Science and Technology,2nd International Conference on,2009
責任編輯:郭一鶴
TP309
B
1671-6531(2013)09-0041-02
鐘志文/廣東省海洋工程職業技術學校計算機講師,應用電子技術工程師(廣東廣州 510320)。