Mythos oder Realität: SELinux kann den Root-Benutzer einschränken?

20

Ich habe irgendwo gelesen oder gehört (vielleicht im SELinux-Kurs von LinuxCBT ; ich bin mir jedoch nicht sicher), dass es Online-Linux-Server gibt, für die auch das Passwort des Root-Benutzers angegeben wird. Der Linux-Server wird mithilfe von SELinux-Regeln gehärtet, sodass sich jeder mit dem Root-Benutzer anmelden kann, das Betriebssystem jedoch keinen Schaden nimmt.

Es scheint mir ein Mythos zu sein, aber ich wollte sicherstellen: Ist es möglich, eine Linux-Box (möglicherweise mit SELinux) so zu härten, dass selbst der Root-Benutzer keine spezifischen böswilligen Aktivitäten darauf ausführen kann? (Beispiele: Löschen von Systemdateien, Löschen von Protokolldateien, Beenden kritischer Dienste usw.)

Eine solche Linux-Box ist ein guter Ausgangspunkt für den Bau eines Honeypots .

Bearbeiten: Basierend auf einer Antwort (jetzt gelöscht) und ein wenig Googeln, habe ich mindestens zwei Links, die auf solche gehärteten Linux-Server hingewiesen. Leider sind beide Server ausgefallen. Ich kopiere und füge die Beschreibungen hier ein:

1) Von http://www.coker.com.au/selinux/play.html :

Freier Root-Zugang auf einem SE Linux-Rechner!

Um auf meine Debian- Spielmaschine ssh als root zuzugreifen , lautet das Passwort ...

Beachten Sie, dass solche Maschinen viel Geschick erfordern, wenn Sie sie erfolgreich ausführen möchten. Wenn Sie fragen müssen, ob Sie eine ausführen sollen, lautet die Antwort "nein".

Damit soll demonstriert werden, dass alle erforderlichen Sicherheitsmaßnahmen von SE Linux ohne Unix-Berechtigungen bereitgestellt werden können (es wird jedoch weiterhin empfohlen, Unix-Berechtigungen auch für echte Server zu verwenden). Außerdem haben Sie die Möglichkeit, sich bei einem SE-Computer anzumelden und zu sehen, wie es ist.

Wenn Sie sich bei einem SE Linux-Spielautomaten anmelden, stellen Sie sicher, dass Sie die Option -x verwenden , um die X11-Weiterleitung zu deaktivieren, oder setzen Sie ForwardX11 no in Ihrer Datei / etc / ssh / ssh_config, bevor Sie sich anmelden. Stellen Sie außerdem sicher, dass Sie die Option -a verwenden, um die Weiterleitung des SSH- Agenten zu deaktivieren, oder setzen Sie ForwardAgent no in Ihrer Datei / etc / ssh / ssh_config, bevor Sie sich anmelden. Wenn Sie diese Einstellungen nicht korrekt deaktivieren, besteht bei der Anmeldung am Spielautomaten die Gefahr, dass Sie über Ihren SSH-Client angegriffen werden.

Es gibt einen IRC-Kanal, um dies zu diskutieren. Es ist #selinux auf irc.freenode.net .

Hier ist eine kurze FAQ

2) Von http://www.osnews.com/comments/3731

Ziel von Hardened Gentoo ist es, Gentoo für hochsichere und stabile Produktionsserverumgebungen nutzbar zu machen. Dieses Projekt ist kein eigenständiges Projekt, das von Gentoo getrennt ist. Es soll ein Team von Gentoo-Entwicklern sein, das darauf ausgerichtet ist, Gentoo Lösungen zu liefern, die starke Sicherheit und Stabilität bieten. Diese Maschine ist die SELinux- Demomaschine von Hardened Gentoo . Der Hauptzweck ist das Testen und Überwachen der SELinux-Integration und -Richtlinie.

MS Dousti
quelle
2
Es wurde auch hier behauptet . Während es sicher theoretisch möglich ist, scheint es mir schwierig zu sein (es sei denn, Sie beschränken diesen Root-Benutzer so sehr, dass er nichts Nützliches tun kann). Es ist im besten Fall schwierig, SELinux-Regeln zu schreiben, die genau das tun, was Sie sich vorgenommen haben.
Gilles 'SO- hör auf böse zu sein'
4
Mit neueren Kerneln können Nicht-Root-Benutzer Namespaces mit UID 0 erstellen. Da sie im Namespace der obersten Ebene keine UID 0 haben, können sie dem System keinen Schaden zufügen. Im Gegensatz zum SELinux-Ansatz, bei dem all diese Möglichkeiten weggenommen werden müssen, haben sie an sich keine Möglichkeit, Schaden anzurichten. Siehe Kernel: Namespaces-Unterstützung und Vollständige Trennung von zwei Konten ohne Installation separater Betriebssysteme?
Gilles 'SO- hör auf böse zu sein'
Hängt von Ihrem Grafiktreiber ab, ob er tatsächlich sicher ist oder nicht.
Joshua

Antworten:

17

Realität: Ja, SELinux kann den Root-Benutzer einschränken.

Dies ist möglich, weil SELinux sich nicht wirklich um den aktuellen Unix-Benutzer kümmert: Es werden lediglich zusätzliche Metadaten angezeigt, die als Kontext bezeichnet werden (die unter anderem ein Domänenfeld enthalten ) und mit denen SELinux entscheidet, ob die angeforderte Aktion autorisiert werden kann oder nicht nicht.

Was man sich normalerweise als Root-Benutzer vorstellt, wird in SELinux als Root-Unix-Benutzer zugeordnet, auf dem entweder die unconfined_toder die sysadm_tSELinux-Domäne ausgeführt wird. Es ist der klassische allmächtige Root-Benutzer mit voller Leistung.

Man kann sein System jedoch perfekt so einrichten, dass es eine Root-Shell (ich meine die Root-Unix-User-Shell) erzeugt, auf der die user_tSELinux-Domain des eingeschränkten Benutzers ausgeführt wird. Gemäß den SELinux-Richtlinien unterscheidet sich eine solche Shell nicht von anderen eingeschränkten Benutzer-Shells und hat keine besonderen Berechtigungen für das System, wodurch der Root-Benutzer effektiv eingeschränkt wird.

Aus experimenteller Sicht ist es sinnlos, so etwas buchstäblich zu tun, aber in der realen Welt finden ähnliche Praktiken ihren Weg. Ein klassisches Beispiel wäre ein Datenbankadministrator, der in der Lage sein muss, die Datenbankdämonen zu stoppen / zu starten, Konfigurationsdateien zu bearbeiten usw. Ohne SELinux müsste der Benutzer bei all diesen Aktionen zu Root-Rechten eskalieren (auch wenn dies normalerweise nur für einen einzelnen Benutzer gilt) Kommandozeile über das sudoTool, aber auch das kann zu Undichtigkeiten führen).

Dank SELinux können wir diesem Benutzer eine echte Root-Shell geben, die jedoch anstelle von running unconfined_toder sysadm_tdomains die dbadm_tDomain ausführt. Dies bedeutet, dass er mehr Berechtigungen als ein eingeschränkter Benutzer hat. Diese neuen Berechtigungen sind jedoch auf das beschränkt, was zur Verwaltung des Datenbankservers erforderlich ist: Dieser Benutzer kann keine anderen Dienste, Dateien oder Verwaltungsbefehle ausführen unbedingt erforderlich, um seine Arbeit zu tun.

Auf die gleiche Weise könnten der Webserver und andere Dienstadministratoren auch andere Root-Shells parallel auf demselben System ausführen. Jeder Benutzer sieht, dass sein aktueller Unix-Benutzer Root ist , aber dank SELinux hat jeder effektiv unterschiedliche Berechtigungen, die auf welche beschränkt sind wird für ihre eigenen Zwecke benötigt .

WhiteWinterWolf
quelle
1

Ja es ist möglich. Aber nicht sehr nützlich.

Theoretisch könnten Sie dem Root-Benutzer das Ausführen von Binärdateien untersagen, die für böswillige Zwecke verwendet werden könnten, und Richtlinien über SELinux erzwingen. Dies stellt jedoch ein Problem dar. Selbst wenn es dem Root-Benutzer anfangs nicht gestattet war, etwas zu tun, könnte er oder sie einfach andere Methoden verwenden, um die SELinux-Richtlinien zu ändern oder zu entfernen. Aufgrund dieses Problems müssten Sie dem Root-Benutzer effektiv das Ausführen von Aktionen verweigern, was dies nicht sehr nützlich macht.

strugee
quelle
Erstens war ich so pessimistisch wie Sie. Es scheint jedoch nicht notwendig zu sein, "dem Root-Benutzer das Ausführen von Aktionen zu verbieten", um mehr Wissen zu erlangen. Überprüfen Sie meine bearbeitete Antwort, die Links und Informationen zu Proof-of-Concepts enthält. Leider sind sie nicht mehr verfügbar. aber es scheint, dass die Implementierungen nicht streng restriktiv waren.
MS Dousti
-5

Ist es möglich, eine Linux-Box (möglicherweise mit SELinux) so abzusichern, dass selbst der Root-Benutzer keine spezifischen böswilligen Aktivitäten darauf ausführen kann?

Das mag billig klingen, ist aber ganz einfach: Ändern Sie die UID des Benutzers root auf einen Wert ungleich Null. Gehen Sie einfach in / etc / passwd und / etc / shadow, ändern Sie die vorhandenen uid = 0-Einträge von "root" zu etwas anderem und fügen Sie dann ein Konto mit dem Namen "root" hinzu, dessen uid nicht Null ist und nicht verwendet wird.

Es erreicht den Zweck ohne. Es ist auch eine Möglichkeit zu behaupten, dass jeder "root" -Zugriff haben kann, ohne tatsächlich eskalierte Berechtigungen bereitzustellen.

Otheus
quelle
3
Na ja, aber dann ist der rootBenutzer einfach nicht der eigentliche Root-Benutzer. Die Frage ist, ob der eigentliche Superuser so eingeschränkt werden kann.
Terdon
Klingt gefährlich - außer Sie erstellen natürlich ein anderes Konto mit der UID 0. Dies ist jedoch dasselbe wie das Umbenennen von root und das Wiederverwenden des Namens "root".
Volker Siegel
Die Frage bezieht sich nur auf "root", was nicht unbedingt dem Superuser entspricht, dh uid = 0. In seltenen Fällen ist dies eine nützliche Unterscheidung.
Otheus
2
Der Kontext macht jedoch deutlich, dass das OP fragt, ob der Superuser und nicht irgendein zufälliger User, dessen Benutzername rootso eingeschränkt werden kann.
Terdon
1
OKAY. Bearbeiten Sie zumindest Ihre Antwort und zeigen Sie, wie das, was Sie vorschlagen, erreicht werden könnte. Aufgrund seiner Länge wird es immer wieder als minderwertig eingestuft. Das ist der Grund, warum es Ablehnungen gibt.
Terdon