本文的內容將對SQL Server 2000 加固和防止主機入侵做一些技術上的交流。
數據庫安全概念
1. 安全模型
關于數據庫安全模型的討論的一直就沒有停止過,其中把SQL Server安裝到本機還是采用防火墻隔離模式(如圖1)的話題是最為激烈的。盡管后者是比較麻煩的一種方法,但還是網絡安全人士鐘愛的安全模型。

作為一個全面的服務器管理平臺,將負責管理服務器和應用基礎設施的整個生命周期。而安全管理方面包括以下一些內容:管理操作系統、應用、補丁和配置中不斷出現的變化;保證服務器、安全和應用配置策略的連續性。一個安全的數據中心必須在安全管理平臺上自動實現軟件升級、補丁和深層漏洞掃描及修復。數據庫的安全性和計算機系統的安全性,包括操作系統、網絡系統的安全性是緊密聯系、相互支持的。
2. 驅動模式
網絡驅動庫(Network Libraries)是SQL Server服務器為客戶端提供數據交換的基礎,在這個基礎上多個網絡驅動庫(庫)同時響應不同的客戶請求,默認情況下SQL Server將使用TCP 1433端口和UDP 1434端口來監聽。換句話說如果你通過端口掃描軟件掃描的哪臺主機開放著1433端口,這臺服務器必定運行著SQL Server。
SQL Server 2000 漏洞綜述
1. sa賬戶密碼破解
有些管理員和程序員為了省事,SQL Server管理員sa 用的是空口令或弱口令,這樣危險性十分巨大,而這些危險往往是初學者意識不到的,殊不知SQL Server的默認用戶sa的權限等于Administrator的權限,也就是說沒有sa用戶做不了的任何事。
舉一個例子:首先利用字典暴力破解了sa的密碼為12345678,然后利用一些工具就可以直接對服務器進行操作。除了密碼過于簡單,造成這種漏洞還有一個原因就是因為xp_cmdshell 擴展存儲過程可以運行任何操作系統命令,在防止腳本注入的環節中我們將介紹如何修補這一漏洞。
2. SQL Server緩沖區溢出
筆者回憶:2003年3月3號,我又一個難忘的日子,早上上網非常慢,一天的努力(沒吃飯)才找出了根源,W32/SQL Slammer蠕蟲病毒。
其實微軟早在2002年7月就為這個漏洞發布了MS02-039號安全公告,那時的我意識到安全升級的重要性。當我們向一臺SQL Server發送一個特定的數據包,服務器會出現緩沖區溢出,導致死機。而SQL Slammer蠕蟲病毒正是利用這一漏洞使這些服務器最終成為傀儡,它們向網絡發送無效UDP數據包,導致整個網絡癱瘓。有一種傳聞,微軟就因為這個病毒推遲了SQL Server 2003的發布,直到今天才公布初露端倪的SQL Server 2005。
3. 其它
由于篇幅的限制我們不可能把所有的漏洞都一一說明,除了上述兩個較為常見的漏洞外還包括:代碼注入、跨庫提升權限、SQL語句查詢濫用、存儲過程輸入惡意代碼等。這些漏洞都可能為黑客留下入侵的機會,一旦將某個普通用戶提升為管理員,那么我們之前所作的努力都將付之東流。
建議:請程序員們不要再把sa的口令寫在global.asa文件里面了,將sa口令以明文的方式放到Web網站的根目錄下真的是一種不太好的辦法。
加固步驟
1. sa口令符合復雜性要求
沒有必要重復說“復雜性”了,但是,如果你在初始安全的時候沒有設置sa的口令或者過于簡單,就可以執行“SQL Server 企業管理器→SQL Server組→安全性→sa 賬戶屬性”進行更改。
2. 及時進行安全升級
SQL Server不作為Automatic Updates升級一部分,并且SQL Server、MSDE、Analysis Services 都需要單獨更新,這確實是一件比較麻煩的事。
SQL Serve 2000 補丁全集:
http://www.microsoft.com/china/technet/downloads/sqlsrvr.mspx。
★MDAC 升級:
http://www.microsoft.com/downloads/details.aspx?FamilyID=6C050FE3-C795-4B7D-B037-185D0506396C&&displaylang=zh-cn。
手工檢查SQL Server安全更新簡直是一件痛苦的。還記得我們曾經提到“Microsoft 基準安全分析器”嗎?利用它來掃描系統,從每個失敗的檢查旁邊“Result details”(結果詳細信息)的鏈接可查看缺少的安全更新的列表。單擊后出現的對話框顯示 Microsoft 安全公告參考號,單擊該參考可了解公告的詳細信息及下載地址。
3. 根據需求禁用不必要 SQL Server 服務
4. TCP/IP 是惟一啟用的協議
在 Microsoft SQL Server 程序組中,啟動“Server 網絡實用工具”。在“常規”選項卡中確保 TCP/IP 是惟一啟用的 SQL Server 協議,同時禁用所有其它協議(如圖2)。

5. NTFS權限的運用
限制Everyone組對“Program Files\Microsoft SQL Server\MSSQL”目錄的寫入權限。
6. 激活SQL Server的身份驗證審核日志
執行“企業管理器→SQL Server 組→SQL Server→右鍵選屬性→安全性”選項卡進行配置,將審核級別設置為“全部”或“失敗”。這些設置的應用對象是SQL Server 實例中所有的數據庫(如圖3)。

7. 最小權限原則
針對于不同的數據庫管理賬戶設計不同訪問權限,比如我們建立了一個ylc的用戶可以訪問ylc數據庫,那么微軟推薦將“服務器角色”選項為空,在“數據庫訪問”選項中只選“ycl”庫,數據庫角色中允只選默認的“public”。