|
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
|