1. 確認(rèn)已經(jīng)安裝了NT/2000和SQL Server的最新補(bǔ)丁程序,不用說大家應(yīng)該已經(jīng)安裝好了,但是我覺得最好還是在這里提醒一下。
2. 評估并且選擇一個考慮到最大的安全性但是同時又不影響功能的網(wǎng)絡(luò)協(xié)議。 多協(xié)議是明智的選擇, 但是它有時不能在異種的環(huán)境中使用?! ?
3. 給 "sa" 和 "probe" 帳戶設(shè)定強(qiáng)壯的密碼來加強(qiáng)其安全性。設(shè)定一個強(qiáng)壯的密碼并將其保存在一個安全的地方。 注意: probe帳戶被用來進(jìn)行性能分析和分發(fā)傳輸。 當(dāng)在標(biāo)準(zhǔn)的安全模態(tài)中用的時候 , 給這個帳戶設(shè)定高強(qiáng)度的密碼能影響某些功能的使用。
4. 使用一個低特權(quán)用戶作為 SQL 服務(wù)器服務(wù)的查詢操作賬戶,不要用 LocalSystem 或sa。 這個帳戶應(yīng)該有最小的權(quán)利 ( 注意作為一個服務(wù)運行的權(quán)利是必須的)和應(yīng)該包含( 但不停止)在妥協(xié)的情況下對服務(wù)器的攻擊。 注意當(dāng)使用企業(yè)管理器做以上設(shè)置時 , 文件,注冊表和使用者權(quán)利上的 ACLs同時被處理。
5. 確定所有的 SQL 服務(wù)器數(shù)據(jù),而且系統(tǒng)文件是裝置在 NTFS 分區(qū),且appropraite ACLs 被應(yīng)用。 如果萬一某人得到對系統(tǒng)的存取操作權(quán)限,該層權(quán)限可以阻止入侵者破壞數(shù)據(jù),避免造成一場大災(zāi)難。
6.如果不使用Xp_cmdshell就關(guān)掉。 如果使用 SQL 6.5, 至少使用Server Options中的SQLExecutieCmdExec 賬戶操作限制非sa用戶使用XP_cmdshell.
在任何的 isql/ osql 窗口中( 或查詢分析器):
use master
exec sp_dropextendedproc‘xp_cmdshell‘
對 SQLExecutiveCmdExec 的詳細(xì)情況請查看下列文章:
http://support.microsoft.com/support/kb/article/Q159/2/21.
如果你不需要 xp_cmdshell 那請停用它。請記住一個系統(tǒng)系統(tǒng)管理員如果需要的話總是能把它增加回來。這也好也不好 - 一個侵入者可能發(fā)現(xiàn)它不在,只需要把他加回來??紤]也除去在下面的 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發(fā)現(xiàn)其他的擴(kuò)展儲存操作是否使用該dll。
select o.name,c.text from dbo.syscomments c , dbo.sysobjects o where c.id=o.id and c.text=‘xplog70.dll‘
用戶可以用同樣的辦法處理下面步驟中其他你想去掉的進(jìn)程。
7. 如不需要就停用對象連接與嵌入自動化儲存程序 ( 警告 - 當(dāng)這些儲存程序被停用的時候 , 一些企業(yè)管理器功能可能丟失). 這些包括:
Sp_OACreate
Sp_OADestroy
Sp_OAGetErrorInfo
Sp_OAGetProperty
Sp_OAMethod
Sp_OASetProperty
Sp_OAStop
如果你決定停用該進(jìn)程那么請給他們寫一個腳本這樣在以后你用到他們的時候你能夠把他們重新添加回來 。 記住, 我們在這里正在做的是鎖定一個應(yīng)用程序的功能 - 你的開發(fā)平臺應(yīng)該放到其他機(jī)器上。
8. 禁用你不需要的注冊表存取程序。(同上面的警告)這些包括:
Xp_regaddmultistring
Xp_regdeletekey
Xp_regdeletevalue
Xp_regenumvalues
Xp_regremovemultistring
注意 :我過去一直在這里列出 xp_regread/ xp_regwrite但是這些程序的移除影響一些主要功能包括日志和SP的安裝,所以他們的移除不被推薦。
9.移除其他你認(rèn)為會造成威脅的系統(tǒng)儲存進(jìn)程。 這種進(jìn)程是相當(dāng)多的,而且他們也會浪費一些cpu時間。 小心不要首先在一個配置好的服務(wù)器上這樣做。首先在開發(fā)的機(jī)器上測試,確認(rèn)這樣不會影響到任何的系統(tǒng)功能。在下面是我們所推薦的有待你評估的一些列表:
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. 在企業(yè)管理器中"安全選項" 之下禁用默認(rèn)登錄。(只有SQL 6.5) 當(dāng)使用整合的安全時候,這使未經(jīng)認(rèn)可的不在 syslogins 表中使用者無權(quán)登陸一個有效的數(shù)據(jù)庫服務(wù)器。
11. 除去數(shù)據(jù)庫的guest賬戶把未經(jīng)認(rèn)可的使用者據(jù)之在外。 例外情況是master和 tempdb 數(shù)據(jù)庫,因為對他們guest帳戶是必需的。
12. 若非必須,請完全地禁用SQL郵件功能。它的存在使?jié)撛诘墓粽哌f送潛在的 trojans ,病毒或是簡單實現(xiàn)一個DOS攻擊成為可能
13. 檢查master..Sp_helpstartup看有無可疑的木馬進(jìn)程。 確定沒有人已經(jīng)在這里放置秘密的后門程序。 使用 Sp_unmakestartup 移除任何可疑進(jìn)程。
14. 檢查master..Sp_password看有無trojan代碼。比較你的產(chǎn)品scripts和一個新安裝的系統(tǒng)的默認(rèn)scripts而且方便的保存。
15. 記錄所有的用戶存取訪問情況。 從企業(yè)管理器做這些設(shè)定或通過以sa登陸進(jìn)入查詢分析器的下列各項:
xp_instance_regwrite N‘HKEY_LOCAL_MACHINE‘, N‘SOFTWARE\ Microsoft\MSSQLServer\MSSQLServer‘,N‘AuditLevel‘,REG_DWORD,3
16. 重寫應(yīng)用程序使用更多用戶定義的儲存和察看進(jìn)程所以一般的對表的訪問可以被禁用。 在這里你也應(yīng)該看到由于不必經(jīng)常進(jìn)行查詢計劃操作而帶來的性能提升。
17. 除去不需要的網(wǎng)絡(luò)協(xié)議。
18. 注意SQL 服務(wù)器的物理安全。把它鎖在固定的房間里,并且注意鑰匙的安全。只要有機(jī)會到服務(wù)器面前,就總是會找到一個方法進(jìn)入。
19. 建立一個計劃的任務(wù)運行:
findstr/C:" Login Failed"\mssql7\log\*.*‘
然后再重定向輸出到一個文本文件或電子郵件,因此你監(jiān)測失敗的登錄嘗試。這也為系統(tǒng)管理員提供一個好的記錄攻擊的方法。 也有很多用來分析NT日志事件的第三者工具。 注意: 你可能需要將路徑換成你安裝SQL的路徑。
20. 設(shè)定非法訪問和登陸失敗日志警報。到 企業(yè)管理器中的"Manager SQL Server Messages "搜尋任何有關(guān)無權(quán)訪問的消息 ( 從查找"login failed"和"denied"開始). 確定你所有感興趣的信息被記錄到事件日志。然后在這些信息上設(shè)定警報 , 發(fā)送一個電子郵件或信息到一個能夠?qū)栴}及時響應(yīng)的操作員。
21. 確定在服務(wù)器和數(shù)據(jù)庫層次上的角色都只被授給了需要的用戶。 當(dāng) SQL Server 安全模型 7 有許多增強(qiáng)的時候, 它也增加額外的許可層,我們必須監(jiān)控該層,確定沒有人被授予了超過必需的權(quán)限。
22. 經(jīng)常檢查組或角色全體會員并且確定用組分配權(quán)限,這樣你的審計工作能夠簡化。 確定當(dāng)你在的時候 , 公眾的組不能從系統(tǒng)表執(zhí)行選擇操作。
23. 花些時間審計用空密碼登陸的請求。 使用下面的代碼進(jìn)行空密碼檢查:
使用主體
選擇名字,
password
from syslogins
where password is null
order by name
24. 如果可能,在你的組織中利用整合的安全策略。 通過使用整合的安全策略,你能夠依賴系統(tǒng)的安全,最大簡化管理工作從維護(hù)二個分開的安全模型中分離開來。這也不讓密碼接近連接字串。
25. 檢查所有非sa用戶的存取進(jìn)程和擴(kuò)充存儲進(jìn)程的權(quán)限。 使用下面的查詢定期的查詢哪一個進(jìn)程有公眾存儲權(quán)限。(在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. 當(dāng)時用企業(yè)管理器的時候,使用整合的安全策略。 過去,企業(yè)管理器被發(fā)現(xiàn)在標(biāo)準(zhǔn)的安全模態(tài)中儲存 "sa" 密碼在注冊表的 plaintext 中。 注意: 即使你改變模態(tài),密碼也會留在注冊表中。 使用 regedit 而且檢查鍵:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\MSSQLServer\SQLEW\ Regedi\SQL 6.5
現(xiàn)在數(shù)據(jù)被隱藏在
HKEY_USERS\{yourSID}\software\Microsoft\Microsoft SQL server\80\tool\SQLEW\registered server X\SQL server group
("SQL server組" 是默認(rèn)值但是你可能已建立用戶組因此相應(yīng)地改變其位置)
27. 發(fā)展一個審核計劃而且訂定每月的安全報告,對IT主管可用的報表包括任何的新exploit,成功的攻擊 , 備份保護(hù) , 和對象存取失敗統(tǒng)計。
28. 不要允許使用者交互式登陸到 SQL Server之上。這個規(guī)則適用任何的服務(wù)器。 一旦一個使用者能夠交互式進(jìn)入一個服務(wù)器之內(nèi),就有能用來獲得管理員的存取特權(quán)得到管理員權(quán)限。
30. 盡力限制對SQL Server的查詢與存取操作。 用戶可以用最小權(quán)限查詢sql server中的很多東西。若非必須不要給他們機(jī)會。