針對Web威脅的迅猛發展,幻想硬件、操作系統、服務、應用程序提供商提供沒有漏洞的系統,顯然是不現實的,因此需要在網絡邊界和服務器前增加安全控制設備,或者在服務器系統上部署軟件來防御各種攻擊。
SQL注入的檢測
作為排在 Web 威脅前列的SQL 注入攻擊,在傳統的安全產業界的主要識別和防御方法有基于特征的關鍵字匹配技術和基于異常檢測技術。
基于特征的關鍵字匹配技術是目前業界使用的主流方法,基本原理是抽取SQL注入過程中都會出現的特殊字符(例如:’ – #等)和關鍵字(例如:’SELECT、UNION等)作為檢測SQL注入的依據。例如Snort中,以如下方式定義一個SQL 注入:
alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS
$HTTP_PORTS ( msg:"SQL Injection Paranoid"; flow:to_server,established;
uricontent:".pl";pcre:"/(\%27)|(\’)|(\-\-)|(%23)|(#)/i";
classtype:Web-application-attack; sid:9099; rev:5;)
|
由于該方法是檢測特定的字符和該字符的某一種編碼方式,因此黑客可以利用其它的編碼方式或者不同的關鍵字來進行攻擊,系統將會形成漏報。在另一方面,由于這種機械地檢測特定字符,也很容易形成誤報。
與基于特征的關鍵字匹配技術對應的是基于異常檢測技術。該技術主要分為學習期和檢測期。在學習期,需要干凈的網絡數據,檢測系統為Web應用程序自動建立各參數的正常使用模型(URL/COOKIE),待學習充分后,才能進入檢測期。在檢測期,系統利用學習期形成的模型對網絡數據進行分析。
基于異常檢測技術能夠發現一些異常,但其缺陷也顯而易見:需要一定的學習期才能投入使用,而且一段業務模型發生變化,就需要重新學習。更為重要的是異常未必就是攻擊。
在學術界,針對SQL注入,同樣有兩個重要的研究方向基于正常行為模型的AMNESIA和基于數字簽名技術的SQLRand 方法。
AMNESIA的核心思想為靜態分析、動態監控。靜態分析是找到源碼中所有動態SQL語句的構造點,并為這些動態SQL語句建立自動機模型,同時在原系統中插入監測代碼,動態監控是控提交的SQL語句是否滿足自動機模型,如果滿足則是正常的操作,否則,就認為發生了SQL注入攻擊。其原理如圖所示:
![]() |
該方法的主要弱點是需要能夠獲得應用程序的源代碼,并且需要修改源代碼。
基于數字簽名技術的SQLRand方法是開始時,對源代碼中包含動態SQL語句的模版中的關鍵字進行隨機化編碼處理,這些編碼規則黑客無法預知。在運行時,對隨機化編碼之后的SQL命令進行解碼,如果解碼失敗則表示遭受到了SQL注入攻擊。例如:
動態SQL命令模版:
select * from users where name = %name
編碼后動態SQL命令:
select123 * from123 users
where123 name = ‘Mike’ OR 1=1
![]() |
該方法的主要弱點是需要擁有源代碼和修改源碼,同時需要改變原有業務系統的部署,方案復雜。
| 共3頁: 1 [2] [3] 下一頁 | |||||
|




