From 8f76fc9170060da6b385b5d2b68577c9d554cc03 Mon Sep 17 00:00:00 2001 From: Jan Klemkow Date: Wed, 7 Nov 2012 07:24:09 +0100 Subject: Improve LibC section. --- document.asciidoc | 46 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/document.asciidoc b/document.asciidoc index e97255a..edda3a7 100644 --- a/document.asciidoc +++ b/document.asciidoc @@ -8,13 +8,48 @@ auf UNIX-Systeme. == 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 auch den Punkt der Sicherheit betrafen. - -Zeichenketten-Funktionen. +Veraenderungen, welche unteranderem die Sicherheit von Programmen erhoehten. + +Eines der groessten Probleme in C-Programmen stellen die Zeichekettenfunktionen +da. +Da diese seit langer Zeit immer wieder fuer Sicherheitsprobleme sorgen. +Bei dieses Funktionen ist Problem, dass diese die Laengen von Speicherbereichen +nicht beachten. +Dadurch kommt es schnell zu Pufferueberlaeufen und Zugriffen auf nicht +allokierte Speicherbereiche. +Dadurch koennen Angreiffer eigenen Programmcode einschleusen und ausfuehlen +lassen, sowie Programme zum Absturz bringen. + +Als Fallbeispiel wird die Funktion strcpy erklaert. +Diese Funktion wird dafuer benutzt um eine Zeichenkette von einem Speicherplatz +zu einem anderen zu kopieren. +Als Parameter bekommt die Funktion die Startadresse der Quelle und die +Startadresse des Ziels im Speicher. +Der Funtkion ist dabei die Groesse der jeweiligen Speicherplaetze nicht bekannt. +Es wird nun eine Speicherzelle nach der Anderen kopiert, solange bis in der +Quelle ein NUL-Byte auftaucht. +Dabei kann die Funtkion weder sicherstellen, dass sie nicht ueber den +Quellpuffer hinaus Bytes kopiert, sowie dass sie nicht ueber die genzen des +Zielpuffers hinaus schreibt. + +Durch dieses Verhalten, kommt es immer wieder zu Pufferueberlaeufen, welche +zu unvorhersagbaren Folgen fuer den weiteren Programmablauf fuehren. + +Um dieses Problem zu loesen wurden neue Zeichenkettenfuntkionen in die +Standard-C-Bibliothek auf genommen, welche als Argument maximal Laengen +uebergeben bekommen. + +Hierbei gibt es zwei ansaetze mit Laengen umzugehen. +TODO: strncpy() strlcpy() * gets() * strlen() @@ -38,9 +73,12 @@ Zum Schutz solcher Dienste gibt es verschiene Mechanissmen. Bei der Privilege-Seperation wird ein Programm in verschiedene Prozesse mit unterschiedlichen Berechtigungena auf geteilt. -Ziel ist es, so wenig wie moeglich Programmcode mit root-Rechten laufen zu +Ziel ist es, so wenig Programmcode wie moeglich mit root-Rechten laufen zu lassen. +Als Beispiel soll ich der Window-Compositer Wayland genannt... +TODO: wayland privilege separater erklaeren + 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. -- cgit