說句實話你公司中安裝的大多數的SQL Server都可歸結為以下兩種中的一種第一種類型就是安裝了SQL Server的開發人員用的機器(即多種安裝類型中的一種——桌面版本標准版本企業版本或者明顯的開發版)第二種類型就是微軟的SQL Server桌面引擎(MSDE)的供各種應用程序使用的各種安裝其中包括使用MSDE作為信息存儲的備份網絡管理或者其他的工具包這兩種類型的變化之中有一個共同點就是大多數都完全不需要外在的連接除了通過主機上駐留的應用程序
現在做個簡單測試:有多少不需要接受來自網絡中其他機器的連接的安裝總是在監聽那些連接?答對了——幾乎全部都是在最近的一項滲透測試活動中我發現公司中大約有%的SQL Server安裝只被安裝在同一台機器上的軟件使用從來沒有接受過網絡中其他機器的連接此外在這%裡面除了台機器之外都同時有TCP/IP和netlibs (命名管道網絡庫)在啟用和監聽
這裡我們有一個非常好的有關過分表面領域的例子就是說當機器暴露在這個層次上的時候沒有調用任何的相關措施那麼遇到偶然的發現暴力攻擊以及可能的遠程緩沖溢出攻擊就是明顯了最近對於MSDE Release A 微軟開始在缺省情況下安裝MSDE的時候不再啟用任何的netlibs 以便於幫助您最小化暴露的表面區域然而許多MSDE較老的安裝仍舊如此並且持續監聽
過分的netlib 支持問題的解決方案是簡單的任何不需要外界連接的SQL Server或者MSDE實例都應該禁用所有的netlibs 除非是共享內存netlibs 這個在缺省情況是開啟的共享內存netlib只在與使用它們的應用程序在同一台機器上並且不允許來自外界主機的連接的SQL Server環境中存在
如果你使用的是SQL Server修正是非常簡單的只要為你想要保護的每個SQL Server實例中載入Server Network Utility並且禁用所有的netlibs (在啟用協議中)即可然後停止並重新開始SQL Server實例以便於修改生效
如果你使用的是MSDE你就得費一點事當然如果在同一台機器上存在SQL Server安裝並且Server Network Utility也是安裝的你就可以在下拉列表中看到MSDE實例然而你可以用與前面描述的針對SQL Server實例完全一樣的方式刪除netlibs
如果你沒有訪問主機上的Server Nerwork Utility那麼你需要編輯注冊表鍵值來直接控制對netlib 的支持這個鍵位於
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServerSuperSocket\NetLibProtocolList
只是編輯那裡的REG_MULTI_SZ 刪除任何數值數據(TCP/IP 和命名管道在默認情況下是tcp np)再一次你需要停止並重新開始MSDE實例以便於修改生效
將所有的netlibs 都禁用了之後只有共享內存netlib還能夠與SQL Server進行通信這對於理解netlib 和你的應用程序非常重要:為了連接到本地SQL Server/MSDE實例上你不能再使用本地機器的名字(或者IP地址)作為連接字符串中的服務器的名字你需要用點或者單詞(local)來置換服務器名字或者IP地址一些應用程序的行為彼此不同那麼需要確保徹底地進行測試使用那些字符串中的某一個作為服務器的名字可以告訴本地SQL Server客戶端網絡子系統使用共享內存netlib 來替代基於網絡的庫
現在你知道了如何移動netlib 同時還仍然連接到SQL Server實例上你應該告訴你的開發人員這是如何完成的因為他們很有可能安裝本地SQL Server/MSDE環境的次數最多讓環境不再監聽可以保護他們在遠程位置熱點或者其他公共環境中的時候不受到攻擊而在這些環境中他們很有可能會受到攻擊最小化表面區域是安全難題中的一個關鍵部分讓這個方法成為所有的新的SQL Server/MSDE安裝的默認選擇可以很大限度的堅固你的基礎設施
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22472.html