Prelink - prelink

Beim Rechnen ist die Vorbindung , auch Vorverknüpfung genannt , eine Methode zur Optimierung der Ladezeiten von Anwendungen durch Auflösen von Bibliothekssymbolen vor dem Start.

Hintergrund

Die meisten Computerprogramme bestehen aus Code, für dessen Ausführung externe gemeinsam genutzte Bibliotheken erforderlich sind . Diese Bibliotheken werden normalerweise zur Laufzeit von einem Loader in das Programm integriert , was als dynamische Verknüpfung bezeichnet wird .

Während die dynamische Verknüpfung Vorteile in Bezug auf Codegröße und -verwaltung hat, gibt es auch Nachteile. Jedes Mal, wenn ein Programm ausgeführt wird, muss der Loader die relevanten Bibliotheken auflösen (finden). Da sich Bibliotheken im Speicher bewegen, gibt es einen Leistungsverlust für die Auflösung. Diese Strafe erhöht sich für jede zusätzliche Bibliothek, die eine Auflösung benötigt.

Durch das Vorverknüpfen wird diese Strafe reduziert, indem Bibliotheken im Voraus aufgelöst werden. Danach erfolgt die Auflösung nur, wenn sich die Bibliotheken seit dem Vorverknüpfen geändert haben, z. B. nach einem Upgrade.

Mac OS

Mac OS speichert ausführbare Dateien im Mach-O- Dateiformat .

Mac OS X

Mac OS X führt die Vorbindung in der Phase "Optimierung" der Installation von Systemsoftware oder bestimmten Anwendungen durch.

Die Vorbindung hat sich innerhalb der Mac OS X-Serie einige Male geändert. Vor 10.2 erfolgte das Vorbinden nur während des Installationsvorgangs (der oben genannten "Optimierungs" -Stufe). Von 10.2 bis 10.3 prüfte das Betriebssystem beim Start, ob Anwendungen vorgebunden wurden, und beim ersten Ausführen einer Anwendung wurde sie vorgebunden, wodurch nachfolgende Starts schneller wurden. Dies kann auch manuell ausgeführt werden, was bei einigen Installationen auf Betriebssystemebene der Fall war. In 10.4 waren nur Betriebssystembibliotheken vorgebunden. In Version 10.5 und höher ersetzte Apple die Vorbindung durch einen dyld- Shared- Cache- Mechanismus, der eine bessere Leistung des Betriebssystems ermöglichte.

Linux

Unter Linux erfolgt das Prelinking über das Prelink- Programm, ein kostenloses Programm, das von Jakub Jelínek von Red Hat für ELF- Binärdateien geschrieben wurde .

Die Leistungsergebnisse sind uneinheitlich, aber es scheint Systeme mit einer großen Anzahl von Bibliotheken wie KDE zu unterstützen .

Prelink-Randomisierung

Bei Ausführung mit der Option "-R" wählt Prelink zufällig die Adressbasis aus, in die Bibliotheken geladen werden. Diese Auswahl erschwert die Durchführung eines Return-to-Libc- Angriffs, da die Adressen für dieses System eindeutig sind. Der Grund, warum Prelink dies tut, liegt darin, dass Kernel-Funktionen, die die Adressraum-Layout-Randomisierung (ASLR) für Bibliotheken bereitstellen, nicht in Verbindung mit Prelink verwendet werden können, ohne den Zweck des Prelinks zu vereiteln und den dynamischen Linker zu zwingen, Verschiebungen zur Programmladezeit durchzuführen.

Wie bereits erwähnt, kann die Randomisierung von Prelink- und Prozessbibliotheksadressen nicht zusammen verwendet werden. Um zu vermeiden, dass diese Sicherheitsverbesserung vollständig entfernt wird, bietet Prelink eine eigene Randomisierung. Dies hilft jedoch nicht bei einem allgemeinen Informationsleck, das durch Prelink verursacht wird. Angreifer mit der Fähigkeit, bestimmte beliebige Dateien auf dem Zielsystem zu lesen, können feststellen, wo Bibliotheken in privilegierten Daemons geladen sind. Oft reicht libc aus, da es die häufigste Bibliothek ist, die bei Return-to-libc-Angriffen verwendet wird .

Durch Lesen einer gemeinsam genutzten Bibliotheksdatei wie libc kann ein Angreifer mit lokalem Zugriff die Ladeadresse von libc in jeder anderen Anwendung auf dem System ermitteln. Da die meisten Programme mit libc verknüpft sind, muss die libc-Bibliotheksdatei immer lesbar sein. Jeder Angreifer mit lokalem Zugriff kann Informationen über den Adressraum von Prozessen mit höheren Berechtigungen sammeln. Der lokale Zugriff kann üblicherweise über Shell-Konten oder Webserver-Konten erfolgen, die die Verwendung von CGI-Skripten ermöglichen, mit denen beliebige Dateien auf dem System gelesen und ausgegeben werden können. Directory Traversal-Schwachstellen können von Angreifern ohne Konten verwendet werden, wenn Schwachstellen in CGI-Skripten verfügbar sind.

Da der Prelink häufig regelmäßig ausgeführt wird, normalerweise alle zwei Wochen, kann sich die Adresse einer bestimmten Bibliothek im Laufe der Zeit ändern. Prelink wird häufig in einem inkrementellen Modus verwendet, in dem bereits vorverknüpfte Bibliotheken nicht geändert werden, es sei denn, dies ist unbedingt erforderlich, sodass eine Bibliothek ihre Basisadresse möglicherweise nicht ändert, wenn Prelink erneut ausgeführt wird. Dies gibt jeder abgeleiteten Adresse eine Halbwertszeit des Zeitraums, in dem der Prelink ausgeführt wird. Beachten Sie auch, dass sich die Adressen ändern, wenn eine neue Version der Bibliothek installiert wird.

Jakub Jelínek weist darauf hin, dass positionsunabhängige ausführbare Dateien (PIE) das Vorverknüpfen unter Red Hat Enterprise Linux und Fedora ignorieren , und empfiehlt, Netzwerk- und SUID- Programme PIE zu erstellen, um eine sicherere Umgebung zu ermöglichen.

Probleme

Gelegentlich kann das Vorverknüpfen Probleme mit Anwendungsprüfpunkten verursachen und Bibliotheken wie blcr andere Bibliotheken (wie OpenMPI ), die blcr intern verwendet werden, neu starten . Insbesondere wenn ein Programm auf einem Host überprüft und versucht wird, auf einem anderen Host neu zu starten, kann das neu gestartete Programm aufgrund von Unterschieden bei der Zufallsgenerierung der hostspezifischen Bibliotheksspeicheradressen mit einem Segfault fehlschlagen .

Siehe auch

Verweise

Weiterführende Literatur

  • Jelínek, Jakub (04.03.2004). "Prelink" (PDF) . Entwurf 0.7 . Abgerufen am 14.07.2006 . Zitierjournal benötigt |journal= ( Hilfe )

Externe Links