分享
 
 
 

Mssql和Mysql的安全性分析

王朝asp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

数据库是电子商务、金融以及ERP系统的基础,通常都保存着重要的商业伙伴和

客户信息。大多数企业、组织以及政府部门的电子数据都保存在各种数据库中,他们

用这些数据库保存一些个人资料,还掌握着敏感的金融数据。但是数据库通常没有象

操作系统和网络这样在安全性上受到重视。数据是企业,组织的命脉所在,因此选择

一款安全的数据库是至关重要的。大型网站一般使用oracle或DB2,而中小型网站大

多数使用更加灵活小巧的mssql数据库或者mysql数据库。那么,在同样的条件下,微

软的mssql和免费的mysql哪个更加安全呢?

我在我的机子上面用管理员帐号默认安装了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="";

2.mysql安装目录权限问题

mysql默认安装到c:\mysql,但是c盘默认是everyone完全控制,由于权限的继承

性,c:\mysql对everyone也是完全控制的,显然这样是不安全的。因为恶意用户可以

删除重要的数据文件。

解决方法:重新设置mysql目录的存取权限。或者将mysql安装到其他目录,如果

你移动Mysql分发到D:\mysql,你就必须使用用

D:\mysql\bin\mysqld --basedir D:\mysql来启动mysqld,甚至还需要修改它的配置

文件。

3.mssql数据库权限控制问题

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扩展。

4.mssql安装目录权限问题

同mysql一样,mssql也是安装到everyone完全控制c盘,由于存取控制问题,最

好安装到d盘等非系统盘进行严格的权限控制。而且,由于mssql数据库与系统结合非常紧密,

系统管理员在没有数据库密码的情况下也可以通过选择windows验证来操作数据库。因此,普通用户有

可能通过系统漏洞提升自己的权限,对数据库进行破坏。

解决办法:除了严格的存取限制外,还要定期查看SQL Server日志检查是否有可

疑的登录事件发生,或者使用DOS命令findstr /C:"登录" d:\Microsoft SQL Server\MSSQL\LOG\*.*。

mssql的安全是和windows系统安全紧密结合的,任何一个出现漏洞,都会威胁到另一个的安全。

总结,在系统内部安全性上,mysql和mssql都没有达到令人满意的程度,帐号安全,存取权限

都控制的不是很好。但是mssql有详细的日志可以查看登陆情况,比mysql要高出一筹。如果进行了

合理的设置,mysql反而要更加安全些,因为对mssql而言,只要有系统权限即可拥有数据库权限。

二.外部网络安全性分析

1.数据库服务的探测

为了安全,可以让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;

//LISTEN用来获取返回的信息

public static string Listen(string hostip)

{

string HostIP = hostip;

IPAddress thisIP = IPAddress.Parse(HostIP);

IPEndPoint host = new IPEndPoint(thisIP,1434);

byte [] data = m_Client.Receive(ref host);

Encoding ASCII = Encoding.ASCII;

String strData = ASCII.GetString(data);

return strData;

}

//SEND

public static void Send(string hostip)

{

string HostIP = hostip;

byte [] buffer = {02};

//02为要发送的数据,只有02、03、04有回应

int ecode = m_Client.Send(buffer,1,HostIP,1434);

//ecode用来返回是否成功发送

if(ecode <= 0)

{

Console.WriteLine("发送时出错:" + ecode);

}

}

//对返回的信息的简单的处理

public static void OutputInfo(string strdata)

{

string str = strdata;

//str.le

char [] that = {‘;‘,‘;‘};

string [] strofthis =str.Split(that);

//int i= 0

for(int i=0;i{

Console.Write(strofthis);

Console.Write(‘

‘);

}

}

//输入IP

public static string InputHostIP()

{

Console.Write("enter the ip you want to scan:

");

string hostip =Console.ReadLine();

Console.Write(‘

‘);

return hostip;

}

//EXIT

public static void Exit()

{

Console.WriteLine("if you want to exit ,just input 1

");

int a = Console.Read();

if(a!= 1)

{

Console.WriteLine("if you want to exit ,just input 1

");

Console.Read();

}

else

{

}

}

[STAThread]

static void Main(string[] args)

{

string HostIP;

HostIP = InputHostIP();

Console.WriteLine("Begin to send udp to the host");

m_Client = new UdpClient();

Send(HostIP);

string strData=Listen(HostIP);

OutputInfo(strData);

Exit();

}

}

}

3一个典型的返回的信息

ServerName;AWEN;

InstanceName;AWEN;

IsClustered;No;

Version;8.00.194;

tcp;1044; (TCP的端口,可见就算改了端口也是很容易找到的)

np;\\AWEN\pipe\MSSQL$XHT310\sql\query;

解决办法:安装防火墙,或者利用Windows 2000系统的ipsec对网络连接进行ip限制,实现IP数据包

的安全性。对IP连接进行限制,只保证自己的IP能够访问,拒绝其他IP进行的端口连接,把来自网络上的安

全威胁进行有效的控制。重要的是,还要对端口作过滤,包括大部分的tcp和udp端口,因为仅仅做ip限制

的话,有可能恶意攻击者先攻击被数据库服务器信任的主机,控制之后作为跳板对数据库服务器进行攻击。

2.数据库的密码探测

密码攻击包括两种,破解密码和网络监听。破解密码是使用工具不停的连接数据库来猜测密码,

包括字典攻击,暴力攻击和界于两者之间的半暴力半字典攻击。通常攻击者先采用字典攻击的方法,

没有成功的话依次采用半暴力半字典攻击,暴力攻击。在网络速度够好,电脑运算能力够强的情况下,这

样的密码攻击危害是相当大的。网络监听则是控制一台网络设备,在上面运行监听工具捕获在网络中

传送的密码信息。网络监听可以分为两种,一种是外部的监听,将侦听工具软件放到网络连接的设备或者

放到可以控制网络连接设备的电脑上,这里的网络连接设备,比如网关服务器,比如路由器等等。另外一

种是来自内部的监听,对于不安全的局域网,数据是采用广播的方式传播的,只要把网卡设置为混杂模

式即可接收到本来不属于自己的数据包,当然可能包括密码信息等资料。

解决方法:针对密码破解,只要把密码设置为足够强壮,并且对同个ip地址不停的连接请求进行屏蔽即可。

但是对于监听来说,网络传输的时候如果不加密的话,所有的网络传输都是明文的,包括密码、数据库内容等

等,不管多么复杂的密码都是于事无补的,这是一个很大的安全威胁。所以,在条件容许情况下,最好使用SSL

来加密协议,当然,你需要一个证书来支持。并且,对于网络监听应该及时发现,如果网络中的丢包率突然提

高,那么就有理由怀疑网络遭到监听。

3.脚本安全

脚本安全本身就是个非常复杂的问题,足以写一篇专业的长篇分析文章,而且我对脚本不是很内行,mix,envymask,pskey,angel他们比较疯狂,哈哈。脚本

安全主要是对提交的数据缺乏严格的检查导致的,比较危险的符号有“;”,“ ”,“#”,“--”,“$”,

“\”等。这个问题最初被认为是asp+sql server的问题,但是很快就发现实质上它的影响非常大,后来有人继续

深入发现在php+mysql该问题依然会存在,san对php作过深入分析,有兴趣的去安全焦点找他的文章。对于脚本

好象没有特有效的解决方法,只有依靠程序员的个人素质了……

总结,不管是mysql,还是mssql,在外部网络中,都受到相当大的威胁。相比而言,mssql受到的威胁

甚至要更大些,最近2年来,mssql暴露出了多个远程溢出漏洞。如果配置的比较好的话,我认为,mysql要

比mssql安全一些,因为随时会爆发的新溢出漏洞是防不胜防的,而且能够执行系统命令的sql注入攻击也非常可怕。好了,限于篇幅,这篇文章到此结束。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有