1

向 Windows 服务发送密码的最佳方式是什么?我们的应用程序需要密码才能启动。我不在乎服务“通常”应该在没有用户交互的情况下运行。操作员可以启动应用程序然后注销,这对我们来说已经足够了。

在 unix 系统上,我只会通过标准输入回显密码,但服务没有标准输入。

目前,我们使用 DPAPI 仅使用 CryptProtectData 存储密码。虽然这可行,但它提出了其他开始变得麻烦的问题。

我猜我需要在服务和发送密码的应用程序之间使用某种形式的 IPC,但我不确定哪种方法合适(如果有的话)。

谢谢

4

6 回答 6

1

两个主要选项:

您可以在启动时侦听套接字并等待提供所需的密码(可能在其中嵌入一个 SSH 服务器,这样密码就无法通过网络窥探)

我的首选选项是从配置文件(可以保护到最低读者群)或注册表设置(同样,足够安全,只有您的服务和管理员可以读取/更改它)中读取密码

于 2009-01-18T16:53:07.047 回答
0

You can use kerberos mutual authentication. There are few options and examples there.

But just wondering. On a compromised machine, There may be a key logger. So typing the password is never secure if you want to maintain security in this environment. The same problem exist afaik for unix terminals.

于 2009-01-18T23:48:46.023 回答
0

感谢您回复罗兰。

您可以在启动时侦听套接字并等待提供所需的密码(可能在其中嵌入一个 SSH 服务器,这样密码就无法通过网络窥探)

我考虑过,但如果没有证书验证,那不会让我们对中间攻击的人开放吗?

我的首选选项是从配置文件(可以保护到最低读者群)或注册表设置(同样,足够安全,只有您的服务和管理员可以读取/更改它)中读取密码

我们正在尝试尽可能地遵循“深度防御”,这样如果攻击者破坏了机器,他将无法访问我们的应用程序。

于 2009-01-18T17:06:52.417 回答
0

UserMode 中的 DPAPI 确实是最好的选择,并将加密数据存储在受保护的位置,例如具有有限 ACL 的注册表项。
究竟是什么问题开始变得麻烦?也许我们可以解决那些...

于 2009-01-19T06:56:49.340 回答
0

究竟是什么问题开始变得麻烦?也许我们可以解决那些...

目前,应用程序作为本地系统帐户运行。

我们的应用程序将许多凭据存储在加密文件中,并使用 DPAPI(在 UserMode 中)进行加密。

因此,安装应用程序时,安装程​​序将作为本地系统帐户运行。我们还有一组随应用程序提供的工具,其中一些需要访问此加密文件,因此它们也需要作为本地系统帐户运行。

在安装和启动应用程序时,我们严重依赖该帐户。

我们遇到了问题,因为我们的一位用户想要使用该应用程序访问共享网络驱动器。本地系统帐户没有这样的权限,我们不能简单地以不同的用户身份运行我们的服务,因为我们的加密信息受到本地系统帐户的保护。

我们试图避免仅为我们的应用程序设置用户帐户的过程,因为它安装在许多不同的客户和环境中,所有这些客户和环境都有截然不同的安全策略。

于 2009-01-19T13:38:56.970 回答
0

您可以从系统帐户下运行的服务访问远程驱动器。但是,您需要有凭据和共享信息才能连接到远程计算机。您可以使用 API wnetaddconnection 来获得访问权限。可能您的加密文件也可以存储此凭据。

于 2009-05-21T05:47:31.050 回答