Selection Condition Tree Approach to the Detection and Prevention of SQL Injection Attacks

来源 :中南大学 | 被引量 : 0次 | 上传用户:o8o8kid
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
在众多的Web应用安全威胁中,注入漏洞一直扮演着重要的角色。该类漏洞往往是应用程序缺少对输入数据的合法性检查引起的,攻击者把包含恶意指令的数据发送给应用程序解释器,解释器便会把收到的数据直接转换成指令执行。常见的注入包括SQL注入,OS Shell,LDAP,Xpath,Hibernate等等,攻击所造成的后果往往比较严重。其中SQL注入尤为常见,危害也最为严重,通过SQL注入攻击可以窃取或者篡改整个数据库的信息,甚至能够获得管理员级别的访问权限。命令注入利用了Web应用脚本可与操作系统交互的特点,通过注入操作系统级API获得服务器控制权限。   在SQL注入攻击过程中,攻击者总是试图向原先的SQL语句中插入精心构造的内容来修改最终提交给后端数据库的SQL查询。SQL(Structured Query Language,结构化查询语言)是专为数据库设计的解释型语言,可用于读取、更新、增加或者删除数据库中保存的信息。在Web应用程序中,SQL语言解释器处理的数据实际上是由程序员编写的代码和用户提交的数据共同组成的,攻击者可以提交专门设计的输入向应用程序发起攻击,这些输入通常是在应用程序看来具有特殊意义的SQL语言句法。如果Web应用程序中存在漏洞,即开发人员编写的代码没有对数据库操作相关的用户输入做合法性检查,那么应用程序便会按照攻击者的意图执行。因此,攻击者可以利用这一漏洞完全攻破目标Web应用程序的数据库组件,通过注入恶意SQL语句窃取数据库中的重要信息甚至获取对数据库服务器的完全控制。   本文列举了相关的SQL注入攻击检测工作。Yuji Kosuga,Kenji Kono和Miyuki Hanaoka在他们的文章中设计了Sania这样一个用于检测SQL注入攻击的工具。首先,Web应用开发者向应用程序发送正常的HTTP请求,Sania可以捕获到该HTTP请求产生的从应用程序到数据库之间的SQL查询,并且通过分析该SQL查询的语法和语义,确定它可能被注入攻击的脆弱点。然后,Sania针对这些脆弱点向目标Web应用发送精心构造的SQL注入攻击查询。最后Sania会检查这些攻击查询是否会成功。把SQL查询解析成一个树状结构,这样通过比较正常的SQL查询树与攻击后的SQL查询树是否一致就可以判断出攻击是否成功。如果两棵SQL查询树不一致,那么Sania就成功发现一个注入点。   Lambert N和Kang Song Lin在他们的文章中认为,要实施SQL注入攻击,攻击者需要加入额外的空格或单引号或者双连字符来改变原来SQL查询的结构。针对这一特点,将原先正常的SQL查询以这几种符号作为分隔符划分到一个字符串数组之中,把接收过用户输入的SQL查询也做同样的处理,然后比较两个字符串数组的长度,如果两者不一致,则认为原始SQL查询结构被改变,注入攻击已发生。   Nikita Patel,Fahim Mohammed和Santosh Soni提到了可以通过在页面事先给用户的输入提供可选项而不是让用户直接输入来避免SQL注入攻击的发生。   上述方法都存在一定程度的缺陷。Sania是针对整个SQL语句构造查询树来进行比较而不是针对SQL查询的WHERE部分,这使得检测的过程消耗了更多的资源。而通过使用分隔符来划分数组的方式容易存在大量误判,因为一旦正常的内容中包含这些分隔符,这种方式就不好处理。让用户使用预订的页面输入内容会极大的影响用户体验,并且降低Web应用程度的功能性。   关系理论中包含了三个重要的概念:投影,选择和连接。而SQL语言是实现关系理论的一种工具。连接指的是在一个查询中表之间的交互。这部分是由程序员在应用程序中已经预定义好了的。它并不会暴露给终端用户,所以它是非注入的部分。投影反应在对数据库中的视图及表格的中数据列的选择上,它也是非注入的部分。选择指的是对一个关系(表)的元组或选定的行限制。通常并不需要从一个表中获取到其所有的行。一个表中可能包含许多行,相对于让其返回所有的行,选择提供了一种限制返回行数目的方式。这部分以通过要求用户提供选择标准的形式暴露在终端用户面前。选择标准在某种程度上是由程序员定义的。当选择是完全由程序员定义的时候它是不可以被注入的,然而当它是被程序员部分定义的时候,黑客可以通过操作WHERE子句来利用未被定义的部分实施攻击。   通过研究,我们发现注入攻击一般发生在选择部分,即一般是修改原有查询的WHERE子句,而不是投影和连接部分。针对SQL注入攻击发生选择部分的事实,本文提出了一种基于选择条件解析树的检测与防护SQL注入攻击的方法。通过将SQL语句的WHERE子句部分分离出来,并按照操作符的优先级关系将其解析成一个树结构。在应用程序中,事先记录一棵由正确查询内容生成的树结构,在每次应用程序接收到来自用户的输入的时候,对由此生成的查询进行解析,将它的WHERE子句部分解析成一棵选择条件树,并且与事先具有正确查询内容的树进行结构比较。在比较的时候,通过遍历正常查询中的SQL查询树以及遭受注入攻击之后的SQL查询树,如果产生的遍历序列不一致,就说明存在SQL注入攻击此后用户将得到一个存在SQL注入攻击的警告,包含注入内容的请求未被提交到数据库执行。   本文给出了一个容易在Web应用程序之中实现的解决方案。在该方案中,本文基于MVC架构创建了一个Web应用程序。在该Web应用程序中,本文应用了针对查询中的WHERE子句构建选择条件树进行SQL注入检测的方法。实验表明,该方法可以有效的检测出针对该Web应用程序的SQL注入攻击行为,同时包含注入内容的请求未被提交到数据库执行。
其他文献
IETF在移动IPv6(MIPv6)的基础上针对移动节点在小范围内快速移动提出了一种改进技术,即层次化移动IPv6(HMIPv6)技术。它通过引入移动锚点(MAP),对网络进行了层次化划分,使移
尽管Web应用框架已经出现了较长的时间,但它在安全性方面还存在许多缺陷,其中适合业务型的Web框架更是很少被人提及,原因在于业务型系统的繁琐和业务过程的变化。针对于这一
空间最近邻居节点查询是空间数据库中的常用的应用技术,在近10年中吸引了大量研究者们在该领域进行研究和探索。其专注于解决一系列关于空间对象的查询和维护问题,为用户提供各
目的 通过对人工耳蜗植入者行为测听阈值和电诱发听性脑干反应(electrical evoked auditory brainstem response,EABR)阈值相关性比较,探讨用EABR波V阈值进行术后调试的可行
智能交通系统是目前世界交通领域的前沿研究课题,车辆牌照识别系统作为智能交通系统的重要组成部分,在现代交通管理中起着重要的作用。可以说车牌字符识别是模式识别中一个非
迁移工作流是近年来工作流管理研究的一个新方向,该方法采用移动agent技术实现,为工作流管理提供了对非中心化、松耦合特性的支持,迁移工作流包括迁移工作流引擎、工作位置和