将密码发送到Windows服务

时间:2009-01-18 14:29:38

标签: windows service passwords ipc startup

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

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

目前,我们使用DPAPI仅使用CryptProtectData存储密码。虽然这很有效,但它会带来其他问题,这些问题开始变得麻烦。

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

由于

6 个答案:

答案 0 :(得分:1)

两个主要选项:

您可以在启动时侦听套接字并等待提供所需的密码(可能在那里嵌入了SSH服务器,因此无法通过网络窥探密码)

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

答案 1 :(得分:0)

感谢您回复罗兰。

  

你可以在套接字上听   启动并等待所需的   要提供的密码(可能嵌入   一个SSH服务器在那里,所以   密码无法窥探   线)

我考虑到了这一点,但是没有证书验证,这不会让我们对中间人的攻击开放吗?

  

我首选的选择是阅读   配置文件中的密码   (可以保证最低限度   读者)或注册表设置   (再次,这样足够安全   只有你的服务和管理员   可以阅读/更改它)

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

答案 2 :(得分:0)

您可以使用kerberos mutual authentication。那里几乎没有选择和例子。

但只是想知道。在受感染的计算机上,可能存在密钥记录器。因此,如果要在此环境中保持安全性,则输入密码永远不会安全。 unix终端存在同样的问题。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

  

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

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

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

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

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

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

我们已经尝试避免为我们的应用程序设置用户帐户的过程,因为它安装在许多不同的客户和环境中,所有客户和环境都有完全不同的安全策略。

答案 5 :(得分:0)

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