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. 如不需要就停用對象串連與嵌入自動化儲存程式 ( 警告 - 當這些儲存程式被停用的時候 , 一些企業管理器功能可能丟失).
如果你決定停用該進程那麼請給他們寫一個指令碼這樣在以後你用到他們的時候你能夠把他們重新添加回來 。 記住,
我們在這裡正在做的是鎖定一個應用程式的功能 - 你的開發平台應該放到其他機器上。
8. 禁用你不需要的註冊表存取程式。(同上面的警告)這些包括:
Xp_regaddmultistring
Xp_regdeletekey
Xp_regdeletevalue
Xp_regenumvalues
Xp_regremovemultistring
注意 :我過去一直在這裡列出 xp_regread/ xp_regwrite但是這些程式的移除影響一些主要功能包括日誌和SP的安裝,所以他們的移除不被推薦。
9.移除其他你認為會造成威脅的系統儲存進程。 這種進程是相當多的,而且他們也會浪費一些cpu時間。 小心不要首先在一個配置好的伺服器上這樣做。首先在開發的機器上測試,確認這樣不會影響到任何的系統功能。
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 MicrosoftMSSQLServerMSSQLServer',N'AuditLevel',REG_DWORD,3
16. 重寫應用程式使用更多使用者定義的儲存和察看進程所以一般的對錶的訪問可以被禁用。 在這裡你也應該看到由於不必經常進行查詢計劃操作而帶來的效能提升。
17. 除去不需要的網路通訊協定。
18. 注意SQL 伺服器的物理安全。把它鎖在固定的房間裡,並且注意鑰匙的安全。只要有機會到伺服器面前,就總是會找到一個方法進入。
19. 建立一個計劃的任務運行:
findstr/C:" Login Failed"mssql7log*.*'
然後再重新導向輸出到一個文字檔或電子郵件,因此你監測失敗的登入嘗試。這也為系統管理員提供一個好的記錄攻擊的方法。 也有很多用來分析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_USERSOFTWAREMicrosoft
MSSQLServerSQLEW Regedi
SQL 6.5
現在資料被隱藏在
HKEY_USERS/softwareMicrosoftMicrosoft SQL servertoolSQLEWregistered server XSQL server group
("SQL server組" 是預設值但是你可能已建立使用者組因此相應地改變其位置)
27. 發展一個審核計劃而且訂定每月的安全報告,對IT主管可用的報表包括任何的新exploit,成功的攻擊 , 備份保護 , 和對象存取失敗統計。
28. 不要允許使用者互動式登陸到 SQL Server之上。這個規則適用任何的伺服器。 一旦一個使用者能夠互動式進入一個伺服器之內,就有能用來獲得管理員的存取特權得到管理員權限。
30. 儘力限制對SQL Server的查詢與存取操作。 使用者可以用最小許可權查詢sql server中的很多東西。若非必須不要給他們機會。