如何在Windows中的进程之间传输敏感数据?

时间:2009-06-11 20:07:21

标签: windows security ipc process memory-mapping

我想将用户名和密码信息从一个进程传输到另一个在Windows中的同一服务器上运行的进程。以安全的方式实现此转移的最佳方法是什么?一种简单的方法是将密码复制到文件中,然后从文件中读取其他进程,然后在读取文件后删除该文件。虽然这很简单,但我担心它是否安全,因为即使它只能在短时间内生存,但仍有可能获得对该文件的访问权限。如果其他进程出错或崩溃,也有可能遗漏文件。像套接字和命名管道这样的IPC似乎对这个问题有点过分。我更倾向于使用内存映射文件,如下面的链接中所述,其中讨论了跨进程共享内存。这是正确的方法吗?另外,在释放/擦除之前用虚拟数据填充内存是否是个好主意,以防止胭脂程序从这个内存位置清除数据?

http://msdn.microsoft.com/en-us/library/aa366551(VS.85).aspx

2 个答案:

答案 0 :(得分:4)

RPC是你的朋友(我不会使用命名管道来传输安全数据,因为它们有一些严重的问题(因为它们在全局命名空间中运行,因此很容易受到蹲坐攻击)。)

由于数据未在线路上传递,因此加密并不像某些人所描述的那样重要。相反,有一个进程实现RPC服务器,另一端绑定到该服务器,使用凭据发出RPC调用并销毁绑定句柄 - 这应该拆除中间数据结构。

使用它时不要忘记安全地将内存清零(否则它可能会持久存储到磁盘上)。

如果您想使用加密,请使用CryptProtectMemory,它将以可用于IPC的方式加密数据。

答案 1 :(得分:1)

使用某些IPC(1)未备份到磁盘,(2)支持ACL。

这似乎表明了命名管道。

或者DCOM和WCF都支持内容加密。