Wir kennen die ld.so
Suche nach Bibliotheken in Verzeichnissen, die von der Umgebungsvariablen angegeben werden $LD_LIBRARY_PATH
, aber normale Benutzer können Folgendes ausführen:
export LD_LIBRARY_PATH=dir1:dir2...
Sie können infizierte Bibliotheken in einem Pfad mit höherer Priorität als die ursprüngliche speichern, sodass diese ld.so
anstelle der vertrauenswürdigen Bibliothek in der gefunden wird ld.so.cache
.
Ist das ein Risiko?
Wie können wir das Schreiben in diese Umgebungsvariable für normale Benutzer deaktivieren?
Antworten:
Dies ist überhaupt kein Sicherheitsrisiko, da Sie immer nur Umgebungsvariablen für Ihre aktuelle Umgebung (z. B. aktuelle Bash-Sitzung) und mithilfe des
export
Befehls die untergeordneten Umgebungen (von Ihnen gestartete Skripts, Subshells usw.) festlegen können. Es ist unmöglich, eine Umgebungsvariable, die erstellt oder geändert wurde, in die übergeordnete Umgebung zu eskalieren. Dazu gehört natürlich, dass normale Benutzer keine systemweiten Änderungen vornehmen können.Die einzige Umgebung, die beim Ausführen betroffen wäre,
export LD_LIBRARY_PATH=...
ist Ihre aktuelle Shell und alle Subshells davon, die Sie möglicherweise später erzeugen. Angenommen, Sie ändern den Suchpfad so, dass infizierte Bibliotheken am Anfang eingeschlossen werden, dh mit der höchsten Priorität. Dann führen Sie eine ausführbare Datei aus, die eine der infizierten Bibliotheken lädt, ohne es zu wissen. Was passiert jetzt?Sie haben bösartigen Code (aus der infizierten Bibliothek), der unter Ihrem eigenen Benutzerkonto mit regulären Nicht-Administratorrechten ausgeführt wird. Das mag schlecht klingen, aber eigentlich ... na und? Es wird mit regulären Benutzerrechten ausgeführt, was wiederum bedeutet, dass es nicht das gesamte System betreffen kann. Übrigens wäre es viel einfacher gewesen, eine ausführbare Datei mit demselben Schadcode direkt auszuführen, als den Pfad für die Bibliothekssuche zu ändern und darauf zu warten, dass eine normale ausführbare Datei sie lädt.
Schlussfolgerung: Ein normaler Benutzer kann nur seinen eigenen Bibliotheks-Suchpfad ändern. Dies bedeutet, dass er diese Bibliotheken auch nur unter seinem regulären Benutzerkonto mit regulären nicht systemweiten Berechtigungen selbst laden kann. Es macht jedoch keinen Unterschied, ob sie das Laden einer infizierten Bibliothek erzwingen oder eine infizierte ausführbare Datei direkt ausführen. Sie würden absolut nichts gewinnen, wenn diese Umgebungsvariable nicht von Benutzern überschrieben werden könnte.
PS: Es gibt auch ausführbare Dateien , die die haben setuid oder setgid - Flag gesetzt, das heißt , sie werden nicht als Benutzer / Gruppe des einen Lauf, der sie läuft, aber von dem, der besitzt sie. Zum Beispiel gehört die
sudo
ausführbare Datei root und hat das Flag setuid gesetzt, was bedeutet, dass sie bei der Ausführung immer als root ausgeführt wird. Aus Sicherheitsgründen wird die$LD_LIBRARY_PATH
Variable von ausführbaren Dateien ignoriert, wobei eines der Flags setuid / setgid gesetzt ist, um sicherzustellen, dass der reguläre Benutzer keine ausführbare Datei mit Root-Rechten zum Laden beliebiger Bibliotheken ausführen kann.(Danke an @Rinzwind für den Hinweis!)
quelle
LD_LIBRARY_PATH
Dies ist natürlich ein Sicherheitsproblem, wenn Sie zuerst eine schädliche Bibliothek laden und das Verhalten einer Binärdatei ändern.