SQL注入式攻击下的数据库安全
2021-04-25史旭宁姜楠蒋青山
史旭宁 姜楠 蒋青山
摘要:随着数据库技术和网络技术的迅速成长,数据库已经应用到各行各业,同时,数据的安全问题也随之推上浪尖。本文将从应用的角度出发,论述了SQL Server安全措施;同时,本文对SQL注入式攻击的原理、步骤、危害进行必要讲解,并着重阐述对SQL注入式攻击的防范措施。
关键词:数据库安全;SQL注入;身份认证;数据加密;字符规范
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2021)09-0025-02
开放科学(资源服务)标识码(OSID):
1 绪论
随着数据库和网络技术的迅速成长,数据库已经应用到各行各业,所谓的“模式”也随之发生变化,就当下而言,最为主流的模式便是Web前台加后台服务器的模式。后台服务器最核心的部分当属后台数据库,故一个服务器的Web服务器是否安全,很大程度上取决于Web端的安全控制,以及数据库的安全检测与防护。尽管开发者早已认识到这一点,但数据库攻击的案例却屡见不鲜:从互联网刚兴起时雅虎的数据泄漏,到2011年CSDN的用户信息被盗,再到“12306”的数据泄漏等等。这一切都在告诉我们:web服务器的安全还是要不断提升。
2 数据库的安全机制
数据库的安全机制一般需要满足三方面要求:首先,需要满足数据库、数据语义、操作等方面的完整性;其次,数据库授权了用户才能获得数据、并且对用户的行为进行记录,审计;再次, 数据库授权用户对数据获取和各种操作[1]。此安全机制包含以下6项内容:
2.1身份认证
身份认证是数据库管理系统提供的第一道保护屏障,这个证明形式不是唯一的,有着多样性,比如动态口令鉴别,静态口令鉴别,数字证书鉴别, 生物特征鉴别,智能卡识别等。
2.2访问控制
访问控制是数据库安全中的核心技术,主要指访问主体对访问客体权限的定义,并将其登记到数据字典中进行合法权限的检查,主要有登录权限、确定访问权限以及操作权限3个部分[2]。
2.3系统文件
作为数据库系统的运行平台,操作系统(OS)为数据库系统提供着安全保护,相反,因为数据库以文件的形式存在于操作系统中,而且操作系统自身的安全配置和漏洞也会引发不安全事件,入侵者也会因为OS的原因窃取或篡改数据库文件和数据,所以,使用安全性高一些的系统,对OS进行安全配置和系统修补,加强OS的安全管理,对其用户管理和权限进行合理分配,也是数据库管理系统安全机制管理手段之一[3]。
2.4数据库加密
数据库的加密包含加密保护存储的敏感数据,以及加密保护传输过程来控制非法访问,从而数据库的加密包含加密保护存储的敏感数据,以及加密保护传输过程来控制非法访问[4],加密过程首先是将明文数据通过使用加密技术加密成密文数据,查询时,进行逆向操作,又将密文数据去掉解密,还原成明文数据,这样即便硬盘丢失也不会担心泄密,当然成本也随之提高。
2.5数据库审计
数据库审计包括实时监控数据库,记录各类操作行为的机制,数据库审计能够跟踪、定位, 及时发现数据库系统的异常使用,阻断各类违规操作,总之,管理人员可以通过数据库审计得到有效的预警机制和行为记录。
2.6.备份和恢复
任何一个数据库系统总是避免不了会发生故障,所以,定期对数据库进行备份是非常必要的,为了提高数据恢复的概率,可以将数据保存在多个存储设备中,并将最初的数据文件进行备份。
3 SQL注入式攻击
SQL注入式攻击,简单地说就是利用程序漏洞,绕过程序的权限,将SQL命令插入到页面请求的查询字符串或者输入域进行攻击,结果是轻则获得敏感信息和数据,重则控制服务器。
图1是典型的SQL注入式攻击图:
3.1攻击原理
SQL注入式攻击有直接攻击法和间接攻击法两种,前者是直接将代码插入到用户输入变量,该变量与SQL命令串联在一起,故称之为直接攻击法;后者是将恶意代码注入字符串中,该字符串存于表中并连接动态SQL命令来执行恶意SQL代码[5]。
下面将再现一个最简单的登录页面 login.asp ,源代码如图2所示:
登录验證脚本checkuser.asp如图3所示:
此 Web 网站用户栏若输入sysop'and 1=1--,则在 checkuser.asp 中, “--”为注释语句。SQL 语句中已经正确放入输入的 SQL 条件并执行,最终获取到自己想要的各种信息。
3.2 攻击步骤
3.2.1 SQL注入漏洞的判断
首先,定期查看IIS日志中的文件信息,如果IIS中的日志数量持续增加,就有SQL注入攻击的可能;其次,如果数据库出现一些含有大量外来信息的临时的表格,而且这些表格与我们平时的表格有不同的结构,这也是受到SQL注入攻击的一种现象;最后,可以依据检验用户输入的数据等信息进行判断。
检测注入漏洞最简单的方法是在用户输入变量的时候,输用一个单引号" ' ",比如在登录时,用户名填为:1',因为这个额外的单引号,有缺陷的代码就会结束当前的语句,并返回一个提示报错的页面或是数据库错误的提示,即说明存在SQL注入漏洞。
SQL注入漏洞通常存在于:
(1) Web表单输入域;
(2) UOL的一部分SQL查询中;
(3) 存储在缓存中的参数,并且这些参数要回传给服务器;
(4) 页面的隐藏字段。
3.2.2收集信息
在SQL进一步的攻击之前,会收集提示的数据库报错信息、了解目标系统的输出机制,判断数据库类型、了解SQL语句、表名、字段名以及查询方式,用户的权限以及数据库和操作系统的交互程度是非常有必要的,然后根据SQL注入漏洞与数据表名、字段名等对数据库进行攻击[6]。
3.2.3提取数据
使用“having 1=1”语句枚举一个表的所有列来获得数据库的结构,获取了数据库结构便容易读出表中数据,如图4所示:
3.2.4与OS交互的两种方式
(1)执行系统命令;
(2)攻击者可以通过读取、配置系统文件来执行命令;
3.2.5扩大影响
以攻破的主机作为主阵地,为了扩大攻击范围,使用“select * from sysservers” 在 MS SQL Server 中可查询网络中的其他主机,然后使用 OPENROWSET 命令入侵其他主机事轻而易举的事情。
4 数据库安全防范措施
4.1服务器安全配置
服务器的安全设置可以参见第一章的内容。主要从身份认证、访问控制、数据库加密、数据库审计和备份、恢复等方面考虑。
4.2数据加密
对数据的加密主要是防止物理性攻击。在登录服务器时可以使用Windows和SQL身份认证混合模式,且将登录名称、密码等数据加密保存。鉴于有些存储过程很容易被利用,将不必要的存储过程删除, 也是一个防范的措施。
4.3数据过滤和字符规范
4.3.1对于动态构造SQL查询的场合,可用以下方法
(1)限制查询数据库账户权限。使用不同账户执行Query、INSERT、UPDATE或DELETE命令等操作。
(2)替换单引号,为了防止攻击者修改 SQL 命令的含义,也就是说,把所有单独出现的一个单引号换成两个单引号。
(3)避免输入或者直接删除连字符,原因是此类查询的后面已被注释,攻擊者只需要取得合法用户名,就可以轻松获得访问权限。
4.3.2 使用存储过程来执行所有的查询,数据库的权限只容许在一定的存储过程中执行
限制用户可以输入的字符长度。那么大于这个长度就不被认可,这将极大增加数据库安全系数。
保障合法数据。在服务器端和客户端分别进行数据检查,保障输入内容只包含合法数据。
使用参数化语句并尽可能使用SQL Server数据库自带的安全参数,数据库工程师在开发产品时要尽量采用参数化语句,通过参数来传递这个变量,因为输入的变量不是直接嵌入到SQL语句,这种方法可以提升设定执行计划能够使用的固定次数,降低了数据库的工作压力,提高了运行效率,对防范SQL注入攻击起到了重要作用,同时也保护了用户的隐私和安全[7]。
5结束语
在互联网高速发展的背景下, SQL注入已显然成为B/S系统一个很严重的安全问题。本文对数据库的安全机制,SQL注入式攻击原理、攻击方式、类型做了详细阐述,同时重点分析了如何有效防范SQL注入式攻击,关于如何防范还有待进一步研究探索。
参考文献:
[1] 袁玫,林志英,刘劲松.网络数据库应用教程[M].北京:人民邮电出版社,2003:13.
[2] 薛玉芳,李洁琼,李亚军.数据库安全与防护性的技术研究[J].中国新技术新产品,2011(3):20.
[3] 刘雪梅.基于SQL Server数据库的安全性对策探究[J].电脑编程技巧与维护,2019(9):96-98.
[4] 刘博.数据库加密技术在WEB平台的研究与应用[D].西安:西安电子科技大学,2007.
[5] 牛方华,杨大哲,刘瑞芳.电力信息系统结构化查询语言注入攻击原理及安全防护[J].山西电力,2014(4):38-40.
[6] 徐嘉铭.SQL注入攻击原理及在数据库安全中的应用[J].电脑编程技巧与维护,2009(18):104-106.
[7] 于雷.SQL数据库注入攻击的Java Web防御对策[J].电脑迷,2017(22):27.
【通联编辑:光文玲】