Eine Binärdatei hat File Capabilities statt des Setuid-Bits — ist sie damit harmlos?
Kurzantwort
Nein. File Capabilities (per setcap) zerlegen die Macht von root in Einheiten; ein kompromittiertes Programm mit einer Capability richtet weniger Schaden an als ein Setuid-root-Programm, das alle erhält. Weniger heißt aber nicht nichts: CAP_SYS_ADMIN ist überladen, die man-page rät davon ab. Prüfen Sie, welche Capability warum vergeben wurde.
Ingenieure halten „setcap statt setuid“ oft für eine abschließende Lösung. Eine gute Antwort würdigt die Verbesserung und prüft trotzdem die konkrete Capability.
Was Capabilities ändern
Laut Linux-man-pages teilen Capabilities die traditionell dem Superuser zugeordneten Rechte in einzelne Einheiten, die unabhängig aktiviert und deaktiviert werden können. Erklärtes Ziel: Wird ein Programm mit einer oder mehreren Capabilities kompromittiert, ist der mögliche Schaden geringer als bei demselben Programm mit vollen root-Rechten. Seit Linux 2.6.24 lassen sich Capabilities über erweiterte Attribute an ausführbare Dateien binden (setcap), als Alternative zum Setuid-Bit. Ein Prozess aus einer solchen Datei erhält nur die gewährten Capabilities, nicht alle wie bei einem Setuid-root-Programm ohne File Capabilities.
Warum es nicht harmlos ist
Capabilities wiegen unterschiedlich schwer. CAP_NET_BIND_SERVICE erlaubt einem unprivilegierten Programm, Ports unter 1024 zu binden — eine enge, sinnvolle Vergabe. CAP_SYS_ADMIN ist anders: Die man-page warnt, sie nicht zu wählen, wenn es sich vermeiden lässt, da ein Großteil der Prüfungen daran hängt. Eine Datei mit dieser Capability oder eine Schwachstelle in einem Capability-Programm kann weiterhin ein Eskalationspfad sein; Pentester listen sie auf (getcap -r /).
Was Interviewer erwarten
„Kleinerer Wirkungsradius, nicht null“ — Least Privilege pro Capability.
Wahrscheinliche Anschlussfragen
- Wie prüfen Sie einen Linux-Host auf Binärdateien mit File Capabilities?
- Warum gilt CAP_SYS_ADMIN als nahezu root, und was nimmt man stattdessen?
- Wann wählen Sie CAP_NET_BIND_SERVICE statt einen Dienst als root zu betreiben?