有一些方法创建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进程的堆,这也是一种可行的方案。然而,这个进程当前超过了本文档的范围。
一旦我们得到了堆栈的副本,就有可能从该文件中提取密钥。然而,这个有 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 账户同时使用,也是很常见的事情。也可能是服务器配置成只有密钥才可访问。获取到未加密的密钥,才能在环境中游刃有余。
评论删除后,数据将无法恢复
评论(8)