网站运营 | 站长学院 | 技术文档 | 成语 | 歇后语 | 桌面壁纸 | 帝国时代 | 代码收藏 | IP地址查询 | 生活百科 | 生日密码 | CSS压缩 | 用户评论

Mssql和Mysql的安全性分析

【 网络作者:yanweidong1030 更新时间:2005-09-19 | 字体:
[导读]数据库是电子商务<、金融以及ERP系统的基础<,通常都保存着重要的商业伙伴和客户信息<。大多数企业、组织以及政府部门的电子数据都保存在各种数据库中,他们用这些数据库保存一些个人资料,还掌握着敏感的金融数据。但是...

数据库是电子商务<、金融以及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目录的存取权限<<?<;蛘呓玬ysql安装到其他目录,如果
你移动Mysql分发到D:mysql<,你就必须使用用
D:mysqlinmysqld --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 ServerMSSQLLOG*.*<。
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;\skypipeMSSQL$XHT310sqlquery; 可以发现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;\AWENpipeMSSQL$XHT310sqlquery;

 


解决办法:安装防火墙,或者利用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注入攻击也非??膳?。好了<<,限于篇幅,这篇文章到此结束。

  • 转载请注明来源:网站运营 网址:http://www.chinawobo.com/ 向您的朋友推荐此文章
  • 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载<,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意<。如果本站转载的文章有版权问题请联系我们<<,我们会尽快予以更正<<。
RSS订阅
  • QQ邮箱
  • 填写您的邮件地址<,订阅我们的精彩内容:
更多
© 2017 网站运营 - T086.com(原itlearner.com)
微商货源 | 冠珠陶瓷 | 迪威乐云商devmsn | 易奇八字 | wwe美国职业摔角 | 八字算命 | 河南旅游景点大全 |
RunTime:6.82ms QueryTime:7