本文將通過對SQL注入攻擊技術和數據庫加密技術原理以及防護效果進行深入的分析,來辨析數據庫安全技術誤區“數據庫加密能解決SQL注入”,同時本文也給出了SQL注入的防護方法。
1、 數據庫安全誤區
針對2015年4月互聯網大規模報道的全國30省市社保等行業用戶信息泄露事件,安華金和對烏云歷史報道的社保行業相關漏洞進行集中分析,得出的結論為:大量的信息泄露主要是由于軟件中存在的SQL注入漏洞被黑客利用引起的,我們可以把SQL注入比作黑客攻擊數據庫“鋒利的矛”。
有了攻擊用的矛,我們再來看防守用的盾:數據庫加密技術真正實現了敏感數據的加密存儲,采用國內外主流的加密算法,確保加密后的數據通過非正常手段獲取后十年內難以非法破解,同時通過獨立權控、應用綁定,防止繞過合法應用程序的數據庫訪問和對內部高權限人員的運維操作管控,號稱數據庫安全中的王冠,我們可以把數據庫加密技術比作數據安全防護措施中“堅固的盾”。
《韓非子·難一》所述的故事中提到:“以子之矛,陷子之盾,何如?”雖然這是個眾人皆知的故事,但是現實版的“矛與盾”的故事又發生在大學教材《信息系統安全概論》中,下面我們先引用教材中的原文:
對于安全管理員來說,是否可以通過數據庫加密來防止SQL注入呢?在詳細解釋兩種攻防技術前,我們對一個誤區給予糾正:數據庫加密技術無法抵御SQL注入。原因是數據庫加密解決信用卡信息存儲安全等問題,而SQL注入是利用應用的弱點竊取數據,由于合法應用肯定能看到明文的信息卡數據,因此加密防守無效。
那SQL注入如何正確防護呢?下面我們先了解下SQL注入攻擊的原理。
對于安全管理員來說這也是必要的,因為不僅要了解防護的手段,同時也應該深入了解SQL注入的原理,實現有針對性的安全防護。
2、 SQL注入攻擊的原理分析
SQL注入數據庫攻擊指構建特殊的輸入作為參數傳入Web應用程序,比如通過提交表單的文本框輸入,而這些輸入大都是SQL語法里的一些組合,通過執行SQL語句進而執行攻擊者所要的操作,其主要原因是程序沒有細致地過濾用戶輸入的數據,致使非法數據侵入系統。
常見的SQL注入案例有兩種情況,一種是偽裝登錄應用系統,另一種是在有登錄賬號的情況下,在應用系統后續的提交表單的文本框中找到SQL注入點,然后利用注入點批量竊取數據。如下兩圖的輸入:
SQL注入的典型場景一,通過偽裝登錄竊取數據,主要是通過or運算符。
·竊取數據
假設后臺的拼接語句為select * from table wherecolumn1=‘ 文本框輸入值’ ;
Eg1: 如輸入值為《abc’ or ‘1’=‘1》,則語句拼接為select *…wherecolumn1=‘abc’ or ‘1’=‘1’;由于’1’=‘1’是恒真,則該可以看到了整表的全部數據。
·騙取登錄
一般系統的登錄需要輸入用戶名、密碼;后臺拼接的語句為select * from t where name=‘用戶名’ and pwd=md5(‘密碼’);
Eg1: 如輸入用戶名《abc’ or 1=1 or 1=‘ def》,密碼《abcd》則語句拼接為:
select …where name=‘abc’ or 1=1 or 1=‘def’ and pwd = md5(‘abcd’); 由于1=1是恒真,則該語句永遠為真,可以成功登錄了。
SQL 注入典型場景二,探測(通過and 運算)。
·探測系統變量
… and user>0
我們知道,user是SQLServer的一個內置變量,它的值是當前連接的用戶名,類型為nvarchar。拿一個nvarchar的值跟int的數0比較,系統會先試圖將nvarchar的值轉成int型,當然,轉的過程中肯定會出錯,SQLServer的出錯提示是:將nvarchar轉換int異常,XXXX不能轉換成int。
·探測系統對象名
先猜表名
… and (Select count(*) from 表名)<>0
猜列名
… and (Select count(列名)from 表名)<>0
3、 數據庫加密防護效果分析
面臨風險 |
應對策略 |
數據庫文件采用明文存儲 |
以列為單位有選擇的進行加密,將信用卡信息表中的姓名、身份證、信用卡等敏感信息加密存儲。 |
面臨風險 |
應對策略 |
數據庫正常運維操作和敏感數據訪問操作從權限上無法分開。 |
通過獨立權控體系;通過三權分立的方式提升安全性;避免數據庫維護人員直接接觸明文數據 |
面臨風險 |
應對策略 |
繞過應用服務器的訪問。 |
通過客戶端權限區分合法訪問源,可對訪問源的IP,訪問時間進行鑒別,只有通過合法訪問源才可以訪問到數據。 |
面臨風險 |
應對策略 |
繞過應用程序的訪問。 |
通過應用綁定技術實現應用身份鑒別。 只有通過合法應用,才可以訪問到被保護的敏感數據。 |
面臨風險 |
應對策略 |
數據庫備份明文存儲。 |
對數據庫文件底層直接加密,數據庫備份文件導出后內容仍為密文,備份文件還原后仍為密文。 |
數據庫加密防護總結:
4、 結論:SQL注入如何防護
卡爾的SQL注入攻擊就是利用合法應用的弱點獲取信息卡資料的,即使數據庫信用卡信息加密了,從存儲文件上看是密文,但是對于合法應用發過來的查詢語句,數據庫也必然解密后將明文數據發回web應用系統。
數據庫安全專家安華金和建議通過WAF和數據庫防火墻相結合來實現SQL注入的有效防護。WAF通過黑名單機制針對有SQL注入特征的表單內容進行攔截,數據庫防火墻通過構建合法應用的行為模型和SQL注入特征庫實現SQL注入行為的有效攔截,同時還能夠對運維終端的惡意操作進行攔截。