我在我的机子上面用管理员帐号默认安装了mssql和mysql以便在相同的情况下测 试他们的安全性。我的系统配置如下:操作系统Microsoft Windows 2000 Version5.0, 安装了sp4,ftp服务和iis服务,支持asp和php。系统只有一个管理员帐号admin,guest 帐号没有禁用。
一.系统内部安全性分析
1.mysql数据库权限控制问题
mysql的权限控制是基于mysql这个数据库的,叫做授权表,一共包括包括六个表 columns_priv,db,func,host,tables_priv和user。先使用desc user命令查看非 常重要的user表的结构以便查询内容,现在可以查看他的权限设置了。 使用命令select host,user,password,delete_priv,update_priv,drop_priv from user; 这个命令查看了几个比较危险的权限,显示结果如下: mysql> select host,user,password,delete_priv,update_priv,drop_priv from user; +-----------+------+------------------+-------------+-------------+-----------+ | host | user | password | delete_priv | update_priv | drop_priv | +-----------+------+------------------+-------------+-------------+-----------+ | localhost | root |0e4941f53f6fa106 | Y | Y | Y | | % | root | | Y | Y | Y | | localhost | | | Y | Y | Y | | % | | | N | N | N | +-----------+------+------------------+-------------+-------------+-----------+ 4 rows in set (0.00 sec) 第一条表示在本机使用root用密码登陆,拥有删除记录,修改记录,删除表等权限, 好,这是安全的。第二条表示在任何主机使用root不需密码登陆,拥有删除记录, 修改记录,删除表等权限。第三条表示在本机匿名登陆,拥有删除记录,修改记 录,删除表等权限。最后条表示可以再任何主机匿名登陆,但是没有任何权限。 显然,第二,三,四都是不安全的!第二条不用说,就第三条而言,就算你在本地 是guest权限,但是也可以登陆mysql数据库,而且拥有全部权限。这样,就可以对数 据库为所欲为了。 解决方法:如果你不需要远程维护,删除掉第二条,delete from user where host="%" and user="root";或者给它加个强壮的密码。删除第三条,delete from user where host="localhost" and user="";
mssql数据库的权限控制是基于master库的syslogins表,拥有所有权限的帐号是 sa,其他还有sysadmin,db_owner等不同权限帐号。但是,mssql数据库最高权限帐 号sa的默认密码是空,这样如果安装的时候不注意,就会给数据带来毁灭性的灾难。 恶意攻击者可以修改,删除所有数据,更加重要的是mssql帐号可以利用扩展执行系 统命令。 解决方法:定期检查所有登陆帐号,查看是否有不符合要求的密码。 Use master Select name,Password from syslogins where password is null命令检查是否有空 口令帐号存在。尽可能的删除存储扩展,防止本地用户利用存储扩展执行恶意命令。 use master sp_dropextendedproc xp_cmdshell 命令删除xp_cmdshell扩展。
为了安全,可以让mysql服务运行在内网,但是如果你的机器有外网的接口,mysql也会自动被绑定在外网上面,暴露在internet中,而且系统会在TCP的3306端口监听,非常容易被端口扫描工具发现,不能保证数据安全。如果默认,mssql则会打开TCP的1433端口监听。虽然mssql可以人为的改变监听端口,但是通过微软未公开的1434端口的UDP探测可以很容易知道SQL Server使用的什么TCP/IP端口了。往UDP1434端口 发送一个1个字节的内容为02的数据包,被探测的系统则会返回安装的mssql服务信息,这些信息包括:主机名称、实例名称、版本、管道名称以及使用的端口等。这个端口是微软自己使用,而且不象默认的1433端口那样可以改变,1434是不能改变的。一个典型的返回的信息如下: ServerName;Sky;InstanceName;sky;IsClustered;No;Version;8.00.194;tcp;3341;np;\\sky\pipe\MSSQL$XHT310\sql\query; 可以发现mssql的tcp端口改成了3341,为攻击者打开了方便之门!只要会一点socket编程知识,很容易就可以写出扫描mssql服务的程序,而且,由于利用了udp端口,一般的过滤是很难防范的。 补天的awen写了个探测程序,用的是c#语言,代码如下: using System; using System.Net.Sockets; using System.Net; using System.Text; using System.Threading;
namespace ConsoleApplication3 {
class Class1 { //创建一个UDPCLIENT实例 private static UdpClient m_Client;