MySQL数据库的安全机制分析与入侵检测开发

时间:2022-09-04 06:33:09

MySQL数据库的安全机制分析与入侵检测开发

摘要:针对MySQL开源数据库,具体分析其内部和外部的安全机制;重点分析了如何防止未经授权的文件系统访问和网络访问。通过与其他大型数据库的对比,指出MySQL数据库存在的不安全隐患;总结了各种漏洞的存在对系统构成的风险,并给出相应的防范对策。最后,在以MySQL为后台数据库的网络环境中,进行了针对多种漏洞的攻击实验。

关键词:数据库;安全机制;MySQL;漏洞检测;注入漏洞

中图分类号:TP311.13文献标识码:A文章编号:1009-3044(2012)04-0745-04

Safety Mechanism Analysis of MySQL and Intrusion Detection Development

CHI Mei-xia

(Tongji University, Shanghai 201804, China)

Abstract: The paper presents the open source database MySQL, about a detailed analysis of its internal and external security mechanism, for example, the user security mechanism, the security mechanism based on the authorized form, the settings and the structures of the authorized form, access mechanism, etc. Analysis focused on how to prevent unauthorized access to the file system and network access. And by contrast to other large-scale databases, it shows the hidden dangers that exist in the MySQL database. Then, it sums up the risks of a variety of loopholes and the corresponding preventive measures. Finally, it shows the experiments, which attack against all kinds of loopholes in the network environment based on MySQL. The results show that MySQL database can resist the attack after security settings and the input parameters filtering.

Key words: database; security mechanism; MySQL; vulnerability detection; injection

MySQL是一个快速的、多线程、多用户和健壮的SQL数据库服务器。MySQL的结构是C/S(即客户机/服务器)模式的,由一个服务器守护程序mysqld和不同的客户程序以及库文件组成。MySQL的主要特点是健壮、快速和易用。目前MySQL被广泛地应用在中小型网站中。由于体积小,速度快,尤其是开放源码这一特点,满足了中小型网站降低网站总体拥有成本的需求。MySQL服务器支持关键任务、重负载生产系统的使用,也可嵌入到大配置的软件中。

1MySQL数据库的安全机制

数据库的安全不仅指数据库服务器的安全,也包括保护整个服务器主机的安全[1],防范偷听、重放、修改和拒绝服务等各种类型的可能攻击。这里着重分内部和外部安全性两部分来探讨。

1.1内部安全性

内部安全性关心的是文件系统级的问题,即防止MySQL数据目录受到在服务器主机有帐号的人(合法或窃取的)的攻击。如果数据目录内容的权限过分授予,使得每个人均能简单地替代对应于那些数据库表的文件,那么确保控制客户通过网络访问的授权表设置正确就毫无意义了。

1.2外部安全性

外部安全性关心的是从外部通过网络连接服务器的问题,即保护MySQL服务器,免受来自网络对服务器的连接攻击。这必须设置MySQL授权表,使得用户除非提供有效的用户名和口令,否则不允许访问服务器管理的数据库内容。

1.3访问控制技术

访问控制[2]是用来保证信息系统中数据完整性和保密性的一项重要技术手段和方法。访问控制的实现首先要考虑对合法用户进行验证,然后是对控制策略的选用与管理[3],最后要对没有非法用户或是越权操作进行管理[4]。

在MySQL中,基于连接主机和用户名这两个信息进行身份的认证。而身份的检查使用user表的Host、User和Password三个列执行。只有客户端主机名和用户名与服务器的user表记录的Host和User列实现了匹配,并且提供了正确的密码时才接受连接。

在User列中通配符是非法的,但是可以指定空的值,它匹配任何名字。user表匹配的空用户名被认为是匿名用户。这意味着在连接期间一个空的用户名被用于进一步的访问检查。Password列可以是空的。它不是通配符,也不意味着匹配任何密码,而意味着用户必须不指定一个密码进行连接。user表的Password列除了空值外都代表加密后的密码。MySQL使用加密后的密码存储,而且正在试图连接的用户提供的密码也使用PASSWORD( )函数被加密,在连接过程中使用加密的密码检查密码是否正确。从MySQL角度,加密后的密码是实际密码,因此从安全角度考虑,不应让其它人访问它,特别是,绝对不要让非管理用户读MySQL数据库中的表。

如果连接中的客户端名和用户名与user表中的多行匹配,服务器会在启动时读入user表后进行排序,然后当用户试图连接时,以排序的顺序浏览条目,最后服务器使用与客户端和用户名匹配的首行进行匹配。对在该连接上发生的每个请求,服务器都首先检查请求执行什么操作,然后检查是否有足够的权限来执行它。db表和host表授予数据库特定的权限[5]。在服务器启动时,db表和host表被读取并排序,同时读user表。db表在Host、Db和User范围列上排序,并且host表在Host和Db范围列上排序。对于user表,首先根据最具体的值排序,最后根据最不具体的值排序。当服务器寻找匹配条目时,使用它找到的首项进行匹配。

2漏洞检测技术

2.1技术介绍

漏洞检测技术[6]是一项重要的安全技术,也称漏洞扫描技术,即对系统进行检查,发现其中可被攻击者利用的安全隐患。该技术可以分为以下四类:

第一,基于网络的漏洞检测技术。它采用的方法是积极的、非破坏性的。这种技术可以发现一系列平台的漏洞,易安装,还针对已知的网络漏洞进行检验。它的缺点是在一定程度上会影响网络的性能。

第二,基于应用的漏洞检测技术。它采用的方法是被动的、非破坏性的,适用于检查应用软件包的设置。

第三,基于主机的漏洞检测技术。它采用方法是被动的、非破坏性的。这种技术可以非常准确地定位系统的问题,发现系统的漏洞,还可以实现口令解密、剔除一些简单的口令。它的缺点是升级复杂,与平台相关。

第四,基于目标的漏洞检测技术。它采用的方法是被动的、非破坏性的。适用于检查系统属性和文件属性,如数据库、注册号等。通过消息文摘算法,对文件的加密数进行检验,一旦发现改变就通知管理员。

2.2 SQL注入漏洞

2.2.1 SQL注入的原理

结构化查询语言(SQL)是一种文本语言,它用来和数据库进行交互。SQL注入的原理[7]就是利用某些数据库的外部接口把用户数据插入到实际的数据库操作语言当中,从而达到入侵数据库乃至操作系统的目的。它的产生主要是由于程序对用户输入的数据没有进行细致的过滤,导致非法数据的导入查询。

SQL注入攻击的途径是构建“特殊的输入”,它们是SQL语法中的一些组合,将这些输入作为参数传入Web应用程序,然后通过执行SQL语句而执行攻击者想要执行的操作,从而达到攻击的目的。

SQL攻击分成如下六类:没有正确过滤转义字符;类型的不正确处理;数据库服务器中的漏洞;盲目SQL注入式攻击;条件性差错;时间延误。

2.2.2 SQL注入攻击的防范

1)使用参数化的过滤性语句――要防御SQL注入,用户的输入就绝对不能直接被嵌入到SQL语句中。恰恰相反,用户的输入必须进行过滤,或者使用参数化的语句[8]。参数化的语句使用参数而不是将用户输入嵌入到语句中。在多数情况中,SQL语句就得以修正。然后,用户输入就被限于一个参数。

2)避免使用解释程序――因为这正是黑客们借以执行非法命令的手段。

3)避免出现一些详细的错误消息――因为黑客们可以利用这些消息。要使用一种标准的输入确认机制[9]来验证所有的输入数据的长度、类型、语句等。可以通过在IIS上设置自定义错误头来避免详细的错误信息。

4)用存储过程来执行所有的查询――SQL参数的传递方式将防止攻击者利用单引号和连字符实施攻击。此外,它还使得数据库权限可以限制到只允许特定的存储过程执行,所有的用户输入必须遵从被调用的存储过程的安全上下文,这样就很难再发生注入式攻击了。

5)检查提取数据的查询所返回的记录数量――如果程序只要求返回一个记录,但实际返回的记录却超过一行,那就当作出错处理。还可以通过审计查询日志来发现是否存在此类漏洞攻击。

3实验分析

3.1实验环境

实验环境的架构如图1所示:

图1环境构建图

首先,在MySQL中创建数据库office_db,然后再执行create.asp程序,建立数据库表admin和teach以及插入相应的数据。

3.2实验

利用MySQL作为后台数据库,建立一个信息管理网站。正常登录进入的页面如下:

图2主页

1)猜解单引号有没有被屏蔽:结果没有被屏蔽

正常的SQL语句为:

select * form admin where admin_name=’123’and admin_password=‘fae’

构造的注入SQL语句为:

①select * from admin where admin_name=’123’or 1=1# and admin_password=‘fae’

②select * from admin where admin_name=’123’or 1=1/* and admin_password=‘fae*/#’

③select * from admin where admin_name=’123’or 1=1/* and admin_password=‘fae*/-- kk’

④select * from admin where admin_name=’123’or 1=1-- kk and admin_password=‘fae’

①中由于#表注释,所以select语句执行的条件变为“admin_name=’123’or 1=1”,又因为“1=1”恒为真,所以select语句一定会执行,并进入主页admin.asp(见图3),从而实现了注入攻击。其他的注入方式类似。

图3注入界面

2)猜解分号有没有被屏蔽:MyODBC限制了分号分隔的多条语句执行

正常的SQL语句为:select * from admin where admin_name=’123’and admin_password=‘fae’

构造的注入语句为:select * from admin where admin_name=’123’or 1=1;

insert into admin values(’user123’,’user123’,5,’综合办’,0) # and admin_password=‘fae’;

即在用户名字段中输入:123’or 1=1; insert into admin values(’user123’,’user123’,5,’综合办’,0) #

在SQL Server中,这条两条SQL语句构成的语句可以在远端成功注入,将在表admin中插入一条非法用户记录,这样就可以以此身份登录了。登录的主页见图4。

图4 SQL Server中注入示例

注意:在欢迎语句中,其提示为欢迎用户:

123’or 1=1; insert into admin values(’user123’,’user123’,5,’综合办’,0) #

实际的执行过程为:在SQL中分别执行了select * from admin where admin_name=’123’or 1=1和insert into admin values(’us? er123’,’user123’,5,’综合办’,0),其他信息被注释掉了。

此时,我们就可以以用户user123来登录了,用户名及密码都输入user123,结果如表5所示:

图5用非法用户登录成功

这样,我们就成为了合法用户,当然这在管理员没有发现之前,能够做这种注入的前提是必须知道用户表和其中的字段名,这就需要不断的试验,用不同的试验语句去探测和对前台登录页面的分析,不断的猜测其字段和用户表,猜测的过程可以如下:

①对表名和数据库表字段的猜测,可能的表名:admin,admin_table, user,user_table,据其使用的场合和环境,以及其登录页面的源代码,源代码在客户端能看到的,从中找寻其命名表和表字段的规律以及可能使用的名字,可以看见在源代码中最常使用的是admin,admin_password,admin_name,admin_office,根据这些去猜测。对于程序员来讲,为了方便记忆和管理,一般都要求前后台使用的命名和字段一致,同时跟数据库的命名有一定的关系,这需要一定的经验。相应的字段也是一致的,但是字段不一定能猜全,不一定需要全部的字段,只需要部分关键的字段就可以。

②有了一定的猜测以后,不断的变化可能的组合和语句,分析其可能的表构造,来构造相应的注入sql语句,目的要么是取得已经有的用户名和用户密码,要么在相应的表格中建立你需要的用户和密码,这样都能登录,当然取得已经有的用户和密码被管理员发现的可能性比较小隐蔽性较好。

4总结

通过分析MySQL数据库的安全机制,指出了机制中的不安全因素,同时给出了改进的建议。还总结了MySQL数据库存在的漏洞,基于此数据库进行了SQL注入漏洞的检测开发。分析了这种漏洞产生的危害性,并提出了相应的防范方法以阻止这种漏洞被攻击者所利用。

参考文献:

[1]丁大勇,王琴.SQL Server与数据安全性[J].电脑知识与技术,2007,4(24):184-185.

[2]马新强,王保华,李丹宁,等.LogicSQL数据库的强制存取控制模型研究与实现[J].计算机研究与发展,2006,43(8):162-167.

[3]李斓,冯登国,徐震.多级安全OS与DBMS模型的信息流及其一致性分析[J].计算机学报,2005,28(7):1123-1129.

[4]彭兵,罗薇.基于JavaBean的数据库访问技术[J].电脑知识与技术,2007,3(13):21-22.

[5]袁晓东,冯颖.B1级数据库管理系统强制存取控制模型研究[J].计算机学报,2000,23(10):1096-1101.

[6]孙钢锋,韩权印.网络隐患扫描器的设计与实现[J].计算机工程,2006,32(7):253-255.

[7]刘帅.SQL注入攻击及其方法检测技术研究[J].电脑知识与技术,2009,5(10):7870-7872.

[8] Denning D,Akl S,Heckman M,et al.Views for Multilevel Database Security[C]//IEEE Transactions on Software Engineering,1987,13(2): 129-140.

[9] Sandhu R,Chen F.The multilevel relational (MLR) data model[C]//ACM Transactions on Information and System Security,1998,1(1): 93-132.

上一篇:MIMO-OFDM系统中的跨层资源分配研究 下一篇:641台局域网802.1x+Radius认证技术的应用