驱蚊器喵的翻译平台

Can you hear the gravity?


原文地址:https://jvns.ca/blog/2014/02/17/spying-on-ssh-with-strace/
原文标题:Spying on ssh with strace
原文作者:Julia Evans
原文写于:2014/02/17

译者:驱蚊器喵#ΦωΦ
翻译水平有限,有不通顺的语句,请见谅。


今天早上洗澡的时候,我在想 strace 和 ltrace,以及它们如何让你检查正在运行的进程的系统调用。我以前在这个博客上玩过一点 strace(详情请见 Understanding how killall works using strace),但我很清楚,strace肯定有很多用途我还没有探索过。

然后我想:”嘿!如果你能用 strace 看系统调用,用 ltrace 看库调用,那么,你能窥探别人的 ssh 密码吗?”

事实证明,你可以! 我本来想做原创性的研究,但就像人们在洗澡时想到的大多数事情一样,事实证明有人已经做了这个。于是我在谷歌上搜索,发现了这篇解释如何监视 ssh 的博文。这里的说明就是从那里拿出来的 :)

之所以能做到这一点,是因为 strace 不只是告诉你某个程序正在运行哪些系统调用,还会告诉你参数是什么!因此,如果一个程序调用了一个函数,strace 就会告诉你。因此,如果一个程序调用了一个带有密码的函数,你很有可能通过这种方式找到密码。

要做到这一点,你需要已经是 root ,所以这不是一个漏洞或其他的什么。这只是意味着,如果你的机器已经被入侵,那么它就真的被入侵了。以下是它的工作原理。

我的机器上有一个正在运行的 ssh 服务器,所以我 sshd 到我的笔记本电脑。

1
$ ssh asdf@localhost

sshd fork 并创建了几个新进程来处理连入的 ssh 连接。我可以用 ps 找到它们。

1
2
3
4
bork@kiwi /tmp> ps aux | grep sshd
root 1242 0.0 0.0 50036 908 ? Ss Jan21 0:00 /usr/sbin/sshd -D
root 9412 0.0 0.0 101536 4104 ? Ss 11:29 0:00 sshd: unknown [priv]
sshd 9413 0.0 0.0 51468 1356 ? S 11:29 0:00 sshd: unknown [net]

然后我可以用 strace 来监视这个子进程在做什么。如果把密码传给了主 sshd 进程,我们就赢了!

我把 strace 附加到子进程上,像这样:

1
$ sudo strace -p 9412 2> strace_out

然后回到我的 ssh 登录,输入我的密码(’magicpassword’)。

当我查看被创建的 strace_out 文件时,我发现,我可以看到密码了!

1
2
3
4
5
read(6, "\v\0\0\0\rmagicpassword", 18)  = 18
socket(PF_FILE, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 4
connect(4, {sa_family=AF_FILE, path="/dev/log"}, 110) = 0
sendto(4, "<38>Feb 17 11:32:35 pam_fingerpr"..., 68, MSG_NOSIGNAL, NULL, 0) = 68
sendto(4, "<38>Feb 17 11:32:35 pam_fingerpr"..., 121, MSG_NOSIGNAL, NULL, 0) = 121

这真的很疯狂! 当我想到你作为 root 可以做的破坏时,我通常会想到读取敏感文件等事情。而当我写一个 rootkit 时,我了解到你可以通过在内核中插入一个恶意模块来做各种疯狂的事情。(比如隐藏文件和进程,让你电脑上的每首歌都是 Rick Astley 的作品)。

但是,你也可以监视正在运行的进程,并且基本上可以了解你在它们周围的任何事情。因此,如果 NSA 在你的服务器上有 root 权限,他们可以很容易地找出每个通过 SSH 登录的用户的密码。哇。

本文作者 : meow
This blog is under a CC BY-NC-SA 4.0 Unported License
本文链接 : https://translation.meow.page/post/spying-on-ssh-with-strace/

本文最后更新于 天前,文中所描述的信息可能已发生改变