在數據庫面臨的安全威脅中,來自外部的安全攻擊,除利用數據庫自身的安全漏洞進行漏洞攻擊之外,另一種比較常見的方式就是SQL 注入攻擊。目前很多用戶存在誤區(qū):認為傳統(tǒng)部署的WAF可以防御此類攻擊,實則不然。這里我們簡單分析一下方SQL注入攻擊的技術原理。
實際上WAF無法對各種SQL注入的繞過手段進行窮舉;因此WAF提供了各種擴展,以幫助用戶根據實際情況進行規(guī)則擴展,以應對各種新的攻擊,不如黑名單策略;但大量的規(guī)則將使WAF的性能大幅下降,進而影響整個系統(tǒng)的性能;同時可能還會造成某些誤殺。
因此更有效的方法是在WEB應用和數據庫之間加入數據庫防火墻。數據庫防火墻對從WEB應用發(fā)向數據庫的SQL語句進行語法解析,對符合SQL注入特征的攻擊行為進行告警和阻斷。
下面是加入了防火墻后的拓撲架構:
數據庫防火墻的防護策略、手段都是基于SQL協(xié)議解析而來;數據庫防火墻在防止SQL注入上徹底的解決了WAF以犧牲性能為代價的方式。數據庫防火墻和WAF配合使用的部署方式,將會使用戶的核心數據更加安全。
數據庫防火墻對SQL注入的防止,核心優(yōu)勢的之一在于它的部署位置,部署位置在應用服務器之后。無論攻擊者采用了什么方式進行SQL注入攻擊行為的包裝,最終發(fā)送到數據庫端的都是純凈的SQL語句。
數據庫防火墻的核心優(yōu)勢之二,它是通過SQL語法解析技術而不是正則匹配技術進行SQL注入防御。通過SQL語法解析技術的性能更高,準確度更高。
數據庫防火墻的核心優(yōu)勢之三,它具備綜合防御的手段,以幫助即使被注入后的安全損失降到最低點。
數據庫防火墻可以并通過以下四點實現整體的安全防護:
1.判斷語句是否含有明顯的SQL注入特征,有則阻止
2.語句的高危命令被發(fā)現,進行告警或阻斷
3.語句訪問的對象是否屬于該用戶訪問權限,若無則阻斷
4.限制語句的返回行數,超過返回行則阻斷
加入數據庫防火墻后,數據庫防火墻會在數據庫之間獲取WEB應用發(fā)送給數據庫的SQL語句。通過拿到的SQL語句,按照不同數據庫進行SQL協(xié)議解析。
通過協(xié)議解析把應用發(fā)送的SQL語句還原成標準模式(去掉各種加入的符號,轉譯碼等),攻擊者曾經使用的可繞闊WAF的手法,在這里都將被干掉,將變?yōu)楦蛹儍舻腟QL語句。
基于這些純凈的SQL語句,與預定義的SQL注入特征進行匹配,如:
· 常量表達式和注釋的組合
· 常量表達式和Union的組合
· 帶外函數的調用
· 拼接字符與or的組合
· 常用注入SQL函數等
除了SQL注入的特征的匹配外,一些高危的命令將被告警或阻斷,如truncate、drop、delete nowhere、insert nowhere等高危操作進行阻斷;防止攻擊行為造成大的災害事故。
同時,可以對應用發(fā)來的SQL語句,進行操作和對象的細粒度權限控制,可以防止應用訪問一些敏感表;比如防止對SQL注入偵察階段常用的系統(tǒng)表的訪問。
即便有SQL注入被發(fā)送到數據庫端,數據庫防火墻也會通過行數控制來進一步限制數據庫每次的返回結果行數,對于大批量的數據返回將進行阻斷,比如我們可以將某些敏感表的返回行數設定為不允許超過100,從而把損失減到最小。
綜上,通過數據庫防火墻無疑比WAF對SQL注入的防止更加徹底,能夠真正防御SQL注入攻擊帶來的數據庫安全威脅。