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

oschina 投递于 2014/07/22 06:44 (共 5 段, 翻译完成于 07-22)
阅读 5431
收藏 88
5
加载中

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

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

徐继开
翻译于 2014/07/22 08:31
4

使用SSH-agent

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

徐继开
翻译于 2014/07/22 08:37
2

从内存中取出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进程的堆,这也是一种可行的方案。然而,这个进程当前超过了本文档的范围。

徐继开
翻译于 2014/07/22 08:46
2

从内存dump中解析SSH密钥

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

徐继开
翻译于 2014/07/22 09:21
2
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 账户同时使用,也是很常见的事情。也可能是服务器配置成只有密钥才可访问。获取到未加密的密钥,才能在环境中游刃有余。

徐继开
翻译于 2014/07/22 10:05
2
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(8)

s
salmon514
银行卡和银行卡里面的现金 都没有重量。
s
salmon514
并没有什么乱用,既然有root权限了,直接弄私钥文件,还弄个毛线的内存,ssh-agent和私钥必须一台机器运行的,是一样的。就像你面前有个银行卡和银行卡里面的现金,当然是直接拿现金,还破解个毛的银行卡密码。
牧沐
牧沐
租阿里云的机器,需要考虑防这个不
osoul
osoul
好文
雪梦科技
雪梦科技
强大
vingzhang
vingzhang
好文
徐迎龙
徐迎龙
很震撼
Cnlouds
Cnlouds
翻译大牛@徐继开辛苦啦,大赞!前天测试没成功,有些蛋疼~~安全类翻译文章好少额。。
返回顶部
顶部