2017年第1期
大中型企业Web应用程序中SQL注入的检测
与防御
李志星,张威
(国网河南省电力公司电力科学研究院,河南郑州450052)
摘要:随着网络和信息化的快速发展,基于数据库的Web应用程序广泛应用于大中型企业,随之而来的信息安全问题越来越受到重视。当前,信息安全漏洞中绝大多数为应用软件漏洞,其中SQL注入漏洞是目前Web应用程序中最常见的漏洞之一。文章介绍了SQL注入攻击原理及常见SQL注入漏洞的检测技术,并提出针对SQL注入的防范措施。
关键词:SQL注入;大中型企业;渗透测试;信息安全
中图分类号:TP309.5文献标识码:B文章编号:X(2017)01-043-03
0引言
随着计算机与网络技术的飞速发展,Web应用开发技术的不断成熟和完善,大中型企业信息化的建设的脚步也在不断推进,结合各个业务部门的业务需求建设了大量的信息系统和网站。与此同时,由于Web应用程序的开发周期较短,同时开发人员安全编程意识与开发水平存在一定的差异,给Web应用程序埋下了大量安全隐患。据CNCERT监测,2015年新增漏洞中,SQL注入漏洞新增268个,排名第8。由于利用SQL注入漏洞进行攻击,通常是利用SQL语法,这使得于基于SQL语言标准的所有数据库软件,如SQLServer、Oracle、MySQL、DB2等数据库都有可能受到攻击,并且攻击的发生和Web编程语言本身也无关,如ASP、JSP、PHP等,在理论上都无法完全幸免。另外,SQL注入漏洞带来的危害比较大,攻击者利用该漏洞可以直接访问数据库进而甚至能够获得数据库所在的服务器管理员权限。大中型企业逐渐意识到信息安全的重要性,为消除SQL注入漏洞,开展SQL注入漏洞检测,加强安全防御,减少或避免信息安全事件的发生,保障公司信息系统的安全稳定运行。
1SQL注入攻击原理
目前,几乎所有的Web应用程序都依赖数据库来管理在应用程序中处理的各类业务数据信息。数据库中的信息通过SQL进行访问,可以实现数据库中信息的读取、更新、增加或者删除等操作。Web应用程序中数据库处理的数据实际上是由程序开发人员编写的代码和用户提交的数据共同组成,由于程序开发人员的开发水平和经验存在一定差异,安全意识不高,忽视代码的健壮性和安全性,对用户输入没
有进行合法性验证或者验证规则不够严谨,导致Web应用程序存在安全隐患,由此就产生了SQL注入漏洞。
SQL注入(SQLInjection)是一种数据库攻击手段,也是Web应用程序漏洞存在的一种表现形式,攻击者在对Web应用程序发动攻击时,通过编写恶意SQL代码插入到应用程序用户的输入参数中,传递到数据库服务器进行执行,根据数据库返回的结果,获取他所需要的数据并发起进一步的攻击,包括窃取用户敏感信息(如用户名、密码、和信用卡信息等)、篡改业务数据信息,实现数据库拖库,甚至获取服务器管理员权限,将此服务器作为进入该网络的垫脚石,给企业网络安全带来极大的安全威胁。
2SQL注入漏洞检测技术
通过SQL注入漏洞的检测,能够有效的减少SQL注入攻击的发生,以下是SQL注入漏洞的检查
河南电力技术
作者简介:李志星(1982-)男,学士,从事信息安全工作。
43
2017年第1期
方法。
2.1基于错误反馈信息的检测
2.1.1“加引号”、“加双引号”法
通常在URL的尾部插入一个单独的单引号或双引号,造成SQL语句异常而令数据库返回一个错误信息。例如:
访问地址:http://www.***.cn/list.asp?id=39
加单引号为:http://www.***.cn/list.asp?id=39'
加双引号为:http://www.***.cn/list.asp?id=39''
请求该地址链接,利用抓包工具,捕捉回应的HTTP报文,如果服务器HTTP回应码为500,通常是由数据库异常访问导致的,此回应码可作为SQL注入的判断特征,同时服务器返回的异常信息中,通过异常信息可以得到数据库类型、版本、甚至数据库的表名或者字段名。具体的异常特征字段针对不同的数据库也都是不一样的,所以收集各类数据库的异常特征字段,有助于进行SQL注入漏洞的判断。2.1.2逻辑语句判断法
较为有经验的Web应用程序开发人员很容易对引号进行过滤,采用以上“加引号”、“加双引号”的方法就无法检测到注入点,此时可以使用逻辑语句来判断Web应用程序是否存在SQL注入点。常用的逻辑语句有and1=l、and1=2等。直接在访问地址后加入and1=l、and1=2例如
访问地址:http://www.***.cn/list.asp?id=39
加andl=1为:http://www.***.cn/list.asp?id=39and1=l
加and1=2为:http://www.***.cn/list.asp?id=39and1=2
在访问地址后加入andl=1语句后,页面显示正常,在访问地址后加入and1=2语句后,页面显示异常,则存在注入漏洞;如果页面都显示异常,则可能不存在注入漏洞。
2.2利用SQLmap进行检测
SQLmap是一款用来检测与利用SQL注入漏洞的免费开源工具,它由Python语言开发而成,因此运行需要安装Python环境。SQLmap可以根据get、post、httpheader的值变化识别是否存在注入。目前支持的数据库包括MySQL、Oracle、Micros
spring framework高危漏洞
oftSQLServ-er、MicrosoftAccess、IBMDB2、PostgreSQL、SQLite、FirebirdSAP、MaxDB等。SQLmap不仅可以利用已经发现的漏洞进行SOL注入,而且能够通过基于启发
式的检测来寻漏洞。
2.3自动化检测工具
SQL注入漏洞自动化检测工具,是在对SQL注入漏洞进行大量研究的基础上,对SQL注入漏洞进行分类,并分析每种类型漏洞的特征码,形成SQL注入漏洞库,然后借鉴安全漏洞扫描检测技术的自动化检测技术,实现SQL注入漏洞的自动化检测。SQL注入漏洞自动化的检测工具,一般工作在HTTP、HTTPS协议上,利用网络爬虫技术抓取网站所有链接,然后模拟黑客攻击的方式,向服务器发送具有特定漏洞的特征码的请求,从服务器的返回结果中来判断是否存在SQL注入点,但对Web应用不做任何的破坏。
使用SQL注入自动化检测工具需要输入Web应用程序的URL(UniformResoureLocator,统一资源定位符),检测工具会自动地判断网站是否存在SQL注入漏洞,同时在模拟注入攻击过程中,通过增加字典的内容来优化攻击速度。利用SQL注入漏洞自动化检测工具进行检测,实际上和普通的黑盒测试一样,无需考虑系统代码的实现过程。目前,较为先进的检测工具,除了
能够检测出Web应用系统是否存在SQL注入漏洞,同时给出整改的建议和方法。
3SQL注入防御措施
针对SQL注入漏洞,从数据库安全设置、用户输入验证、参数化查询和部署Web应用防火墙等四个方面分析如何防御SQL注入。
3.1数据库安全设置
攻击者对WEB应用程序进行SQL注入时,常常会猜测表名、字段名,通过规范数据库命名,避免使用admin、username、password等常见词作为表名或字段名。对数据库不同账户分配不同权限,仅赋予该账户完成必须工作所需要的权限,严格遵循“最小权限准则”,对表的select、update、delete操作权限要做精确的设置。同时,对数据库中敏感的、重要的数据信息,要进行加密存储。对数据库查询中的出错信息进行屏蔽,尽量减少攻击者根据数据库的查询出错信息来猜测数据库特征的可能。3.2验证用户输入
Web应用程序开发人员对用户输入没有进行合法性验证或者验证规则不够严谨,是导致Web应用程序存在SQL注入漏洞的主要原因。可采用以下方
李志星等:大中型企业Web应用程序中SQL注入的检测与防御44
2017年第1期
法对用户输入进行验证,具体如下:
3.2.1限定用户输入的字符串长度
通过限定用户输入的字符串长度,可以有效地防止攻击者构造较长SQL语句插入到Web应用中。具体的实现方式包括设置文本字段的maxlength属性、通过函数len()进行判断。
3.2.2屏蔽或替换特殊的符号
根据实际情况屏蔽单引号、括号、注释符号、空格、双引号等特殊符号,也可以用replace()替换成全角或中文符号,使恶意的SQL语句无法插入到系统中。
3.2.3针对系统输入特定要求做专门验证
在Web应用的输入设计中,如果输入的内容要求比较具体,例如只允许输入数字、字母、汉字或者它们的组合等,可以利用或者构造相应的函数去验证,以手机号码为例,只允许输入数字:通过IsNu-meric()或者ASC()判断ASCII码值来确定输入是否为数字,也可以利用正则表达式“^[0-9]+¥”来判断。
3.3参数化查询
WEB应用程序开发人员在编写程序时,常以字符串拼接的方式构建SQL语句,导致系统中存在SQL注入漏洞,使用参数化查询的方法可以防御绝大部分的SQL注入攻击。参数化查询是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数来赋值。在使用参数化查询的情况下,数据库不会将参数的内容当做SQL指令的一部份来执行,而是先进行SQL指令的编译,再套用参数执行,这样即使参数中含有恶意的指令,也不会被数据库执行。编写参数化查询比构造简单的SQL动态查询语句要花费更多的时间和精力,程序不便于维护,但是使用参数化查询造成的额外开发成本,通常都远低于因为SQL注入漏洞被发现而遭受攻击所造成的重大损失。
3.4部署Web应用防火墙
Web应用防火墙可以监测往返流量,并对Web流量进行安全控制,当Web客户端提交访问至服务器端时,先经过Web应用防火墙进行安全检测。如含有特殊字符则将参数提交给具体的页面处理,发现SQL注入参数后,便将请求丢弃。通过部署Web应用防火墙可以有效地防止SQL注入攻击,对于开发完成Web应用程序即使存在SQL注入漏洞,也可以使用Web应用防火墙进行防护。
通常使用一种防御技术无法完全避免SQL注入攻击,这就要求大中型企业的运维单位在网络架构、服务器安全配置、软件检测等多方面进行防护。首先,在Web应用程序正式运行前,通过专业的安全扫
描工具进行漏洞检测,从根本上尽量减少SQL注入漏洞。其次,及时更新操作系统和数据库补丁,合理配置操作系统和数据库的权限,减轻SQL注入攻击带来的危害。最后,通过部署必要的安全设备,对所有提交至Web服务器的数据进行检查,消除SQL注入攻击。
3.5其他注意事项
除了对数据安全设置、部署Web应用防火墙等,还要对Web应用程序的环境进行安全配置,如检查操作系统、服务器、网络设备等设备是否存在帐号弱口令,关闭不必要的服务端口,限定Web应用程序可以访问的范围,通过安全配置增强整体的安全性,从减少或避免SQL注入攻击事件的发生。
4结语
SQL注入漏洞是攻击者对Web应用程序发动攻击中广泛利用的漏洞之一,严重威胁着Web应用程序的安全。因此,大中型企业开展SQL注入漏洞的检测和防御工作,使得Web应用的开发和维护人员熟练掌握SQL注入检测和防御技术,合理设计,规范化编程,建设期间做好Web应用程序的防御,避免SQL注入漏洞,更好地为Web应用程序保驾护航,保障大中型企业远离SQL注入攻击。
参考文献
[1]
[2]
[3]
[4]
收稿日期:2016-05-21
刘文生,乐德广,刘伟.SQL注入攻击与防御技术研究[A].第30次全国计算机安全学术交流会论文集[C].2015
陈悦,蔡满春,李璨莹.SQL注入的“拖库”攻击与防范[J].网络安全技术与应用,2015(7):22-23.
宋超臣,黄俊强,吴琼,等.SQL注入绕过技术与防御机制研究[J].信息安全与通信保密,2015(2):110-112.
周琰.SQL注入检测方法的研究与实现[D].西安:西北大学,2011.
河南电力技术45

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。