Mssql和Mysql的安全性分析
來源:互聯網
上載者:User
關鍵字
mysql
安全
MSSql
資料庫是電子商務、金融以及ERP系統的基礎,通常都保存著重要的商業夥伴和客戶資訊。 大多數企業、組織以及政府部門的電子資料都保存在各種資料庫中,他們用這些資料庫保存一些個人資料,還掌握著敏感的金融資料。 但是資料庫通常沒有象作業系統和網路這樣在安全性上受到重視。 資料是企業,組織的命脈所在,因此選擇一款安全的資料庫是至關重要的。 我在我的機子上面用管理員帳號預設安裝了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埠,一般的過濾是很難防範的。 解決辦法:安裝防火牆,或者利用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注入攻擊也非常可怕。 好了,限於篇幅,這篇文章到此結束。 責任編輯 趙毅 zhaoyi#51cto.com TEL:(010)68476636-8001 給力(0票)動心(0票)廢話(0票)專業(0票)標題党(0票)路過(0票) 原文:Mssql和Mysql的安全性分析 返回網路安全首頁