Musterlösung 13 - auf Matthias
Transcription
Musterlösung 13 - auf Matthias
TI III: Operating and Communication Systems WS 2008/09 Übungsblatt Nr. 13 Georg Wittenburg, M.Sc., AG Technische Informatik, Freie Universität Berlin 1. Aufgabe: Begriffe (5 Punkte) Beschreiben Sie jeden der folgenden Begriffe durch maximal zwei Sätze: QoS, • Die Dienstgüte (engl.: Quality of Service) ist die Menge der Anforderungen an das gemeinsame Verhalten von Komponenten. Häufig werden dabei Parameter wie Latenzzeit, Jitter, Durchsatz oder Paketverlustrate als Einflussgrößen auf die Dienstgüte erfasst. Port, • Der Port ist ein Kommunikationsendpunkt, über den in einem Netzwerk Dienste angeboten bzw. in Anspruch genommen werden können. Flow Control, • Die Flusskontrolle ist eine Teilaufgabe der Schicht 2 im OSI Schichtmodell. Hierbei wird dem Empfänger gestattet, dynamisch auf die Übertragungsgeschwindigkeit Einfluss zu nehmen. Datagram, • Ist ein verbindungsloser und statusfreier Übertragungsdienst in der Transportschicht. Die Datenpakete, die versendet werden sollen, erhalten einen speziellen Kopf, in dem Empfänger und Sender adressiert werden. Eine Garantie, dass das Paket ankommt, gibt es nicht. TCP Socket. • Der englische Begriff „socket“ steht für die Abstraktion des Zugriffes auf ein Netzwerk als Programmierschnittstelle. Sobald eine Verbindung zu einem Dienst aufgebaut wurde, ist es aus Anwendungssicht nicht erkennbar, wo der genutzte Dienst tatsächlich läuft. TCP spezifiziert das genutzte Protokoll. 2. Aufgabe: Linuxkernel patchen (20 Punkte) Verwenden Sie den CPU-Emulator QEMU (http://bellard.org/qemu/download.html), um das auf der Homepage der Veranstaltung verlinkte, in einer Zipdatei hinterlegte Festplatten-Image (ca. 400 MB) zu starten. Um das Festplatten-Image zu starten, verwenden Sie den Befehl qemu –hda DebianEtch20090119.qcom.img (Wenn Sie eine „qemu: could not load PC BIOS“-Nachricht bekommen, verwenden Sie die zusätzliche Option „-L .“) Melden Sie Sich im emulierten System mit dem Benutzernamen „tiiii“ und dem Passwort „fuberlin“ an. 1. Im Heimatverzeichnis befindet sich der Sourcecode für einen Exploit. Kompilieren Sie diesen und führen Sie ihn aus. Welchen Effekt hat der Exploit? (2 Punkte) • Nach der Ausführung des compilierten Codes der Quellcodedatei vmsplice-exploit.c wird statt dem angemeldeten Benutzer tiiii der Benutzer root in der Kommandozeile angezeigt. Der aktuell angemeldete Benutzer verfügt nun offenbar über root-Rechte 2. Erklären Sie durch Internet-Recherche oder Codeanalyse die Funktionsweise des Exploits. (4 Punkte) • Zitat des Artikels http://www.heise.de/newsticker/Root-Exploit-fuer-Linux-Kernel--/meldung/103279 i. Für eine Sicherheitslücke im Linux-Kernel kursieren zwei Root-Exploits, mit denen Anwender mit eingeschränkten Rechten an höhere Rechte gelangen können. Insbesondere Systeme, auf denen mehrere Benutzer parallel arbeiten dürfen, laufen Gefahr, dass ein Angreifer die Lücke nutzt, um ein System zu manipulieren oder unter seine Kontrolle zu bekommen. Einer der Exploits öffnete im Test der heise-SecurityRedaktion auf einem Ubuntu-System eine Shell mit Root-Rechten. ii. Die Lücke beruht auf Fehlern im Umgang mit Pointern von Nutzerprogrammen in Zusammenhang mit der erst in Kernel 2.6.17 eingeführten Funktion vmsplice. Durch die fehlende Prüfung von Pointern beim Aufruf der Funktion vmsplice_to_user ist der lesende und schreibende Zugriff auf beliebige Speicherbereiche möglich. Eine detaillierte Fehlerbeschreibung der Kernelentwickler fehlt, im Changelog zum ersten Korrekturversuch in Kernel 2.6.24.1 steht nur lapidar "splice: missing user pointer access verification (CVE-2008-0009/10)". Die CVE-Einträge sind allerdings noch leer. Kurz nach dem Update des Kernels zeigte sich aber, dass sich die Lücke trotz des Patches weiter ausnutzen lässt, weshalb die Entwickler Version 2.6.24.2 nachlegen mussten. iii. Ganz sicher scheint man sich mit dieser Lösung aber immer noch nicht zu sein, der Kommentar zu dem Patch deutet darauf hin, dass noch einige Tests durchzuführen sind, um sicherzustellen, dass er wirklich funktioniert, wie er soll. Zudem gibt es unbes- tätigte vereinzelte Hinweise, dass der Patch in Version 2.6.24.2 die alte Lücke wieder aufreißen soll. Betreiber eines Mehrbenutzersystems sollten dennoch auf die aktuelle Kernel-Version wechseln beziehungsweise die Pakete der Linux-Distributoren installieren, sobald sie verfügbar sind. 3. Finden Sie einen Patch und erklären Sie kurz seine Funktionsweise. (3 Punkte). • Der erste Patch ist u.a. unter http://bugs.debian.org/cgibin/bugreport.cgi?bug=464945 zu finden 1. 2. 3. 4. 5. diff --git a/fs/splice.c b/fs/splice.c index 684bca3..2d7e598 100644 --- a/fs/splice.c +++ b/fs/splice.c @@ -1122,6 +1122,11 @@ static int get_iovec_page_array(const struct iovec __user *iov, 6. size_t len; 7. int i; 8. 9. + if (!access_ok(VERIFY_READ, iov, sizeof(struct iovec))) { 10. + error = -EFAULT; 11. + break; 12. + } 13. + 14. /* 15. * Get user address base and length for this iovec. 16. */ 17. @@ -1141,6 +1146,11 @@ static int get_iovec_page_array(const struct iovec __user *iov, 18. if (unlikely(!base)) 19. break; 20. 21. + if (!access_ok(VERIFY_READ, base, len)) { 22. + error = -EFAULT; 23. + break; 24. + } 25. + 26. /* 27. * Get this base offset and number of pages, then map 28. * in the user pages. • 2. Patch siehe Version 2.6.24.2 Changelog 4. Transferieren Sie den Patch in das unter Qemu ausgeführte Linux. Beschreiben Sie den Vorgang. Wenn Sie sich für das Einbinden einer physikalischen Partition in das Qemu-Linux entscheiden, so sollten Sie unbedingt die snapshot-Option von Qemu verwenden, damit Ihre Partition nicht beschädigt werden kann. (4 Punkte) • Windows : i. C:\Programme\qemu>qemu -hda c:\DebianEtch20090119.qcow.img –L . -hdb fat:H:\patch • ii. mount –t vfat /dev/hdb1 /mnt macht das Verzeichnis verfügbar Linux : i. qemu -hda DebianEtch20090119.qcow.img –hdb /dev/sda1 macht einen USB-Stick verfügbar ii. qemu -hda DebianEtch20090119.qcow.img –cdrom datei.iso macht ein vorher erstelltes Image als CD-ROM Laufwerk verfügbar iii. mount –t vfat /* /mnt * steht für das entsprechende Laufwerk /mnt für den entsprechenden Mountpunkt 5. Als nächstes patchen Sie den Kernel, kompilieren Sie ihn und laden Sie ihn anschließend beim erneuten Hochfahren des Systems. Loggen Sie sich dazu als Root ins System ein (Name: „root“, Kennwort: „fuberlin“) und wechseln Sie in das Verzeichnis, das den Quellcode des Linux-Kernels enthält: # cd /usr/src/linux-source-2.6.18 Patchen Sie nun die verbuggte Kerneldatei. Kompilieren Sie anschließend Ihren modifizieren Kernel mittels: # make Installieren Sie den gepatchten Kernel im emulierten System: # # # # # make install make modules_install update-initramfs –k 2.6.18 -c ln –s /boot/initrd.img-2.6.18 /boot/initrd.img update-grub Starten Sie nun das System neu: # reboot Achten Sie im Boot-Menu darauf, Ihren neu kompilierten Kernel auszuwählen. (5 Punkte) Obere Abbildung zeigt die Einbindung als CD-Rom Laufwerk. Nach dem „patchen“ wurde der Kernel neu kompiliert und das System neu gestartet. 6. Loggen Sie sich erneut als Benutzer tiiii ein und führen Sie den Exploit erneut aus. Welche Veränderung stellen Sie fest? (2 Punkte) • Nach Ausführung des Programmes ist immer noch der Benutzer tiiii angemeldet • Das Programm selbst gibt eine „Bad address“ Information aus.