您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > SQL注入攻击漏洞研究与防范措施论文
第5期辽宁省电子信息产品监督检验院年度论文2009年1月-1-SQL注入攻击漏洞研究与防范措施StructuredQueryLanguageInjectionLeakStudyAndDefenseMeasure姜志坤摘要:在当今的数字世界中,人们发现在维持公开的Internet连接的同时,保护网络和计算机系统的安全变得越来越困难。病毒、木马、后门、蠕虫等攻击层出不穷,虚假网站的钓鱼行为也让警惕性不高的公众深受其害。为了减轻信息泄露及系统被攻击带来的风险,企业和机构开始对自己的系统进行渗透测试,找出其中存在的漏洞和薄弱环节。本文通过对目前最流行的SQL注入攻击漏洞的攻击方法做了逐一的分析,并提出了检测和防范的措施。关键字:SQL注入攻击脚本攻击网络安全攻击防范模型有害代码SQL注入(SQLInjection)攻击是目前网上最流行最热门的黑客脚本攻击方法之一,那什么是SQL注入式攻击呢?它是指黑客利用一些Web应用程序(论坛、留言本、文章发布系统)中某些疏于防范的用户可以提交或修改的数据的页面,精心构造SQL语句,把特殊的SQL指令语句插入到系统实际SQL语句中并执行它,以获得用户名、密码等敏感信息,从而达到获取主机控制权限的攻击方法。1.SQL注入攻击原理1.1SQL注入攻击实现原理结构化查询语言(SQL)是一种用来和数据库交互的文本语言,SQLInjection就是利用某些数据库的外部接口把用户数据插入到实际的数据库操作语言当中,从而达到入侵数据库乃至操作系统的目的。它的产生主要是由于程序对用户输入的数据没有进行细致的过滤,导致非法数据的导入查询。SQL注入攻击主要是通过构建特殊的输入,这些输入往往是SQL语法中的一些组合,这些输入将作为参数传入Web应用程序,通过执行SQL语句而执行入侵者想要的操作,下面以登录验证中的模块为例,说明SQL注入攻击的实现方法。第5期辽宁省电子信息产品监督检验院年度论文2009年1月-2-在Web应用程序的登录验证程序中,一般有用户名(username)和密码(password)两个参数,程序会通过用户所提交输入的用户名和密码来执行授权操作。其原理是通过查找user表中的用户名(username)和密码(password)的结果来进行授权访问,典型的SQL查询语句为:Select*fromuserswhereusername=′admin′andpassword=′smith′如果分别给username和password赋值“admin'or1=1--”和“aaa”。那么,SQL脚本解释器中的上述语句就会变为:select*fromuserswhereusername=′admin′or1=1--andpassword=′aaa′该语句中进行了两个判断,只要一个条件成立,则就会执行成功,而1=1在逻辑判断上是恒成立的,后面的“--”表示注释,即后面所有的语句为注释语句。同理通过在输入参数中构建SQL语法还可以删除数据库中的表,查询、插入和更新数据库中的数据等危险操作:(1)droptableauthors—如果存在authors表则删除。(2)unionselectsum(username)fromusers—从users表中查询出username的个数。(3)insertintousersvalues(666,′attacker′,′foobar′,0xffff)—在user表中插入值。(4)unionselect@@version,1,1,1--查询数据库的版本。(5)execmaster.xp_cmdshell′dir′通过xp_cmdshell来执行dir命令。1.2SQL注入攻击分析SQL注入可以说是一种漏洞,也可以说是一种攻击。当程序中的变量处理不当,对用户提交的数据过滤不足,都可能产生这个漏洞。它的攻击原理就是利用用户提交或可修改的数据,把想要的SQL语句插入到系统实际SQL语句中,轻则获得敏感的信息,重则控制服务器。例如Web应用有一个登录页面,这个登录页面控制着用户是否有权访问应用,要求用户输入一个名称和密码。攻击者在用户名字和密码输入框中输入1'or'1'='1之类的内容。该内容提交给服务器之后,服务器运行上面的代码构造出查询用户的SQL命令,但由于攻击者输入的内容非常特殊,所以最后得到的SQL命令变成:“select*fromuserswhereusername=''or'1'='1'andpassword=''or'1'='1'”。第5期辽宁省电子信息产品监督检验院年度论文2009年1月-3-服务器执行查询或存储过程,将用户输入的身份信息和服务器中保存的身份信息进行对比,由于SQL命令实际上已被注入式攻击修改,已经不能真正验证用户身份,所以系统会错误地授权给攻击者。SQL注入是通过目标服务器的80端口进行的,这和普通的Web页面访问没什么两样,所以一般的防火墙不会对这种攻击发出警告或拦截。这种攻击可能引起的危害取决于该网站的软件环境和配置。当Web服务器以操作员的身份访问数据库时,利用SQL注入攻击就可能删除所有表格,创建新表格。而当管理员以超级用户的身份访问数据库时,利用SQL注入攻击就可能控制整个SQL服务器,在某些配置下攻击者甚至可以自行创建用户账号以完全操作数据库所在的服务器。SQL注入的方法很多,而且在攻击时会碰到各种各样的SQL语句,所以一般攻击者需要丰富的经验和耐心,才能绕过一些检测和处理提交构造的SQL语句,从而获得想要的有用信息。这个过程需要花费很多的时间,如果仅以这种手动方式进行SQL注入攻击的话,许多存在SQL注入漏洞的ASP网站会安全很多了,不是漏洞不存在了,而是利用这个漏洞入侵的成本太高了。但现在攻击者可用一些现成的黑客工具来辅助SQL注入攻击,加快入侵的速度。由于SQL注入攻击利用的是SQL语法,使得这种攻击具有广泛性。理论上说,对于所有基于SQL语言标准的数据库软件都是有效的,包括MSSQLServer,Oracle,DB2,Sybase,MySQL等。当然,各种软件有自身的特点,最终的攻击代码可能不尽相同。1.3SQL注入攻击过程(1)绕过身份认证机制一个登录界面,需要输入用户名和密码,然后Post到另一个页面,进行身份认证,因此攻击者只需在用户名和密码的输入框中都输入’or’1’=’1的内容,那么攻击者就可以不经过任何认证而直接进入下一个页面,并拥有和正常登录用户一样的全部特权。原因是什么呢?我们比较一下正常用户登录和攻击者登录时的两种SQL语句:1)正常用户(用户名为grace,密码为1111):SQL=select3fromadminwhereusername=’grace’andpassword=’1111’2)攻击者(用户名和密码都为’or’1’=’1):SQL=select3fromadminwhereusername=’’or’1’=’1’andpassword=’’or’1’=’1’第5期辽宁省电子信息产品监督检验院年度论文2009年1月-4-可以看到由and连接的两个条件都被一个永远成立的’1’=’1’所代替,执行的结果为真,因此服务器也会认为条件成立,于是把login标志设为true,让攻击者以合法身份登录进入下一个页面。(2)对数据库系统进行读取、插入、修改等操作如一个商品查询页面findproduct.asp?id=1,程序设计者原本设计意图是显示id为1的商品信息,而攻击者利用程序中没有对id的内容进行检查之机,插入自己的代码。从findproduct.asp中摘录两句最关键的语句:SQL=select3fromproductwhereproductid=’&request(id)&’rs.openSQL,conn,0,3可以看到,id没有进行任何的处理,直接构成SQL语句并执行,而攻击者在知道该系统的数据库中表及表中字段名称的情况下(目前网上免费的论坛系统或是商业网站代码非常多),利用SQL语句特性(分号是将两句SQL语句分开的符号),直接向数据库中添加记录:findproduct.asp?id=1;Insertintoadmin(’username’,’password’,’type’)values(’hacker’,’pass123456’,’管理员’),然后攻击者就可以直接用刚才建立的帐户进行登录了。通过这样的方法,攻击者还可以对系统做任何的事情,包括增加、修改、删除记录。(3)执行系统命令如果Web主机使用MSSQL数据库系统,而list.asp中存在注入点,那么攻击者就可以用到xp_cmdshell这个扩展存储过程,xp_cmdshell是一个非常有用的扩展存储过程,用于执行系统命令,比如dir,net等,攻击者可以根据程序的不同,提交不同的语句:=1;?exec?master.dbo.xp_cmdshell?’dir’=1;?exec?master.xp_cmdshell?’dir’或者可以插入下面的语句netuserhacker/addnetlocalgroupadministratorshacker/add来向Web主机系统中加入一个非法的管理员帐号,不过这样的做法必须同时满足几个条件,首先ASP使用的SQLSERVER帐号必须是管理员,其次请求的提交变量在整个SQL语句的最后,否则构造出来的SQL语句在语法上是错误的,也就不可能执行成功。第5期辽宁省电子信息产品监督检验院年度论文2009年1月-5-2.SQL注入攻击的检测方式及方法2.1检测方式SQL注入攻击检测分为入侵前的检测和入侵后的检测。入侵前的检测,可以通过手工方式,也可以使用SQL注入工具软件。检测的目的是为预防SQL注入攻击,而对于SQL注入攻击后的检测,主要是针对日志的检测,SQL注入攻击成功后,会在IIS日志和数据库中留下“痕迹”。2.2检测方法(1)输入验证检查动态的SQL语句是一个进行数据库查询的强大的工具,但把它和用户输入混合在一起就使SQL注入成为了可能。将动态的SQL语句替换成预编译的SQL或者存储过程对大多数应用程序是可行的。预编译的SQL或者存储过程可以将用户的输入作为参数而不是SQL命令来接收,这样就限制了入侵者的行动。当然,它不适用于存储过程中利用用户输入来生成SQL命令的情况。在这种情况下,用户输入的SQL命令仍可能得到执行,数据库仍然有受SQL注入攻击的危险。如果一个输入框只可能包括数字,那么要通过验证确保用户输入的都是数字。如果可以接受字母,那就要检查是不是存在不可接受的字符。确保应用程序要检查以下字符:分号、等号、破折号、括号以及SQL关键字。(2)数据检查使用HDSI、NBSI和Domain等SQL注入攻击软件工具进行SQL注入攻击后,都会在数据库中生成一些临时表。通过查看数据库中最近新建的表的结构和内容,可以判断是否曾经发生过SQL注入攻击。(3)日志检查在Web服务器中如果启用了日志记录,则IIS日志会记录访问者的IP地址,访问文件等信息,SQL注入攻击往往会大量访问某一个页面文件(存在SQL注入点的动态网页),日志文件会急剧增加,通过查看日志文件的大小以及日志文件中的内容,也可以判断是否发生过SQL注入攻击。(4)其他第5期辽宁省电子信息产品监督检验院年度论文2009年1月-6-SQL注入攻击成功后,入侵者往往会添加用户、开放3389远程终端服务以及安装木马后门等,可以通过查看系统管理员账号、远程终端服务器开启情况、系统最近日期产生的一些文件等信息来判断是否发生过入侵。3.SQL注入攻击防范模型及措施3.1防范模型在前人提出的SQL注入攻击的检测/防御/备案模型基础上,本人进行了检测过程的优化,提出了一种SQL自动防范模型如图1所示,本模型中所有检测都在服务器端进行。首先对IP地址进行检测,如果该IP地址在SQL注入攻击库中,则禁止该用户的访问,并再次将相关信
本文标题:SQL注入攻击漏洞研究与防范措施论文
链接地址:https://www.777doc.com/doc-5281575 .html