Cron Jobs und geplante Aufgaben

LinuxBeginner
Jetzt üben

Einführung

In Linux-Systemen verwenden Administratoren häufig automatisierte Aufgabenplaner, um routinemäßige Wartungsarbeiten, Backups und Systemaktualisierungen durchzuführen. Das gebräuchlichste Werkzeug hierfür ist Cron. Obwohl Cron äußerst nützlich ist, können falsch konfigurierte geplante Aufgaben schwerwiegende Sicherheitslücken verursachen.

Geplante Aufgaben sind gefährlich, wenn Vertrauen und Schreibzugriff nicht übereinstimmen. Wenn eine privilegierte Aufgabe etwas ausführt, das Benutzer mit niedrigeren Rechten ändern können, wird der Zeitplan zu einem Mechanismus für eine verzögerte Privilegieneskalation.

In diesem Lab untersuchen Sie ein Szenario, in dem ein Systemadministrator ein Wartungsskript erstellt hat, das automatisch als root-Benutzer ausgeführt wird. Der Administrator hat jedoch versehentlich die Dateiberechtigungen zu locker eingestellt. Sie lernen, wie Sie diese Fehlkonfiguration identifizieren, ihre Auswirkungen verstehen und sie ausnutzen, indem Sie Ihren eigenen Befehls-Payload einschleusen, um Ihre Rechte von einem Standardbenutzer auf root zu eskalieren.

Cron-Jobs auflisten

In diesem Schritt lernen Sie, wie Sie systemweite Cron-Jobs auflisten. Cron ist ein zeitbasierter Aufgabenplaner in Unix-ähnlichen Betriebssystemen. Systemadministratoren verwenden ihn, um Aufgaben (Befehle oder Shell-Skripte) so zu planen, dass sie periodisch zu festen Zeiten, Daten oder Intervallen ausgeführt werden.

Systemweite Cron-Jobs werden häufig in der Datei /etc/crontab oder im Verzeichnis /etc/cron.d/ definiert. Diese Konfigurationsdateien legen den Zeitplan, das Benutzerkonto, unter dem der Befehl ausgeführt werden soll, und den Befehl selbst fest.

Das bedeutet, dass Cron-Einträge drei kritische Fakten auf einmal offenbaren: wann Code ausgeführt wird, unter welcher Identität er ausgeführt wird und welche Datei oder welcher Befehl ausgeführt wird.

Lassen Sie uns das Verzeichnis /etc/cron.d/ untersuchen, um zu sehen, ob es benutzerdefinierte geplante Aufgaben gibt. Verwenden Sie den Befehl cat, um den Inhalt der Wartungs-Cron-Job-Datei zu lesen.

cat /etc/cron.d/maintenance

Ausgabe:

* * * * * root /usr/local/bin/maintenance.sh

Die Ausgabe zeigt einen Cron-Job, der so geplant ist, dass er jede Minute ausgeführt wird, was durch die fünf Sternchen (* * * * *) angezeigt wird. Er ist so konfiguriert, dass er als root-Benutzer ausgeführt wird und das Bash-Skript unter /usr/local/bin/maintenance.sh ausführt.

Beschreibbare Skripte identifizieren

In diesem Schritt untersuchen Sie das vom Cron-Job ausgeführte Skript, um potenzielle Sicherheitslücken zu identifizieren. Wenn ein Skript von einem hochprivilegierten Benutzer wie root ausgeführt wird, werden alle Befehle innerhalb dieses Skripts ebenfalls mit root-Rechten ausgeführt.

Deshalb sind beschreibbare Skriptpfade ein wichtiges Signal für eine Eskalation. Die Kontrolle über den Skriptinhalt wird zur indirekten Kontrolle über die privilegierte geplante Aufgabe.

Wenn Standardbenutzer dieses Skript ändern können, können sie ihre eigenen Befehle einschleusen, die das System dann als root ausführt. Dies ist ein häufiger Vektor für Privilegieneskalationen.

Überprüfen wir die Dateiberechtigungen des Wartungsskripts mit dem Befehl ls und dem Flag -l für eine detaillierte Auflistung.

ls -l /usr/local/bin/maintenance.sh

Ausgabe:

-rwxrwxrwx 1 root root 78 Oct 10 10:00 /usr/local/bin/maintenance.sh

Beachten Sie die rwxrwxrwx-Berechtigungen am Anfang der Ausgabezeile. Dies bedeutet, dass die Datei vom Eigentümer, der Gruppe und jedem anderen auf dem System gelesen, geschrieben und ausgeführt werden kann. Da sie für jeden beschreibbar ist, kann Ihr aktueller Standardbenutzer ihren Inhalt ändern.

Einen Root-Befehls-Payload einschleusen

In diesem Schritt nutzen Sie die schwachen Dateiberechtigungen aus, indem Sie Ihren eigenen Befehl in das Wartungsskript einschleusen.

Da das Skript jede Minute als root ausgeführt wird, wird jeder Befehl, den Sie anhängen, ebenfalls als root ausgeführt. Für einen anfängerfreundlichen und zuverlässigen Nachweis hängen wir einen Befehl an, der die Ausgabe von id in eine Datei in Ihrem Projektverzeichnis schreibt.

Wir verwenden den Befehl echo, um diesen Payload an das Skript anzuhängen. Der Operator >> stellt sicher, dass wir unseren Payload an das Ende der Datei hinzufügen, ohne deren ursprünglichen Inhalt zu löschen.

echo "id > /home/labex/project/cron_pwned.txt" >> /usr/local/bin/maintenance.sh

Sie können überprüfen, ob Ihr Payload erfolgreich hinzugefügt wurde, indem Sie das Ende der Datei mit dem Befehl tail lesen.

tail -n 2 /usr/local/bin/maintenance.sh

Ausgabe:

echo "Maintenance run at $(date)" >> /var/log/maintenance.log
id > /home/labex/project/cron_pwned.txt

Auf die Ausführung der Root-Aufgabe warten

In diesem Schritt warten Sie darauf, dass der Cron-Job Ihren eingeschleusten Payload ausführt.

Der Cron-Job wird einmal pro Minute ausgeführt. Wenn er ausgeführt wird, führt er den Befehl id als root aus und speichert die Ausgabe in ~/project/cron_pwned.txt.

Warten Sie bis zu 60 Sekunden und lesen Sie dann die Nachweisdatei:

cat /home/labex/project/cron_pwned.txt

Wenn der Exploit korrekt funktioniert hat, sehen Sie eine Ausgabe ähnlich dieser:

uid=0(root) gid=0(root) groups=0(root)

Herzlichen Glückwunsch. Sie haben erfolgreich einen Cron-Job gekapert, um Befehle als root auszuführen.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie man schlecht gesicherte Systemwartungsaufgaben identifiziert und ausnutzt, um Privilegien in einer Linux-Umgebung zu eskalieren. Sie begannen damit, systemweite Cron-Jobs aufzulisten, um Aufgaben zu finden, die als Root-Benutzer ausgeführt werden. Dann untersuchten Sie das Zielskript und stellten fest, dass es schwache Dateiberechtigungen aufwies, die es jedem Benutzer ermöglichten, es zu ändern. Durch das Einschleusen eines Payloads in das beschreibbare Skript haben Sie den automatisierten Prozess erfolgreich gekapert und eine Root-Shell erhalten. Diese Übung unterstreicht die entscheidende Bedeutung eines ordnungsgemäßen Managements von Dateiberechtigungen, insbesondere für Skripte, die von privilegierten automatisierten Prozessen ausgeführt werden.