summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Franzke <benjaminfranzke@googlemail.com>2013-01-08 12:13:18 +0100
committerBenjamin Franzke <benjaminfranzke@googlemail.com>2013-01-08 12:13:37 +0100
commiteee981afb7f1b46c8b218dd0f8952fbd7c198ff7 (patch)
tree98832c6fac613d5e6b2d125c7e381272e24c6841
parent2ee09f5bf5a882877c21c1cad24c5c62eab394e9 (diff)
downloadsksys-eee981afb7f1b46c8b218dd0f8952fbd7c198ff7.tar.gz
sksys-eee981afb7f1b46c8b218dd0f8952fbd7c198ff7.tar.bz2
sksys-eee981afb7f1b46c8b218dd0f8952fbd7c198ff7.zip
Fix ü umlaut
-rw-r--r--document.asciidoc118
1 files changed, 59 insertions, 59 deletions
diff --git a/document.asciidoc b/document.asciidoc
index b90ac70..feac530 100644
--- a/document.asciidoc
+++ b/document.asciidoc
@@ -16,11 +16,11 @@ ein historischer Vergleich zu Anwendungsprogrammen gezogen.
== Einleitung
-Sicherheit fuer die Software-Entwicklung im systemnahen Bereich spielt eine
+Sicherheit für die Software-Entwicklung im systemnahen Bereich spielt eine
wesentliche Rolle, da es hier oft nicht nur um die Anwendung selbst,
sondern auch um die Sicherheit des Gesamtsystems geht.
-Systemdienste werden in vielen Faellen mit hoeheren Rechten ausgefuehrt.
-Gelingt es einem Angreifer einen solchen Dienst zu uebernehmen, so erlangt er
+Systemdienste werden in vielen Faellen mit hoeheren Rechten ausgeführt.
+Gelingt es einem Angreifer einen solchen Dienst zu übernehmen, so erlangt er
selbst hoehere Rechte auf dem Zielsystem.
Bei Endanwendungen ist es in der Regel nicht der Fall, dass sie mit höhren
Rechten ausgeführt werden, sodass der Angreifer, bei einem erfolgreichen
@@ -35,7 +35,7 @@ geworden.
Momentan stehen die Endanwendungen, wie Browser oder Dokumentenbetrachter im
Fokus der Angriffe.
-//Im systemnahen Bereich gibt es viele Programme welche fuer die Sicherheit des
+//Im systemnahen Bereich gibt es viele Programme welche für die Sicherheit des
//Gesamtsystems eine enorme Rolle spielt.
// Angefangen beim Kernel des Betriebssystems
@@ -65,33 +65,33 @@ Speicherbereich und dessen Laenge bei jeder Operation bedenken.
//TODO: Hinleitung auf C-Funktion die durch folgendes "diesen" referenziert
//werden.
-//Da dieses seit langer Zeit immer wieder fuer Sicherheitsprobleme sorgt, wurden
+//Da dieses seit langer Zeit immer wieder für Sicherheitsprobleme sorgt, wurden
//viele Funktionen neu geschrieben.
Bei diesen Funktionen ist das Problem, dass diese die Laengen von
Speicherbereichen nicht beachten.
-Dadurch kommt es schnell zu Pufferueberlaeufen und Zugriffen auf nicht
+Dadurch kommt es schnell zu Pufferüberlaeufen und Zugriffen auf nicht
allozierte Speicherbereiche.
-Dadurch koennen Angreifer eigenen Programmcode einschleusen und ausfuehren
+Dadurch koennen Angreifer eigenen Programmcode einschleusen und ausführen
lassen, sowie Programme zum Absturz bringen.
Als Fallbeispiel wird das Problem anhand der Funktion +strcpy(3)+ erklaert.
-Diese Funktion wird dafuer benutzt um eine Zeichenkette von einem Speicherplatz
+Diese Funktion wird dafür benutzt um eine Zeichenkette von einem Speicherplatz
zu einem anderen zu kopieren.
Als Parameter bekommt die Funktion die Startadressen von Quelle und Ziel im
Speicher.
Der Funktion ist dabei die Groesse der jeweiligen Speicherplaetze nicht bekannt.
Es wird nun eine Speicherzelle nach der Anderen kopiert, solange bis in der
Quelle ein Null-Byte auftaucht.
-Dabei kann die Funktion weder sicherstellen, dass sie nicht ueber den
-Quellpuffer hinaus Bytes kopiert, sowie dass sie nicht ueber die Grenzen des
+Dabei kann die Funktion weder sicherstellen, dass sie nicht über den
+Quellpuffer hinaus Bytes kopiert, sowie dass sie nicht über die Grenzen des
Zielpuffers hinaus schreibt.
-Durch dieses Verhalten, kommt es immer wieder zu Pufferueberlaeufen, welche
-zu unvorhersagbaren Folgen fuer den weiteren Programmablauf fuehren.
+Durch dieses Verhalten, kommt es immer wieder zu Pufferüberlaeufen, welche
+zu unvorhersagbaren Folgen für den weiteren Programmablauf führen.
Um dieses Problem zu loesen wurden neue Zeichenkettenfunktionen in die
Standard-C-Bibliothek auf genommen, welche als Argument Maximallaengen
-uebergeben bekommen.
+übergeben bekommen.
[source,c]
-------------------
@@ -111,7 +111,7 @@ TODO: strncpy() strlcpy()
== Netzwerk-Programmierung
Ein grosser Angriffsvektor auf Computer-Systemen sind laufende Dienste,
-welche ueber Netzwerk und Internet erreichbar sind.
+welche über Netzwerk und Internet erreichbar sind.
Ein Fehler in ihrer Programmierung koennte von ausserhalb ausgenutzt werden,
da Internetdienste eine staendige weltweite Erreichbarkeit aufweisen.
Somit kann ein solcher Dienst potentiell zu jeder Zeit und von jedem Ort aus
@@ -198,22 +198,22 @@ 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 bei 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 dieser ebenfalls die anderen Dienste und deren
+viele mehr anbieten, ist die Gefahr einer Sicherheitslücke sehr hoch.
+Sollte einer dieser Dienste über eine Sicherheitslücke von einem Angreifer
+übernommen werden, so koennte dieser ebenfalls die anderen Dienste und deren
Daten manipulieren.
-//TODO: künstlich? Besser virtuell?
-Um dies zu vermeiden koennen diese Dienste in kuenstlichen Umgebungen
+//TODO: künstlich? Besser virtüll?
+Um dies zu vermeiden koennen diese Dienste in künstlichen Umgebungen
voneinander getrennt werden.
-Eine Variante dafuer ist der System-Call +chroot(2)+.
-Dieser System-Call wechselt fuer einen Prozess und dessen Kind-Prozesse das
+Eine Variante dafür ist der System-Call +chroot(2)+.
+Dieser System-Call wechselt für einen Prozess und dessen Kind-Prozesse das
Root-Verzeichnis.
Dadurch kann ein Prozess auf Dateien außerhalb des neuen
Root-Verzeichnisses nicht mehr zugreifen.
Bereits geoeffnete Dateien koennen aber weiterhin verwendet werden,
auch wenn diese außerhalb des neuen Root-Verzeichnisses liegen.
-Ein Beispiel fuer die Anwendung dieser Technik ist der Apache-Http-Server,
+Ein Beispiel für die Anwendung dieser Technik ist der Apache-Http-Server,
welcher meist in das Verzeichnis +/var/www+ als Root-Verzeichnis wechselt.
Der +chroot(2)+-System-Call ist jedoch in erster Linie keine
@@ -221,7 +221,7 @@ Sicherheitsfunktion,
da es definierte Wege gibt, ein chroot wieder zu verlassen.
Das Konzept von ``Jails'', wie etwa im FreeBSD-Betriebssystem verwendet,
-sind dafuer ausgelegt, verschiedene Prozesse sicher voneinander zu trennen.
+sind dafür ausgelegt, verschiedene Prozesse sicher voneinander zu trennen.
Bei den ``Jails'' werden die System-Calls des eingeschlossenen Prozesses
explizit gefiltert, um die Beeinflussung von anderen Prozessen zu verhindern.
//FIXME: Warum explizit? Werden andere Dinge implizit gefiltert?
@@ -232,37 +232,37 @@ Jeder Service sollte unter einem separaten Nutzerkonto laufen.
Es sollte vermieden werden, mehrere Dienste mit den gleichen Nutzungsrechten
auszuführen, da sich diese untereinander beeinflussen koennen.
Sollte ein Dienst keine eigenen Dateien benoetigen, kann dieser unter dem
-speziellen Nutzer ``nobody'' ausgefuehrt werden.
+speziellen Nutzer ``nobody'' ausgeführt werden.
//FIXME: Widerspruch der letzten beiden Satze
-Unter vielen Unix-Systemen wird dieser speziell fuer diese Aufgabe verwendet.
+Unter vielen Unix-Systemen wird dieser speziell für diese Aufgabe verwendet.
=== Beschraenkung der Erreichbarkeit
-Wenn ein Dienst nur fuer einen bestimmten Kreis von Nutzern bestimmt,
+Wenn ein Dienst nur für einen bestimmten Kreis von Nutzern bestimmt,
dann sollte man die Erreichbarkeit des Dienstes auf diesen Kreis beschraenken,
denn nur für wenige Systemdienste wird eine weltweite Erreichbarkeit benötigt.
-Ein Systemdienst, welcher mit hoeheren Rechten laeuft und global ueber
-Netzwerk erreichbar ist, stellt immer eine enormes Sicherheitsrisiko fuer das
+Ein Systemdienst, welcher mit hoeheren Rechten laeuft und global über
+Netzwerk erreichbar ist, stellt immer eine enormes Sicherheitsrisiko für das
Gesamtsystem dar.
-Bevor man sich bei der Entwicklung eines Systemdienstes fuer einen bestimmten
+Bevor man sich bei der Entwicklung eines Systemdienstes für einen bestimmten
Kommunikationsweg entscheidet, muss man sich bewusst sein, wer mit wem
kommuniziert und wo sich die Kommumikationspartner befinden.
-Kommunikation innerhalb eines Hosts sollte ueber das Loopback-Interface
-oder UNIX-Domain-Sockets gefuehrt werden.
-Ein Dienst, welcher ueber das Loopback-Interface kommuniziert, kann von jedem
+Kommunikation innerhalb eines Hosts sollte über das Loopback-Interface
+oder UNIX-Domain-Sockets geführt werden.
+Ein Dienst, welcher über das Loopback-Interface kommuniziert, kann von jedem
Prozess erreicht werden.
UNIX-Domain-Sockets sind an Dateien gebundene Verbindungen,
-mit den gewöhnlichen Berechtigungsparametern, durch die sich ueber die
+mit den gewöhnlichen Berechtigungsparametern, durch die sich über die
systeminterne Benutzer- und Rechteverwaltung der Zugriff auf die Verbindung
steuern lässt.
//FIXME: geeignet?
-Wird doch eine Netzwerkkommunikation benoetigt, kann ueber die geeignet Wahl
+Wird doch eine Netzwerkkommunikation benoetigt, kann über die geeignet Wahl
der IP-Adresse die Erreichbarkeit kontrolliert werden.
-Fuer die Kommunikation von Diensten innerhalb einer Broadcast-Domain sollen
+Für die Kommunikation von Diensten innerhalb einer Broadcast-Domain sollen
link-local-Adressen verwendet werden.
Im Hinblick auf IPv6 gibt es in diesem Bereich viele Spezialadressen welche
-fuer die verschiedensten Zwecke genutzt werden koennen.
+für die verschiedensten Zwecke genutzt werden koennen.
In jedem Fall sollte die Erreichbarkeit von Diensten soweit wie moeglich
eingeschraenkt werden.
@@ -271,7 +271,7 @@ werden, um einen Dienst ausschliesslich ausgewaehlten Nutzern zugaenglich
zu machen.
Vor allem in Windows-Systemen ist es in der Vergangenheit oft zu großen Problemen
-mit Wuermern gekommen, weil verwundbare Dienste ueber das Netzwerk erreichbar
+mit Würmern gekommen, weil verwundbare Dienste über das Netzwerk erreichbar
waren.
== Kernel
@@ -279,11 +279,11 @@ waren.
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 die Sicherheit eines Systems.
-So kann die Wahl eines anderen Betriebssystems dafuer ausschlaggebend sein, ob
+für die Sicherheit eines Systems.
+So kann die Wahl eines anderen Betriebssystems dafür ausschlaggebend sein, ob
eine Programmierfehler zu einem Sicherheitsrisiko wird oder nicht.
-Im Folgenden werden einige Aspekte des Kernel-Designs auf ihre Sicherheit fuer
+Im Folgenden werden einige Aspekte des Kernel-Designs auf ihre Sicherheit für
das Gesamtsystem betrachtet.
=== Kernel-Architektur
@@ -291,9 +291,9 @@ das Gesamtsystem betrachtet.
Die meisten Betriebssysteme verwenden ein monolithisches Kernel-Design.
In diesem werden viele Aufgaben des Betriebssystems im Kernel erledigt.
Das bedeutet, dass der Programm-Code mit sehr hohen Berechtigungen
-ausgefuehrt wird.
+ausgeführt wird.
-Ein Grossteil dieser Aufgaben koennen auch von User-Prozessen uebernommen
+Ein Grossteil dieser Aufgaben koennen auch von User-Prozessen übernommen
werden.
Dieses hat den Vorteil, dass Schutzfunktionen des Prozessors genutzt werden
koennen.
@@ -304,11 +304,11 @@ Geraetetreiber.
==== Nvidia-Treiber-Problem
-Im +CVE-2012-0946+ wird eine Sicherheitsluecke im Nvidia Grafikkartentreiber
-fuer Linux, Solaris und FreeBSD beschrieben, welche das Erlangen von hoeheren
+Im +CVE-2012-0946+ wird eine Sicherheitslücke im Nvidia Grafikkartentreiber
+für Linux, Solaris und FreeBSD beschrieben, welche das Erlangen von hoeheren
Rechten ermoeglicht.
Das Ausnutzen dieses Programmierfehlers ist nur moeglich, weil der Treiber
-im privilegierten Modus ausgefuehrt wird.
+im privilegierten Modus ausgeführt wird.
==== Minix
@@ -319,41 +319,41 @@ 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 gegenueber eines
+Dieses Kernel-Architektur hat grosse Performence-Nachteile gegenüber eines
monolithischen Designs.
-Denn will einen Anwendung Beispielsweise mit der ueber das Netzwerk ein Paket
-versenden, so muss fuer dieses Paket zwei mal der Userspace-Kernelspace-Kontext
+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 fuer den
+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 fuer
+Somit muss man an dieser Stelle Performence und Sicherheit abwiegen und für
den konkreten Einzelfall entscheide welches wichtiger ist.
=== Kernel-Programmierung
-Fuer die Entwicklung von Kernel-Modulen muessen ebenfalls hohes Mass an
+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 virtuellen
-Speicherraum und den Prozessor-Kontext noch fuer sich alleine, muessen diese
+Hat eine Anwendung im Userspace-Bereich noch einen ganzen virtüllen
+Speicherraum und den Prozessor-Kontext noch für sich alleine, müssen diese
Ressourcen innerhalb des Kernels geteilt werden.
-Um fuer kritische Aufgaben einen unterbrechungsfreien Programmablauf zu
+Um für kritische Aufgaben einen unterbrechungsfreien Programmablauf zu
garantieren, koennen im Kernel Hardware-Interrupts blockiert werden.
-Diese muessen nach Beendigung der Arbeit in jedem Fall wieder freigegeben
+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
Fehlerbehandlungsroutinen.
-In einer Funktion wird dabei fuer 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.
Der Fehler liegt dann oft in den Fehlerbehandlungen mitten in der Routine.
-Es wird Beispielsweise ein Zeiger auf +NULL+ geprueft und im Fehlerfall
-die Funktion mit einem Rueckgabewert verlassen, welcher einen Fehler anzeigt.
+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 zurueck gesprungen wird, erwartet einen Interrupt z. B.
+Die Funktion in die zurück gesprungen wird, erwartet einen Interrupt z. B.
von Tastatur, Maus oder Netzwerkkarte, aber wird nie einen erhalten.
Dadurch kann das gesamte System zum Stillstand kommen.