网站地图    收藏   

主页 > 后端 > 网站安全 >

Web攻击汇总及攻击方式整理(2)-SQL注入攻击(SQL I

来源:自学PHP网    时间:2015-04-17 13:03 作者: 阅读:

[导读] SQL注入攻击(SQL Injection)背景知识什么是SQL注入SQL注入:利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,这是SQL注入的标准释义。随着B/S模式被广泛的应用,用这...

SQL注入攻击(SQL Injection)

背景知识

 

什么是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注入防御

 

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注入攻击作为深层威胁的一种,已经越来越多地受到用户的关注,如何准确、及时的判断并防御这种危害极大的深层攻击行为,是入侵防御系统责无旁贷的责任。这就要求入侵防御系统本身提供对这种无固定表现形式、种类繁多的攻击行为的准确检测。

天清入侵防御系统依托于启明星辰的强大入侵分析检测能力,对各种深层的攻击行为都有着优异的检测能力。特别的,对SQL注入这种攻击行为,更采用了专利技术算法,是当前对各种SQL注入变种/变形进行精确防御达到国际先进水平的入侵防御产品

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论