浅谈基于序列对比的SQL注入攻击检测方法

2016-05-18 04:47:29
电子制作 2016年18期
关键词:字符串语句应用程序

浅谈基于序列对比的SQL注入攻击检测方法

杜文华 民航广西空管分局

在现代网络迅猛发展的背景下,Web应用程序都采用了分布式的三级架构,由于数据库中存在大量敏感的信息数据,这使其遭受频繁的网络攻击,并尤以SQL注入攻击为甚,这严重影响了网络应用安全,为此,需要采用新的基于序列比对方法的SQL注入攻击检测方法和技术,在渗透测试和程序分析相结合的方式下,实现对SQL注入漏洞的检测定位。

序列;对比;SQL注入;攻击;检测

现代互联网正在迅猛发展,然而各种Web服务器存在一定的漏洞以及程序存在非严密性,致使SQL注入攻击手段成为了针对Web服务器的主流方式,在分布式的Web服务器中,存在三级架构,即:数据库服务器、应用服务器和客户端,在Web服务器站点膨胀的态势下,难免存在SQL注入的缺陷,一些别有用心的用户可以利用服务器中的疏漏,非法侵入服务器获取网站管理员的权限,威胁服务器内网的系统信息,导致网络应用安全受到严重威胁。我们需要针对SQL注入漏洞进行分析,并提出有效的基于序列对比的SQL注入攻击检测方法。

1. SQL注入攻击综述

SQL注入攻击是指Web程序目标系统通过字符串的方式,实现用户输入接收,缔造对应的SQL语句进行数据库合法操作。由于Web服务器存在一定的漏洞,导致一些攻击者利用该字符串注入恶意代码,在数据库系统中进行运行。这是由于没有对用户输入进行验证处理造成的,被称为“污染值”,当这些“污染值”累积到达陷入点时,就会引发SQL注入攻击。在Java应用程序中,处理数据输入的常见操作的注入点有get Parameter()、get Query String()等;“污染值”传播的变量赋值等操作有String、String Buffer等;陷入点主要是向数据库提交SQL查询语句的函数如:execute Query、Statement、add Batch等。

SQL注入攻击的方式主要包括以下几种:

(1)重言式攻击。这是一种通过在查询语句中插入一个重言式,而非法获得网站管理员权限的方法,在Web服务器中的SELECT或UPDATE语句的WHERE条件中,如果插入了重言式,那么,数据库表中的每一行都会被纳入到结果集合中。以网上银行为例,假设用户登录到正确的网页上,查询当前账户的余额,系统通过Account.php? user Name=’test’字符串的形式,向应用程序提交查询语句,应用程序则通过构造语句:SELECT*FROM Accounts WHERE userName=’test’,返回到用户账户信息。如果非法侵入用户将这个字符串输入改变为:Account.php?userName=’test’OR 1=’1’,那么,应用程序构造的语句则会相应改变为:SELECT*FROM Accounts WHERE userName=’test’ OR 1=’1’,这样,数据库会返回所有用户的账户信息,造成安全威胁。

(2)SQL注释符攻击。由于SQL语言涵盖有注释符,它们分别为:① # 用于注释符号后面的本行内容;② — 与#类似,在它的后面添加一个空格用于注释;③ /*…*/ 这是用于注释符号中间的内容。以用户的注册系统为例,用户等级采用userlevel表示;管理者采用1表示;普通用户用2表示,其应用程序的代码可以编译如下:

如果在上述输入程序中,在email处输入:netsh@163.com’,’1’)#,那么,这个SQL语句就会相应改变为:

INSERT INTO members VALUES

(’youid’,’youname’,’youpa ss’,’netsh@163.com’,’1’)#,’2’)

那么,插入的用户等级就会发生改变,转变为管理员等级,形成攻击威胁。

(3)添加补充语句。在下述的语句之中:SELECT*FROM users WHERE username=’admin’,这个’admin’是用户输入语句,而如果将其更改为admin’:DELETE FROM users’,那么,SQL语句就会变为:SELECT*FROM users WHERE;username=’admin’;DELETE FROM users”,造成恶意的攻击和破坏。

2.当前SQL注入防御技术分析

由于SQL注入攻击是由于数据库漏洞而导致的,因而,需要对数据库漏洞进行修补,当前可以从两个方面对SQL注入攻击进行防御和检测。

2.1 代码层防御

这是通过对预先设定好的敏感字符进行过滤,屏蔽出错的信息,并使用SQL参数查询方式,隔离执行代码和数据,有效防止通过用户对语句进行恶意的更改。现在研究较多的是对数据的合法性检测,大体是利用算法得到合法的结构或输入类型,再与Web应用程序的输入进行比对,比对匹配则为合法,比对不匹配即为非法侵入。它们主要有:(1)基于序列比对的SQL攻击检测。它是利用Needleman-Wunsch算法,进行用户输入SQL语句结构和类型的比对,从而判断其是否受到SQL注入攻击。(2)防SQL注入攻击的数据库驱动。它是通过服务器上的Web程序、后台数据库进行连接驱动,去掉执行语句中的字符串,经由执行语句路径,由hash函数得到id并加以保存,以检测是否受到SQL注入攻击。(3)通过指令集随机化的SQL注入防御。它是对SQL语句进行改动,在其后加上密钥,根据密钥判定SQL语句是否受到注入攻击。

2.2 平台层防御

这是对平台层进行优化处理或配置进行更改,如:Web应用防火墙、数据库防火墙、应用数据的锁定等,这种策略可以减轻SQL注入攻击,然而,由于它无法替代安全代码的编写,因而与安全代码之间是互补的关系。

3.基于序列比对的SQL注入攻击检测分析

这种方法是利用改进的序列比对算法——Needleman-Wunsch算法,对用户的实际输入进行比对,通过对输入语句的结构和类型加以判定,确认和检测其是否受到SQL注入攻击。

3.1 改进的NNeedleman-Wunsch算法

这种全局比对算法主要是考虑序列的整体,它利用整体相似度最大化的原则,对两个序列进行比对,对于不等长度的序列,需要去除一些残基的方法加以处理,或者采用另一序列进行空位插入处理。

这种算法是基于DNA和RNA序列比对发展而来的,对算法的回溯过程进行了改进,如果用户输入不包含恶意的代码,那么,字符串则一定可以与目标字符串相匹配,并且可以填充空位的结构和值。

3.2 判定SQL注入攻击检测结果

基于序列比对的SQL注入攻击检测方法,可以检测两种状况:

这种算法的检测流程如下图所示:

该算法的比对过程如下图所示:

目标T:y1y2……yj yj+1……ym-1 ym

‖‖ ‖‖‖‖ ‖‖

模式P:x1x2……xi xi+1….xi-1 xi

结果R:x1x2……xi xi+1__xi-1____xi

上述算法可以对数据库进行正确性测试,包括对字符串型、数字型的数据库进行序列比对,从而检测出以SQL注入攻击技术为基础的攻击语句。

4.结束语

综上所述,基于序列比对的SQL注入攻击检测方法,是运用了改进的序列比对算法——Needleman-Wunsch算法,对用户的实际输入进行比对,进而判定出输入语句的结构和类型,它无须外部数据库的支持,可以基于序列比对方法,快速高效地监测出SQL注入攻击行为,它不依赖于任何学习算法的运算精度限制,可以有效地加以应用和发挥。

[1] 沈琳. 网络攻击特征提取算法在序列比对中的运用分析[J]. 计算机光盘软件与应用. 2014(15)

猜你喜欢
字符串语句应用程序
重点:语句衔接
删除Win10中自带的应用程序
电脑报(2019年12期)2019-09-10 05:08:20
精彩语句
一种新的基于对称性的字符串相似性处理算法
如何搞定语句衔接题
语文知识(2014年4期)2014-02-28 21:59:52
依据字符串匹配的中文分词模型研究
关闭应用程序更新提醒
电脑迷(2012年15期)2012-04-29 17:09:47
一种针对Java中字符串的内存管理方案
三星电子将开设应用程序下载商店
作文语句实录