作者:
zhangsan
·
2014/05/10 16:43
0x00 sql server 2008 許可權介紹
在訪問sql server 2008的過程中,大致驗證流程如下圖:
當登入操作一個資料庫的時候,會經過三次驗證:
1. 作業系統的驗證
2. SQL SERVER登入名的驗證
3. 資料庫使用者名稱的驗證
當使用windows身份認證模式的時候,使用的windows賬號會透過作業系統的驗證,然後以sysadmin的伺服器角色透過SQL SERVER 的驗證,在訪問一個具體的資料庫的時候又以其對映的dbo使用者名稱登入相應的資料庫。
當使用SQL SERVER 身份認證模式的時候,首先會使用類似於IIS中的匿名賬號來透過windows驗證,然後以其對應的伺服器角色來透過SQL SERVER 的驗證,在訪問一個具體資料庫的時候以其對映的資料庫使用者名稱來登入相應的資料庫。
作業系統層面:在windows方式驗證的過程中,由所使用的windows賬號。使用sql賬號驗證的時候,應該是使用了一個類似於iis中的匿名賬號來透過windows驗證的。
SQL SERVER 層面:由sql server的登入使用者的許可權來控制,具體的許可權由對應的伺服器角色來決定。
(SA是SQL SERVER的一個登入使用者名稱,而不是資料庫的使用者名稱)
資料庫層面:由資料庫的使用者名稱的許可權來控制,具體可以透過選擇不同的資料庫角色或者自定義許可權來實現。
(SQL SERVER的登入使用者名稱SA透過對映資料庫的使用者名稱來訪問資料庫內容 )
所以在SQL SERVER 中,對許可權起決定性作用的就是伺服器登入名角色和資料庫使用者名稱角色。
0x01 sql server 2008 伺服器角色及資料庫角色
固定伺服器角色
(登入SQL SERVER登入使用者的許可權角色,如SA預設擁有sysadmin角色許可權)
Dbcreator:這個伺服器角色的成員可以建立、更改、刪除和還原任何資料庫。
Diskadmin:這個伺服器角色用於管理磁碟檔案,比如映象資料庫和新增備份裝置。Processadmin:SQL Server 2008能夠多工化,也就是說可以透過執行多個程式做多個事件。
Securityadmin:這個伺服器角色的成員將管理登入名及其屬性。他們可以授權、拒絕和撤銷伺服器級許可權。也可以授權、拒絕和撤銷資料庫級許可權。另外,它們可以重置SQL Server 2008登入名的密碼。
Serveradmin:這個伺服器角色的成員可以更改伺服器範圍的配置選項和關閉伺服器。Setupadmin:為需要管理連結伺服器和控制啟動的儲存過程的使用者而設計。這個角色的成員能新增到setupadmin,能增加、刪除和配置連結伺服器,並能控制啟動過程。
Sysadmin:這個伺服器角色的成員有權在SQL Server 2008中執行任何任務。
Public: 有兩大特點,第一,初始狀態時沒有許可權;第二,所有的資料庫使用者都是它的成員。
固定資料庫角色:
(資料庫使用者許可權)
微軟提供了9個內建的角色,以便於在資料庫級別授予使用者特殊的許可權集合。
db_owner: 該角色的使用者可以在資料庫中執行任何操作。
db_accessadmin: 該角色的成員可以從資料庫中增加或者刪除使用者。
db_backupopperator: 該角色的成員允許備份資料庫。
db_datareader: 該角色的成員允許從任何表讀取任何資料。
db_datawriter: 該角色的成員允許往任何表寫入資料。
db_ddladmin:該角色的成員允許在資料庫中增加、修改或者刪除任何物件(即可以執行任何DDL語句)。
db_denydatareader: 該角色的成員被拒絕檢視資料庫中的任何資料,但是他們仍然可以透過儲存過程來檢視。
db_denydatawriter: 像db_denydatareader角色,該角色的成員被拒絕修改資料庫中的任何資料,但是他們仍然可以透過儲存過程來修改。
db_securityadmin: 該角色的成員可以更改資料庫中的許可權和角色。
public:在SQL Server 2008中每個資料庫使用者都屬於public資料庫角色。當尚未對某個使用者授予或者拒絕對安全物件的特定許可權時,這該使用者將據稱授予該安全物件的public角色的許可權,這個資料庫角色不能被刪除。
0x02 安全配置方案
1. 限制可以訪問資料庫的IP
一般可以透過安全策略裡面的ipsec或者windows防火牆來限制。
2. 修改資料庫的訪問埠
可以在SQL SERVER 配置管理器修改訪問埠為不常見埠來防止一般性掃描
3. 修改日誌稽核策略
將登入稽核修改為“開啟登入成功和失敗的日誌”,這樣方便資料庫被入侵之後,對日誌的檢視。
4. 對SA賬戶的處理
如使用混合身份驗證模式,建議禁用掉SA賬戶,否則設定非常強的SA密碼。
5. 網站使用的資料庫賬號
對於每一個網站新建一個登陸使用者並關聯一個資料庫使用者,設定強密碼,給予伺服器角色為:PUBLIC,給予對應的資料庫角色為:db_owner(需更加安全的保護對應資料庫的資料需要調節更加嚴格的許可權,此處給予的為此資料庫的最高許可權,若此賬號洩露,此資料庫中的資料不保,配合後續配置不影響伺服器安全)
6. 資料庫服務執行賬號
資料庫需要往磁碟寫檔案,或者透過儲存過程執行命令的許可權由資料庫伺服器的執行賬戶許可權決定,使用NETWORK SERVICE賬戶來執行資料庫伺服器是較安全的。
7. 磁碟許可權的合理配置
合理配置資料庫執行,賬戶在磁碟上的許可權,一定不要隨意給寫許可權,特別是網站目錄及資料庫儲存目錄以外的位置,這樣即使是SA也不能往磁碟寫檔案。
8. 危險儲存過程的處理
由於在sql server 2008中sp_dropextendedproc 不能刪除系統擴充套件儲存過程,所以直接禁用常見危險儲存過程。具體可根據實際情況來操作,因為有些儲存過程是正常需要的。對於一般賬戶而言,根本沒有執行這些高危儲存過程的許可權,而對於SA賬戶來說,以上所有的操作都是可恢復的,個人覺得SA賬戶被入侵之後的關鍵控制點在於合理配置資料庫服務執行賬號的許可權。
0x03 常見入侵分析及防禦
1. 資料庫0day
zhangsan認為,升級吧!
2. 網站被入侵獲取到普通伺服器許可權的賬號
如果網站被入侵(類似SQL隱碼攻擊),很顯然其對應的賬號的資料庫的資料肯定是不保了。普通賬號(只給PUBLIC的賬戶)是無法執行系統命令的,可能的方式是透過備份資料庫來達到寫馬的操作,防禦的最好方法是嚴格控制資料庫執行賬號對磁碟的寫許可權
3. SA賬戶被入侵
SA賬戶被入侵後,一般會透過開啟xp_cmdshell儲存過程來執行系統命令。但是如果配置的資料庫服務執行賬號NETWORK SERVICE,它能夠執行的系統命令也就有限了,甚至可以取消NETWORK SERVICE對於cmd.exe的執行許可權。還有就是需要合理配置NETWORK SERVICE的磁碟寫入許可權。
0x04 常見操作介紹
1. 開啟xp_cmdshell
EXEC sp_configure 'show advanced options', 1;
go
RECONFIGURE;
GO
EXEC sp_configure 'xp_cmdshell', 1;
go
RECONFIGURE;
GO
2. 使用xp_cmdshell執行系統命令的操作
exec xp_cmdshell 'whoami'
(如果該儲存過程可以執行說明可能已經被入侵)
3. 高危儲存過程處理
常見危險儲存過程:
xp_cmdshell
xp_delete_file
xp_regread
xp_regwrite
xp_dirtree
由於在sql server 2008中sp_dropextendedproc 不會刪除系統擴充套件儲存過程,故直接禁用即可
EXEC sp_configure 'show advanced options', 0;
EXEC sp_configure 'xp_cmdshell', 0;
求指正,求指教!
本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!