【问题标题】:Are there more secure alternatives to the .Net SQLConnection class?.Net SQLConnection 类是否有更安全的替代方案?
【发布时间】:2011-02-05 16:19:46
【问题描述】:

我很惊讶这个问题没有得到深入讨论:

This article 告诉我们如何使用 windbg 将正在运行的 .Net 进程字符串转储到内存中。

我花了很多时间研究 SecureString 类,它使用非托管固定内存块,并保持数据加密。好东西。

当您使用它的值并将其分配给 System.String 类型的 SQLConnection.ConnectionString 属性时,问题就出现了。这是什么意思?嗯……

  • 它以纯文本形式存储
  • 垃圾收集移动它,在内存中留下副本
  • 可以通过 windbg 内存转储读取

这完全否定了 SecureString 功能!

最重要的是,SQLConnection 类是不可继承的,我什至不能用 SecureString 属性来滚动我自己的;是的,闭源。耶。

新的 DAL 层正在进行中,但对于新的主要版本和如此多的用户而言,每个用户升级至少需要 2 年时间,其他人可能会无限期地留在旧版本上,无论出于何种原因。

由于使用连接的频率,从 SecureString 编组将无济于事,因为不可变的旧副本会一直保留在内存中,直到 GC 出现。无法选择集成的 Windows 安全性,因为某些客户端无法在域上运行,而其他客户端则通过网络漫游和连接。

如何保护内存中的连接字符串,使其无法使用 windbg 查看?

【问题讨论】:

  • 您指的是驻留在客户机器上的应用程序还是 Web 应用程序?
  • 这是一个客户端桌面应用程序.Net 2.0,客户端-服务器架构

标签: .net sql security memory windbg


【解决方案1】:

由于它是一个客户端桌面应用程序,如果您想知道您的连接字符串凭据可能会暴露给一些黑客,这是一个设计缺陷...

如果您使用管理员凭据连接到您的 sql 服务器,这就是您的问题。您应该创建一个有限制的用户并在您的应用中使用它。

如果您害怕暴露您的数据库,您可以从应用程序访问网络服务。然后,此 Web 服务将访问数据库并返回结果。

【讨论】:

  • SQL 凭据是有限的,但是由于系统的大小,正如我在 OP 中所说,DAL 服务是针对主要版本的。我正在寻找适合当前设置的替代方案。设计缺陷是的,绝对!
  • 所以您不能添加凭据受限的用户?您能否将您对数据库的调用重定向到位于您服务器上的应用程序/Web 服务?通常在谈论安全性设计缺陷时,可能的且有效的补丁真的是有限的。
  • 只是指出,“黑客”是指客户管理人员和尝试对我们的系统进行逆向工程的开发人员。
  • 我的意思是:我们确实有具有有限凭据的用户。我们不使用 sa/admin 帐户。你说得对,补丁是有限的,这是一个艰难的补丁。
【解决方案2】:

不是问题的真正答案,但仍然:

尝试使用windows认证代替sql认证。即使您设法在程序内存中保护密码,用户也可以通过使用流量嗅探器看到它。

windows认证的另一个好处是sql server不需要存储用户的密码hash。通过确定的 sql 身份验证,黑客可以从哈希中暴力破解密码或将其替换为另一个密码。其实使用一些程序可以很容易地更换密码。

【讨论】:

  • 我也更喜欢这种方法,但是对于三分之一的用户来说,这不是一个选择,因为他们有时会通过网络漫游和远程连接。
  • 请澄清:您是说您的 SQL Server 实例对世界开放(公共 IP 地址和开放端口)?根据您的描述,听起来您在客户端计算机上运行了一个桌面应用程序,该应用程序正在通过 Web 执行 SQL 连接,无需 VPN,连接到开放的 SQL Server。如果是这种情况,您有更大的安全问题,那么您需要复杂地尝试读取客户端上的进程内存以获取密码。
  • 正确,尽管使用的是自定义端口,而不是标准 SQL 端口。关于此风险,您正在考虑的任何具体问题/链接?我很想就这个问题与管理层联系...
【解决方案3】:

进程和 Sql Server 之间的通信理想情况下发生在主干上,如果这受到损害,那么这是您最不必担心的。

【讨论】:

  • 我关注客户端而不是传输的原因是上周我们提起了侵犯版权的诉讼,因为客户决定克隆我们的系统,我们有截图,这很有趣。这就是让我更深入地研究安全性的原因。
【解决方案4】:

如果您将机器控制到可以读取另一个进程的内存的程度,您还可以将 SecureString 类的引用替换为对 string 的引用。您将有权访问其他进程可以使用的任何私钥。

对于拥有您的进程内存的黑客没有任何防御措施。 :)

【讨论】:

  • 当然,好点!我的目标是减少攻击的表面积。至少这是一个有趣的安全练习:)
猜你喜欢
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 2020-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多