在无人值守的桌面应用程序上保护 SQL 服务器连接字符串

Securing SQL Server connect string on unattended desktop application

我们在现场的 Windows 7 Pro Servers 上有应用程序 运行。他们可能无人看管,因此不安全。他们连接到 Azure 中的 Sql 服务器。我们正在尝试找出一种方法来保护当前为纯文本的连接字符串。我们可以加密字符串,但这只是将问题转移到保护密钥上。这些不是 Web 应用程序。我们主要担心的不是机器会被盗,而是登录信息会被泄露。我们可以使用像 ConfuserEx 这样的混淆技术来使找到未加密的字符串变得非常困难,但是有没有最佳实践呢?我知道 SAML、WSFED、OAUTH、OPENID 是 Azure AD 用于验证应用程序请求的受支持协议,但我认为将其纳入非 Web 应用程序是一个巨大的挑战。

我认为你可能试图保护错误的东西。

考虑到这是一个很可能会受到对手持续攻击的应用程序,您应该考虑您的连接字符串受到损害,因为无论您在应用程序的某个时刻采取何种措施,都需要一个要连接的纯文本字符串。坚定的攻击者会发现这一点。

您应该花时间保护的是您的数据库。您应该能够在传单上打印您的连接字符串并将它们贴在机器的侧面,并且仍然不必担心数据安全。

如果您向数据库的每个连接授予根访问权限,那么您就会遇到问题。但是,如果您仔细定义了数据库角色,那么他们唯一可以访问的数据就是他们应该访问的数据。然后用户所能做的就是访问他们本来可以从应用程序访问的数据。

确保你有审计日志,你可以查看并查看异常 activity(这是 Azure 最近开始做的事情)。攻击者在测试他们所拥有的帐户的限制时会遇到很多访问被拒绝的错误。学会发现它们。

当然,有一个 API 界面会更好,您可以在其中进行某种方式的身份验证和验证,但我理解有时我们必须使用现有的东西。

TL;DR

除了最简单的加密/混淆之外,不要费心尝试做任何事情。只需确保当有人获得您的连接字符串时,他们不会对其造成任何损害。锁定您的数据库。审计。经常查看审计。