Mssql和Mysql的安全性分析
Mssql和Mysql的安全性分析
數(shù)據(jù)庫是電子商務(wù)、金融以及ERP系統(tǒng)的基礎(chǔ),通常都保存著重要的商業(yè)伙伴和客戶信息。大多數(shù)企業(yè)、組織以及政府部門的電子數(shù)據(jù)都保存在各種數(shù)據(jù)庫中,他們用這些數(shù)據(jù)庫保存一些個(gè)人資料,還掌握著敏感的金融數(shù)據(jù)。但是數(shù)據(jù)庫通常沒有象操作系統(tǒng)和網(wǎng)絡(luò)這樣在安全性上受到重視。數(shù)據(jù)是企業(yè),組織的命脈所在,因此選擇一款安全的數(shù)據(jù)庫是至關(guān)重要的。大型網(wǎng)站一般使用oracle或DB2,而中小型網(wǎng)站大多數(shù)使用更加靈活小巧的mssql數(shù)據(jù)庫或者mysql數(shù)據(jù)庫。那么,在同樣的條件下,微軟的mssql和免費(fèi)的mysql哪個(gè)更加安全呢?
我在我的機(jī)子上面用管理員帳號默認(rèn)安裝了mssql和mysql以便在相同的情況下測試他們的安全性。我的系統(tǒng)配置如下:操作系統(tǒng)Microsoft Windows 2000 Version5.0,安裝了sp4,ftp服務(wù)和iis服務(wù),支持asp和php。系統(tǒng)只有一個(gè)管理員帳號admin,guest帳號沒有禁用。
一、系統(tǒng)內(nèi)部安全性分析
1、mysql數(shù)據(jù)庫權(quán)限控制問題
mysql的權(quán)限控制是基于mysql這個(gè)數(shù)據(jù)庫的,叫做授權(quán)表,一共包括包括六個(gè)表columns_priv,db,func,host,tables_priv和user。先使用desc user命令查看非常重要的user表的結(jié)構(gòu)以便查詢內(nèi)容,現(xiàn)在可以查看他的權(quán)限設(shè)置了。
使用命令select host,user,password,delete_priv,update_priv,drop_priv from user;這個(gè)命令查看了幾個(gè)比較危險(xiǎn)的權(quán)限,顯示結(jié)果如下:
+-----------+------+------------------+-------------+-------------+-----------+
| 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)
第一條表示在本機(jī)使用root用密碼登陸,擁有刪除記錄,修改記錄,刪除表等權(quán)限,好,這是安全的。第二條表示在任何主機(jī)使用root不需密碼登陸,擁有刪除記錄,修改記錄,刪除表等權(quán)限。第三條表示在本機(jī)匿名登陸,擁有刪除記錄,修改記錄,刪除表等權(quán)限。最后條表示可以再任何主機(jī)匿名登陸,但是沒有任何權(quán)限。
顯然,第二,三,四都是不安全的!第二條不用說,就第三條而言,就算你在本地是guest權(quán)限,但是也可以登陸mysql數(shù)據(jù)庫,而且擁有全部權(quán)限。這樣,就可以對數(shù)據(jù)庫為所欲為了。
解決方法:如果你不需要遠(yuǎn)程維護(hù),刪除掉第二條,delete from user where host="%" and user="root";或者給它加個(gè)強(qiáng)壯的密碼。刪除第三條,delete from user where host="localhost" and user="";
2、mysql安裝目錄權(quán)限問題
mysql默認(rèn)安裝到c:/mysql,但是c盤默認(rèn)是everyone完全控制,由于權(quán)限的繼承性,c:/mysql對everyone也是完全控制的,顯然這樣是不安全的。因?yàn)閻阂庥脩艨梢詣h除重要的數(shù)據(jù)文件。
解決方法:重新設(shè)置mysql目錄的存取權(quán)限。或者將mysql安裝到其他目錄,如果你移動Mysql分發(fā)到D:/mysql,你就必須使用D:/mysql/bin/mysqld --basedir D:/mysql來啟動mysqld,甚至還需要修改它的配置文件。
3、mssql數(shù)據(jù)庫權(quán)限控制問題
mssql數(shù)據(jù)庫的權(quán)限控制是基于master庫的syslogins表,擁有所有權(quán)限的帳號是sa,其他還有sysadmin,db_owner等不同權(quán)限帳號。但是,mssql數(shù)據(jù)庫最高權(quán)限帳號sa的默認(rèn)密碼是空,這樣如果安裝的時(shí)候不注意,就會給數(shù)據(jù)帶來毀滅性的災(zāi)難。惡意攻擊者可以修改,刪除所有數(shù)據(jù),更加重要的是mssql帳號可以利用擴(kuò)展執(zhí)行系統(tǒng)命令。
解決方法:定期檢查所有登陸帳號,查看是否有不符合要求的密碼。
Use master
Select name,Password from syslogins where password is null命令檢查是否有空口令帳號存在。盡可能的刪除存儲擴(kuò)展,防止本地用戶利用存儲擴(kuò)展執(zhí)行惡意命令。
use master
sp_dropextendedproc xp_cmdshell 命令刪除xp_cmdshell擴(kuò)展。
4、mssql安裝目錄權(quán)限問題
同mysql一樣,mssql也是安裝到everyone完全控制c盤,由于存取控制問題,最好安裝到d盤等非系統(tǒng)盤進(jìn)行嚴(yán)格的權(quán)限控制。而且,由于mssql數(shù)據(jù)庫與系統(tǒng)結(jié)合非常緊密,系統(tǒng)管理員在沒有數(shù)據(jù)庫密碼的情況下也可以通過選擇windows驗(yàn)證來操作數(shù)據(jù)庫。因此,普通用戶有可能通過系統(tǒng)漏洞提升自己的權(quán)限,對數(shù)據(jù)庫進(jìn)行破壞。
解決辦法:除了嚴(yán)格的存取限制外,還要定期查看SQL Server日志檢查是否有可疑的登錄事件發(fā)生,或者使用DOS命令findstr /C:"登錄" d:/Microsoft SQL Server/MSSQL/LOG/*.*。
mssql的安全是和windows系統(tǒng)安全緊密結(jié)合的,任何一個(gè)出現(xiàn)漏洞,都會威脅到另一個(gè)的安全。
總結(jié),在系統(tǒng)內(nèi)部安全性上,mysql和mssql都沒有達(dá)到令人滿意的程度,帳號安全,存取權(quán)限都控制的不是很好。但是mssql有詳細(xì)的日志可以查看登陸情況,比mysql要高出一籌。如果進(jìn)行了合理的設(shè)置,mysql反而要更加安全些,因?yàn)閷ssql而言,只要有系統(tǒng)權(quán)限即可擁有數(shù)據(jù)庫權(quán)限。
二、外部網(wǎng)絡(luò)安全性分析
1、數(shù)據(jù)庫服務(wù)的探測
為了安全,可以讓mysql服務(wù)運(yùn)行在內(nèi)網(wǎng),但是如果你的機(jī)器有外網(wǎng)的接口,mysql也會自動被綁定在外網(wǎng)上面,暴露在internet中,而且系統(tǒng)會在TCP的3306端口監(jiān)聽,非常容易被端口掃描工具發(fā)現(xiàn),不能保證數(shù)據(jù)安全。如果默認(rèn),mssql則會打開TCP的1433端口監(jiān)聽。雖然mssql可以人為的改變監(jiān)聽端口,但是通過微軟未公開的1434端口的UDP探測可以很容易知道SQL Server使用的什么TCP/IP端口了。往UDP1434端口
發(fā)送一個(gè)1個(gè)字節(jié)的內(nèi)容為02的數(shù)據(jù)包,被探測的系統(tǒng)則會返回安裝的mssql服務(wù)信息,這些信息包括:主機(jī)名稱、實(shí)例名稱、版本、管道名稱以及使用的端口等。這個(gè)端口是微軟自己使用,而且不象默認(rèn)的1433端口那樣可以改變,1434是不能改變的。一個(gè)典型的返回的信息如下:
ServerName;Sky;InstanceName;sky;IsClustered;No;Version;8.00.194;tcp;3341;np;//sky/pipe/MSSQL$XHT310/sql/query;可以發(fā)現(xiàn)mssql的tcp端口改成了3341,為攻擊者打開了方便之門!只要會一點(diǎn)socket編程知識,很容易就可以寫出掃描mssql服務(wù)的程序,而且,由于利用了udp端口,一般的過濾是很難防范的。 補(bǔ)天的awen寫了個(gè)探測程序,用的是c#語言,代碼如下:
using System;
using System.Net.Sockets;
using System.Net;
using System.Text;
using System.Threading;namespace ConsoleApplication3
{
class Class1
{
//創(chuàng)建一個(gè)UDPCLIENT實(shí)例
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為要發(fā)送的數(shù)據(jù),只有02、03、04有回應(yīng)
int ecode = m_Client.Send(buffer,1,HostIP,1434);
//ecode用來返回是否成功發(fā)送
if(ecode <= 0)
{
Console.WriteLine("發(fā)送時(shí)出錯(cuò):" + 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一個(gè)典型的返回的信息
ServerName;AWEN;
InstanceName;AWEN;
IsClustered;No;
Version;8.00.194;
tcp;1044; (TCP的端口,可見就算改了端口也是很容易找到的)
np;//AWEN/pipe/MSSQL$XHT310/sql/query;
解決辦法:安裝防火墻,或者利用Windows2000系統(tǒng)的ipsec對網(wǎng)絡(luò)連接進(jìn)行ip限制,實(shí)現(xiàn)IP數(shù)據(jù)包的安全性。對IP連接進(jìn)行限制,只保證自己的IP能夠訪問,拒絕其他IP進(jìn)行的端口連接,把來自網(wǎng)絡(luò)上的安全威脅進(jìn)行有效的控制。重要的是,還要對端口作過濾,包括大部分的tcp和udp端口,因?yàn)閮H僅做ip限制的話,有可能惡意攻擊者先攻擊被數(shù)據(jù)庫服務(wù)器信任的主機(jī),控制之后作為跳板對數(shù)據(jù)庫服務(wù)器進(jìn)行攻擊。
2、數(shù)據(jù)庫的密碼探測
密碼攻擊包括兩種,破解密碼和網(wǎng)絡(luò)監(jiān)聽。破解密碼是使用工具不停的連接數(shù)據(jù)庫來猜測密碼, 包括字典攻擊,暴力攻擊和界于兩者之間的半暴力半字典攻擊。通常攻擊者先采用字典攻擊的方法,沒有成功的話依次采用半暴力半字典攻擊,暴力攻擊。在網(wǎng)絡(luò)速度夠好,電腦運(yùn)算能力夠強(qiáng)的情況下,這樣的密碼攻擊危害是相當(dāng)大的。網(wǎng)絡(luò)監(jiān)聽則是控制一臺網(wǎng)絡(luò)設(shè)備,在上面運(yùn)行監(jiān)聽工具捕獲在網(wǎng)絡(luò)中傳送的密碼信息。網(wǎng)絡(luò)監(jiān)聽可以分為兩種,一種是外部的監(jiān)聽,將偵聽工具軟件放到網(wǎng)絡(luò)連接的設(shè)備或者 放到可以控制網(wǎng)絡(luò)連接設(shè)備的電腦上,這里的網(wǎng)絡(luò)連接設(shè)備,比如網(wǎng)關(guān)服務(wù)器,比如路由器等等。另外一 種是來自內(nèi)部的監(jiān)聽,對于不安全的局域網(wǎng),數(shù)據(jù)是采用廣播的方式傳播的,只要把網(wǎng)卡設(shè)置為混雜模式即可接收到本來不屬于自己的數(shù)據(jù)包,當(dāng)然可能包括密碼信息等資料。
解決方法:針對密碼破解,只要把密碼設(shè)置為足夠強(qiáng)壯,并且對同個(gè)ip地址不停的連接請求進(jìn)行屏蔽即可。 但是對于監(jiān)聽來說,網(wǎng)絡(luò)傳輸?shù)臅r(shí)候如果不加密的話,所有的網(wǎng)絡(luò)傳輸都是明文的,包括密碼、數(shù)據(jù)庫內(nèi)容等 等,不管多么復(fù)雜的密碼都是于事無補(bǔ)的,這是一個(gè)很大的安全威脅。所以,在條件容許情況下,最好使用SSL
來加密協(xié)議,當(dāng)然,你需要一個(gè)證書來支持。并且,對于網(wǎng)絡(luò)監(jiān)聽?wèi)?yīng)該及時(shí)發(fā)現(xiàn),如果網(wǎng)絡(luò)中的丟包率突然提 高,那么就有理由懷疑網(wǎng)絡(luò)遭到監(jiān)聽。
3、腳本安全
腳本安全本身就是個(gè)非常復(fù)雜的問題,足以寫一篇專業(yè)的長篇分析文章,而且我對腳本不是很內(nèi)行,mix,envymask,pskey,angel他們比較瘋狂,哈哈。腳本
安全主要是對提交的數(shù)據(jù)缺乏嚴(yán)格的檢查導(dǎo)致的,比較危險(xiǎn)的符號有“;”,“ ”,“#”,“--”,“$”,“/”等。這個(gè)問題最初被認(rèn)為是asp+sqlserver的問題,但是很快就發(fā)現(xiàn)實(shí)質(zhì)上它的影響非常大,后來有人繼續(xù)深入發(fā)現(xiàn)在php+mysql該問題依然會存在,san對php作過深入分析,有興趣的去安全焦點(diǎn)找他的文章。對于腳本
好象沒有特有效的解決方法,只有依靠程序員的個(gè)人素質(zhì)了……
總結(jié),不管是mysql,還是mssql,在外部網(wǎng)絡(luò)中,都受到相當(dāng)大的威脅。相比而言,mssql受到的威脅甚至要更大些,最近2年來,mssql暴露出了多個(gè)遠(yuǎn)程溢出漏洞。如果配置的比較好的話,我認(rèn)為,mysql要比mssql安全一些,因?yàn)殡S時(shí)會爆發(fā)的新溢出漏洞是防不勝防的,而且能夠執(zhí)行系統(tǒng)命令的sql注入攻擊也非常可怕。好了,限于篇幅,這篇文章到此結(jié)束。
數(shù)據(jù)庫是電子商務(wù)、金融以及ERP系統(tǒng)的基礎(chǔ),通常都保存著重要的商業(yè)伙伴和客戶信息。大多數(shù)企業(yè)、組織以及政府部門的電子數(shù)據(jù)都保存在各種數(shù)據(jù)庫中,他們用這些數(shù)據(jù)庫保存一些個(gè)人資料,還掌握著敏感的金融數(shù)據(jù)。但是數(shù)據(jù)庫通常沒有象操作系統(tǒng)和網(wǎng)絡(luò)這樣在安全性上受到重視。數(shù)據(jù)是企業(yè),組織的命脈所在,因此選擇一款安全的數(shù)據(jù)庫是至關(guān)重要的。大型網(wǎng)站一般使用oracle或DB2,而中小型網(wǎng)站大多數(shù)使用更加靈活小巧的mssql數(shù)據(jù)庫或者mysql數(shù)據(jù)庫。那么,在同樣的條件下,微軟的mssql和免費(fèi)的mysql哪個(gè)更加安全呢?
我在我的機(jī)子上面用管理員帳號默認(rèn)安裝了mssql和mysql以便在相同的情況下測試他們的安全性。我的系統(tǒng)配置如下:操作系統(tǒng)Microsoft Windows 2000 Version5.0,安裝了sp4,ftp服務(wù)和iis服務(wù),支持asp和php。系統(tǒng)只有一個(gè)管理員帳號admin,guest帳號沒有禁用。
一、系統(tǒng)內(nèi)部安全性分析
1、mysql數(shù)據(jù)庫權(quán)限控制問題
mysql的權(quán)限控制是基于mysql這個(gè)數(shù)據(jù)庫的,叫做授權(quán)表,一共包括包括六個(gè)表columns_priv,db,func,host,tables_priv和user。先使用desc user命令查看非常重要的user表的結(jié)構(gòu)以便查詢內(nèi)容,現(xiàn)在可以查看他的權(quán)限設(shè)置了。
使用命令select host,user,password,delete_priv,update_priv,drop_priv from user;這個(gè)命令查看了幾個(gè)比較危險(xiǎn)的權(quán)限,顯示結(jié)果如下:
+-----------+------+------------------+-------------+-------------+-----------+ | 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) |
第一條表示在本機(jī)使用root用密碼登陸,擁有刪除記錄,修改記錄,刪除表等權(quán)限,好,這是安全的。第二條表示在任何主機(jī)使用root不需密碼登陸,擁有刪除記錄,修改記錄,刪除表等權(quán)限。第三條表示在本機(jī)匿名登陸,擁有刪除記錄,修改記錄,刪除表等權(quán)限。最后條表示可以再任何主機(jī)匿名登陸,但是沒有任何權(quán)限。
顯然,第二,三,四都是不安全的!第二條不用說,就第三條而言,就算你在本地是guest權(quán)限,但是也可以登陸mysql數(shù)據(jù)庫,而且擁有全部權(quán)限。這樣,就可以對數(shù)據(jù)庫為所欲為了。
解決方法:如果你不需要遠(yuǎn)程維護(hù),刪除掉第二條,delete from user where host="%" and user="root";或者給它加個(gè)強(qiáng)壯的密碼。刪除第三條,delete from user where host="localhost" and user="";
2、mysql安裝目錄權(quán)限問題
mysql默認(rèn)安裝到c:/mysql,但是c盤默認(rèn)是everyone完全控制,由于權(quán)限的繼承性,c:/mysql對everyone也是完全控制的,顯然這樣是不安全的。因?yàn)閻阂庥脩艨梢詣h除重要的數(shù)據(jù)文件。
解決方法:重新設(shè)置mysql目錄的存取權(quán)限。或者將mysql安裝到其他目錄,如果你移動Mysql分發(fā)到D:/mysql,你就必須使用D:/mysql/bin/mysqld --basedir D:/mysql來啟動mysqld,甚至還需要修改它的配置文件。
3、mssql數(shù)據(jù)庫權(quán)限控制問題
mssql數(shù)據(jù)庫的權(quán)限控制是基于master庫的syslogins表,擁有所有權(quán)限的帳號是sa,其他還有sysadmin,db_owner等不同權(quán)限帳號。但是,mssql數(shù)據(jù)庫最高權(quán)限帳號sa的默認(rèn)密碼是空,這樣如果安裝的時(shí)候不注意,就會給數(shù)據(jù)帶來毀滅性的災(zāi)難。惡意攻擊者可以修改,刪除所有數(shù)據(jù),更加重要的是mssql帳號可以利用擴(kuò)展執(zhí)行系統(tǒng)命令。
解決方法:定期檢查所有登陸帳號,查看是否有不符合要求的密碼。
Use master
Select name,Password from syslogins where password is null命令檢查是否有空口令帳號存在。盡可能的刪除存儲擴(kuò)展,防止本地用戶利用存儲擴(kuò)展執(zhí)行惡意命令。
use master
sp_dropextendedproc xp_cmdshell 命令刪除xp_cmdshell擴(kuò)展。
4、mssql安裝目錄權(quán)限問題
同mysql一樣,mssql也是安裝到everyone完全控制c盤,由于存取控制問題,最好安裝到d盤等非系統(tǒng)盤進(jìn)行嚴(yán)格的權(quán)限控制。而且,由于mssql數(shù)據(jù)庫與系統(tǒng)結(jié)合非常緊密,系統(tǒng)管理員在沒有數(shù)據(jù)庫密碼的情況下也可以通過選擇windows驗(yàn)證來操作數(shù)據(jù)庫。因此,普通用戶有可能通過系統(tǒng)漏洞提升自己的權(quán)限,對數(shù)據(jù)庫進(jìn)行破壞。
解決辦法:除了嚴(yán)格的存取限制外,還要定期查看SQL Server日志檢查是否有可疑的登錄事件發(fā)生,或者使用DOS命令findstr /C:"登錄" d:/Microsoft SQL Server/MSSQL/LOG/*.*。
mssql的安全是和windows系統(tǒng)安全緊密結(jié)合的,任何一個(gè)出現(xiàn)漏洞,都會威脅到另一個(gè)的安全。
總結(jié),在系統(tǒng)內(nèi)部安全性上,mysql和mssql都沒有達(dá)到令人滿意的程度,帳號安全,存取權(quán)限都控制的不是很好。但是mssql有詳細(xì)的日志可以查看登陸情況,比mysql要高出一籌。如果進(jìn)行了合理的設(shè)置,mysql反而要更加安全些,因?yàn)閷ssql而言,只要有系統(tǒng)權(quán)限即可擁有數(shù)據(jù)庫權(quán)限。
二、外部網(wǎng)絡(luò)安全性分析
1、數(shù)據(jù)庫服務(wù)的探測
為了安全,可以讓mysql服務(wù)運(yùn)行在內(nèi)網(wǎng),但是如果你的機(jī)器有外網(wǎng)的接口,mysql也會自動被綁定在外網(wǎng)上面,暴露在internet中,而且系統(tǒng)會在TCP的3306端口監(jiān)聽,非常容易被端口掃描工具發(fā)現(xiàn),不能保證數(shù)據(jù)安全。如果默認(rèn),mssql則會打開TCP的1433端口監(jiān)聽。雖然mssql可以人為的改變監(jiān)聽端口,但是通過微軟未公開的1434端口的UDP探測可以很容易知道SQL Server使用的什么TCP/IP端口了。往UDP1434端口
發(fā)送一個(gè)1個(gè)字節(jié)的內(nèi)容為02的數(shù)據(jù)包,被探測的系統(tǒng)則會返回安裝的mssql服務(wù)信息,這些信息包括:主機(jī)名稱、實(shí)例名稱、版本、管道名稱以及使用的端口等。這個(gè)端口是微軟自己使用,而且不象默認(rèn)的1433端口那樣可以改變,1434是不能改變的。一個(gè)典型的返回的信息如下:
ServerName;Sky;InstanceName;sky;IsClustered;No;Version;8.00.194;tcp;3341;np;//sky/pipe/MSSQL$XHT310/sql/query;可以發(fā)現(xiàn)mssql的tcp端口改成了3341,為攻擊者打開了方便之門!只要會一點(diǎn)socket編程知識,很容易就可以寫出掃描mssql服務(wù)的程序,而且,由于利用了udp端口,一般的過濾是很難防范的。 補(bǔ)天的awen寫了個(gè)探測程序,用的是c#語言,代碼如下:
using System; using System.Net.Sockets; using System.Net; using System.Text; using System.Threading; namespace ConsoleApplication3 class Class1 //LISTEN用來獲取返回的信息 } } } Console.Write(strofthis); } "); [STAThread] static void Main(string[] args) } |
3一個(gè)典型的返回的信息
ServerName;AWEN;
InstanceName;AWEN;
IsClustered;No;
Version;8.00.194;
tcp;1044; (TCP的端口,可見就算改了端口也是很容易找到的)
np;//AWEN/pipe/MSSQL$XHT310/sql/query;
解決辦法:安裝防火墻,或者利用Windows2000系統(tǒng)的ipsec對網(wǎng)絡(luò)連接進(jìn)行ip限制,實(shí)現(xiàn)IP數(shù)據(jù)包的安全性。對IP連接進(jìn)行限制,只保證自己的IP能夠訪問,拒絕其他IP進(jìn)行的端口連接,把來自網(wǎng)絡(luò)上的安全威脅進(jìn)行有效的控制。重要的是,還要對端口作過濾,包括大部分的tcp和udp端口,因?yàn)閮H僅做ip限制的話,有可能惡意攻擊者先攻擊被數(shù)據(jù)庫服務(wù)器信任的主機(jī),控制之后作為跳板對數(shù)據(jù)庫服務(wù)器進(jìn)行攻擊。
2、數(shù)據(jù)庫的密碼探測
密碼攻擊包括兩種,破解密碼和網(wǎng)絡(luò)監(jiān)聽。破解密碼是使用工具不停的連接數(shù)據(jù)庫來猜測密碼, 包括字典攻擊,暴力攻擊和界于兩者之間的半暴力半字典攻擊。通常攻擊者先采用字典攻擊的方法,沒有成功的話依次采用半暴力半字典攻擊,暴力攻擊。在網(wǎng)絡(luò)速度夠好,電腦運(yùn)算能力夠強(qiáng)的情況下,這樣的密碼攻擊危害是相當(dāng)大的。網(wǎng)絡(luò)監(jiān)聽則是控制一臺網(wǎng)絡(luò)設(shè)備,在上面運(yùn)行監(jiān)聽工具捕獲在網(wǎng)絡(luò)中傳送的密碼信息。網(wǎng)絡(luò)監(jiān)聽可以分為兩種,一種是外部的監(jiān)聽,將偵聽工具軟件放到網(wǎng)絡(luò)連接的設(shè)備或者 放到可以控制網(wǎng)絡(luò)連接設(shè)備的電腦上,這里的網(wǎng)絡(luò)連接設(shè)備,比如網(wǎng)關(guān)服務(wù)器,比如路由器等等。另外一 種是來自內(nèi)部的監(jiān)聽,對于不安全的局域網(wǎng),數(shù)據(jù)是采用廣播的方式傳播的,只要把網(wǎng)卡設(shè)置為混雜模式即可接收到本來不屬于自己的數(shù)據(jù)包,當(dāng)然可能包括密碼信息等資料。
解決方法:針對密碼破解,只要把密碼設(shè)置為足夠強(qiáng)壯,并且對同個(gè)ip地址不停的連接請求進(jìn)行屏蔽即可。 但是對于監(jiān)聽來說,網(wǎng)絡(luò)傳輸?shù)臅r(shí)候如果不加密的話,所有的網(wǎng)絡(luò)傳輸都是明文的,包括密碼、數(shù)據(jù)庫內(nèi)容等 等,不管多么復(fù)雜的密碼都是于事無補(bǔ)的,這是一個(gè)很大的安全威脅。所以,在條件容許情況下,最好使用SSL
來加密協(xié)議,當(dāng)然,你需要一個(gè)證書來支持。并且,對于網(wǎng)絡(luò)監(jiān)聽?wèi)?yīng)該及時(shí)發(fā)現(xiàn),如果網(wǎng)絡(luò)中的丟包率突然提 高,那么就有理由懷疑網(wǎng)絡(luò)遭到監(jiān)聽。
3、腳本安全
腳本安全本身就是個(gè)非常復(fù)雜的問題,足以寫一篇專業(yè)的長篇分析文章,而且我對腳本不是很內(nèi)行,mix,envymask,pskey,angel他們比較瘋狂,哈哈。腳本
安全主要是對提交的數(shù)據(jù)缺乏嚴(yán)格的檢查導(dǎo)致的,比較危險(xiǎn)的符號有“;”,“ ”,“#”,“--”,“$”,“/”等。這個(gè)問題最初被認(rèn)為是asp+sqlserver的問題,但是很快就發(fā)現(xiàn)實(shí)質(zhì)上它的影響非常大,后來有人繼續(xù)深入發(fā)現(xiàn)在php+mysql該問題依然會存在,san對php作過深入分析,有興趣的去安全焦點(diǎn)找他的文章。對于腳本
好象沒有特有效的解決方法,只有依靠程序員的個(gè)人素質(zhì)了……
總結(jié),不管是mysql,還是mssql,在外部網(wǎng)絡(luò)中,都受到相當(dāng)大的威脅。相比而言,mssql受到的威脅甚至要更大些,最近2年來,mssql暴露出了多個(gè)遠(yuǎn)程溢出漏洞。如果配置的比較好的話,我認(rèn)為,mysql要比mssql安全一些,因?yàn)殡S時(shí)會爆發(fā)的新溢出漏洞是防不勝防的,而且能夠執(zhí)行系統(tǒng)命令的sql注入攻擊也非常可怕。好了,限于篇幅,這篇文章到此結(jié)束。