Die AppArmor-Dokumentation erwähnt, dass Anwendungen andere Programme mit oder ohne Umgebungs-Scrubbing ausführen können. Anscheinend ist eine geschrubbte Umgebung sicherer, aber die Dokumentation scheint nicht genau anzugeben, wie das Scrubbing der Umgebung geschieht.
Was ist das Scrubbing der Umgebung und was macht AppArmor, um die Umgebung zu scrubben?
"Environment scrubbing" ist das Entfernen verschiedener "gefährlicher" Umgebungsvariablen, die verwendet werden können, um das Verhalten einer Binärdatei zu beeinflussen - zum Beispiel kann LD_PRELOAD
verwendet werden, um den dynamischen Linker dazu zu bringen, Code einzuziehen, der im Wesentlichen bestehen kann beliebige Änderungen am Ablauf eines Programms; Einige Variablen können so eingestellt werden, dass eine Ablaufverfolgung für Dateien mit bekannten Namen erfolgt. usw.
Dieses Scrubbing wird normalerweise für setuid / setgid Binaries als Sicherheitsmaßnahme durchgeführt, aber der Kernel bietet einen Haken, damit Sicherheitsmodule ihn auch für beliebige andere Binaries aktivieren können.
Der ELF-Ladecode des Kernels verwendet diesen Hook Setzen Sie den Eintrag AT_SECURE
im "Hilfsvektor" der Information, die an die Binärdatei übergeben wird. (Siehe hier und hier für die Implementierung dieses Hooks im AppArmor-Code.)
Wenn die Ausführung im Benutzerbereich beginnt, wird dynamische Linker nimmt diesen Wert und verwendet es, um das __libc_enable_secure
Flag zu setzen; Sie werden sehen, dass dieselbe Routine auch den Code enthält, der dieses Flag für setuid / setgid-Binärdateien setzt. (Es gibt entsprechenden Code woanders für Binärdateien, die statisch verknüpft sind.)
__libc_enable_secure
betrifft eine Reihe von Stellen im Hauptteil des dynamischen Linker-Codes und verursacht eine Liste der spezifischen Umgebungsvariablen , die entfernt werden sollen.