Ausnutzung von SUID-Binärdateien

LinuxBeginner
Jetzt üben

Einführung

In Linux- und Unix-basierten Systemen sind Dateiberechtigungen ein grundlegender Sicherheitsaspekt. Eine spezielle Art von Berechtigung ist das SUID-Bit (Set Owner User ID). Wenn eine Binärdatei das SUID-Bit gesetzt hat, wird sie mit den Privilegien des Dateieigentümers ausgeführt, anstatt mit den Privilegien des Benutzers, der sie gestartet hat.

Während dies für bestimmte legitime Systemfunktionen notwendig ist (wie beim passwd-Befehl, der Root-Zugriff benötigt, um Ihr Passwort zu aktualisieren), stellt es bei einer Fehlkonfiguration ein erhebliches Sicherheitsrisiko dar. Wenn ein Systemadministrator versehentlich das SUID-Bit für ein Standard-Dienstprogramm wie find, vim oder bash setzt, kann ein Angreifer diese Werkzeuge nutzen, um Befehle als root-Benutzer auszuführen. Dies führt zu einer vollständigen Systemkompromittierung, die als Privilegieneskalation (Privilege Escalation) bezeichnet wird.

Das Gefährliche an SUID ist, dass es den Privilegienkontext der Programmausführung selbst verändert. Wenn das Programm dann andere Befehle oder Shells starten kann, können diese Privilegien nach außen dringen.

In diesem Lab schlüpfen Sie in die Rolle eines Sicherheitsforschers. Sie werden ein Linux-Dateisystem scannen, um Binärdateien mit gesetztem SUID-Bit zu finden, eine anfällige Fehlkonfiguration identifizieren und Techniken aus dem bekannten GTFOBins-Projekt verwenden, um Ihre Privilegien bis zum Root-Zugriff zu eskalieren.

Suche nach SUID-Binärdateien (find)

In diesem Schritt lernen Sie, wie Sie das Linux-Dateisystem nach Binärdateien durchsuchen, bei denen das SUID-Berechtigungsbit gesetzt ist.

Um diese Dateien zu finden, verwenden wir den integrierten find-Befehl. Der find-Befehl ist äußerst leistungsfähig und ermöglicht es uns, Dateien basierend auf ihren spezifischen Berechtigungen zu suchen. Wir suchen ab dem Wurzelverzeichnis / nach Dateien, bei denen das SUID-Bit (dargestellt durch den oktalen Wert 4000) aktiviert ist.

Die Aufzählung von SUID-Dateien ist eine Standardpraxis bei der Privilegieneskalation, da sie schnell Programme aufdeckt, die im Namen gewöhnlicher Benutzer mit erhöhten Privilegien ausgeführt werden.

Führen Sie den folgenden Befehl in Ihrem Terminal aus, um nach SUID-Binärdateien zu suchen und die Ergebnisse in einer Textdatei namens suid_results.txt in Ihrem Projektverzeichnis zu speichern:

find / -perm -4000 -type f 2> /dev/null > ~/project/suid_results.txt

Lassen Sie uns diesen Befehl aufschlüsseln, damit Sie genau verstehen, was er tut. Das / weist den Befehl an, die Suche ganz oben im Dateisystem zu beginnen. Der Parameter -perm -4000 sucht gezielt nach Dateien mit gesetztem SUID-Bit. Der Parameter -type f stellt sicher, dass wir nur nach regulären Dateien suchen, nicht nach Verzeichnissen. Schließlich ist 2>/dev/null ein nützlicher Trick, der alle "Permission denied"-Fehlermeldungen in ein schwarzes Loch (/dev/null) umleitet, um unsere Ausgabe sauber zu halten. Das >-Symbol leitet die bereinigte Ausgabe in unsere Textdatei um.

Lassen Sie uns nun den Inhalt der soeben erstellten Datei anzeigen, um zu sehen, welche Binärdateien das SUID-Bit gesetzt haben:

cat ~/project/suid_results.txt

Sie werden eine Ausgabe sehen, die in etwa so aussieht:

/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/openssh/ssh-keysign
/usr/bin/chfn
/usr/bin/find
/usr/bin/chsh
/usr/bin/passwd
/usr/bin/newgrp
/usr/bin/gpasswd
/usr/bin/su
/usr/bin/mount
/usr/bin/umount

Schauen Sie sich die Liste genau an. Bei vielen dieser Dateien, wie passwd und su, ist es zu erwarten, dass das SUID-Bit gesetzt ist. Eine dieser Binärdateien sticht jedoch als höchst ungewöhnlich und potenziell gefährlich hervor.

Identifizierung ausnutzbarer Binärdateien (GTFOBins)

In diesem Schritt analysieren Sie die Ergebnisse Ihrer Suche und identifizieren, welche Binärdatei ausgenutzt werden kann.

Wenn Sie sich die Ausgabe aus dem vorherigen Schritt ansehen, fällt Ihnen möglicherweise /usr/bin/find in der Liste auf. Der find-Befehl ist ein Standard-Dienstprogramm zur Dateisuche und benötigt für den normalen Betrieb absolut keine Root-Privilegien. Die Tatsache, dass das SUID-Bit gesetzt ist, stellt eine schwerwiegende Sicherheitsfehlkonfiguration dar.

Diese Einschätzung ist wichtig. Nicht jede SUID-Binärdatei ist ausnutzbar, aber ungewöhnliche Dateien verdienen besondere Aufmerksamkeit, da sie Funktionen bieten könnten, die ihre Entwickler nie mit erhöhten Rechten zugänglich machen wollten.

Um zu verstehen, wie wir dies ausnutzen können, nutzen Sicherheitsexperten eine Ressource namens GTFOBins. GTFOBins ist eine kuratierte Liste von Unix-Binärdateien, die verwendet werden können, um lokale Sicherheitsbeschränkungen in falsch konfigurierten Systemen zu umgehen. Wenn Sie die GTFOBins-Website besuchen und nach "find" suchen würden, würden Sie feststellen, dass find eine Funktion besitzt, die es ermöglicht, andere Befehle auszuführen.

Da unsere find-Binärdatei das SUID-Bit gesetzt hat, wird jeder Befehl, den sie ausführt, mit den Privilegien des Dateieigentümers (also root) ausgeführt.

Um Ihre Entdeckung zu bestätigen, erstellen Sie eine Datei namens vulnerable_binary.txt und schreiben Sie den Namen der ausnutzbaren Binärdatei hinein. Führen Sie dazu den folgenden Befehl aus:

echo "find" > ~/project/vulnerable_binary.txt

Sie können den Inhalt der Datei überprüfen, indem Sie ihn im Terminal ausgeben:

cat ~/project/vulnerable_binary.txt

Die Ausgabe sollte einfach lauten:

find

Durch die Identifizierung dieser Fehlkonfiguration haben Sie den Einstiegspunkt für Ihren Angriff zur Privilegieneskalation gefunden.

Erstellung des Exploit-Befehls

In diesem Schritt bereiten Sie den spezifischen Befehls-Payload vor, der für die Ausnutzung der SUID-Fehlkonfiguration in der find-Binärdatei erforderlich ist.

Laut GTFOBins verfügt der find-Befehl über einen -exec-Parameter. Dieser Parameter wird normalerweise verwendet, um eine bestimmte Aktion für jede von find gefundene Datei auszuführen. Angreifer können diesen Parameter jedoch missbrauchen, um eine System-Shell (/bin/sh) zu starten.

Der Standard-Exploit-Payload sieht so aus: find . -exec /bin/sh -p \; -quit.

Lassen Sie uns aufschlüsseln, warum dieser Payload funktioniert. Der Punkt . weist find an, die Suche im aktuellen Verzeichnis zu beginnen. Das -exec-Flag weist es an, den folgenden Befehl auszuführen. Wir geben /bin/sh an, um eine Shell zu starten. Das -p-Flag ist entscheidend; es weist die Shell an, die Privilegien beizubehalten, mit denen sie gestartet wurde (in diesem Fall die Root-Privilegien, die durch das SUID-Bit gewährt wurden). Das \; signalisiert das Ende des Befehls, den wir ausführen möchten. Schließlich weist -quit find an, die Suche sofort nach der einmaligen Ausführung des Befehls zu beenden, anstatt sie für jede Datei im Verzeichnis zu wiederholen.

Um die endgültige Ausführung vorzubereiten, speichern wir diesen Exploit-Payload in einer Shell-Skriptdatei namens exploit.sh. Führen Sie den folgenden Befehl aus:

echo 'find . -exec /bin/sh -p \; -quit' > ~/project/exploit.sh

Sie können das soeben erstellte Skript anzeigen, um sicherzustellen, dass der Payload korrekt ist:

cat ~/project/exploit.sh

Die Ausgabe zeigt Ihren erstellten Payload:

find . -exec /bin/sh -p \; -quit

Sie verfügen nun über den exakten Befehl, der erforderlich ist, um die find-Binärdatei dazu zu bringen, Ihnen eine Root-Shell zu geben.

Ausführung der Privilegieneskalation

In diesem letzten Schritt führen Sie den Exploit aus und beweisen, dass Sie Ihre Privilegien erfolgreich auf den root-Benutzer eskaliert haben.

Anstatt direkt in eine interaktive Shell zu springen (was in einer automatisierten Lab-Umgebung schwer zu überprüfen sein kann), werden wir unseren Payload leicht modifizieren, um einen einzelnen Befehl als Root auszuführen und die Ausgabe zu speichern. Wir verwenden den Befehl whoami, der den Benutzernamen des aktuell effektiven Benutzers ausgibt.

Führen Sie den folgenden Befehl aus, um whoami über die anfällige find-Binärdatei auszuführen und die Ausgabe in eine Datei namens root_proof.txt umzuleiten:

/usr/bin/find . -exec whoami \; -quit > ~/project/root_proof.txt

Beachten Sie, dass wir den absoluten Pfad /usr/bin/find verwendet haben, um sicherzustellen, dass wir die spezifische Binärdatei ausführen, die wir zuvor identifiziert haben. Der find-Befehl wird ausgeführt, löst das -exec-Flag aus, führt whoami mit Root-Privilegien aus (dank des SUID-Bits) und speichert das Ergebnis.

Lassen Sie uns nun den Inhalt Ihrer Beweisdatei überprüfen, um zu sehen, ob der Exploit erfolgreich war:

cat ~/project/root_proof.txt

Wenn der Exploit korrekt funktioniert hat, lautet die Ausgabe:

root

Herzlichen Glückwunsch! Sie haben erfolgreich eine falsch konfigurierte SUID-Binärdatei ausgenutzt, um Befehle als Root-Benutzer auszuführen.

Wenn Sie erleben möchten, wie man eine echte interaktive Root-Shell erhält, können Sie den Payload, den Sie im vorherigen Schritt erstellt haben, direkt in Ihrem Terminal ausführen:

/usr/bin/find . -exec /bin/sh -p \; -quit

Ihre Eingabeaufforderung ändert sich zu einem #-Symbol, was anzeigt, dass Sie nun als Root-Benutzer arbeiten. Sie können exit eingeben, um die Root-Shell zu verlassen und zu Ihrer normalen Benutzer-Eingabeaufforderung zurückzukehren.

Zusammenfassung

In diesem Lab haben Sie erfolgreich gelernt, wie man SUID-Fehlkonfigurationen auf einem Linux-System identifiziert und ausnutzt. Sie begannen damit, den find-Befehl zu verwenden, um nach Binärdateien mit gesetztem SUID-Berechtigungsbit zu suchen. Nachdem Sie /usr/bin/find als Anomalie identifiziert hatten, lernten Sie, wie Ressourcen wie GTFOBins verwendet werden können, um Exploit-Payloads zu entdecken. Schließlich haben Sie einen Befehl erstellt und ausgeführt, der den -exec-Parameter der find-Binärdatei missbrauchte, was es Ihnen ermöglichte, Befehle mit Root-Privilegien auszuführen.

Diese Übung unterstreicht die entscheidende Bedeutung eines ordnungsgemäßen Berechtigungsmanagements unter Linux. Systemadministratoren müssen SUID-Binärdateien regelmäßig überprüfen, um sicherzustellen, dass Standard-Dienstprogramme nicht versehentlich einen Pfad zur Privilegieneskalation eröffnen.