针对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] 下一页 | |||||
|