Stracing su 和 ssh 显示密码。这是一个安全缺陷还是我遗漏了什么?

Stracing su 和 ssh 显示密码。这是一个安全缺陷还是我遗漏了什么?

我目前对此很着迷strace,作为新手,我决定尝试一下。正如问题标题所建议的,我尝试了strace sustrace 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

我相信您看到此情况的原因是您必须先以纯文本形式输入sussh密码,然后再对其进行散列和处理。当您运行时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 权限的恶意人员会在您不知情的情况下窃取您的密码或密码短语。

相关内容