Programme in eine sichere Umgebung einschließen

Aus LinuxUser 11/2011

Programme in eine sichere Umgebung einschließen

© Gahanka, sxc.hu

Eingesperrt

Mit Arkose verbannen Sie potenziell gefährliche Software in einen virtuellen Sandkasten und schützen so das System vor Abstürzen und Datenverlust.

Ein Sandkasten bietet einem Kind einen Rahmen, in dem es spielen darf, ohne dass es dabei etwas Wertvolles zu zerstören vermag. Was in der realen Welt funktioniert, klappt auch in der digitalen. Die Sandkiste, englisch Sandbox, hat in diesem Kontext zwar einen restriktiveren Zweck, die Idee bleibt aber die gleiche: Eine passende eigene Umgebung für Programme erschaffen, in dem ein eventueller Schaden nicht das gesamte System in Mitleidenschaft zieht.

Der Begriff “Schaden” meint in diesem Zusammenhang sowohl, dass Probleme im Programmcode der betreffenden Software diese selbst oder die Umgebung zum Absturz bringen, als auch, dass das betreffende Programm Sicherheitslücken aufweist oder gar Malware einschleust. In beiden Fällen beschränken sich die Effekte maximal auf die Sandbox (siehe Kasten “Varianten”).

Varianten

Unter Linux existieren verschiedene Technologien für das Sandboxing. Diese reichen vom einfachen Umbiegen eines Dateisystems mittels Chroot über das Virtualisieren einer Umgebung oder eines Betriebssystems (OpenVZ, Linux VServer) bis hin zur Emulieren oder Virtualisieren der kompletten Hardware eines Hosts.

Alle Technologien, die für Programme entweder einen virtuellen Kontext bereit stellen oder deren Rechte derart beschneiden, dass sie im Host-Kontext nur geringen oder kalkulierbaren Schaden anzurichten vermögen, eignen sich im Prinzip als Sandbox. Dazu gehören unter anderem Ressource-Container wie OpenVZ, Linux VServer, Solaris Zones, Parallels Virtuozzo, User Mode Linux (UML) oder LXC (Linux Container), allesamt Virtualisierungstechnologien.

Programme wie KVM/Qemu, Bochs, FAUmachine oder Xen und VMware ermöglichen ebenfalls Sandboxing. Der Fedora-Entwickler Daniel Walsh plant seit einiger Zeit eine Sandbox auf der Basis von SELinux [7].

Arkose [1] von Stéphane Graber gehört zu den Sandbox-Ansätzen, die technisch auf die gleichen Konzepte und Technologien zurückgreifen, wie LXC (Linux Container, [2]). Die Technik gehört seit Version 2.6.29 zum Kernel. Sie basiert auf Kernel-Namespaces [3] zum Isolieren der Ressourcen und Cgroups [4] zum Eingrenzen der Ressourcen, womit sie sich gleichermaßen als Anwendungs- oder System-Container eignet.

Cgroups unterstützt der Linux-Kernel seit der Version 2.6.24. Sie ermöglichen es dem Kernel, Prozesse zu Gruppen zusammenzufassen und diese gezielt auf einem bestimmten Prozessor auszuführen oder aus Sicht des Schedulers als Einheit zu verwenden. Die Funktion erlaubt auf einem Linux-System eine Gruppe von definierten Prozessen auszuwählen und diesen Ressourcen zuzuweisen, wobei der Kernel bei Bedarf Hierarchien berücksichtigt. Der Memory Resource Controller des Kernels isoliert solche Gruppen vom Rest des Systems und begrenzt so bei Bedarf speicherhungrige Programme. Sind Cgroups im Kernel aktiv, verwaltet dieser sämtliche Ressourcen darin – egal, ob es sich um einen Userspace-Prozess, dessen Threads oder einen Kernel-Thread handelt.

Arkose verwendet außerdem AuFS [5], einen neuen Spin-Off von UnionFS, um Änderungen am Dateisystem in der Sandbox anzuzeigen. Mit Arkose hat jeder Linux-Anwender auf einfache Weise die Möglichkeit, Programme in eine Sandbox zu verpacken.

Installation

Der Einsatz von Arkose gelingt besonders einfach unter “Natty Narwhal”, weil sich das Programm seit Ubuntu 11.04 in den Standard-Paketquellen findet und außerdem eine grafische Oberfläche samt Nautilus-Integration mitbringt. Zur Installation genügt das Auswählen der Pakete arkose, arkose-gui (grafische Oberfläche) und arkose-nautilus (Nautilus-Integration) im Paketmanager (Abbildung 1).

Abbildung 1: Unter Ubuntu 11.04 installieren Sie Arkose problemlos über das Paketmanagement.

Abbildung 1: Unter Ubuntu 11.04 installieren Sie Arkose problemlos über das Paketmanagement.

Allerdings müssen die folgenden Voraussetzungen erfüllt sein: Die Version 1.3 erfordert mindestens einen Kernel 2.6.36 mit aktiviertem AuFS2-Support, was ab Ubuntu 11.04 standardmäßig der Fall ist. Außerdem müssen Sie LXC, Python, GTK und einen X-Terminal-Emulator installieren (unter Ubuntu ebenfalls bereits der Fall).

Allerdings enthält Ubuntus Repository derzeit nur die Arkose-Version 0.3.2. Wer ernsthaft mit Arkose arbeiten möchte, für den empfiehlt es sich, die aktuelle Entwicklerversion 1.3.2 zu installieren. Dies gelingt unter Ubuntu “Natty” relativ problemlos durch Freischalten des PPA-Repositories ppa:arkose-devel/stable. Dort finden Sie auch die Version 1.3.2 für Ubuntu 10.10. Alternativ laden Sie die Version 1.3.1 direkt von Launchpad herunter [6].

Das Frontend (arkose-gui) steht nach dem Installieren im Menü Anwendungen | Systemwerkzeuge | Arkose Desktop Application Sandboxing bereit. Noch einfacher gelingt das Starten einer ausgewählten Software in der Sandbox mithilfe des Kontextmenüs Open in a sandbox in Nautilus – für diese Möglichkeit sorgt das Paket arkose-nautilus.

Abbildung 2: Dank Nautilus-Integration lässt sich jedes Binary via Kontextmenü in die Sandbox schicken.

Abbildung 2: Dank Nautilus-Integration lässt sich jedes Binary via Kontextmenü in die Sandbox schicken.

Konfiguration

Arkose präsentiert dann einen Dialog, der den Pfad des zuvor markierten Programms beziehungsweise Binaries zeigt. Ein Klick auf Show sandbox options gewährt Zugang zu weiteren Einstellmöglichkeiten, von denen es lediglich vier gibt.

Unter Container size legen Sie die maximale Größe des Containers fest. Über den hier angegebenen Wert definieren Sie die Obergrenze, die greift, wenn die Applikation weiteren Arbeitsspeicher anfordert, weitere Instanzen ihrer selbst erzeugt oder Dokumente und temporäre Dateien anlegt.

Möchten Sie, dass durch das betreffende Programm erzeugte Einträge oder Änderungen nach Beenden der Sandbox erhalten bleiben, setzen Sie eine der beiden Optionen Real /home directory (instead of copy-on-write) oder Real /tmp directory (instead of copy-on-write). Die Option network support ist selbsterklärend – durch sie erhält das im Container aktive Programm Zugriff auf das Netzwerk.

Abbildung 3: Arkose bietet zur Konfiguration der Sandbox nur die absolut notwendigen Optionen.

Abbildung 3: Arkose bietet zur Konfiguration der Sandbox nur die absolut notwendigen Optionen.

Erst die Version 1.3 bietet außerdem die Option store type mit den beiden Radio-Buttons ext4 (disk) und tmpfs (memory). Mittels Tmpfs hält Arkose für die Applikation sichtbare Änderungen im Hauptspeicher, anstatt sie im Verzeichnis ~/.arkose/ abzulegen.

Alternativ starten Sie Arkose mit sudo arkose via Kommandozeile. Die möglichen Optionen ermitteln Sie via man arkose – sie entsprechen den Parametern im Dialog.

Arkose 1.3

Prinzipiell läuft ein via Arkose kontrolliertes Programm komplett isoliert vom Rest des Systems. Daher erhält es keinen Zugriff auf die im Host-System laufende Dienste wie etwa D-Bus, und auch der Zugriff auf Pulseaudio bleibt ihm verwehrt – zumindest unter Arkose 0.3.2.

Allerdings gilt dies nicht mehr für die Version 1.3, die gerade in dieser Hinsicht entscheidende Neuerungen mitbringt. So dürfen bei Arkose 1.3 die verwalteten Programme Sound via Pulseaudio wiedergeben und Videogeräte nutzen, wie etwa eine Webcam. Außerdem steht ein eigener, isolierter X-Server bereit. Last not least leitet die Version 1.3 die Kommunikation via D-Bus ebenfalls nach außen weiter.

Fazit

Gerade unter Linux existieren zahlreiche Methoden, um sicherheitskritische oder potenziell instabile Anwendungen (Beta-Versionen, Test-Software) in eine Sandbox zu verpacken. Dabei reicht das Spektrum vom einfachen Umbiegen des Root-Verzeichnisses bis zum vollständigen Virtualisieren des Betriebssystem mittels Ressource-Containern.

Möchten Sie jedoch nur einzelne Anwendungen isolieren, brauchen Sie nicht mit Kanonen auf Spatzen zu schießen. Stattdessen greifen Sie einfach zu Arkose, das es ermöglicht, die komplexe Technologie der Linux-Container auch als Anwender zu installieren und zu nutzen – insbesondere unter Ubuntu. 

Glossar

AuFS

Overlay-Dateisystem, das beim simulierten Schreiben auf nicht beschreibbaren Datenträgern zum Einsatz kommt.

LinuxUser 11/2011 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben