Tux Linux - a free operating system

Vim

Valid XHTML 1.0!

Valid CSS!

Sichere Programmausführung in einer Sandbox
(English version will follow soon)

Wenn man Programme aus dem Internet lädt und diese ausführt, läuft man Gefahr, seine Daten und vielleicht sogar sein System zu gefährden. Dies ist bei aktiven Inhalten im Web der Fall (Applets), bei eingebundenen Anhängen von E-Mails, und generell bei allen Skripten und Programmen.

Das ist auf Linux nicht anders als auf anderen Systemen. Zwar sind die Voreinstellungen restriktiver, aber ein zuverlässiger Schutz wird damit nicht geboten, und die Restriktion wird im Falle eines Falles eben doch umgangen. Aus diesem Grund sollten sogenannte "Sandkästen" (Sandboxes) genutzt werden, mit denen die Programme in ihrer eigenen Umgebung ablaufen, und bis auf Interaktion mit dem Nutzer (Eingabe mit Tastatur und Maus sowie Ausgabe von Bild und Ton) keinen weiteren Zugriff auf das System haben.

Dabei gibt es logische (binäre) und quantitative Einschränkungen, um einerseits Erlaubnis oder Verbot ausdrücken zu können, andererseits aber auch bei Erlaubnis den Ressourcenzugriff beschränken zu können.

Die folgenden Möglichkeiten wurden für Zugriffsschutz entwickelt:
LCAP (Linux Kernel Capabilities)
Diese erlauben es einem Prozess, Rechte wie Prozessänderungen, Systemaufrufe oder Netzwerkoperationen abzugeben, so daß z.B. von ihnen gestartete Programme (Kindprozesse) keinen Schaden anrichten können. Capabilities sind allerdings nur für Rechte vorhanden, die im Normalfall dem Nutzer root zugeordnet sind. Daher sind sie leider für Sandboxes ungeeignet.
Change-Root (chroot)
Ein Prozess kann einen beliebigen Teilbereich des Unix-Verzeichnisbaumes 'chrooten', so daß der neue Verzeichnisbaum (aus Sicht des Prozesses) nur noch aus diesem Teilbereich besteht, und somit nicht mehr auf Dateien zugegriffen werden kann, die außerhalb davon liegen. Netzwerk und Prozesse bleiben davon allerdings unberührt. Auch der chroot()-Systemaufruf benötigt leider root-Rechte. Eine interessante Verbindung von Chroot und Capabilities bietet das Programm Compartment an.
Sandbox Kernel-Modul (LSM, Linux Security Module)
Prinzipiell ähnlich den Capabilities können hier Zugriffsrechte in allen möglichen Kategorien ausmaskiert werden. Dies ist sogar für alle normalen Systemnutzer möglich, solange das Recht auf ändern der Möglichkeiten nicht entzogen wurde. Allerdings sind zum Laden des Moduls (bzw. zur Integration in den Kernel) root-Rechte erforderlich.
Security Enhanced Linux (SE Linux)
Ebenfalls auf Kernel-Änderungen (und modifizierten Basispaketen) basierend, lassen sich mit SE Linux Rollenprofile erstellen. Jedes Programm wird dann unter einem solchen Profil ausgeführt. Die Unterstützung von Profiländerungen zur Laufzeit scheint aber momentan noch nicht gegeben zu sein.
GRSecurity
Ein auf ACLs aufbauendes Modell, welches vor allem die Beseitigung von traditionellen Fehlerquellen wie Format-Exploits, Race-Conditions und Speicherüberläufen zum Ziel hat. Die Präventiv-Funktionalität (PaX) wird eventuell Teil von Linux 2.6 werden, ebenso die Randomisierungs-Maßnahmen aus der BSD-Welt.
Rollenbasierte ACLs (RSBAC)
Eine Vielzahl von Sicherheitsmodellen wurde hierfür zusammengeführt, inklusive Capabilities, ACLs und Ressourcenverwaltung, aber auch Zugriff auf Daten, welche als sicher gekennzeichnet sind, oder Privacy-Optionen. RSBAC ist als Kernel-Patch implementiert.
User-Mode-Linux (UML)
Durch Virtualisierung kann man ein System komplett von dem Hostsystem abtrennen. Allerdings benötigt UML momentan ein fertiges Image mit vorkonfiguriertem Netzwerk, so daß auch diese Möglichkeit nicht sonderlich gut für einfache Sandboxes geeignet ist. Für komplexe dedizierte Varianten ist es aber ein sehr gutes Verfahren, zumal wenn das SKAS-Modell verwendet wird und so kein Kernelspeicher verwendet wird.
Interpreter-Restriktionen
Programme, die durch eine virtuelle Maschine (VM) ausgeführt werden, können partiell am Zugriff auf externe Ressourcen gehindert werden, was z.B. in Java-Applets oder Ruby-CGI-Skripten realisiert wird. Wenn externe Module verwendet werden müssen, oder ein feinskaliertes Zugriffsregelwerk zum Einsatz kommen soll, sind diese Maßnahmen leider nicht mehr ausreichend. Bei sprachabhängigen Umgebungen (z.B. Smalltalk-Images wie Squeak) sieht es vermutlich schon besser aus.
Trustees
Während ACLs für jedes Objekt im Dateisystem vergeben werden, sind Trustees auch für z.B. Unterverzeichnisse gedacht. Hierüber kann man festlegen, welche Nutzer oder Gruppen zum Normalfall abweichende Zugriffsrechte haben. Allerdings ist auch hierfür ein Kernel-Patch und eine globale Konfigurationsdatei erforderlich.
Links zu diesem Thema
Capabilities: http://ftp.kernel.org/pub/linux/libs/security/linux-privs/kernel-2.4/capfaq-0.2.txt
Compartment: http://www.suse.de/~marc/SuSE.html
Sandbox-Theorie und Kernelmodul: http://sandbox.sourceforge.net/doc/ms_thesis.pdf
SE Linux: http://www.nsa.gov/selinux
GRSecurity: http://www.grsecurity.net
RSBAC: http://www.rsbac.org
UML: http://user-mode-linux.sourceforge.net
Squeak: http://www.squeak.org
Trustees: http://trustees.sourceforge.net


Zurück zur Startseite

Josef Spillner (mail)
Created: 10.08.2003