叶良艳
(安徽电子信息职业技术学院,安徽 蚌埠 233000)
随着互联网技术的发展,web服务越来越被各大行业青睐,同时也伴随着越来越多的web服务安全问题,如SQL注入、跨站脚本、跨站请求伪造和DDOS攻击等各种安全问题。2013年OWASP发布SQL注入攻击为十大WEB应用安全漏洞中排名第一,其特点是在用户输入或者信息上传时,将恶意数据或者代码上传到web应用系统中,导致系统崩溃、获取敏感信息、或者篡改数据,甚至控制系统等恶劣行为。特别是随着Javascript脚本语言、Ajax技术的引入和普及,以及HTML5和WEB2.0等新兴技术而发展的新型SQL注入技术,使得web应用程序安全问题更加难以发现和检测。
SQL注入攻击是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,从而达到攻击目的。SQL注入攻击的技术门槛低、隐蔽性强、危害性大、杀毒软件也无法查杀,一旦若获取网站WebShell权限,便可上传网页木马、控制整站等违法操作。
SQL注入攻击主要是因开发者缺乏安全意识、安全知识或安全编程经验等,导致SQL语句书写不规范,代码编写不够完善等问题。如:1)对用户输入没有进行过滤和验证;2)给用户权限过大、数据库操作权限过大;3)不当的错误处理;4)转移字符处理不合适;5)使用字符串联结组合多条SQL指令,导致数据和控制结构使用同一传输通道[1]。
传统SQL注入技术可以分为重言式攻击、联合查询攻击、附带查询攻击、非法 /逻辑错误查询、联合查询、附带查询、重言式、基于响应的SQL盲注等5种[2];新型SQL注入技术有客户端SQL注入、防注检测绕过技术和二阶SQL注入[3]。
重言式攻击即攻击者构造SQL查询条件恒为真,导致限定条件无效,绕过服务器对用户的身份证验证,从而获取数据库中相应信息。常用“or 1=1”恒等式实现查询条件为真,例如登录注册的一条查询语句"Select*from userswhere username='".$username."'and password='".$pwd."'",给该语句添加恒等式变为:"Select*from userswhere username='‘ or 1=1 and password=’’",4绕过用户验证,实现修改用户密码等攻击行为。
联合(UNION)查询攻击技术利用 SQL语句中的UNION操作符把多个select查询语句整合到一起,攻击者结合前面介绍的重言式攻击使原查询WHERE条件为false,最后返回攻击者构造的查询结果。例如:SQL查询:select title,content from article where id=$id,手工注入后变成:select title,content from article where id=1 and 1=2 union select 2,3 from user limit 0,1,从而获取用户信息。
附带查询攻击是利用分号(;)在语句后面加入新的查询语句,相当执行多条SQL语句,从而对数据库进行增加、删处、修改等操作,甚至可以读写底层操作系统,其危害性极大。例如:”select*from student where id=1;delete from student;”数据库的配置若不支持多语句,该攻击难以实现。
逻辑错误查询主要通过构造不能执行的SQL语句引起数据库错误并返回错误提示信息,攻击者从错误提示信息中获取数据库的类型、版本和参数等。数据库错误包括语法、逻辑错误和类型转换等。攻击者通过构造语法错误语句获取查询中的参数信息,通过构造逻辑错误语句获取数据库的元数据,通过构造类型转换错误语句推断参数的数据类型并获取表中数据等信息。
盲注[4]常用于开发者对返回错误信息进行过滤,无法直接获取数据库相关信息,而采用对某一个参数构造不同查询语句,返回不同结果,攻击者根据结果变化以及抓取数据包来推测出数据库中有哪些参数、哪些表等。盲注有分时间盲注和内容盲注,主要通过and 1=1和and 1=2以及BENCHMARK()函数实行盲注。
有些存储过程是默认开启的,攻击者利用这些存储过程进行非法操作,如利用Xp_Cmdshell取得服务器的管理权,增加用户等功能。
随着HTML5的新技术的出现,带来了便利同时也带来了隐患,例如HTML5支持应用程序离线运行,并且容许数据存入客户端等,若客户端应用程序运行了攻击者控制的客户端数据,就会产生客户端SQL注入攻击。客户端SQL注入技术发送攻击数据的渠道和提取数据的机制与传统SQL注入技术有别,社交网络、web邮件容易发送该类型攻击。
二阶SQL注入是攻击者先构造语句(有被转义字符的语句),并通过http请求将恶意语句存入数据库中,再次构造语句(结合前面已经存入数据库的语句)实施攻击,二阶SQL注入经过存储和触发两个阶段。假设一个网站数据库中存在一个用户名为:“root”,密码为:“123456”。攻击者注册用户名为:“root'-- ”,密码为:“123”;用户名“root'-- ”被存入数据库中。攻击者再次构造语句修改该用户密码:“update user set password =“888888” where username='root'--'”,在数据库语句这种“-- ”表示注释,因此“--”后面的语句不会执行;最终攻击者改变的不是“root'--”的密码,而是root的密码,从而实现攻击,可见二阶SQL注入更加难以被发现。
SQL注入漏洞主要是开发者编码不够严谨和程序自身的特点等造成,漏洞种类繁多,针对不同的漏洞,研究人员提出多种检测技术,下面介绍几种常见的检测技术。
网络爬虫是一种自动的访问网页元素程序。文献【5】提出基于爬虫的SQL注入自动化检测,其思想是将网络爬虫技术和Fuzzingji技术结合,实现自动化与智能化SQL注入检测。文献【6】提出基于改进网络爬虫技术的SQL注入漏洞检测,主要从两个方面对其改进:①网络爬虫抓取的新URL时,剔除重复的URL和网站之外的URL;②对网络的URL筛选策略和流程进行改进。从而降低了检测的漏报率。文献【7】提出基于表单爬虫的web漏洞探测,收集表单页,构造url发送请求,然后应用相应准则和模式分析WEB服务器的反应,发现漏洞。
基于静态分析主要包括两个部分:①静态分析源码中可能存在SQL注入漏洞,构造路径,创建检测规则;②动态执行检测规则,对用户输入进行检测,并与比源SQL语句在语义和结构上比较,判断是否SQL注入攻击,静态检测工具有Pixy【8】。文献【9】在第一步添加了过滤用户输入,提高准确性,在第二步添加了动态构造自动机模型,提高实时性和准确性。文献【1】总结静态分析技术有:基于语法、语义、javascript脚本分析的方法,基于字符串评价的方法,基于输入输出数据检测方法,基于异常行为监控的方法等。文献【10】针对JAVA语言的web网站漏洞,提出基于缺陷模式匹配的针对字符流、中间代码的分析方法、抽象语法树和数据流分析方法多种方法混合,达到降低漏报率。
基于动态分析是先根据用户的输入信息来动态构造SQL查询语句,对其执行过程中控制流和数据流分析,通过设置断点实时跟踪控制状态转换来判断调用函数漏洞,构造边界数据发现数据流漏洞。常用的动态检测方法有以下3种【11】:对合法请求的执行流分析、上下文敏感字符和语法的分析树判断。
静态分析和动态分析相结合的方法利用动静态的优点,将静态源码分析和运行时实时监控检查相结合。高覆盖率静态源码分析的检测效果全面,但其处理程序类有限,特别是脚本语言。目前有CodeSecure、Fortify 和 Rational Sofeware Analyzer等综合分析工具。
基于污点分析技术的漏洞检测方法对基于污点数据传播和使用过程的跟踪,判断它是否会引发SQL注入攻击。文献【1】介绍利用动态污点分析技术、采用修改php解释器的方法动态跟踪php中的污点数据、符号化执行污点跟踪、通过动态污点渗透测试方法寻找客户端javascript代码注入和动态污点分析与程序错误有关输入数据集合等方法。
从SQL注入漏洞成因角度出发,SQL注入攻击防御从开发者编码开始防御,即安全编码,同时设置用户等级、屏蔽出错信息、封装SQL查询串、SQL指令随机化、对敏感信息加密及应用WEB防火墙。
SQL注入漏洞常因开发者编码不规范导致的,所以进行安全编码提高其防御功能。安全编码是对用户输入进行过滤,如对(and|or).+?(>|<|=|in|like)|/*.+?*/|<s*script|等关键字符串过滤,从而降低一些SQL注入攻击,该防御措施的误报率较高,因有时这些关键字符是合法的,不过该防御技术是最直接防御方案。
不同用户等级对资源的访问操作权限不同,从而提高网站的安全性,同时用户登录时对其身份鉴别也很重要,目前常用方法有数字证书认证,智能卡认证和个人特征识别等。
攻击者利用错误提示信息对Web网站进行猜解爆破,开发者通过屏蔽出错信息来预防攻击者攻击。例如:用户登录密码输入错误时,错误提示信息不能设为“密码错误”,而应改为“用户名或密码错误,”,防止用户名信息泄露。若用户名泄露,攻击就会对其密码进行暴力破解。
构造类将数据库中表明、属性名和属性数据构造到类中,开发者直接使用类动态构建SQL查询串,从而消除了特殊字符对SQL查询串结构的改变。
SQL指令随机化是通过对SQL关键字后添加一个随机整数,有效阻止任何SQL注入攻击,该方法是Boyd等提出的一种新的SQL防注技术,但其弊端是系统运行开销大。
攻击者攻击终极目标是数据库,所以数据和数据库的安全性比较重要,可以采取对数据重要的字段进行加密,对传输的数据加密等措施提高网站的安全性。例如:用户登录实行MD5加密。
Web应用防护系统(Web Application Firewall,简称:WAF)用以解决诸如防火墙一类传统设备束手无策的Web应用安全问题,其应用功能有审计设备、访问控制设备、架构网络设计工具和加固工具等,可以有效防止网页篡改、信息泄露、木马植入等恶意网络入侵行为。
本文介绍了SQL注入的危害、攻击原理,详细阐述了针对SQL注入漏洞,研究人员提出的SQL注入检测方法和SQL注入预防方法,为SQL注入防御系统设计提供指导意见。今后研究方向:进一步融合静态源码特征与动态执行路径之间的联系和制约,提高检测准备率和覆盖率;探索自动化漏洞分析,提高web应用软件检测漏洞;提高漏洞检测覆盖率和准确率的同时,如何降低其资源消耗等。
[1]王 丹,赵文兵,等.web应用常见注入式安全漏洞检测关键技术综述[J].北京工业大学学报,2016,(12):62-68.
[2]HALFOND W G,VIEGAS J,ORSO A.A Classification of SQL-injection Attacks and Countermeasures[C]//IEEE.IEEE InternationalSymposium on Secure Software Engineering,March 13-15,2006,McLean,Virginia.Piscataway,NJ:IEEE,2006,(1):13-15.
[3]李 鑫,张维纬,等.新型SQL注入及其防御技术研究与分析[J].理论研究.2016,(2):66-73.
[4]赵瑞颖.基于时间的SQL注入分析与防范[J].信息网络安全.2010,(1):56-57.
[5]肖秋平.基于爬虫的SQL注入自动化检测系统设计[J].计算机与网络.2017,(2):70-72.
[6]彭 庚.基于改进网络爬虫技术的sql注入漏洞检测[J].计算机应用究.2010,(7):2605-2607.
[7]赵 亭,陆余良,等.基于表单爬虫的WEB漏洞探测[J].计算机工程,2008,34(9):186-188.
[8]JOVANOVIC N,KRUEGEL C,KIRDA E.Pixy:astatic analysis tool for detecting Web application vulnerabilities[C]//Proceedings of 2006 IEEE Symposium on Secrity and Privacy.Oakland:IEEE,2006:258-263.
[9]秦广赞,郭 帆,等.一种防SQL注入的静态分析方法[J].计算机工程与科学.2013,(2):68-73.
[10]孔 军.基于JAVA WEB静态源码分析的应用系统中安全漏洞检测的研究与实现[D].北京邮电大学2017-03.
[11]田玉杰,赵泽茂,等.基于分类的SQL注入攻击双层防御模型研究[J].信息网络安全.2015,(6):1-6.