From 788c946c77c5833bb107e0bb23766f61471abb47 Mon Sep 17 00:00:00 2001 From: Jan Klemkow Date: Sun, 6 Jan 2013 00:02:48 +0100 Subject: format the document. --- document.asciidoc | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/document.asciidoc b/document.asciidoc index 5407479..3a1cf70 100644 --- a/document.asciidoc +++ b/document.asciidoc @@ -1,6 +1,7 @@ = Sichere Software-Entwicklung im systemnahen Bereich :author: Jan Klemkow, Benjamin Franzke :lang: de +:toc: == Kurzfassung @@ -11,6 +12,8 @@ Systemschnittstellen (System-Calls) zugreifen. Es werden einleitend Problemfelder von Systemnahen Programmen geschildert und ein Historischer Vergleich zu Anwendungsprogrammen gezogen. +:numbered: + == Einleitung Sicherheit fuer die Software-Entwicklung im systemnahen Bereich spielt eine @@ -36,14 +39,14 @@ Fokus der Angriffe. // Angefangen beim Kernel des Betriebssystems -== Angriffsvektoren +//== Angriffsvektoren -In diesem Kapitel werden verschiedene Angriffsvektoren und Schwachstellen von -Systemprogrammen erlaeutert. -Zudem werden werden verschiedene Verteidigungsmassnahmen erlaeutert, welche +In den folgenden Kapiteln werden verschiedene Angriffsvektoren und +Schwachstellen von Systemprogrammen erlaeutert. +Zudem werden werden verschiedene Verteidigung s Massnahmen erlaeutert, welche das Risiko der Angriffsmoeglichkeiten senken. -=== Standard-C-Bibliothek +== Standard-C-Bibliothek Viele Systemprogramme sind in der Programmiersprache ``C'' geschrieben. Deren Standardbiblothek unterlag im Laufe der Zeit einer ganzen Reihe von @@ -100,7 +103,7 @@ TODO: strncpy() strlcpy() * strcpy() * str..() -=== Netzwerk-Programmierung +== Netzwerk-Programmierung Ein grosser Angriffsvektor auf Computersysteme sind die Laufenden Dienste, welche ueber Netzwerk und Internet erreichbar sind. @@ -116,7 +119,7 @@ erlaeutert werden. * Zugangsbeschraenkung (Firewall Layer 3/4) * Applikation Level Gateway (doppelte parsen von protokollen) -==== Privilege-Separation +=== Privilege-Separation Bei der Privilege-Seperation wird ein Programm in verschiedene Prozesse mit unterschiedlichen Berechtigungen auf geteilt. @@ -130,7 +133,7 @@ Im einfachsten Fall startet ein Daemon mit Root rechten und holt sich alle Ressourcen, wie etwas Sockets mit Well-Known-Ports oder eine Filedescriptor auf eine Datei, gibt dann die rechte ab und laeuft im user-mode weiter. -==== Privilege-Revocation +=== Privilege-Revocation Die meisten Anwendung benoetigen ausschliesslich waehrend der Initialisierung hoehere Rechte, um etwa einen Socket mit einem Well-Known-Port zu oeffnen. @@ -140,7 +143,7 @@ abgeben und mit normalen Benutzer-Rechen weiter laufen. -==== Service-Seperation +=== Service-Seperation Da auf einem Computer zumeist mehr als nur ein Dienst laeuft, welcher mit einem Netzwerk oder dem Internet verbunden ist, ist auch die Angriffsmoeglichkeit auf @@ -180,7 +183,7 @@ Sollte ein Dienst keine eigenen Dateien benoetigen, kann dieser unter dem speziellen Nutzer ``nobody'' ausgefuehrt werden. Unter vielen Unix-Systemen wird dieser speziell fuer diese Aufgabe verwendet. -==== Beschraenkung der Erreichbarkeit +=== Beschraenkung der Erreichbarkeit Sollte ein Dienst nur fuer einen bestimmten Kreis von Nutzern bestimmt sein, dann sollte man die Erreichbarkeit des Dienstes auf diesen Kreis beschraenken. @@ -197,10 +200,11 @@ Im Hinblick auf IPv6 gibt es in diesem Bereich viele Spezialadressen welche fuer die verschiedensten Zwecke genutzt werden koennen. In jedem Fall sollte die Erreichbarkeit von Diensten soweit wie moeglich eingeschraenkt werden. -Auch Tunnel-Techniken wir IPSEC und andere VPN-Loesungen koennen dabei verwendet -werden. +Auch Tunnel-Techniken wir IPSEC und andere VPN-Loesungen koennen verwendet +werden, um einen Dienst ausschliesslich einem ausgewaehlten Nutzern zugaenglich +zu machen. -=== Kernel +== Kernel Beim erstellen einer sicherheitskritischen Anwendung ist nicht nur die Architektur und Programmierung der Anwendung selbst wichtig. @@ -215,7 +219,7 @@ das Gesamtsystem betrachtet. * interrupt blockierung * Treiber Userland(minix) / OpenSource (nvidia) -=== Microkernel +== Microkernel Die meisten Betriebssysteme verwenden ein monolitisches Kernel-Design. In diesem werden viele Aufgaben des Betriebssystems im Kernel erledigt. @@ -228,10 +232,10 @@ 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-Prozesse ausgelagert, z. B. die +Dort werden viele Aufgaben an User-Prozesse ausgelagert, zum Beispiel die Geraetetreiber. -==== NVIDIA Treiber Problem +=== NVIDIA Treiber Problem Im +CVE-2012-0946+ wird eine Sicherheitsluecke im NVIDIA Graphikkarten-Treiber fuer Linux, Solaris und FreeBSD beschrieben, welcher das erlangen von hoeheren -- cgit