Windows OpenSSH ssh-agent 服务在哪里秘密存储私钥
Posted
技术标签:
【中文标题】Windows OpenSSH ssh-agent 服务在哪里秘密存储私钥【英文标题】:Where does Windows OpenSSH ssh-agent service secretly store private keys 【发布时间】:2021-11-11 11:05:32 【问题描述】:获得了包含 ssh-agent 功能的 Windows10 Pro 附加功能“OpenSSH-Client”。可以使用 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 的不良功能扩展
【问题讨论】:
【参考方案1】:好的,回答我自己的问题:
Short awnser: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。【讨论】:
JFYI 在 GitHub issue of OpenSSH implementation project 中询问发生了什么:github.com/PowerShell/Win32-OpenSSH/issues/…以上是关于Windows OpenSSH ssh-agent 服务在哪里秘密存储私钥的主要内容,如果未能解决你的问题,请参考以下文章
让 ssh-agent 与 Windows 命令 shell 中的 git run 一起工作
为Windows 8上的Jenkins启用ssh-agent作为服务
windows server安装OpenSSH server
Windows 10 OpenSSH ssh-add“代理拒绝操作”(GitLab Windows Shared Runner)