GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie überprüfe ich, ob Bash eine Shellshock-Schwachstelle hat?

Die Schwachstelle Shellshock wurde Ende 2014 gefunden (um genau zu sein, die Auswirkung wurde am 24. September 2014 auf CVE-2014-6271 veröffentlicht). Später wurde ein Update in der Bash-Version 4.1.2-15  veröffentlicht mit einem Fix für die Shellshock-Schwachstelle. Nun, die ganze Welt hat die Bash aktualisiert und ihre Shell vor Shellshock gesichert, aber überraschend viele Maschinen in meinem Büro wurden aus welchen Gründen auch immer nicht aktualisiert. Der beängstigende Teil ist, dass nur wenige dieser Computer mit anfälliger Shell viele Dienste im Internet hosten. Laut verschiedenen Blogs im Internet ermöglicht der Shellshock-Exploit einem Angreifer, einen böswilligen Befehl in Bash über CGI-Skripte aus der Ferne auszuführen.

(I know this tutorial is pretty late, but there are many who are not aware of it and still using vulnerable bash on their public servers)

Als erstes sollten Sie überprüfen, ob Ihr BASH Shellshock-anfällig ist oder nicht . Daher weist jede Bash-Version vor 4.1.2 mit Sicherheit diese Schwachstelle auf.

$ bash --version
 GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)

(oder)

$ rpm -qa|grep bash
 bash-completion-1.3-7.el5
 bash-3.2-32.el5_9.1

Jetzt kennen Sie die Version, also führen Sie die folgenden Befehle aus, um zu bestätigen, dass sie für Shellshock anfällig ist.

$ env x='() { :;}; echo vulnerable' bash -c "echo If you see the word vulnerable above, you are vulnerable to shellshock"
 vulnerable
 If you see the word vulnerable above, you are vulnerable to shellshock

Lösung:

Springen Sie zum Ende dieses Beitrags. Falls Sie wissen möchten, wie Shellshock funktioniert, lesen Sie es durch.

Die Exportvariablen in SHELL verstehen :

Wie die obige Ausgabe sagt, ist Ihre SHELL anfällig, aber mal sehen, wie sie funktioniert.

Normalerweise können Sie eine Umgebungsvariable setzen und sie in einer Shell verwenden. Zum Beispiel wie folgt:

$ test=1
 $ echo $test
 1

Aber Sie können die env-Variable „test“ nicht direkt in einer neuen Bash-Shell verwenden . Probieren Sie es aus:

$ test=1
 $ echo $test
 1
 $ bash
 $ echo $test

Ausgabe ist leer. Der Grund dafür ist, dass eine Umgebungsvariable nur in derselben Shell für den Zugriff verfügbar ist. Aber wenn Sie eine Umgebungsvariable exportieren, ist sie auch für eine neue Bash-Shell verfügbar. Hier ist ein Beispiel:

$ var="testing"
 $ export var
 $ bash
 $ echo $var
 testing

Jetzt können Sie sehen, dass die Variable „$var“ in einer Shell gesetzt und exportiert wurde und von einer anderen Shell aus darauf zugegriffen wurde. Natürlich können Sie den Export jederzeit mit dem folgenden Befehl stoppen.

$ export -n var
 $ bash
 $ echo $var

Ebenso können Sie Funktionen erstellen und in einer Shell exportieren und von einer anderen Shell aus auf die exportierte Funktion zugreifen. Sehen wir uns auch dieses Beispiel an.

$ fnc() { echo "testing"; }
 $ fnc
 testing
 $ bash
 $ fnc
 bash: fnc: command not found

In der obigen Ausgabe sehen Sie ‘bash:fnc:command not found ‘ weil die fnc ist keine exportierte Funktion. Sie können es also nicht von einer anderen Shell aus aufrufen.

Lassen Sie uns „fnc“ exportieren ‘ auch.

$ export -f fnc
 $ fnc
 testing
 $ bash
 $ fnc
 testing

Es funktioniert wie erwartet (da ‘fnc ‘ wurde exportiert und ist in einer anderen Shell verfügbar).

Durch das Exportieren einer Variablen oder einer Funktion wird eine Umgebungsvariable festgelegt

$ env | grep -A1 fnc
 fnc=() { echo "testing"
 }

Jetzt Shellshock-Exploit

Anhand der obigen Beispiele haben wir gelernt, dass eine neue Bash-Shell die Definition einer Umgebungsvariable aufnimmt, die mit () beginnt, und sie als Funktion interpretiert . Aber die Schwachstelle hier ist, dass die neue Shell alles ausführt, was im Zitat steht.

Zum Beispiel:

Führen Sie den folgenden Befehl aus:

$ export sse_fnc='() { echo "function shellshock exploit" ; }; echo "Not good"; '

Überprüfen Sie die Umgebungsvariable auf „sse_fnc“:

$ env | grep -A1 sse_fnc
 sse_fnc=() { echo "function shellshock exploit" ; }; echo "Not good";

Gehen Sie zu einer neuen Bash-Shell:

$ bash
 Not good

Hinweis: Wir haben gerade ‚bash getippt “ und Sie sehen den Text „Nicht gut ‘ gedruckt. Das bedeutet, dass die neue Shell nach dem Lesen der Umgebungsvariable mit der Ausführung der Funktion beginnt und auch die nachgestellten Befehle ausführt (obwohl die Funktionsklammer nach dem „echo“ „Funktion Shellshock Exploit“;“ geschlossen wurde).

Mit anderen Worten:„Die exportierte Variable sse_fnc wurde an die Subshell übergeben, die als Funktion sse_fnc interpretiert wurde aber die nachgestellten Befehle wurden ausgeführt (this is bad ) als die Subshell erzeugt wurde.“

über Fixee@StackExchange

Wie kann diese Schwachstelle ausgenutzt werden?

Ich glaube, niemand kann das besser erklären als dieser Typ (shellshocker.net). Danke Mann!

Wie behebt man Shellshock?

Einfach, aktualisieren Sie Ihre Bash und testen Sie den Exploit, um zu überprüfen, ob die Schwachstelle behoben wurde.

$curl https://shellshocker.net/fixbash | sh

Der obige Befehl lädt automatisch über 30 Patches herunter und kompiliert Bash aus der Quelle. Sie können dieses Skript regelmäßig ausführen, um Ihre Bash mit den neuesten Patches auf dem neuesten Stand zu halten.

Sobald die Installation erfolgreich ist. Überprüfen Sie die Bash-Version wie folgt:

$bash --version
 GNU bash, version 4.3.42(1)-release (x86_64-unknown-linux-gnu)

Shellshock-Schwachstelle testen:

$env x='() { :;}; echo vulnerable' bash -c "echo If you see the word vulnerable above, you are vulnerable to shellshock
 If you see the word vulnerable above, you are vulnerable to shellshock

In der obigen Ausgabe wurde kein „verwundbares“ Wort gedruckt. Meine Bash ist also sicher!

(oder)

$env X='() { (shellshocker.net)=>\' bash -c "echo date"; cat echo; rm ./echo

Wenn BASH anfällig ist, gibt der obige Befehl ein Datum aus. Andernfalls ist BASH sicher.


Linux
  1. Wie schreibe ich eine Schleife in Bash?

  2. Wie überprüfe ich die Teilzeichenfolge in Shell Script Bash?

  3. Wie überprüfe ich Syslog in Bash unter Linux?

  4. So überprüfen Sie, ob sed eine Datei geändert hat

  5. Wie überprüfe ich, ob ssh-agent bereits in bash läuft?

So prüfen Sie, ob eine Zeichenfolge in Bash eine Teilzeichenfolge enthält

So überprüfen Sie die Python-Version

So überprüfen Sie die Java-Version

Überprüfen Sie, ob Ihr Linux-System anfällig für Shellshock ist, und beheben Sie es

So überprüfen Sie, ob eine Datei oder ein Verzeichnis in der Bash-Shell vorhanden ist

Wie überprüfe ich die Syntax eines Bash-Skripts, ohne es auszuführen?