背景知识
什么是SQL注入
SQL注入:利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,这是SQL注入的标准释义。
随着B/S模式被广泛的应用,用这种模式编写应用程序的程序员也越来越多,但由于开发人员的水平和经验参差不齐,相当一部分的开发人员在编写代码的时候,没有对用户的输入数据或者是页面中所携带的信息(如Cookie)进行必要的合法性判断,导致了攻击者可以提交一段数据库查询代码,根据程序返回的结果,获得一些他想得到的数据。
SQL注入利用的是正常的HTTP服务端口,表面上看来和正常的web访问没有区别,隐蔽性极强,不易被发现。
SQL注入的危害和现状
SQL注入的主要危害包括:
未经授权状况下操作数据库中的数据
恶意篡改网页内容
私自添加系统帐号或者是数据库使用者帐号
网页挂木马
据赛门铁克2006年3月的互联网安全威胁报告(第九期)显示:
目前有近70%的攻击行为是基于WEB应用,而据CVE的2006年度统计数据显示,SQL注入攻击漏洞呈逐年上升的状态,2006年更是达到了惊人的1078个,而这些还仅限于通用应用程序的漏洞,不包括更为庞大的专业web应用程序所存在的漏洞。
而针对SQL注入漏洞的各种攻击工具和攻击教程更是层出不穷,掌握1~2种攻击工具的script guy(脚本小子)就可以轻易的攻破网络数据库的防线:篡改数据、获得权限……
SQL注入的学术界研究成果
基于正常行为模型的AMNESIA
该算法的核心思想是通过事前找到源码中所有动态SQL语句的构造点,并为这些SQL语句建立自动机模型(Profiler)。在程序运行时监控提交的SQL语句是否满足Profiler,如果满足则是正常的操作,否则,就认为发生了SQL注入攻击。
这种分析方法需要能够获得应用程序的源代码,并且需要修改源代码,是一种侵入性的模型(源代码补丁方式)
其实现过程如下图所示:
基于数字签名技术的SQLRand
该算法的主要思想是:对源代码中包含动态SQL语句的模版中的关键字进行随机化编码处理,这些编码规则黑客无法预知。运行时,对随机化编码之后的SQL命令进行解码,如果解码失败则表示遭受到了SQL注入攻击。
如一个正常的SQL语句:select * from users where name = %name
其中的select / from / where都是我们所说的关键字,所有SQL语句在提交web server时,都将进行随机化的编码,一个可能的SQL注入语句经过随机化编码后可能是:select123 * from123 users where123 name = ‘Mike’ OR 1=1,(标红的部分是攻击者提交的构造代码),由于OR 1=1是攻击者构造的数据,不会经过系统自身随机化的编码,所以待提交数据库的前置proxy进行解析时,对OR这个关键字将得不到正常结果,由此可以判断攻击发生。
这种方法的缺点和上面的一样,都是基于源码级别的修改,需要拥有和修改程序的源代码,是一种侵入式的解决方案,并且从上面的架构图中我们可以看到,这种解决方案的部署较为复杂。
SQL注入的产业界研究成果
基于Signature的关键字匹配技术
这是一种在产业界常见的解决方案,著名的免费软件SNORT就是采用的这种解决方案。该方案的技术出现点是:首先抽取SQL注入过程中都会出现的特殊字符(例如:’ – #等),抽取SQL注入过程经常会出现的SQL关键字(例如:’SELECT、UNION等)作为检测SQL注入的依据。利用上述步骤中提取的特征构建SQL注入特征库,通过传统的模式匹配的方式进行检测。
一个典型的snort规则:
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;)
中间标红的字段就是检测数据包中是否含有\ - --等特殊字符。以此来判断是否产生了SQL注入攻击。
很显然这种方法有着极高的漏报和误报率,比如在USER字段提交Select,将会被认作攻击行为。并且做了编码转换或函数转换或者是关键字跨域之后,攻击者很容易躲避机械地匹配字符串方式的检测。
基于异常检测技术的Web-FireWall
WEB-FireWall是由IMPERVA公司提供的SQL检测产品,其核心思想是通过学习期的训练,为Web应用程序自动建立各参数的正常使用模型(URL/COOKIE)。在此后的检测过程中依据此模型来判断实际网络中的各种行为是否异常。
这种方法的优势在于能够不受限制的发现各种异常行为。但异常并不意味着攻击,其误报率相对来说较高。而且由于需要一个学习期间,在此期间需要一个非常“干净”的数据来训练,而且一旦内部的业务模型发生了变化,这个学习过程又需要重新进行。
天清入侵防御系统中的SQL注入防御
启明星辰公司自主研发的天清入侵防御系统,采用了专利技术的VSID(Venus SQL Injection Detection Algorithm )算法,对SQL注入攻击有显著的效果。
VSID算法是一种基于SQL注入攻击手法的检测算法,为各种SQL注入方法建立具备行为共性的检测模型。使用轻型虚拟机预分析技术对提交的URL、Cookie、Post Form进行进一步分析,判断这些提交信息中是否含有SQL注入攻击的企图。
其核心内容是首先收集、分析各种可能的SQL注入攻击方法,并提取出相应的有针对性的攻击机理。为这些SQL攻击方法建立SQL注入检测模型,所有的的这些检测虚拟机模型,就叫做VSID算法误用检测模型。根据这些虚拟机检测来自URL\COOKIE\ POST-Form中的各参数域值是否符合SQL注入模型,如果符合则表示发生了SQL注入攻击。
上图描述的就是天清入侵防御系统SQL注入检测流程图。
VSID算法是一种将规则分析(建立虚拟机检测规则的过程)和异常分析(符合SQL注入模型的,就是SQL注入攻击)相结合的技术,是天清入侵防御系统柔性化检测的又一体现。
在漏报率和误报率方面,都远低于现有产业界和学术界的研究成果,并且作为产品化了的技术,部署和实现方面也有其他方法所不能比拟的优势。
此外,我们还进行了大量的SQL注入攻击渗透测试(使用工具,渗透测试人员手动攻击),天清入侵防御系统对绝大部分的SQL攻击都可以实现实时的防御阻断。另外,在和其他友商的对比竞测中,天清IPS也体现出了强大的优势。
综论
SQL注入攻击作为深层威胁的一种,已经越来越多地受到用户的关注,如何准确、及时的判断并防御这种危害极大的深层攻击行为,是入侵防御系统责无旁贷的责任。这就要求入侵防御系统本身提供对这种无固定表现形式、种类繁多的攻击行为的准确检测。
天清入侵防御系统依托于启明星辰的强大入侵分析检测能力,对各种深层的攻击行为都有着优异的检测能力。特别的,对SQL注入这种攻击行为,更采用了专利技术算法,是当前对各种SQL注入变种/变形进行精确防御达到国际先进水平的入侵防御产品。