SQL Server 安全檢查列表
2024-08-31 00:47:58
供稿:網友
 
注冊會員,創建你的web開發資料庫,
轉自:http://www.sqlsecurity.com 
 
1. 確認已經安裝了nt/2000和sql server的最新補丁程序,不用說大家應該已經安裝好了,但是我覺得最好還是在這里提醒一下。 
2. 評估并且選擇一個考慮到最大的安全性但是同時又不影響功能的網絡協議。 多協議是明智的選擇, 但是它有時不能在異種的環境中使用。 
3. 給 "sa" 和 "probe" 帳戶設定強壯的密碼來加強其安全性。設定一個強壯的密碼并將其保存在一個安全的地方。 注意: probe帳戶被用來進行性能分析和分發傳輸。 當在標準的安全模態中用的時候 , 給這個帳戶設定高強度的密碼能影響某些功能的使用。 
4. 使用一個低特權用戶作為 sql 服務器服務的查詢操作賬戶,不要用 localsystem 或sa。 這個帳戶應該有最小的權利 ( 注意作為一個服務運行的權利是必須的)和應該包含( 但不停止)在妥協的情況下對服務器的攻擊。 注意當使用企業管理器做以上設置時 , 文件,注冊表和使用者權利上的 acls同時被處理。 
5. 確定所有的 sql 服務器數據,而且系統文件是裝置在 ntfs 分區,且appropraite acls 被應用。 如果萬一某人得到對系統的存取操作權限,該層權限可以阻止入侵者破壞數據,避免造成一場大災難。   
6.如果不使用xp_cmdshell就關掉。 如果使用 sql 6.5, 至少使用server options中的sqlexecutiecmdexec 賬戶操作限制非sa用戶使用xp_cmdshell. 
在任何的 isql/ osql 窗口中( 或查詢分析器): 
use master 
exec sp_dropextendedproc'xp_cmdshell' 
對 sqlexecutivecmdexec 的詳細情況請查看下列文章: 
http://support.microsoft.com/support/kb/article/q159/2/21.  
如果你不需要 xp_cmdshell 那請停用它。請記住一個系統系統管理員如果需要的話總是能把它增加回來。這也好也不好 - 一個侵入者可能發現它不在,只需要把他加回來。考慮也除去在下面的 dll但是移除之前必須測試因為有些dll同時被一些程序所用。 要找到其他的程序是否使用相同的 dll: 
首先得到該 dll 。 
select o.name,c.text from dbo.syscomments c , dbo.sysobjects o where c.id=o.id and o.name='xp_cmdshell' 
其次,使用相同的 dll發現其他的擴展儲存操作是否使用該dll。 
select o.name,c.text from dbo.syscomments c , dbo.sysobjects o where c.id=o.id and c.text='xplog70.dll' 
用戶可以用同樣的辦法處理下面步驟中其他你想去掉的進程。 
 
7. 如不需要就停用對象連接與嵌入自動化儲存程序 ( 警告 - 當這些儲存程序被停用的時候 , 一些企業管理器功能可能丟失). 這些包括: 
sp_oacreate 
sp_oadestroy 
sp_oageterrorinfo 
sp_oagetproperty 
sp_oamethod 
sp_oasetproperty 
sp_oastop 
如果你決定停用該進程那么請給他們寫一個腳本這樣在以后你用到他們的時候你能夠把他們重新添加回來 。  記住, 我們在這里正在做的是鎖定一個應用程序的功能 - 你的開發平臺應該放到其他機器上。 
 
8. 禁用你不需要的注冊表存取程序。(同上面的警告)這些包括: 
xp_regaddmultistring 
xp_regdeletekey 
xp_regdeletevalue 
xp_regenumvalues 
xp_regremovemultistring 
注意 :我過去一直在這里列出 xp_regread/ xp_regwrite但是這些程序的移除影響一些主要功能包括日志和sp的安裝,所以他們的移除不被推薦。 
 
9.移除其他你認為會造成威脅的系統儲存進程。 這種進程是相當多的,而且他們也會浪費一些cpu時間。 小心不要首先在一個配置好的服務器上這樣做。首先在開發的機器上測試,確認這樣不會影響到任何的系統功能。在下面是我們所推薦的有待你評估的一些列表: 
sp_sdidebug 
xp_availablemedia 
xp_cmdshell 
xp_deletemail 
xp_dirtree 
xp_dropwebtask 
xp_dsninfo 
xp_enumdsn 
xp_enumerrorlogs 
xp_enumgroups 
xp_enumqueuedtasks 
xp_eventlog 
xp_findnextmsg 
xp_fixeddrives 
xp_getfiledetails 
xp_getnetname 
xp_grantlogin 
xp_logevent 
xp_loginconfig 
xp_logininfo 
xp_makewebtask 
xp_msver xp_perfend 
xp_perfmonitor 
xp_perfsample 
xp_perfstart 
xp_readerrorlog 
xp_readmail 
xp_revokelogin 
xp_runwebtask 
xp_schedulersignal 
xp_sendmail 
xp_servicecontrol 
xp_snmp_getstate 
xp_snmp_raisetrap 
xp_sprintf 
xp_sqlinventory 
xp_sqlregister 
xp_sqltrace 
xp_sscanf 
xp_startmail 
xp_stopmail 
xp_subdirs 
xp_unc_to_drive 
xp_dirtree 
10. 在企業管理器中"安全選項" 之下禁用默認登錄。(只有sql 6.5) 當使用整合的安全時候,這使未經認可的不在 syslogins 表中使用者無權登陸一個有效的數據庫服務器。 
11. 除去數據庫的guest賬戶把未經認可的使用者據之在外。  例外情況是master和 tempdb 數據庫,因為對他們guest帳戶是必需的。 
12. 若非必須,請完全地禁用sql郵件功能。它的存在使潛在的攻擊者遞送潛在的 trojans ,病毒或是簡單實現一個dos攻擊成為可能 
13. 檢查master..sp_helpstartup看有無可疑的木馬進程。 確定沒有人已經在這里放置秘密的后門程序。 使用 sp_unmakestartup 移除任何可疑進程。 
14. 檢查master..sp_password看有無trojan代碼。比較你的產品scripts和一個新安裝的系統的默認scripts而且方便的保存。 
15. 記錄所有的用戶存取訪問情況。  從企業管理器做這些設定或通過以sa登陸進入查詢分析器的下列各項: 
xp_instance_regwrite n'hkey_local_machine', n'software/ microsoft/mssqlserver/mssqlserver',n'auditlevel',reg_dword,3 
16. 重寫應用程序使用更多用戶定義的儲存和察看進程所以一般的對表的訪問可以被禁用。 在這里你也應該看到由于不必經常進行查詢計劃操作而帶來的性能提升。 
17. 除去不需要的網絡協議。 
18. 注意sql 服務器的物理安全。把它鎖在固定的房間里,并且注意鑰匙的安全。只要有機會到服務器面前,就總是會找到一個方法進入。 
19. 建立一個計劃的任務運行: 
findstr/c:" login failed"/mssql7/log/*.*' 
然后再重定向輸出到一個文本文件或電子郵件,因此你監測失敗的登錄嘗試。這也為系統管理員提供一個好的記錄攻擊的方法。 也有很多用來分析nt日志事件的第三者工具。 注意: 你可能需要將路徑換成你安裝sql的路徑。 
20. 設定非法訪問和登陸失敗日志警報。到 企業管理器中的"manager sql server messages "搜尋任何有關無權訪問的消息 ( 從查找"login failed"和"denied"開始). 確定你所有感興趣的信息被記錄到事件日志。然后在這些信息上設定警報 , 發送一個電子郵件或信息到一個能夠對問題及時響應的操作員。 
21. 確定在服務器和數據庫層次上的角色都只被授給了需要的用戶。 當 sql server  安全模型 7 有許多增強的時候, 它也增加額外的許可層,我們必須監控該層,確定沒有人被授予了超過必需的權限。 
22. 經常檢查組或角色全體會員并且確定用組分配權限,這樣你的審計工作能夠簡化。 確定當你在的時候 , 公眾的組不能從系統表執行選擇操作。 
23. 花些時間審計用空密碼登陸的請求。 使用下面的代碼進行空密碼檢查: 
使用主體 
選擇名字, 
 password 
 from syslogins 
 where password is null 
 order by name 
24. 如果可能,在你的組織中利用整合的安全策略。 通過使用整合的安全策略,你能夠依賴系統的安全,最大簡化管理工作從維護二個分開的安全模型中分離開來。這也不讓密碼接近連接字串。 
25. 檢查所有非sa用戶的存取進程和擴充存儲進程的權限。 使用下面的查詢定期的查詢哪一個進程有公眾存儲權限。(在sql server中 使用 "type" 而不是 "xtype"): 
use master 
select sysobjects.name 
from sysobjects,sysprotects 
where sysprotects.uid=0 
and xtype 在 ('x','p') 
and sysobjects.id=sysprotects.id 
order by name 
26. 當時用企業管理器的時候,使用整合的安全策略。 過去,企業管理器被發現在標準的安全模態中儲存 "sa" 密碼在注冊表的 plaintext 中。 注意: 即使你改變模態,密碼也會留在注冊表中。 使用 regedit 而且檢查鍵: 
hkey_current_user oftware/microsoft/ 
mssqlserver qlew/ regedi/ 
sql 6.5 
現在數據被隱藏在 
hkey_users/{yoursid} oftware/microsoft/microsoft sql server/80/tool qlew/registered server x ql server group 
("sql server組" 是默認值但是你可能已建立用戶組因此相應地改變其位置) 
27. 發展一個審核計劃而且訂定每月的安全報告,對it主管可用的報表包括任何的新exploit,成功的攻擊 , 備份保護 , 和對象存取失敗統計。 
28. 不要允許使用者交互式登陸到 sql server之上。這個規則適用任何的服務器。   一旦一個使用者能夠交互式進入一個服務器之內,就有能用來獲得管理員的存取特權得到管理員權限。     
30. 盡力限制對sql server的查詢與存取操作。 用戶可以用最小權限查詢sql server中的很多東西。若非必須不要給他們機會