Einige grundlegende Fragen zur Sicherheit des Linux-Kernels [geschlossen]

8

Ich weiß nicht viel über den Linux-Kernel und habe einige Fragen.

  1. Was ist der Hauptzweck der Trennung des Kernel-Speichers vom User-Space-Speicher? Um sicherzustellen, dass eine Benutzeranwendung dem Kernel nichts Böses antun kann?

  2. Wie viele Möglichkeiten gibt es für eine Anwendung auf Benutzerebene, um die Kontrolle auf den Kernel zu übertragen? Was ich mir einfallen lassen kann, ist (1) das Aufrufen eines Systemaufrufs, (2) das Zuordnen des Speichers zum Kernel (aber ich denke, mmap () ist auch ein Systemaufruf) und (3) das Laden eines Kernelmoduls (aber ich denke, lsmod ruft auch einen Systemaufruf auf). Hab ich recht? Gibt es andere Möglichkeiten, die ich verpasst habe?

  3. Wie viele Möglichkeiten, den Kernel anzugreifen? Darf ich einige kurze Details darüber haben?

  4. Wenn ich das Root-Privileg erhalte, bedeutet das, dass ich den Kernel vollständig kontrolliere? Kann ich nämlich mit dem Kernel und der Hardware machen, was ich will? Oder habe ich immer noch begrenzte Leistung im Kernel?

Ich würde es wirklich begrüßen, wenn mir jemand helfen könnte, die Antwort auf diese Fragen herauszufinden.

hebothu
quelle
1
Hier gibt es einige gute Fragen, aber können Sie sie in spezifischere Fragen mit einem Hauptthema pro Frage aufteilen?
Caleb

Antworten:

5

Ich werde versuchen, Fragen so kurz wie möglich zu beantworten. Die Fragen, die Sie stellen, werden normalerweise in Einführungskursen für Betriebssysteme an Universitäten behandelt, aber ich gehe davon aus, dass Sie keinen solchen Kurs belegt haben.

  1. Die Speicherisolation für Userspace-Prozesse ist sehr wünschenswert - nicht nur, um den Kernel vor böswilligen Userspace-Programmen zu schützen, sondern auch, um Userspace-Programme voreinander zu schützen. Dies wird normalerweise als virtueller Speicher bezeichnet . Dies erleichtert auch die Implementierung von Paging, was auch aus anderen Gründen wünschenswert ist (einfachere Fragmentierung, einfachere Linker / Loader usw.).

  2. Interrupts (von denen nicht alle die Kontrolle über eine Anwendung auf Benutzerebene haben). Das Aufgeben des Prozessors nimmt dem Prozess auch die "Kontrolle" (z wait. B. usw., die auch Systemaufrufe sind). Der Kernel kann selbst entscheiden, eine Anwendung zu verschieben.

  3. Das ist eine sehr breite Frage. Kernel mit schlecht implementierten Systemaufrufen ist anfällig. Die Fähigkeit, in den physischen Speicher zu schreiben, wäre ein anderer Weg. Es gibt andere Sicherheitslücken, die sich aus schlecht implementierten Anweisungen ergeben können (z. B. Sysret-Sicherheitslücke in Intel-Prozessoren).

  4. Root-Berechtigungen sind nicht mit Kernel-Berechtigungen identisch. Eine Anwendung, die als Root-Benutzer ausgeführt wird, verwendet weiterhin den virtuellen Speicher, muss weiterhin Systemaufrufe ausführen und muss weiterhin die anderen Regeln befolgen, die eine Anwendung auf Benutzerebene erfüllen muss.

Wenn Sie möchten, dass ich einige der Antworten näher erläutere, lassen Sie es mich wissen.

Wenn jemand einige der Antworten verbessern kann, können Sie darauf hinweisen.

mtahmed
quelle
Danke für Ihre Antwort. Sie sagten "Interrupts (von denen nicht alle die Kontrolle über eine Anwendung auf Benutzerebene haben).", Was bedeutet, dass nur Software-Interrupts die Kontrolle über die Benutzerebene haben, Hardware-Interrupts nicht. Ist es richtig?
Hebothu
Ich glaube, der Userspace muss den Kernelspace irgendwie bitten, einige der Interrupts zu verarbeiten. Der Kernel hat also im Grunde immer noch die Kontrolle über die Interrupts. Insbesondere verarbeitet der Kernel die Interrupts weiterhin und leitet sie an den Userspace weiter, wenn eine Userspace-Anwendung sie empfangen möchte. Suchen Sie nach Linux UIO.
Mtahmed