基于Mysql和SQL server数据库安全分析
【摘要】网站后台数据库的安全,对企业内部客户信息等数据和企业网站正常运行至关重要。为保证网站数据库安全,增强企业网站运营的可靠性,本文将从数据库系统的用户权限、目录权限、漏洞探测和密码窃听四个方面对MYSQL和MSSQL数据库做安全性分析,并结合实例给出解决问题的出路。
【关键词】MYSQL;MSSQL;安全分析;漏洞探测
动态网站的安全是关系到网站是否正常运行的根本,而企业内部客户信息等数据的安全更是其命脉所在,这些数据通常都保存在网站的后台数据库中,那么安全可靠的数据库是至关重要的。目前中小型企业多使用MYSQL和MSSQL作为后台数据库。
本文将从数据库系统的用户权限、目录权限、漏洞探测和密码窃听四个方面对MYSQL和MSSQL数据库做安全性分析。
1.测试环境
Windows server 2003网络操作系统,默认系统管理员账户,在IIS6.0上配置网站和FTP服务器,系统支持asp,Asp.Net,PHP。安装有MySql5.1和SQL server2008数据库系统。
2.数据库安全性分析
2.1 用户权限
(1)当你试图联接一个MySQL服务器时,身份检查使用user表中3个字段(Host,User和Password)。服务器在user表条目中匹配你的主机名和用户名,并当你提供了正确的口令才接受连接。我们通过root用户和密码,连接数据库后,使用select命令查看用户和权限。如图1所示。
图1 Mysql初始用户及权限
第一条说明可在本机使用root用密码登陆,拥有删除记录,修改记录,删除表等权限,如果密码强壮,那么,这是安全的。
第二条表示在任何主机使用root不需密码登陆,拥有删除记录,修改记录,删除表等权限,’%’在Host列里意味着“任何主机”并且是不特定的。
第三条表示在本机(localhost)匿名登陆,拥有删除记录,修改记录,删除表等权限,空白User值意味着“任何用户”并且是最不特定的。
第四条表示可以在任何主机匿名登陆,但没有任何权限。
显然,第二,三,四都是不安全的!
解决方法:如果你不需要远程维护,删除掉第二条,delete from user where host=“%”and user=“root”;或者给它加个强壮的密码。删除第三条和第四条。
(2)MSSQL数据库的权限控制是基于master库的syslogins表,拥有所有权限的帐号是sa,其他还有sysadmin,db_owner等不同权限帐号。由于SQL Server不能删除Sa这个超级用户,所以必须对这个帐号进行最强的保护,如使用非常强壮的密码。新建立一个拥有与Sa一样权限的超级用户来管理数据库,只有当其它系统管理员不可用或忘了密码时才使用Sa。定期检查所有登陆帐号,查看是否有不符合要求的密码。
如下命令检查是否有空口令帐号存在。
Use master
Select name,Password from syslogins where password is null
尽可能的删除存储扩展,防止本地用户利用存储扩展执行恶意命令。
如下命令删除xp_cmdshell扩展。
use master
sp_dropextendedproc xp_cmdshell
2.2 目录权限
(1)一般不会让服务器主机上的其它用户拥有对数据库目录文件的写访问权,但仅仅是读访问权也非常危险。由于像GRANT和SET PASSWORD这样的查询都被记录到日志中去了,常规和更新日志文件包含了有关密码的敏感查询文本。如果一个攻击具有对这些日志的读访问权,那么他只要在日志文件中查找GRANT或PASSWORD这样的敏感单词,就很容易找到密码的明文。要消除这些安全漏洞,就要安排数据库目录及其中所有文件和目录的所有权。
MySQL默认安装到c:\mysql,c盘默认everyone有读取和运行权限,由于权限的继承性,everyone对c:\mysql也有读取和运行权限,如图2所示,显然这是不安全的。
图2 windows2003默认目录用户及权限
解决方法:把mysql目录文件改为只有某个管理员账户(如windows下的
adminis-trator账户)可读写。
(2)MSSQL也是安装到c盘,由于存取控制问题,最好安装到d盘等非系统盘进行严格的权限控制。而且,由于MSSQL数据库与系统结合非常紧密,系统管理员在没有数据库密码的情况下也可以通过选择windows验证来操作数据库。因此,普通用户有可能通过系统漏洞提升自己的权限,对数据库进行破坏。
解决办法:除了严格的存取外,还要定期查看SQL Server日志检查是否有可疑的登录事件发生。
对于MSSQL的安全是和windows系统安全紧密结合的,操作系统中帐户设置越多,安全性就越差。因此网络服务器只允许一个指定系统管理员进行管理是至关重要的。
具体要遵循如下原则:
①将唯一的系统管理员Administrator重命名,改为一个不易猜出的长名字,从而为攻击增加一层障碍。
②将Guest帐号禁用,同时重命名为一个复杂的名字,增加口令。因为guest帐号不能被删除只能改名。有的黑客工具可以利用guest账号的弱点,将帐号权限从一般用户提升到管理员权限,从而破坏系统。
③给系统管理员帐号一个复杂的口令,长度最少在8位以上,且必须同时包含字母、数字、特殊字符。其次不要使用熟悉的单词、熟悉的键盘顺序、熟悉的数字等。因为口令是黑客攻击的重点,口令一旦被突破也就无任何系统安全可言了,而这往往是不少网管最易忽视的地方。④口令必须定期更改,且最好记在心里,除此以外不要在任何地方做记录。
⑤针对密码破译,采用Windows Server 2003提供的账号锁定功能,设定登录最大允许的出错次数,一旦登录次数超过设定次数,系统会自动锁定账号,这样致使密码破译无法进行。另外,如果在日志审核中发现某个帐号被连续尝试,则必须立刻更改此帐号(包括用户名和口令)。
2.3 服务器漏洞探测
(1)MySQL安全漏洞
例1:MySQL CREATE TABLE调用绕过访问漏洞。
漏洞描述:CVE ID:CVE-2008-7247
当数据主目录包含有到不同文件系统的符号链接时,MySQL的ql/sql_table.cc允许通过认证的远程攻击者通过以特殊DATA DIRECTORY或
INDEX DIRECTORY参数调用CREATE TABLE绕过预期的访问,执行各种非授权操作。
解决方法:下载厂商补丁http://lists.mysql.com/commits/59711
例2:MySQL SELECT语句(下转第35页)(上接第24页)处理拒绝服务漏洞。
MySQL的mysqld守护程序没有正确地处理在执行某些带有子查询的SELECT语句期间所产生的错误,在执行使用GeomFromWKB函数的语句期间没有保留某些null_value标记,这允许通过认证的远程攻击者通过提交特制语句导致守护程序崩溃。
目前厂商已经发布了升级补丁以修复这个安全问题,到厂商的主页下载:
http://lists.mysql.com/commits/88409
http://lists.mysql.com/commits/87482
(2)默认的情况下,MSSQL则会打开TCP的1433端口监听
虽然MSSQL可以人为的改变监听端口,但是通过微软未公开的1434端口的UDP探测可以很容易知道MSSQL使用的是什么TCP/IP端口。往UDP1434端口发送一个1个字节的内容为02的数据包,被探测的系统则会返回安装的MSSQL服务信息,这些信息包括:主机名称、实例名称、版本、管道名称以及使用的端口等。这个端口是微软自己使用,而且不象默认的1433端口那样可以改变,1434是不能改变的。由于利用了UDP端口,一般的过滤是很难防范的。
解决办法:安装防火墙,或者利用Windows 2003系统的IPSEC对网络连接进行IP,实现IP数据包的安全性。对IP连接进行,只保证自己的IP能够访问,拒绝其他IP进行的端口连接,把来自网络上的安全威胁进行有效的控制。重要的是,还要对端口作过滤,包括大部分的TCP和UDP端口,因为仅仅做IP的话,有可能恶意攻击者先攻击被数据库服务器信任的主机,控制之后作为跳板对数据库服务器进行攻击。
2.4 密码窃听
在单机环境下,基于用户口令本身的保密性(与口令长度、复杂性等有关),可以在一定程度上防止其他用户进入系统。但在网络环境下,存在另外一种威胁:攻击者可通过窃听通信信道或进行网络窥探的方法,在口令的明文传输过程中获得用户口令,使得这种身份认证方法变得极不安全。
MySQL和MSSQL系统客户与服务器构架的一个重要问题就是通过网络传送数据时的安全问题。如果客户与服务器间的交互以纯文本形式发生,黑客就可
能“嗅出”被传送的数据包,从而获得机密信息。
解决方法:可以通过激活MySQL和MSSQL系统配置中的SSL,或应用一个OpenSSH这样的安全应用来为传送的数据建立一个安全的加密“通道”,以关闭这一漏洞。以这种形式加密客户与服务器连接可使未授权用户极难查阅往来的数据。另外的办法就是将口令加密传输,现在有多种加密技术,常用的是单向函数加密技术,如在系统中使用MD5算法来实现口令的加密存储与传输。
3.总结
网站后台数据库的安全分析,目的就是保证企业内部客户信息等数据的安全和企业网站的正常运行。从上面的安全分析结果来看,网站后台数据库的安全依赖于良好的安全管理和有效的安全策略。实际上数据库的安全是一个十分复杂的工程,这里只体现了其中的几个侧面,更精深的安全管理,有待于我们在实践和应用中不断地深入研究。
参考文献
[1][美]戴尔著.李红军,李冬梅,等,译.MySQL核心技术手册[M].机械工业出版社(第2版).
[2]http://database.51cto.com/col/484/,51cto.com网.数据库频道.