ssh-agent 的安全隐患

ssh 是SA 的一大利器,登录服务器、翻墙。。。ssh 通常都配合着 ssh-agent 来使用,ssh-agent 是个管理 private key 的 passphrase 的工具,启动 ssh-agent 后,执行一次 ssh-add ,此时需要输入一次 private key 的 passphrase ,输入正确后,passphrase 就归 ssh-agent 管理,往后的 ssh 操作,就不需要询问 passphrase 了。这里需要注意,ssh 必须开启了forwardagent ,一劳永逸的方法,就是在 /etc/ssh/ssh_config 中把#ForwardAgent no 去掉注释,并改为 ForwardAgent yes。

重点说说它的安全隐患。

ssh-agent 工作过程中会创建一个 socket 文件在 /tmp 目录里,如 /tmp/ssh-jlhtX14952/agent.14952 。我们需要使用 ssh-agent 时,运行一下 ssh-add ,把 private key 加入到 ssh-agent 中管理,此时,是需要输入一次 passphrase 的,当输入正确了以后,往后都不需要输入 passphrase 了。任何用户,只要连接上这个socket ,就可以使用已经加入到ssh-agent 管理的 private key 了,而且不需要输入 passphrase 。所以,这个 socket 的权限是 600 ,如:

srw——-  1 raymond raymond 0 May  1  2009 /tmp/ssh-jlhtX14952/agent.14952
但是。。。我们的 root ,是可以随意访问的。。。
这里演示一次!
1,用root 连接socket,这里很简单,就执行一句话
# SSH_AUTH_SOCK=/tmp/ssh-jlhtX14952/agent.14952; export SSH_AUTH_SOCK;

2, 查看此 socket 是否已经加入了 private key
# ssh-add -l
1024 fa:2d:87:1a:c5:a6:9d:7c:67:eb:51:a3:6a:7b:49:34 /home/raymond/.ssh/identity (RSA)
看,raymond 的 key 已经加入进去了

3,尝试登录raymond 的服务器,以root 的身份,但使用 raymond 的 key
# ssh raymond@220.181.xxx.xxx
Last login: Sat Mar  6 04:41:55 2010 from 220.181.xxx.xxx
[raymond@VM ~]$ whoami
raymond
看,此时,已经是以raymond 的身份登录的服务器了

Comments

  1. ayou says:

    这确实是比较严重的问题,不过我现在不必要用agent了,在securecrt里直接关闭

  2. […] 同学这里记录了一篇 ssh-agent 的安全隐患。要解决此问题,还得靠人,在 man ssh […]

Submit a Comment