summaryrefslogtreecommitdiff
path: root/document.asciidoc
diff options
context:
space:
mode:
Diffstat (limited to 'document.asciidoc')
-rw-r--r--document.asciidoc99
1 files changed, 86 insertions, 13 deletions
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: