2010-04-08 57 views
6

我很驚訝這個問題並沒有深入討論:是否有更安全的.Net SQLConnection類替代品?

This article告訴我們如何使用WinDbg內存轉儲運行.NET過程字符串。

我花了很多時間研究SecureString類,使用非託管固定的內存塊,並保持過加密的數據。好東西。

這個問題是在當你使用它的價值,並將其分配給SQLConnection.ConnectionString屬性,它是System.String類型。這是什麼意思?嗯......

  • 它採用明文存儲
  • 垃圾收集四處移動它,離開副本在內存
  • 它可與WinDbg的存儲器中讀取轉儲

這完全通過則無效SecureString功能!

最重要的是,SQLConnection類是uninheritable,我甚至無法推出自己的具有SecureString的屬性來代替;耶爲封閉來源。好極了。

新的DAL層正在進行中,但對於新的主要版本和許多用戶而言,每個用戶升級前至少2年,其他人可能會無限期地無限期地停留在舊版本上。

由於頻率的連接使用,從SecureString的編組也無濟於事,因爲一成不變的舊副本貼在內存中,直到GC惡有惡報。集成的Windows安全不是一種選擇,因爲有些客戶端不能在域上工作,而其他客戶端則通過網絡漫遊和連接。

如何在內存中確保連接字符串的安全,因此無法用windbg查看?

+0

您是在談論駐留在客戶機器或Web應用程序上的應用程序? – ALOToverflow 2010-04-08 12:53:22

+0

這是一個客戶端桌面應用程序.Net 2.0,客戶端 - 服務器架構 – invert 2010-04-08 13:49:00

回答

10

如果您控制一臺機器到可以讀取另一個進程的內存的程度,還可以將對SecureString類的引用替換爲引用string。您將可以訪問其他進程可以使用的任何私鑰。

對擁有你的進程內存的黑客沒有防範。 :)

+0

當然,好點!我的目標是減少攻擊的表面積。這是一個有趣的安全行爲:) – invert 2010-04-08 13:53:13

4

不是一個真正的問題的答案,但仍:

嘗試使用Windows身份驗證而不是SQL身份驗證。即使您設法在程序內存中設置密碼,用戶也可以使用流量嗅探器來查看密碼。

windows身份驗證的另一個優點是sql server不需要存儲用戶的密碼哈希值。使用sql認證確定黑客可以從hash中強制密碼或用另一個代替它。事實上,使用某些程序可以很容易地替換密碼。

+0

我更喜歡這種方法,但它不是三分之一的用戶的選擇,因爲他們有時漫遊並通過網絡遠程連接。 – invert 2010-04-08 13:51:02

+0

請說明:你是說你的SQL Server實例對世界開放(公共IP地址和開放端口)?從您的描述中可以看出,您的客戶端計算機上運行着一個桌面應用程序,該應用程序正在通過Web執行SQL連接,而不通過VPN連接到開放的SQL Server。如果出現這種情況,您將面臨更大的安全隱患,那麼需要複雜的嘗試來讀取客戶端上的進程內存,以獲取密碼。 – David 2010-04-08 14:07:43

+0

正確,儘管使用自定義端口,但不是標準的SQL端口。有關此風險的任何具體問題/鏈接?我很樂意接近這個問題的管理...... – invert 2010-04-08 14:45:24

2

的過程和一個SQL服務器之間的通信發生了理想中的骨幹,如果遭到入侵,那麼這是您最擔心的。

+0

我專注於客戶端而不是運輸的原因是上週我們申請了版權侵權,因爲客戶決定克隆我們的系統,我們有屏幕截圖,這很有趣。這讓我更深入地瞭解安全。 – invert 2010-04-08 13:57:06

1

因爲它是一個客戶端桌面應用程序,如果你想知道你的連接字符串憑據可能會接觸到一些黑客,這是一個設計缺陷...

如果您連接到您的SQL Server與管理員憑據,這是你的問題。您應該創建一個有限制的用戶並在您的應用中使用它。

如果你想暴露你的數據庫,你可以從應用程序訪問Web服務。這個webservice然後會訪問數據庫並返回結果。

+0

SQL憑據是有限的,但由於系統的大小,正如我在OP中所說的,DAL服務是針對主要版本的。我正在尋找一個適合當前設置的替代方案。設計缺陷是的,絕對是! – invert 2010-04-08 14:48:37

+0

因此,您無法添加具有有限憑證的用戶?你可以將你的調用重定向到數據庫到位於服務器上的應用程序/ webservice嗎?通常當談到安全方面的設計缺陷時,可能的和_effective_補丁實際上是**限制的。 – ALOToverflow 2010-04-08 14:51:44

+0

只要指出,那'黑客'的意思是客戶管理和開發誰嘗試反向工程我們的系統。 – invert 2010-04-08 14:52:37