From 1a3bfcce5e76f9c8ff1150ced5586a8dc35989ba Mon Sep 17 00:00:00 2001
From: Jan Klemkow <j.klemkow@wemelug.de>
Date: Tue, 1 Jan 2013 15:10:31 +0100
Subject: Add some text in varios sections.

---
 document.asciidoc | 99 +++++++++++++++++++++++++++++++++++++++++++++++--------
 1 file changed, 86 insertions(+), 13 deletions(-)

(limited to 'document.asciidoc')

diff --git a/document.asciidoc b/document.asciidoc
index 09c6a76..0e9e2de 100644
--- a/document.asciidoc
+++ b/document.asciidoc
@@ -1,22 +1,26 @@
-= Sichere Softwareentwicklung im Systemnahenbereich
+= Sichere Software-Entwicklung im systemnahen Bereich
 :author: Jan Klemkow, Benjamin Franzke
 :lang: de
 
 == Kurzfassung
-Dieses Dokument beschreibt Sicherheitrisiken von Systemprogrammen mit dem Fokus
+
+Dieses Dokument beschreibt Sicherheitsrisiken von Systemprogrammen mit dem Fokus
 auf UNIX-Systeme.
 
 == Einleitung
+
 Im Systemnahenbereich gibt es viel Software welche fuer die Sicherheit des
 Gesammtsystems eine enorme rolle spielt.
 
 == Angriffsvektoren
+
 In diesem Kapitel werden verschiedene Angrifftvektoren und Schwachstellen von
 Systemprogrammen erlaeutert.
 Zudem werden werden verschiedene Verteidigungsmassnahmen erlaeutert, welche
 das Risiko der Angriffsmoeglichkeiten senken.
 
 === Standard-C-Bibliothek
+
 Viele Systemprogramme sind in der Programmiersprache C geschrieben.
 Deren Standardbiblothek unterlag im laufe der Zeit einer ganzen Reihe von
 Veraenderungen, welche unteranderem die Sicherheit von Programmen erhoehten.
@@ -50,13 +54,14 @@ Um dieses Problem zu loesen wurden neue Zeichenkettenfuntkionen in die
 Standard-C-Bibliothek auf genommen, welche als Argument maximal Laengen
 uebergeben bekommen.
 
+[source,c]
 -------------------
 strcpy(char *dst, const char *src);
 strncpy(char *dst, const char *src, size_t len);
 strlcpy(char *dst, const char *src, size_t dstsize);
 -------------------
 
-Hierbei gibt es zwei ansaetze mit Laengen umzugehen.
+Hierbei gibt es zwei Ansaetze mit Laengen umzugehen.
 TODO: strncpy() strlcpy()
 
  * gets()
@@ -65,20 +70,24 @@ TODO: strncpy() strlcpy()
  * str..()
 
 === Netzwerk-Programmierung
-Ein grosser Angriffvektor auf Computersysteme sind die Laufenden Dienste,
+
+Ein grosser Angriffsvektor auf Computersysteme sind die Laufenden Dienste,
 welche ueber Netzwerk und Internet erreichbar sind.
-Ein Fehler in iherer Programmierung kann von ausserhalb ausgenutzt werden,
+Ein Fehler in ihrer Programmierung koennte von ausserhalb ausgenutzt werden,
 da Internetdiensten eine staendige weltweite Erreichbarkeit haben.
-Somit kann ein Internetdienst potentiel zur jeder Zeit von jedem Ort aus
+Somit kann ein Internetdienst potentiell zur jeder Zeit von jedem Ort aus
 angegriffen werden.
 
-Zum Schutz solcher Dienste gibt es verschiene Mechanissmen.
+Zum Schutz solcher Dienste gibt es verschiedene Mechanismen, welche im Folgenden
+erlaeutert werden.
 
  * privilege separation
- * zugangs beschraenkung (Firewall Layer 3/4)
+ * chroot/jail
+ * Zugangsbeschraenkung (Firewall Layer 3/4)
  * Applikation Level Gateway (doppelte parsen von protokollen)
 
 ==== Privilege Separation
+
 Bei der Privilege-Seperation wird ein Programm in verschiedene Prozesse mit
 unterschiedlichen Berechtigungena auf geteilt.
 Ziel ist es, so wenig Programmcode wie moeglich mit root-Rechten laufen zu
@@ -91,18 +100,82 @@ Im einfachsten Fall startet ein Deamon mit Root rechten und holt sich alle
 resourcen, wie etwas sockets mit Well-Known-Ports oder eine Filedescriptor auf
 eine Datei, gibt dann die rechte ab und laeuft im user-mode weiter.
 
+==== 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
+dieses System sehr hoch.
+
+Vor Allem beim Servern, welche viele Dienste wie HTTP, FTP, SMTP, POP3 und
+viele mehr anbieten ist die Gefahr einer Sicherheitsluecke sehr hoch.
+Sollte einer dieser Dienste ueber eine Sicherheitsluecke von einem Angreifer
+uebernommen werden, so koennte diese ebenfalls die anderen Dienste und deren
+Daten uebernehmen.
+
+Um dieses zu vermeiden, werden diese Dienste in kuenstlichen Umgebungen
+getrennt von einander getrennt.
+
+Eine Variante ist dafuer der System-Call +chroot(2)+.
+Dieser System-Call wechselt fuer einen Prozess und dessen Kind-Prozesse das
+Root-Verzeichnis.
+Somit kann ein Prozess auf Dateien ausserhalb des neuen
+Root-Verzeichnisses mehr zugreifen.
+Bereits geoeffnete Dateien koennen aber weiterhin verwendet werden,
+auch wenn diese Ausserhalb des neuen Root-Verzeichnisses liegen.
+
+Ein Beipsiel fuer die Anwendung dieser Technik ist der Apache-Http-Server,
+welcher meist in das Verzeichnis +/var/www+ als Root-Verzeichnis wechselt.
+
+==== Zugangsbeschraenkung
+
+Sollte ein Dienst nur fuer 
+
 === Kernel
 
+Beim erstellen einer sicherheitskritischen Anwendung ist nicht nur die
+Architektur und Programmierung der Anwendung selbst wichtig.
+Die Umgebung in der die Anwendung laeuft ist ebenfalls ein wichtiger Faktor,
+fuer dich Sicherheit eines Systems.
+So kann die Wahl eines anderen Betriebssystems schon dafuer ausschlaggebend
+dafuer sein, ob eine Programmierfehler zu einem Sicherheitsrisiko wird oder
+nicht.
+
+Im Folgenden werden einige Aspekte des Kernel-Designs auf ihre Sicherheit fuer
+das Gesamtsystem betrachtet.
+
  * interrupt blockierung
- * Treiber Userlandi(minix) / OpenSource (nvidia)
+ * Treiber Userland(minix) / OpenSource (nvidia)
 
 === Microkernel
 
-In den meisten Betriebssystemen werden Monolitische Kernel benutzt, welche
-viele Betriebssytemaufgaben im Kernel-Mode laufen lassen.
+Die meisten Betriebssysteme verwenden ein monolitisches Kernel-Design.
+In diesem werden viele Aufgaben des Betriebssystems im Kernel erledigt.
+Das bedeutet, dass der Programmcode mit sehr hohen Berechtigungen
+ausgefuehrt wird.
 
-Viele dieser Aufgaben koennen auch von User-Prozessen uebernommen werden.
+Ein Grossteil dieser Aufgaben koennen auch von User-Prozessen uebernommen
+werden.
 Dieses hat den Vorteil, dass Schutzfunktionen des Prozessors genutzt werden
 koennen.
 
-// vim: set syntax=asciidoc:
+Bei Betriebssystemen mit einem Mikro-Kernel-Design ist dieses anders.
+Dort werden viele Aufgaben an User-Prozesse ausgelagert, z. B. die
+Geraetetreiber.
+
+==== 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
+Rechten ermoeglicht.
+Das ausnutzen dieses Programmierfehlers ist nur moeglich, weil der Treiber
+im Kernel-Mode ausgefuehrt wird.
+
+//Bei dem Betriebssystem Minix etwa, werden Geraetetreiber als User-Prozess
+//gestartet.
+//Dadruch unterliegen sie den gleichen Sicherheitsvorkehrungen wie alle anderen
+//Programme.
+//So werden z. B. Speicherschutzverletzungen vom Prozessor erkannt.
+//Ein Fehlerhaft programmierter Treiber kann so nicht mehr das gesammte System
+//gefaehrden.
+
+// vim: set syntax=asciidoc spell spelllang=de,en:
-- 
cgit 

