資料庫防火牆如何防範SQL注入行為

2022-07-08 03:15:12 字數 4112 閱讀 9849

sql注入是當前針對資料庫安全進行外部攻擊的一種常見手段。現有主流應用大多基於b/s架構開發,sql注入的攻擊方式正是利用web層和通訊層的缺陷對資料庫進行外部惡意攻擊。將sql命令巧妙的插入通訊的互動過程中,如:web表單的遞交、網域名稱輸入、頁面請求等。通過硬性植入的查詢語句攻擊資料庫,以期利用伺服器自身缺陷執行惡意的sql命令,從而入侵資料庫。因此通過sql注入攻擊方式產生的安全事件也在增多,對系統的危害性極大。

通過sql注入可以遠端獲取並利用應用裡的資料,並且獲取未經hashed加密的使用者秘鑰以及信用卡資訊,甚至有以管理員身份登陸進這些應用的可能。下面通過一組常見的sql注入攻擊方式,進行說明:

首先,我們假設資料庫中有job表,模擬進行攻擊,查詢表中資料量。

然後,應用中呼叫惡意的攻擊性url向job表植入sql語句:

那麼,攻擊時等效的sql語句如下:

select job_id, job_desc, min_lvl, max_lvl

fromjobs

where job_id=』1』or 1=(select count(*) from jobs) –『

如果sql注入的假設錯誤,web頁面如圖一:

圖一如果sql注入的假設成功,web介面如圖二:

圖二攻擊說明:如果sql注入的假設成功,即證明了資料庫中該表的表名是jobs,從而我們也就可以對該錶進行增刪改操作,從而對資料庫安全造成極其嚴重的危害。

sql注入的8種攻擊行為

安全界有句名言「未知攻,焉知防」,想要預防sql注入,需要進一步剖析sql注入都有哪些常見攻擊方式。

猜測資料庫名,備份資料庫

猜解欄位名稱

遍歷系統的目錄結構,分析結構並發現web虛擬目錄,植入木馬

查詢當前使用者的資料庫許可權

設定新的資料庫帳戶提權得到資料庫管理員賬戶許可權

利用儲存過程獲取作業系統管理員賬戶

客戶端指令碼攻擊:通過正常的輸入提交方式將惡意指令碼提交到資料庫中,當其他使用者瀏覽此內容時就會受到惡意指令碼的攻擊。

客戶端指令碼攻擊:通過sql注入方式將惡意指令碼提交到資料庫中,直接使用sql語法update資料庫,並將注入sql經過「hex編碼」,然後通過exec執行「動態」sql的特性執行指令碼。

綜上可知,sql注入對資料庫的攻擊方式日趨繁多,危害也日益嚴重,因此如何做好sql注入的防護工作也就變成考量資料庫安全產品的一道標桿。

sql注入的5種防護方式

常規的sql注入防護方式,包括以下幾個方面

通過正則表達校驗使用者輸入

通過引數化儲存過程進行資料查詢訪問

引數化sql語句

為資料庫新增新架構

利用linq to sql查詢

針對以上sql 5種注入防護方式,可以在一定程度上避免sql注入對資料庫所帶來的入侵危害,但這些操作同步會使資料庫操作複雜化,在一定程度上提高了企業運維成本,同時降低資料庫操作效能。因此,一種專門針對資料庫防護類產品——資料庫防火牆誕生,可以針對sql注入攻擊行為進行主動有效的防護。

資料庫防火牆如何防禦sql注入

資料庫防火牆作為專業的資料庫安全防護工具,而針對sql注入等資料庫攻擊行為的防護能力如何,是衡量一款資料庫防火牆產品優略的關鍵要素。

目前國內資料庫安全的專業廠商安華金和,自主研發推出資料庫防火牆(dbfirewall)產品基於對資料庫協議的精準解析,對sql注入行為的分析更加精確,極大程度上避免了對sql注入攻擊行為的漏防與誤防。

sql注入的概念來自於web系統,資料庫防火牆在防止sql注入時,針對已經形成且即將到達資料庫的完整sql,監測是否有非法的操作,並有效阻止針對於資料庫的非法入侵行為。

圖三:dbfirewallsql注入攻擊防護引擎

dbfirewall對於sql注入行為的識別,可以分為以下三種:

通過傳送意外資料來觸發異常,利用獲取資料的get操作,變更資訊的post操作,結合資料庫異常資訊,從而判斷注入是否發生。

例如:

www.abc/show.php?category=bikes

www.abc/show.php?category=bik』』es

如果以上兩句的執行結果相同,則可能存在sql注入。

利用應用程式試探。如果應用程式沒有對資料庫伺服器返回的錯誤資訊進行處理,那麼資料庫的錯誤資訊將直接反饋到前台,通過這些錯誤資訊,不但可以識別出sql注入的漏洞所在,甚至可能逐步探測出資料庫表資訊。

根據應用響應時間判斷

通過上述幾種方式可以初步判斷sql注入行為的產生,但是為了提高準確性,安華金和資料庫防火牆具有獨特的設計流程,通過構建一條有效的sql語句,幫助使用者確認sql注入行為:

1) sql語句中區分數值型別和字串型別

2) 驗證注入sql**時,是否是通過注釋剩下的查詢來成功結束該語句。

3) 當web應用程式未顯示任何錯誤時,資料庫注入時間延遲。

可以檢測伺服器響應來確定注入

安華金和資料庫防火牆基於對sql注入的各種攻擊行為,進行有針對性的資料庫防護,從而形成更加完備的防護體系。下面列舉幾種常見的sql注入攻擊行為做分析說明,並具體描述一下dbfirewall是如何進行防護的。

1)sql注入識別資料庫

攻擊方法一:通過獲取資料庫異常資訊,資料庫版本資訊的方式進行sql注入攻擊

防禦方法:利用dbfw的配置錯誤替換規則,對常見的錯誤資訊進行替換

攻擊方法二:獲取版本資訊

select banner fromv$version或

select banner fromv$version where rownum=1

防控方法:採用風險評估中的系統表控制規則,或者通過訪問控制許可權中,對不同的使用者控制對系統表的訪問許可權。

2)利用union語句提取資料

如果應用返回第乙個(原始)查詢得到的資料,那麼通過在第乙個查詢後面注入乙個union運算子,並新增另外藝哥任意查詢,便可以讀取到資料庫使用者訪問過的任何一張表。

攻擊方法:多次使用各種資料型別替換null,直到系統不再報錯為止,例如

selectusername,passwordfrom admin union select 『test』,』test』 from dual

如果測試成功,可以替換為:

selectusername,passwordfrom admin union select user, 』test』 from dual

獲得系統資訊

防控方法:開啟dbfw的風險評估union評測,以及系統表的評測

3)利用條件語句

攻擊方法一:基於時間

對於oracle來說,可以使用sleep,或者utl_http、httpuritype向乙個死的ip位址傳送乙個http請求來實現相同的效果。如果指定乙個不存在監聽者的ip位址,那麼下列查詢將一直等待連線知道超時:

防控方法:開啟風險評估裡的暴力破解函式。

攻擊方法二:基於字串轉換

對於傳入引數是字串的,可以用char函式轉化其中乙個字元,根基返回的結果可以實現sql注入。

例如:

select * from productswhere brand=』ac』+char(108+(case when system_user=』sa』 then else 0 end))+』e』

防控方法:將char作為暴力破解函式。

4)提權行為

在oracle中,通過web應用的sql注入來提公升許可權非常困難。大多數許可權提公升方法均需要pl/sql注入,而這種注入很少見。如果找到一種pl/sql注入漏洞,可以通過注入pl/sql**來提公升許可權或在資料庫伺服器上啟動操作。

不需要pl/sql注入的例子是:使用在oracle的mod_plsql元件中發現的乙個漏洞。

防控方法:使用訪問控制或者風險評估,加入使用者許可權控制或高危操作

除了上述幾種常見的sql注入行為之外,dbfw內建可防護的sql注入攻擊行為還包括:竊取hash口令、利用作業系統攻擊等。並且可以根據:風險級別、告警通知、sql命令、命令特徵、風險函式、表示式、型別、操作人、操作等幾項元素自定義sql注入防護規則。

資料庫防火牆 資料庫防火牆的阻斷方式

01 行為阻斷 行為阻斷是資料庫防火牆的自然工作方式。當檢測到入侵行為的時候,阻斷該行為的操作。行為阻斷依據響應偏好的不同,可以工作在不同模式之下。模式一 錯誤響應模式 阻斷操作之後,返回預先定義的錯誤資訊,使應用程式可以構造合理的錯誤響應。錯誤響應模式的好處在於可以讓應用程式檢測到入侵發生,並響應...

繞過智創防火牆,SQL注入phpweb

今天 xiaoliumang發來乙個phpweb的站,然後就一起看了下。phpweb有注入漏洞的,之前說過。先加些語句看了下,可見有注入,而且可以報錯。雖然sql語句中我們提交的單引號變成了 27,但不要緊這是瀏覽器的事,待會用 直接提交就行了。然後直接上利用語句 116 and select 1 ...

資料庫防火牆 資料庫防火牆商業化的前提條件

資料庫防火牆和一般的傳統資料庫安全裝置不同,它部署在應用伺服器和資料庫伺服器之間。業務系統巨大的流量將穿越資料庫防火牆,資料庫防火牆任何的風吹草動都會影響業務系統的正常執行。資料庫防火牆投放市場之前,不管資料庫防火牆功能的多寡,都必須解決兩個基本問題 效能和可靠性。效能主要考慮兩方面的影響 延遲和併...