Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger

 << zurück
Linux-UNIX-Programmierung von Jürgen Wolf
Das umfassende Handbuch – 2., aktualisierte und erweiterte Auflage 2006
Buch: Linux-UNIX-Programmierung

Linux-UNIX-Programmierung
1216 S., mit CD, 49,90 Euro
Rheinwerk Computing
ISBN 3-89842-749-8
gp Kapitel A Sicherheit unter Linux
  gp A.1 Viren und Trojaner
  gp A.2 Der Superuser (su)
  gp A.3 Überlaufen von Logfiles
  gp A.4 Zugriffsrechte auf Dateien
  gp A.5 Das SUID-Bit
  gp A.6 Programme ohne Ausführrechte
  gp A.7 Buffer Overflow (Pufferüberlauf)
  gp A.8 Race Condition
  gp A.9 Temporäre Dateien
  gp A.10 chroot
  gp A.11 Umgebungsvariablen
  gp A.12 Zugriffsrechte – häufig gemachte Fehler
  gp A.13 system() und popen()
  gp A.14 Offene Filedeskriptoren
  gp A.15 Core Dump
  gp A.16 SQL Injection
  gp A.17 Filedeskriptor-Überlauf mit select()


Rheinwerk Computing

A.8 Race Condition  toptop

Eine Race Condition liegt vor, wenn sich mehrere Prozesse um dieselben Daten mit nicht-atomaren Funktionen streiten und das ganze auch noch von der Abarbeitung der Reihenfolge abhängt, in der die einzelnen Prozesse Ihre Arbeit durchführen. Das Problem hatten Sie schon im Kapitel über Prozesse gehabt, als zwei Prozesse (Eltern- und Kindprozess) etwas auf dem Bildschirm ausgegeben haben und diese nicht aufeinander abgestimmt waren. So konnten Sie nie wissen, welcher der Prozesse zuerst eine Ausgabe macht. Diesbezüglich wissen Sie sich ja jetzt zu helfen.

Aber ganz so einfach ist dies häufig nicht. Gerne wird nämlich zur Vermeidung von Race Conditions ein anderes Schlupfloch aufgemacht. Sehen Sie sich den folgenden Codeabschnitt an:

if(access("/tmp/myfile", W_OK) == 0) {
    if((fd = open("/tmp/myfile", O_WRONLY)) < 0) {
         perror("Konnte Datei nicht öffnen");
         exit(EXIT_FAILURE);
    }
   else {
      /* Etwas in die Datei myfile schreiben */
}

Auf dem ersten Blick könnte man meinen, dem Programmierer gratulieren zu müssen, da er anscheinend an alles gedacht hat – hier sollte das Problem des Race Conditions nicht mehr auftreten. Der Programmierer überprüft erst, ob er Schreibrechte auf die Datei hat, bevor er diese mit open() öffnet. Nur gibt es hierbei eine kleine Lücke. Die beiden Funktionen access() und open() sind keine atomaren Funktionen, was bedeutet, dass zwischen der Ausführung von access() und der Ausführung von open() ein Zeitpuffer liegt. In diesem kleinen, aber vorhandenen Zeitraum bietet es sich geradezu an, die Datei myfile zu löschen und durch einen symbolischen Link eine recht sicherheitskritische Datei zu ersetzten. Hierfür sind keinerlei tiefgreifende Kenntnisse nötig, der Angreifer muss hier nur ein wenig Quellcode lesen können und einen Link setzen.

Am einfachsten wäre es, wenn der Programmierer nur open("myfile", O_WRONLY) macht und hinterher den Fehler überprüft. Zwar ist auch das nicht so atomar, wie man es gerne hätte, jedoch würde open() fehlschlagen, während access() – hinterher – wahr zurückgibt, was ja schon stutzig machen sollte. Auf jeden Fall aber setzt open() errno und das reicht schon: strerror(errno): "Permission denied".


Hinweis   Zugegeben, das Thema wurde hier nicht so behandelt, wie es angemessen wäre – aber auf der Buch-CD finden Sie zu diesem Thema einen sehr guten Artikel der Zeitschrift »hakin9« (http://www.haking.pl/de/index.php). Des Weiteren finden Sie noch Artikel des eben genannten Magazins zur unsicheren Bibliothek libproc und dem Stacküberlauf unter Linux.


 << zurück
  
  Zum Rheinwerk-Shop
Neuauflage: Linux-UNIX-Programmierung
Neuauflage:
Linux-UNIX-
Programmierung

bestellen
 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchtipps
Zum Rheinwerk-Shop: Linux-Server






 Linux-Server


Zum Rheinwerk-Shop: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Rheinwerk-Shop: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Rheinwerk-Shop: Shell-Programmierung






 Shell-
 Programmierung


Zum Rheinwerk-Shop: Linux Handbuch






 Linux Handbuch


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
Info





Copyright © Rheinwerk Verlag GmbH 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern