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
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Privileg | die Macht, die ein Konto über die Maschine hat | |
| Minimale Rechte | jedem Konto nur die Macht geben, die seine Aufgabe braucht | |
| Setuid | eine Einstellung eines Programms: Es läuft als sein Besitzer, egal wer es startet | -rwsr-xr-x |
| sudo-Regel | eine Zeile, die sagt, wer was als root ausführen darf | |
| Audit | ein 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
find /usr/local/bin /usr/bin -perm -4000 -type fHier 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
ls -l /usr/local/bin/sysfindHier 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
| Modus | Bedeutung |
|---|---|
| -rwxr-xr-x | Ein gewöhnliches Programm |
| -rwsr-xr-x | Setuid: es läuft als sein Besitzer |
| -rwxr-sr-x | Setgid: 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?
sudo -l -U internHier 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
sudo cat /etc/sudoers.d/90-lab-internHier 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
| Regel | Risiko | Besser |
|---|---|---|
| ops ALL=(ALL) NOPASSWD: ALL | Root für alles, ohne Passwort | Die wenigen nötigen Befehle nennen |
| intern ALL=(root) NOPASSWD: /usr/bin/vim | vim kann eine Shell starten | Mit sudoedit eine Datei ändern lassen |
| web ALL=(root) /usr/bin/systemctl restart shop | Eng: ein genauer Befehl | So 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
find /opt -perm -o+w -type fHier 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
stat -c "%a %U %n" /opt/maintenance/cleanup.shHier 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?
sudo crontab -l -u rootHier 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
| Fehler | So erkennen Sie ihn | So schließen Sie ihn |
|---|---|---|
| Eine Setuid-Kopie eines Werkzeugs | find mit -perm -4000 | chmod u-s, oder die Kopie löschen |
| Eine zu weite sudo-Regel | sudo -l und /etc/sudoers.d | Genaue Befehle nennen, oder sudoedit |
| Ein Skript von root, das jeder ändern darf | find mit -perm -o+w | chmod 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?