diff options
-rw-r--r-- | document.asciidoc | 53 |
1 files changed, 25 insertions, 28 deletions
diff --git a/document.asciidoc b/document.asciidoc index 0d89ef1..528db1e 100644 --- a/document.asciidoc +++ b/document.asciidoc @@ -293,47 +293,43 @@ In diesem werden viele Aufgaben des Betriebssystems im Kernel erledigt. Das bedeutet, dass der Programm-Code mit sehr hohen Berechtigungen ausgeführt wird. -Ein Grossteil dieser Aufgaben koennen auch von User-Prozessen übernommen -werden. -Dieses hat den Vorteil, dass Schutzfunktionen des Prozessors genutzt werden -koennen. - -Bei Betriebssystemen mit einem Mikro-Kernel-Design ist dieses anders. -Dort werden viele Aufgaben an User-Space-Prozesse ausgelagert, zum Beispiel die -Geraetetreiber. +Ein Großteil dieser Aufgaben -- wie zum Beispiel die Gerätetreiber -- +koennten auch von User-Prozessen übernommen werden. +Dies hat den Vorteil, dass Schutzfunktionen des Prozessors genutzt werden. +Diese Archtitekur nennt sich Mikro-Kernel-Design. ==== Nvidia-Treiber-Problem Im +CVE-2012-0946+ wird eine Sicherheitslücke im Nvidia Grafikkartentreiber -für Linux, Solaris und FreeBSD beschrieben, welche das Erlangen von hoeheren +für Linux, Solaris und FreeBSD beschrieben, die das Erlangen von hoeheren Rechten ermoeglicht. Das Ausnutzen dieses Programmierfehlers ist nur moeglich, weil der Treiber im privilegierten Modus ausgeführt wird. ==== Minix -Bei dem Betriebssystem Minix etwa, werden Geraetetreiber als User-Prozess -gestartet. -Dadurch unterliegen sie den gleichen Sicherheitsvorkehrungen wie alle anderen -nicht privilegierten Prozesse. +Bei dem Betriebssystem Minix, werden Geraetetreiber als User-Prozess +gestartet, dadurch unterliegen sie den gleichen Sicherheitsvorkehrungen wie +alle anderen nicht privilegierten Prozesse. So werden z. B. Speicherbereichsverletzungen vom Prozessor erkannt. Ein fehlerhaft programmierter Treiber kann so nicht mehr das gesamte System gefaehrden. -Dieses Kernel-Architektur hat grosse Performence-Nachteile gegenüber eines -monolithischen Designs. -Denn will einen Anwendung Beispielsweise mit der über das Netzwerk ein Paket -versenden, so muss für dieses Paket zwei mal der Userspace-Kernelspace-Kontext -gewechselt werden. -Dieses kostet enorm viel Zeit, da der gesamte Prozessorkontext für den -Uebergang von Anwendung zum Kernel, sowie vom Kernel zum Netzwerkkartentreiber -gesichert werden muss. -In einem monolithischen Design gaebe es nur einen Kontextwechsel von zum Kernel, -welche das Netzwerkmodule enthaelt. -Somit muss man an dieser Stelle Performence und Sicherheit abwiegen und für -den konkreten Einzelfall entscheide welches wichtiger ist. +Dieses Kernel-Architektur hat grosse Performanz-Nachteile gegenüber einem +monolithischen Design. +Will einen Anwendung Beispielsweise über das Netzwerk ein Paket versenden, so +muss für dieses Paket zwei mal der Userspace-Kernelspace-Kontext gewechselt +werden. +Dies kostet enorm viel Zeit, da der gesamte Prozessorkontext für den Uebergang +von Anwendung zum Kernel, sowie vom Kernel zum Netzwerkkartentreiber gesichert +werden muss. +In einem monolithischen Design gaebe es nur einen Kontextwechsel zum Kernel, +der das Netzwerkmodul enthaelt. +Somit muss an dieser Stelle Performanz und Sicherheit abwogen werden und für +den konkreten Einzelfall, sich für das wichtigere entschieden werden. === Kernel-Programmierung +//FIXME: Erster satz - konkrete Aussage? Für die Entwicklung von Kernel-Modulen müssen ebenfalls hohes Mass an Sicherheit und Sorgfalt gelten. Hat eine Anwendung im Userspace-Bereich noch einen ganzen virtüllen @@ -343,9 +339,9 @@ Um für kritische Aufgaben einen unterbrechungsfreien Programmablauf zu garantieren, koennen im Kernel Hardware-Interrupts blockiert werden. Diese müssen nach Beendigung der Arbeit in jedem Fall wieder freigegeben werden. -Ein haeufiger Fehler an dieser Stelle ist fehlen von Interrupt-Freigaben, in +Ein haeufiger Fehler an dieser Stelle ist das Fehlen von Interrupt-Freigaben, in Fehlerbehandlungsroutinen. -In einer Funktion wird dabei für eine wichtige Aufgabe ein Unterbrechungsfreier +In einer Funktion wird dabei für eine wichtige Aufgabe ein unterbrechungsfreier Prozessorkontext erzeugt, indem die Interrupts blockiert werden. Am Ende der Routine wird die Blockierung wieder aufgehoben und die Funktion verlassen. @@ -354,7 +350,8 @@ Es wird Beispielsweise ein Zeiger auf +NULL+ geprüft und im Fehlerfall die Funktion mit einem Rückgabewert verlassen, welcher einen Fehler anzeigt. Vergessen wurde aber die Interrupts wieder freizugeben. Die Funktion in die zurück gesprungen wird, erwartet einen Interrupt z. B. -von Tastatur, Maus oder Netzwerkkarte, aber wird nie einen erhalten. +von Tastatur, Maus oder Netzwerkkarte, aber wird einen solchen nie einen +erhalten. Dadurch kann das gesamte System zum Stillstand kommen. // vim: set syntax=asciidoc spell spelllang=de,en: |