Windows OpenSSH ssh-agent 服务在哪里秘密存储私钥

问题描述 投票:0回答:2

获得 Windows10 Pro 附加功能“OpenSSH-Client”,其中包括 ssh-agent 功能。可以使用 ssh-add 将密钥添加到代理。令我惊讶的是,这个 Windows 实现似乎将这些私钥存储在磁盘上 - 标准 ssh-agent 只会将它们存储在 RAM 中。 试试这个:

ssh-add <private key from thumbdrive>
## remove thumbdrive
## stop ssh-agent service
## start ssh-agent service
ssh-add -l

而且,瞧,钥匙还在那里;即使重新启动也不会擦除它们!

所以现在我真正非常安全的私钥位于系统磁盘上的某个位置。 我怎样才能删除它们以及磁盘上可能仍然存在的任何残留物? 有谁知道这些东西存放在哪里吗?

顺便说一句。就我个人而言,我发现这是对原始 OpenSSH ssh-agent 的一个糟糕的功能扩展

windows openssh
2个回答
13
投票

好的,回答我自己的问题:

短芒瑟:

ssh-add -D
将删除键....有点。

密钥存储在注册表中 HKCU\Software\OpenSSH\Agent\Keys 下。 从文件contrib/win32/win32compat/ssh-agent/keyagent-request.c

中的
https://github.com/PowerShell/openssh-portable/releases/tag/v8.1.0.0

的源代码中找出了这一点

从好的方面来说,此实现在存储密钥的私有部分上使用 DPAPI。 另一方面,如果拥有正确的权限,可以使用 ImpersonateLoggedOnUser 来解密此存储的密钥。

遗憾的是,这个实现并没有使用原始版本中严格的删除方法(

BN_clear_free
)——一个简单的
RegDeleteTreeA
就足够了。因此,要真正删除,需要修改 ntuser.dat.log。 磁盘上私钥的实际存储不符合原始手册页:

The agent initially does not have any private keys.

总体来说:虽然叫法一样,但其实是很不一样的东西。关于使用此 ssh-agent 实现的一些警告:

  • 它将密钥存储在磁盘上 - 切勿在共享或访客情况下使用
  • 删除后,秘密密钥(的痕迹)仍保留在磁盘上
  • 此实现在安全性的关键方面不符合 openssh 手册页 ssh-agent.1。

0
投票

Windows OpenSSH ssh-agent 服务默认将私钥存储在

%LOCALAPPDATA%\ssh
目录中。此位置通常是
C:\Users\YourUsername\AppData\Local\ssh.
在此目录中,您将找到 ssh-agent 文件夹,其中包含私钥。这些密钥使用您的用户帐户的凭据进行加密和保护。

需要注意的是,除非拥有适当的权限,否则其他用户或进程无法直接访问这些密钥。始终确保采取适当的安全措施来保护私钥等敏感信息

另外:

当您使用 ssh-add 将 SSH 密钥添加到 SSH 代理时,密钥通常存储在 内存 中,而不是磁盘上。它们缓存在 SSH 代理进程中,并且不会写入文件系统上的任何特定存储位置。

© www.soinside.com 2019 - 2024. All rights reserved.