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