de:shellshock

Absicherung gegen "ShellShock"-Exploit

Inhalt

Die auf nahezu allen Linux-Servern installierte Bourne Again Shell (kurz „Bash“) enthält seit den frühesten Versionen einen äußerst kritischen Fehler (CVE-2014-6271), mit dem über Umgebungsvariablen beliebiger Code ausgeführt werden kann. Für fast alle aktuellen Linux-Distributionen wurden inzwischen gepatchte bash-Pakete bereitgestellt. Allerdings scheint der Patch nicht in allen Fällen zu greifen (siehe CVE-2014-7169 sowie Meldung auf Heise Security). Außerdem werden für ältere Linux-Distributionen vermutlich auch keine aktualisieren bash-Pakete mehr bereitgestellt.

Das Problem ist deshalb so kritisch, weil beispielsweise auch an Web-Anwendungen einige Parameter mittels Umgebungsvariablen übergeben werden. Parameter, die ein Angreifer „von außen“ beliebig manipulieren und somit diesen Fehler ausnutzen kann.

Häufig liest man, dass diese Lücke nur CGI-Scripte betreffen würde, die als Shell-Script programmiert sind. Tatsächlich sind aber z.B. auch PHP-Scripte anfällig, wenn diese über CGI oder über suPHP aufgerufen werden und sie irgendwelche Programme über den Backtick-Operator oder shell_exec() ausführen.

Verwundbarkeit prüfen

Führen Sie auf der Shell den nachfolgenden Befehl aus. Wenn die Ausgabe das Wort „vulnerable“ enthält, dann ist Ihr System weiterhin verwundbar:

$ unset X; rm -f /tmp/bashtest; export X='() { (a)=>\'; bash -c "/tmp/bashtest echo VULNERABLE"; cat /tmp/bashtest
bash: X: line 1: syntax error near unexpected token `='
bash: X: line 1: `'
bash: error importing function definition for `X'
VULNERABLE

Workaround

Bei RedHat wird ein zuverlässiger Workaround beschrieben, bei dem auch kein Patchen der bash notwendig ist. Hierzu wird ein kleines Programm über den dynamischen Linker (via LD_PRELOAD) praktisch jeder Programmausführung vorgeschaltet. Dies dürfte gleichzeitig auch die einzige Möglichkeit sein, alte Linux-Systeme effektiv gegen diesen Angriff zu schützen.

Installation des Workarounds

Sie haben zwei Möglichkeiten:

  1. Compilieren aus dem Source

    Laden Sie den Quellcode von RedHat herunter und vergleichen Sie die SHA256-Prüfsumme:
    $ wget -q https://access.redhat.com/sites/default/files/attachments/bash_ld_preload.c
    $ sha256sum bash_ld_preload.c
    $ 28cb0ab767a95dc2f50a515106f6a9be0f4167f9e5dbc47db9b7788798eef153  bash_ld_preload.c
    $ sha1sum bash_ld_preload.c
    99902772e18388a4ce62483834b9b69592fae908  bash_ld_preload.c


    Compilieren Sie dieses Programm anschließend:

    $ gcc bash_ld_preload.c -fPIC -shared -Wl,-soname,bash_ld_preload.so.1 -o bash_ld_preload.so
  2. Fertiges Programm herunterladen

    Alternativ können Sie auch ein fertig übersetztes Binary von unseren Servern herunterladen:

Prüfen Sie, ob das übersetzte oder heruntergeladene Binary korrekt funktioniert, indem Sie es mittels LD_PRELOAD einmal manuell vor einen Programmaufruf einfügen:

$ LD_PRELOAD=./bash_ld_preload.so bash -c "echo Test"
Test

Sollte hier irgend eine Fehlermeldung erscheinen, dann stimmt etwas nicht - in diesem Fall sollten Sie den Workaround-Code am besten selbst compilieren.

Wenn dagegen alles passt, dann verschieben Sie das Binary nach /usr/lib:

$ mv bash_ld_preload.so /usr/lib

Danach nehmen Sie es in /etc/ld.so.preload mit auf:

$ echo "/usr/lib/bash_ld_preload.so" >>/etc/ld.so.preload

Verwundbarkeit erneut prüfen

Prüfen Sie nun erneut, ob Ihr System noch verwundbar ist (siehe oben). Wenn Sie folgende Ausgabe erhalten, dann wirkt der Schutz:

$ unset X; rm -f /tmp/bashtest; export X='() { (a)=>\'; bash -c "/tmp/bashtest echo VULNERABLE"; cat /tmp/bashtest
bash: /tmp/bashtest: No such file or directory
cat: /tmp/bashtest: No such file or directory
de/shellshock.txt · Zuletzt geändert: 2015/05/26 15:05 von wikiadmin

Benutzer-Werkzeuge