SQL注入问题的研究与防护

        随着互联网的发展,Web应用程序得到了日益广泛的运用,与此同时黑客技术也得到了发展,Web应用程序的安全漏洞类型越来越多样化,所带来的安全隐患越多。SQL注入漏洞契机利用Web应用程序的安全漏洞进行SQL注入攻击达到绕过身份验证、窃取和破坏数据、伺机非法入侵等目的。本文围绕Web项目中的常见的SQL注入攻击的特点、原理并进行总结,提出在应用程序原有防御基础上使用输入验证、SQL Sever防御以及使用存储过程替代参数化查询相结合的形式构建出一种有效防范 SQL 注入攻击的思路和方法。测试结果表明该防范模型具有较高安全性和实用性。

1绪论

1.1研究背景及意义

自2017年6月1日的《中华人民共和国网络安全法》的正式实施开始,网络安全意识开始从法律意识深入人心。同时国家的信息安全漏洞共享平台收录的安全漏洞数量逐年增加。应用程序、Web应用、操作系统、网络设备、安全产品和数据库存在的漏洞数量分别占总漏洞数量的59.2%,17.6%,12.9%,7.7%,1.5%,1.1%[1],存在漏洞影响的对象分布如图1.1所示。Web应用程序漏洞数量在全部漏洞数量排行第二,由此可见Web应用漏洞数量比较大,如图 1。

图1 安全漏洞分布图

据调查,在对互联网金融网站的安全评估检测结果显示SQL注入漏洞数量位居首位,占整个物互联网站漏洞数量的22%。SQL注入漏洞层一旦导致信息被泄露、被盗取或者被篡改。轻则使交互双方承受巨大的经济损失,重则影响国家经济和社会的稳定。由此可见仍需重视SQL注入漏洞。

 1.2 国内外研究现状

   1.2.1  国内研究现状

国内外对于 SQL 注入攻击的研究,主要集中在检测和防御两个方面。并且在检测方法研

究上也变得多元化,检测方法也变得更有深度。一般是将数据和命令语句分隔开,或者供参数化的接口。对初始的字符串进行封装,并对输入进行验证,对于特殊字符的过滤。避免使用通俗的对象名,比如简单的数据库名、表名。对于容易受到攻击的 URL或页面,通过打虚拟补丁的技术来降低威胁。

   1.2.2  国外研究现状

目前来说国外对于SQL注入攻击的问题更偏检测,主要是结合比较流行的技术进行SQL注入攻击的探测。同时对于新型的SQL注入类型提出了相关的研究,在SQL注入攻击的防御方面结合比较流行的机器学习技术进行SQL注入攻击防御研究[2]。

2  SQL注入攻击

2.1  SQL注入攻击的概念

SQL 注入攻击源于英文“SQL Injection Attack”,目前对 SQL 注入技术还没有标准的定义,常见的是对这种攻击形式、特点的描述。所谓 SQL 注入攻击,就是利用 SQL注入技术来实施的网络攻击。许多该类型的应用程序在设计与开发时没有充分考虑到数据合法性校验问题,对 SQL 语句传入的参数没有做出严

格的检查和处理,使其在应用中存在安全隐患。通常将存在SQL 注入点的程序或者网站称为 SQL 注入漏洞,即,SQL 注入是在有数据库连接的 Web 应用程序中出现的一种漏洞,在这类应用程序中允许用户输入查询条件,攻击者将查询条件嵌入到 SQL 查询语句中,利用 SQL 语法构造出畸形的 SQL 语句,发送到与该应用程序相关联的数据库服务器中去执行,导致攻击者能够欺骗数据库服务器执行非授权的任意查询,根据程序查询返回的结果,攻击者可以获取他想得到的信息,比如数据库服务器管理员的账号和密码。

2.2  SQL注入攻击的特性

(1) 广泛性。所有基于 SQL 语言标准的数据库软件都可能成为 SQL 注入攻击的目标。如果 Web 应用程序没有对输入的SQL语句做严格的规范都会形成安全隐患,均具有被SQL注入攻击的可能。

(2) 隐蔽性。SQL 注入利用的是正常的 HTTP 服务端口,攻击者可以借助合法用户身份通过网页对网站数据库进行访问与修改,所以目前市面上的防火墙都不会对 SQL 注入发出警报,使得 SQL 注入攻击隐蔽性极强,不易被发现。

(3) 门槛低。目前互联网上出现了许多 SQL 注入攻击工具,攻击者如果使用此类工具进行攻击,将在攻击效果大致相同的情况下大大降低对攻击者所需专业知识与技术的要求。

(4)变种多。有经验的攻击者能手动调整攻击参数,在注入攻击时能根据具体情况进行分析,构造巧妙的SQL语句,致使攻击数据的变种非常多,这导致传统的特征匹配检测方法仅能识别相当少的攻击,难以防范。

(5) 危害大。由于 Web 编程语言自身的缺陷以及具有安全编程能力的开发人员还比较少,大多数 Web 应用系统均具有被 SQL 注入攻击的可能。而攻击者一旦攻击成功,可以控制整个Web应用系统,对数据做任意地修改,给网站和用户产生极大的危害。

3 SQL注入攻击的原理与实现

3.1  SQL注入攻击的基本原理

SQL 注入攻击主要是以合法的身份为掩护通过构建畸形SQL 语法组合,以常规输入方式将该组合作为参数传入系统后台,并结合系统自动执行该 SQL 语句来进行恶意操作。下面简要介绍 SQL 数字型注入攻击的实例,如图2。

3.1.1 数字型攻击实例

在数字型攻击的页面输入数字查询对应人物如图 2 所示,之后使用Burp Suite软件中抓到对应的数据包,对所获数据构建畸形SQL 语法,即加入 or 1=1 ,即可在render页面获得库中全部数据,如图 3 所示。

图 2 数字型注入攻击实例

构建畸形语句

图3  数字型注入攻击数据结果

3.2  SQL注入攻击的常用途径

攻击者可以通过很多方法来达到控制数据库的目的,以下是常用途径。

(1)借助扩展存储过程 (xp_cmdshell)以 SQL-Server 用户的身份在数据库服务器上执行命令;

(2)借助扩展存储过程 (xp_regread) 读取注册表的键值,也包括 SAM(只要 SQL-Server 是以一个本地账号运行的);

(3)改变服务器设置;

4 SQL注入攻击的防范方法

SQL 注入攻击的检测分为事前检测和事后检测两种。检测的目的就是为制定和完善 Web 项目的防范模型与执行模块。所以设计主动式防范模型,在 Web 项目中合理嵌入防范SQL 注入模块是 Web 项目设计和开发者必须要考虑的问题。

防范模型可以选择SQL注入攻击自动防范模型[3],如图 1所示。

图1 SQL注入自动防范模型

4.1   输入验证

数据合法性验证方法有以下几种:

(1)数据格式有效控制

(2)拒绝已知的非法输入

(3)只接受已知的合法的输入

4.2   SQL Server 防御

在创建数据库构架时应该考虑以下问题:

(1)选择数据库联接方式

网络库可用性的“Network utility”检验。

(2)数据库账号的管理

①创建低权限账号;

②删除冗余的账号;

③保持账号密码的高安全性,并正常运行一个密码审计脚本。

(3)数据库对象的管理

①许多扩展存储可以安全地删除,如果这些已经做了,应删除冗余包含扩展存储的 dll;

②删除冗余的用户数据库实例,比如 SQL 数据库自带的“northwind”和“pubs”数据库等。

(4)数据库角色的管理

确保需要使用 Web 应用的 SQL 用户具有最低访问权限。

4.3  使用存储过程替换参数化查询

存储过程可以在创建的时候被编译,但是这些 SQL 语句在创建的时候会被冻结住,如果存在以下的输入:

exec ValidateUser @FirstName = N''' or 1=1--',@LastName =

N''Where @FirstName contains the following characters: ' or 1=1—

其违规字段为:'or 1=1- 当FirstName包含'or 1=1-这样的字符时,无论输入的@Fir-st Name 或是@LastName,存储过程都将始终只有执行在创建时候所定义在存储过程中的 SELECT 语句。SQL 语句的执行

是不可能因为输入而改变的。此存储过程包含 2 个都是字符串的输入,不论这些输入字符串包含什么,都会被总是当作字符串。即该操作使一个分号被视为普通的输入字符,而不是SQL 语句的分隔符。

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值