从内存中偷取未加密的 SSH-agent 密钥 【已翻译100%】

如果你曾使用SSH密钥来管理多台机器,那么你可能使用过SSH-agent.这个工具使SSH密钥在内存中持续化,这样用户就不用每次都输入口令。然而,这会导致一些安全风险。root用户可能有权限从内存中取出解密后的SSH密钥,并重构它。

由于需要root权限,这种攻击看起来没什么用。例如,一个攻击者可能安装一个Keylogger并使用它来获得SSH密钥的口令。然而,这要等待肉鸡输入它们的口令。这取决于肉鸡掉线的频度,可能需要几个小时,几天或几周。在快速攻击方法中,这也是为什么从内存中获取SSH密钥对于转向其他机器至关重要。

使用SSH-agent

使用SSH-agent的一个常用方法就是运行"SSH-agent bash",再运行"SSH-add"把键值添加到代理中。一旦添加完成,键值将常驻SSH-agent堆栈中,直到进程终止.当用户使用带有-d或-D选项的SSH-add命令,其他键值也被添加。大多数人只运行一次并遗忘,除非他们需要重启机器。

**从内存中取出SSH Key
**
有一些方法创建SSH-agent内存的副本。最简单的方法是围绕gdb的使用。Gdb使用ptrace调用来绑定SSH-agent。这就为gdb创建运行进程中的内存dump提供了必需权限。 grabagentmem.sh 脚本 提供了一种自动dump内存的方法。默认情况下,当它运行时就会创建一个关于每个SSH-agent进程堆栈的内存dump.这些文件命名为SSHagent-PID.stack.

root@test:/tmp# grabagentmem.sh 
Created /tmp/SSHagent-17019.stack

如果机器上的gdb不可用,把整个机器上的内存dump下来,并使用volatility提取SSH-agent进程的堆,这也是一种可行的方案。然而,这个进程当前超过了本文档的范围。

从内存dump中解析SSH密钥

一旦我们得到了堆栈的副本,就有可能从该文件中提取密钥。然而,这个有 SSH-agent 创建的密钥在堆栈中用不同的格式保存的。因此,就有了parse_mem.py 脚本。它需要安装 pyasn1 模块.安装好后,就可以处理内存文件了。如果内存文件中包含了一个合法的 RSA SSH 密钥,就会把它保存在磁盘中。该工具的后续版本将会支持附加关键格式,例如 DSA, ECDSA, ED25519 和 RSA1。

root@test:/tmp# parse_mem.py /tmp/SSHagent-17019.stack /tmp/key
Found rsa key
Creating rsa key: /tmp/key.rsa

这个 key.rsa 文件可作为 SSH 中 switch 的 -i 参数。这就像原始的用户密钥,不需要口令去解析。

获取合法可用的 SSH 密钥可以帮助渗透者获取更高的客户端网络访问权限。密钥被用户账号和服务器上的

root 账户同时使用,也是很常见的事情。也可能是服务器配置成只有密钥才可访问。获取到未加密的密钥,才能在环境中游刃有余。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值