Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Wie ein Fehler Root-Rechte verschenkt (minimale Rechte)

Nach dieser Lektion: Ich kann erklären, wie ein Fehler einen Nutzer zu root machen kann und wie man ihn schließt.

Lektion, 55 Min.7 BefehleLab zur Rechteausweitung unter Linux: eine setuid-Binärdatei, eine sudo-Regel und ein Cron-Job zum Knacken

Die Praktikantin mit den Schlüsseln zu allem

Eine Firma gibt ihrer Praktikantin eine kleine Aufgabe: eine Einstellungsdatei auf dem Server ändern. Um Zeit zu sparen, erlaubt ein Administrator ihr sudo für einen Editor, ohne Passwort.

Ein Jahr später stellt eine Sicherheitsprüfung fest, dass sie jeden Tag hätte root werden können. Der Editor war der Weg.

Am Ende dieser Lektion

Notiz

Ich kann erklären, wie ein Fehler einen Nutzer zu root machen kann und wie man ihn schließt.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Privilegdie Macht, die ein Konto über die Maschine hat
Minimale Rechtejedem Konto nur die Macht geben, die seine Aufgabe braucht
Setuideine Einstellung eines Programms: Es läuft als sein Besitzer, egal wer es startet-rwsr-xr-x
sudo-Regeleine Zeile, die sagt, wer was als root ausführen darf
Auditein System gegen eine Liste bekannter Fehler prüfen

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Die eine Regel

Warnung

Sehen Sie sich nur diese Lab-Maschine an. Sie gehört Ihnen allein und erreicht niemand anderen. Ein System anzugreifen, das Ihnen nicht gehört oder das Sie nicht testen dürfen, ist eine Straftat.

Setuid startet eine Datei als ihr Besitzer

Die meisten Programme laufen mit den Rechten dessen, der sie startet. Ein Setuid-Programm läuft stattdessen mit den Rechten seines Besitzers.

Manche brauchen das. passwd muss eine geschützte Datei ändern. Ein Setuid-Programm im Besitz von root, das nie so gedacht war, ist dagegen ein Weg, root zu werden.

Die Setuid-Programme finden

Befehl
find /usr/local/bin /usr/bin -perm -4000 -type f

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Das erste ansehen

Befehl
ls -l /usr/local/bin/sysfind

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein Beispiel: das s lesen

ModusBedeutung
-rwxr-xr-xEin gewöhnliches Programm
-rwsr-xr-xSetuid: es läuft als sein Besitzer
-rwxr-sr-xSetgid: es läuft mit seiner Gruppe

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Eine sudo-Regel kann zu weit sein

Eine sudo-Regel nennt einen Nutzer, als wen er handeln darf, und welche Programme. NOPASSWD heißt: Es wird kein Passwort verlangt.

Ein einzelnes Programm zu nennen klingt sicher. Das ist es nicht, wenn dieses Programm ein anderes starten kann. Editoren, Pager und find können alle eine Shell starten. Eine Shell, die in sudo startet, ist eine Root-Shell.

Was darf intern mit sudo ausführen?

Befehl
sudo -l -U intern

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Regel selbst

Befehl
sudo cat /etc/sudoers.d/90-lab-intern

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein Beispiel: enge und weite Regeln

RegelRisikoBesser
ops ALL=(ALL) NOPASSWD: ALLRoot für alles, ohne PasswortDie wenigen nötigen Befehle nennen
intern ALL=(root) NOPASSWD: /usr/bin/vimvim kann eine Shell startenMit sudoedit eine Datei ändern lassen
web ALL=(root) /usr/bin/systemctl restart shopEng: ein genauer BefehlSo lassen

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein häufiger Fehler

Warnung

Viele halten eine sudo-Regel für ein Programm für eng. Eng ist sie nur, wenn das Programm keine anderen Programme starten kann. Fragen Sie vor jeder Erlaubnis: Kann es eine Shell starten oder eine andere Datei als root öffnen?

Root vertraut dem Skript, das es startet

Der Cron von root startet jede Minute ein Skript. Darf jeder es ändern, kann jeder root dazu bringen, seine eigenen Befehle auszuführen.

Die Regel ist einfach. Eine Datei, die root startet, muss root gehören, und sonst darf niemand hineinschreiben. Auch der Ordner, in dem sie liegt, zählt.

Dateien finden, in die jeder schreiben darf

Befehl
find /opt -perm -o+w -type f

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Modus, Besitzer und Name

Befehl
stat -c "%a %U %n" /opt/maintenance/cleanup.sh

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Startet root es wirklich?

Befehl
sudo crontab -l -u root

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die drei Fehler und wie man sie schließt

FehlerSo erkennen Sie ihnSo schließen Sie ihn
Eine Setuid-Kopie eines Werkzeugsfind mit -perm -4000chmod u-s, oder die Kopie löschen
Eine zu weite sudo-Regelsudo -l und /etc/sudoers.dGenaue Befehle nennen, oder sudoedit
Ein Skript von root, das jeder ändern darffind mit -perm -o+wchmod 755 und Besitzer root

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Erst das Lab, dann die Lücke schließen

Tipp

Das Lab verlangt, dass Sie auf Ihrer eigenen Maschine einen dieser Fehler nutzen und aufschreiben, was Sie taten. Tun Sie das zuerst. Schreiben Sie danach in Ihren Bericht, wie Sie die Lücke schließen würden, mit der Tabelle oben.

Weiterführend

Führen Sie find /opt /usr/local/bin /etc/cron.d -type f -perm /022 aus. /022 bedeutet: Gruppe oder Andere dürfen schreiben.

Schreiben Sie für jede ausgegebene Zeile drei Dinge in Ihren Bericht. Wer darf in die Datei schreiben? Wer startet sie? Welcher eine Befehl schließt die Lücke?

Über dieses Lab und seinen Quellcode: Lab zur Rechteausweitung unter Linux: eine setuid-Binärdatei, eine sudo-Regel und ein Cron-Job zum Knacken

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.