基于本体的SQL注入攻击检测方法研究*
2014-09-04陈佳丽庄金莲
陈佳丽 庄金莲
(龙岩学院数学与计算机科学学院 福建龙岩 364012)
基于本体的SQL注入攻击检测方法研究*
陈佳丽 庄金莲
(龙岩学院数学与计算机科学学院 福建龙岩 364012)
本文在介绍了SQL注入攻击的概念和步骤的基础上,提出了一种基于本体的SQL注入检测方法。通过在正常网页页面与异常网页页面(即可能存在SQL注入漏洞的页面)之间建立共识的领域本体,在二者之间进行信息比对,据此对Web页面中存在的SQL注入攻击漏洞进行检测。相关实验结果显示,该方法具备较高的检测准确率。
SQL注入攻击,本体,网络安全,信息比对
1 引言
随着Internet应用的普及,各行各业都陆续开始使用基于Web和数据库的管理系统,如电子商务、电子政务、银行、医疗等。便捷的互联网服务不仅吸引了众多网站用户,也“吸引”了愈来愈多的网站“破坏者”,网站的安全承受着越来越严重的威胁。据开放式Web应用程序安全项目(open web application security project,OWASP)组织2010年发布的《The top 10 most critical web application security risks》,即《Web应用的十大关键风险》报告显示[1],以SQL注入漏洞为主的“注入式漏洞”已成为最危险的网络安全风险,并已位居Web安全漏洞的榜首。如何应对变幻无穷的SQL注入攻击漏洞,保障业务安全及应用安全,最大限度减少SQL注入的风险,从根本上防止SQL注入的实施,是网络安全领域面临的关键问题。基于此,本文提出了一种基于本体的SQL注入攻击检测方法,该方法在领域本体的构建之下,对正常网页页面与异常页面(即可能存在SQL注入漏洞的网页页面)进行信息比对,使得它们之间存在的差异信息,在本体的框架上达到一定程度的共识,据此来对系统中可能存在的漏洞进行检测。
2 SQL注入攻击简介
SQL注入攻击来自英文“SQL Injection Attack”,简称为SIA。1999年,国外开始出现SQL注入的概念,但至今没有一个标准明确的定义,根据其攻击的特点,微软技术中心对其进行了说明:(1)脚本注入式攻击;(2)恶意攻击者输入恶意数据,以此来影响被执行的SQL脚本。关系数据库的标准语言SQL本身并不存在攻击漏洞,但若在应用程序的代码中直接嵌入SQL语句就有可能产生SQL攻击漏洞。攻击者通过输入恶意代码,由应用程序处理后,再转交给数据库服务器执行,以此达到注入的目的。在最严重的情况下,攻击者除了可以掌握存储在数据库中的用户的敏感信息(如用户名、密码、联系方式和信用卡信息等)之外,还可能执行删除数据表和数据库等操作,控制整个数据库服务器,甚至作为进入操作系统的垫脚石,给网络安全带来了极大的威胁。
2.1 SQL注入攻击的原理
下面通过一个简单的示例来说明SQL注入攻击的原理。
现有一个由C#语言编写的存在SIA漏洞的登录界面。该界面提供两个文本框作为输入区域,分别是用于输入用户名的“textBoxName”和用于输入密码的“textBoxPassword”。典型的服务器端所构造的连接字符串为:
Cmd.CommandText=”select * from Test_Table where Name=@textBoxName and password=@textBoxPassword”;
如果用户在“textBoxName”和“textBoxPassword”中分别输入“Tom”和“123456”,则上述连接字符串转换为:
md.CommandText=”select * from Test_Table where Name=' Tom' and password=' 123456' ”;
在用户名和对应密码匹配的情况下,该查询语句将列出用户Tom的相关信息。
但若攻击者或者黑客在textBoxName中恶意输入“Tom' or 1=1--”,在textBoxPassword中输入“”(即不输入任何值),正常的代码会被替换为:
Cmd.CommandText=”select * from Test_Table where Name='Tom' or 1=1--' and password=' ' ”;
输入串“Tom' OR 1=1--”中的“'”与SQL语句中的左单引号“‘”进行匹配闭合,而“--”是SQL语句中的注释符号,其后所有内容会被忽略,此例中“' and password=' '”将被忽略。另where子句中“or 1=1”是恒成立的,这样就导致该SQL语句的条件是恒为真的,查询返回的结果将是所有用户的信息,而不需要任何用户名和密码。
上述示例中,攻击者或者黑客通过注入恶意代码,修改SQL语句命令,绕过SQL语句的验证逻辑,导致系统会错误地授权给攻击者,所产生的危害是不可估量的。
2.2 SQL注入攻击步骤
不同攻击者发起SIA的目的不同,但是其流程却是相似的,即:寻找SQL注入点→获取数据库的相关信息→扩展权限→实施攻击。其中此处与数据库有关的信息因数据库的类型不同而不同,具体的攻击步骤如图1所示[2]。
图1 SQL注入攻击流程图
3 基于本体的检测方法
3.1 本体
本体是一种说明规范,是在特定领域下进行的“形式化”处理,它为机器能解释的信息提供相关的语义。Guarino所提出的对本体进行分类后生成的层次结构如图2所示,其中顶层的是研究通用概念的顶层本体,位于中间层的是研究特定领域概念的领域本体以及研究通用任务的任务本体,最底层的则是研究特定应用的应用本体。
图2 本体的分类层次
本体系统由概念以及这些概念之间的联系所构成,这类结构确保了高层的概念较为抽象概括,可用于描述具有通用性的SQL语言,而底层概念则较为具体,可以针对不同形式的SQL注入。如图3所示,在从现实世界转换或抽象到概念世界的过程中,通过引入领域本体系统,把领域专家建立的特定概念映射到对应的实现过程,然后以领域本体的方式形式化地表达出来。在概念世界转换到项目世界的过程中,引入应用本体,并基于应用本体通过逻辑推理的手段,来建立概念系统之间的语义关系,从而通过本体系统之间的语义关联,来实现对SQL注入攻击漏洞的检测。
图3 抽象过程和本体
3.2 领域本体的创建
目前本体的构建主要是通过领域专家对本行业的信息进行归纳和提取来完成,这是一项工作量大、过程繁杂的任务。可借鉴Uschold和King的骨架法[3]进行构建,构建过程如图4所示,具体描述如下。
(1)分析本体。明确建立本体的目的、适用范围、原因、用户及用途等。
(2)表示本体。此阶段涉及到相关文档的编写,即将本体中可能涉及到的基本概念、元本体等内容,以书面形式展现。
(3)评价本体。对所构建的本体给出技术上的评估。
(4)概念捕获。先找出特定领域内的有关概念,再识别出这些概念和概念间的联系,最后生成特定文字加以定义。
(5)对本体进行编码。即采用某种“形式化”的、特定的语言描述上述文字定义。
(6)集成本体。对现有本体进行集成。
(7)构建本体。循环上述(4)-(5),完成本体的构建。
图4 本体构建过程
当然,领域本体的创建是一个不断循环、不断积累的过程。
3.3 基于本体的SQL注入检测框架
如前所述,应用程序主要依据所获得的用户输入值,动态地更改SQL查询语句后得到带有漏洞的语句,而后对后台数据库进行访问。在攻击者精心构造出带有注入攻击的SQL语句,并提交后台数据库后,必将会返回一个异常的网页页面,此处的异常体现在该网页页面可能包含数据库错误信息,或者与正常网页不同的页面,或者越权使用的页面。因此,对SQL注入攻击的检测过程,实际上就是对返回网页与正常网页的比对过程。若攻击者在访问某URL地址时,在其后附加类似“Tom' or 1=1--”字符串后,仍可正常进入系统,则可初步判定该Web应用程序容易受到注入漏洞的威胁。如何进行比对正常网页页面和异常网页页面,是亟需要解决的问题。
当前主要有两种比对方法,一是根据返回的HTTP代码和网页内容的长短来判断,二是根据关键字进行判断。大量实验结果表明,这两种方法虽然简单可行,但都具有较高的误判率。本体具备较好的分层结构,能较好地支持逻辑推理,使用本体的构建规则,在基于本体的信息比对过程中,不仅能找到特定领域的待比对信息,还能通过本体中的概念,把这些比对信息与其语义进行连接[4]。本文在已有研究的基础上提出了一种如图5所示的基于本体的SQL注入检测框架,并对本体在检测过程中的作用进行了介绍。
图5 基于本体的SQL注入检测框架
引入本体的SQL注入攻击检测方法,以所构建的本体为核心,利用本体中已定义的概念、关系、关键词等对于SQL注入漏洞进行检测。其中,整个系统的实现主要包括:领域本体的构建过程、应用本体与SQL语句的匹配过程、应用本体之间的比对过程以及正常网页页面与异常网页页面之间的比对过程。通过上述操作过程及比对结果,判断并确认该Web应用程序中是否存在SQL注入攻击。
4 基于本体检测的原型系统
4.1 系统总体设计结构
基于本体检测的原型系统总体设计结构如图6所示,具体描述如下:
(1)通过Web浏览器及目标URL地址,获取SQL语句及待检测网页的html文档;
(2)将二者结合进行页面预处理,得到xhtml处理结果;
(3)进行应用本体之间的比对;
(4)进行不同网页页面之间的比对;
(5)对SQL注入漏洞进行判定,得出检测结果。
图6 系统总体设计结构
上述步骤可具体说明如下:
(1)页面预处理:该模块用于在进行比对检测之前,首先分别获取正常页面的html文档,及异常页面的html文档,然后对它们实施规范化的处理,最后获得经处理后的等价的、规范的、严谨的xhtml文档。
(2)注入检测模块:该模块在初始化工作基础上,利用本文所提的方法对SQL语句的结构进行比对,包括应用本体之间的比对及不同网页页面之间的比对。
(3)注入判定:该模块根据比对结果,对注入漏洞进行判定。
(4)检测结果:若存在注入漏洞,则检测结果模块会进行相应的处理。
4.2 实验数据及结果分析
为验证方法的有效性,设计并开发了一个简单的学籍信息管理系统进行测试,该系统采用SQL Server 2008作为数据库服务器,采用Tomcat 6.0作为Web服务器。由于大多数SIA都发生在用户输入区,为验证方法的可行性,构造了大量的SQL注入攻击语句对系统进行验证,所设计的SQL注入攻击方式主要有:逻辑重言式攻击、逻辑错误攻击、联合查询攻击、捎带查询攻击等。实验结果如表1所示。
表1 SQL注入攻击检测结果
由表1可以看出,引入本体后的SQL注入攻击检测方法能有效防止SQL注入,能保证学籍信息管理系统的正常运行,有效验证了该方法的可行性。
5 总结
检测SQL注入攻击漏洞,对提高Web应用程序和网络的安全性有着十分重要的意义。本文在已有研究基础之上,将本体引入到SQL注入检测中,提出了一种基于本体的SQL注入攻击检测方法,对领域本体进行抽象,然后在基于应用本体比对的基础之上,对不同网页页面进行比对,提高了检测结果的准确率,具有较高的正确率。不足之处在于目前还只能针对特定领域进行构建本体,也只能采用半自动的构建方式,有待于后续阶段进一步研究。
[1]Category:OWASP Top Ten Project. https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project.
[2]王永生.基于Web应用的SQL注入攻击入侵检测研究[D].郑州:郑州大学,2012.
[3]王志华,魏斌,李占波,等.基于本体的Web信息抽取系统[J].计算机工程与设计,2012,23(7):2634.
[4]M Uschold, M King, S Moralee, et al.The enterprise ontology [J].The knowledge engineering Review, 1998, 13(1):31.
(责任编辑胡安娜)
Research on Detection of SQL Injection Attack Based on Ontology
CHEN Jiali, ZHUANG Jinlian
(School of Mathematics and Computer Science, LongYan University, Longyan, Fujian 364012 , China)
After explaining the concept and processes of SQL injection attack, a way to detect the SQL injection attack based on ontology was presented. By establishing the domain ontology and taking information comparison between normal web pages and abnormal web pages (pages which might include SQL injection vulnerabilities), it detected the SQL injection attack vulnerabilities which exist in the web pages. The experimental results indicated that this method had higher accurateness.
SQL injection attack, ontology, network security, information comparison
龙岩学院校立服务海西面上项目(编号LYXY2011055)成果之一。
2014-3-24
陈佳丽(1983-),女,汉族,湖北仙桃人,硕士,讲师,研究方向为现代数据库与信息安全。Email:chenjialicjl425@163.com。
TP 393.1
A
1674-9545(2014)02-0037-(05)