【问题标题】:How to securely communicate with my own Windows Service如何安全地与我自己的 Windows 服务通信
【发布时间】:2012-02-27 23:35:58
【问题描述】:

我有一个.NET application 和一个.NET Windows Service。如何在这两者之间建立安全的沟通渠道

Internet 上的大多数人建议使用 Named Pipes 与 Windows 服务进行通信。但这似乎可能会在系统中造成很大的安全漏洞。如果某个家伙对我的应用程序进行逆向工程,他会知道我使用的管道名称和协议,这允许他连接到我的服务并做他想做的任何事情。

示例:我的客户端安装了我的应用程序并授予它安装服务的完全权限。然后他下载了一些其他软件,没有授予它全部权限。但是该软件使用管道名称和反向工程协议找到了我的服务并利用它。

那么如何设计一个安全的沟通渠道呢?该服务能否以某种方式访问​​刚刚连接到其管道的程序(以便我可以比较它的哈希,前提是该服务已安装到安全位置)?或者也许使用不同的IPC? Microsoft 如何保护自己的服务免受此安全漏洞的影响?

【问题讨论】:

  • 命名管道支持安全性,我记得,因为我不得不禁用它:p
  • 为什么要先挖那个洞?如果您的应用程序需要权限,请再次询问用户!如果他不给你,考虑回退或中止。
  • @ordag:因为每次 Windows 启动时它都需要权限。而且我不希望我的整个应用程序在升级后运行,因为这可能会导致其他安全问题。

标签: .net security windows-services ipc named-pipes


【解决方案1】:

你只需要为你的命名管道设置一个安全描述符,这样只有你的客户端代码可以访问它。

详情在这里:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa365600%28v=vs.85%29.aspx

【讨论】:

  • +1 谢谢,这看起来很有希望。您是否有(有机会)将客户端限制为某个进程的示例?
  • 目前没有。自从我编写代码以来已经有一段时间了。 :)
  • 嗯,我找到了this,但离我需要的还很远。
【解决方案2】:

我会看看加密协议,例如RSA 加密算法。您使用的传输协议(管道、TCP/IP、消息等)并不重要。它们中的任何一个都可以以某种方式“读取”。 在您的情况下,我会使用一些网络协议(TCP/IP、UDP)来免费提供可扩展性功能。客户端和服务器端可以以这种方式位于不同的 PC/平台上。但是很多事情取决于需求。为什么您实际上需要保护这些东西,应该保护哪些数据(可能存在更容易为他人检索它的方法),数据量,其他?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多