我目前对此很着迷strace
,作为新手,我决定尝试一下。正如问题标题所建议的,我尝试了strace su
和strace ssh
。这两个命令都显示了我在 strace 输出中输入的密码。su
一直抱怨密码错误,但ssh
能正常登录。
我的问题:
- 这是一个安全缺陷还是我遗漏了什么?
- 报告
su
不正确的密码是否是一种安全措施,因为它检测到密码正在被运行strace
?如果是这样,它如何知道它是通过调用的strace
?可能会检查/proc/self/cmdline
一下吗? - 诸如此类的事情会造成多少损害
alias su="strace -o /tmp/output.log su"
答案1
这不是一个安全缺陷;而是一个安全缺陷。您可以追踪该流程,因为这是您的流程。您不能只是附加strace
到任何正在运行的进程。例如:
$ sudo sleep 30 &
[1] 3660
$ strace -p 3660
attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
su
正在报告错误的密码,因为它没有足够的权限来读取/etc/shadow
。/etc/shadow
是存储密码哈希值的位置,出于安全原因,它被设置为只有 root 可以读取它。su
设置了 setuid 位,因此无论谁运行它,它都会以 root 身份有效运行,但是当您运行它时,strace
它不起作用,因此它最终会在您的帐户下运行
我不确定你所说的“可能造成多少损害”是什么意思。正如您所看到的,su
它无法从内部工作strace
,因此您将使其不起作用。如果您的意思是“有人可以使用它来窃取我的密码”,那么他们需要能够在您的 shell 中设置别名,除非您将登录文件设置为全局可写或类似的东西,否则他们不应该有权限这样做。如果他们确实有权设置别名,他们可以直接使用su
直接记录您密码的修补版本的别名;没什么特别的strace
答案2
我相信您看到此情况的原因是您必须先以纯文本形式输入su
和ssh
密码,然后再对其进行散列和处理。当您运行时strace
,您将接收所有系统调用,并在对其进行哈希和处理之前捕获明文密码。仅仅因为终端不显示文本并不意味着您没有输入纯文本。
答案3
http://blog.vpetkov.net/2013/01/29/sniffing-ssh-password-from-the-server-side/表明存在潜在的安全问题,如果攻击者在运行 openssh 的服务器上拥有 root 权限,他们可以通过strace
在“net”进程上运行来收集 ssh 到服务器的人员的密码:
ps aux | grep ssh | grep net | awk {‘ print $2′} | xargs -L1 strace -e write -p
...
Process 17681 attached – interrupt to quit
write(4, “\0\0\0 \v”, 5) = 5
write(4, “\0\0\0\33thisismysupersecretpassword“, 31) = 31
write(3, “\345+\275\373q:J\254\343\300\30I\216$\260y\276\302\353″…, 64) = 64
Process 17681 detached
答案4
尽管这只能使用 root 权限来完成,但它仍然非常危险:您从该计算机使用 ssh 访问其他关键计算机,然后具有 root 权限的恶意人员会在您不知情的情况下窃取您的密码或密码短语。