Ich lerne für eine Prüfung zur Computersicherheit und habe Schwierigkeiten, die folgende Beispielfrage zu verstehen.
„Erklären Sie den Unterschied zwischen der Ausführung im Ring 0 auf x86 und der Ausführung als UID 0 unter Linux. Geben Sie ein Beispiel für etwas, das in beiden Fällen aktiviert wird, in den anderen jedoch nicht.“'
Nach meinem derzeitigen Verständnis ist Ring 0 auf x86 die Betriebssystemebene mit den höchsten Privilegien und Kernelcode wird in Ring 0 ausgeführt. UID 0 ist der Linux-Superuser, der im Grunde alles ausführen kann. Mit meinem derzeitigen Verständnis dieser Konzepte weiß ich nicht, wie ich diese Frage beantworten soll.
Bitte beachten Sie, dass dies KEINE Hausaufgabe ist und ich auch KEINE Note dafür bekomme, sondern nur Lernmaterial.
Antwort1
Ihr Verständnis ist richtig. „Ring 0“ ist der x86-Begriff für den Kernelmodus des Prozessors. „Ausführen im Ring 0“ bedeutet „Kernelcode“.
In Bezug auf die Sicherheit kann alles, was ein Prozess (unter einer beliebigen UID) tun kann, auch vom Kernel getan werden. Manche Dinge sind sehr umständlich, wenn man sie vom Kernelcode aus tut, z. B. das Öffnen einer Datei, aber sie sind möglich.
Umgekehrt gilt: Wenn Sie unter normalen Umständen Code unter UID 0 ausführen können, können Sie auch Kernelcode ausführen, indem Sie ein Kernelmodul laden. Daher gibt es in einer typischen Konfiguration keine Sicherheitsbarriere zwischen UID 0 und Kernelebene. In einem Prozess ausgeführter Code ist jedoch immer noch an die Einschränkungen des Benutzermodus des Prozessors gebunden: Jeder Zugriff auf ein Peripheriegerät (einschließlich Festplatten, Netzwerk usw.) muss immer noch über einen Systemaufruf erfolgen. Es ist möglich, eine Maschine mit einer UID 0 zu konfigurieren, die nicht allmächtig ist, zum Beispiel:
- Deaktivieren Sie das Laden von Kernelmodulen.
- Benutze einenSicherheitsrahmenwie zum BeispielSELinuxum einem Prozess Berechtigungen zu entziehen: UID 0 hat nicht unbedingt Vorrang vor diesen. Beispielsweise ist es möglich, mit der richtigen SELinux-Richtlinie ein Gastkonto mit UID 0, aber im Wesentlichen ohne Berechtigungen zu erstellen.
- UID 0 in einemBenutzer-Namespacehat nur die Berechtigungen des Namespace-Erstellers.