Mit Firejail und Firetools Programme absichern

Aus LinuxUser 12/2017

Mit Firejail und Firetools Programme absichern

© George Tsartsianidis, 123RF

Ab in den Knast!

Firejail und die Firetools erleichtern das Absichern von Anwendungen und Diensten in einer Sandbox.

Geht es um das Isolieren von Prozessen und Anwendungen gegeneinander und gegenüber dem Host-System, fallen regelmäßig die Begriffe Container und Sandbox. Dabei sortiert man eine Sandbox eher ins Umfeld von Webbrowsern oder Paketsystemen wie Ubuntus Snap oder Fedoras Flatpak ein. Da läge es nahe, die Sandboxen von Firejail [1] eher als Container zu bezeichnen und zu begreifen. Dank der einfachen Installation in vielen Distributionen lassen sie sich aber schneller aufsetzen als etwa ein LXC- oder Docker-Container.

Firejail installieren

Zunächst aber zur Installation: In den meisten Fällen installieren Sie Firejail als Paket aus den Paketquellen der verwendeten Distribution. Bei Fedora fehlt das Programm allerdings noch im offiziellen Repository; dort beziehen Sie es über das Community-Build-Werkzeug Copr [2] ins System (Listing 1, Zeile 2 und 3).

Listing 1

### Fedora
$ sudo dnf copr enable ssabchew/firejail
$ sudo dnf install firejail
### Debian und Derivate (Repo)
$ sudo apt update
$ sudo apt install firejail firetools
### Debian und Derivate (Projektseite)
$ apt install /Pfad/firejail-Version

Für Debian und dessen Ableger genügen zur Installation die beiden Befehle aus den Zeilen 5 und 6 von Listing 1, sofern die Pakete aus dem Repository aktuell genug sind. Falls nicht, laden Sie die Pakete von der Firejail-Projektseite herunter und installieren sie unter Angabe des absoluten Pfads zum Paket mit dem Befehl aus Zeile 8.

OpenSuse bietet in seinem Build-Service OBS aktuelle Pakete für “Leap” und “Tumbleweed” sowie für Debian 7 bis 9 sowie Ubuntu ab Version 14.04 [3]. Arch Linux führt Firejail im Archiv, Firetools liegt aber derzeit nur im Anwender-Archiv AUR vor.

Mit Version 0.9.50 sind die Pakete weitgehend überall aktuell. Wo nicht, nutzen Sie neuere Pakete oder sogar den Quellcode von Sourceforge [4]. Listing 2 zeigt die Schritte beim Bau aus den Quellen, der zum Kernel passende Header und das Programm Make voraussetzt. Analog funktioniert ein Build der Firetools.

Listing 2

$ git clone https://github.com/netblue30/firejail.git
$ cd firejail && ./configure && make
$ sudo make install

Gut gewappnet

Bestimmte Anwendungen und Dienste geben sich besonders anfällig für Attacken von außen. Solche Angriffe nutzen bekannte oder neue Lücken aus, um das System zu manipulieren, Informationen zu stehlen oder das System gleich ganz zu übernehmen und etwa in ein Botnet einzubinden. Besonders Webbrowser oder proprietäre Anwendungen wie Dropbox, Steam oder Skype gehören zu den Kandidaten, bei denen es sich lohnt, virtuelle Barrieren zu errichten.

Ins enge Gefängnis von Firejail eingesperrt, richten diese dann bei einer Infektion keinen Schaden mehr an, da die Sandbox jede Kommunikation mit dem System streng reglementiert oder sogar gänzlich untersagt. Die “Zellen” erhalten einen eigenen Netzwerk-Stack, als virtuelles Dateisystem kommt bei Bedarf neben dem lokalen System und einem Chroot das OverlayFS zum Einsatz.

Google setzt das Prinzip Sandbox bereits seit 2012 im Browser Chrome ein. Firejail entstammt wohl ursprünglich derselben Grundidee, geht aber mittlerweile weit über die Sandbox von Google hinaus. Das 2014 begonnene Projekt sichert sowohl einzelne Anwendungen wie eine gesamte Umgebung mittels einfacher Kommandos ab. Zusätzlich steht eine intuitive Syntax für komplexe Profile bereit.

Um diese Aufgaben zu bewältigen, greift Firejail auf die Kernel-Techniken Seccomp [5], Namespaces [6] sowie Capabilities [7] zurück. Seccomp nutzt zum Isolieren von Prozessen auf den Berkeley Paket Filter BPF [8]. Mittels Namespaces gaukelt Firejail unter anderem den in der Sandbox laufenden Prozessen vor, alleine auf dem System zu agieren. Die Capabilities ermöglichen, Berechtigungen fein abzustufen, sodass die Insassen des Jails stets nur die minimal benötigten Rechte erhalten.

CLI oder GUI

Sie bedienen Firejail über die Kommandozeile. Das Paket Firetools fügt eine grafische Oberfläche hinzu, was den Einsatz unter Umständen vereinfacht.

Gleich nach der Installation von Firejail können Sie eine erste Gefängniszelle errichten: Starten Sie die Software ohne Angabe einer Anwendung, so erstellt sie eine Sandbox und startet darin den Kommandozeileninterpreter Bash (Abbildung 1). Mit dem Schalter --debug verfolgen Sie das Errichten einer solchen Sandbox im Detail. Hier sehen Sie genau, was beim Schreiben und Lesen erlaubt ist und auf welche Dienste die Spielwiese Zugriff hat. Die Sandbox bleibt jeweils so lange bestehen, wie die Software darin läuft.

Abbildung 1: Wenn Sie Firejail ohne Angabe einer Anwendung starten, packt es die Shell Bash in eine Sandbox und startet diese.

Abbildung 1: Wenn Sie Firejail ohne Angabe einer Anwendung starten, packt es die Shell Bash in eine Sandbox und startet diese.

Im Test kam als Nächstes der fast überall gegenwärtige Multimedia-Player VLC in vorübergehende Haft. Der Befehl firejail vlc erstellt eine entsprechende Zelle und startet darin das Programm. In Abbildung 2 sehen Sie in der zweiten Zeile einen Hinweis auf ein vlc.profile. Dieses Profil (Abbildung 3) definiert im Einzelnen, was der Multimedia-Player in der Zelle darf und was nicht.

Abbildung 2: Hängen Sie an den Befehl den Namen eines Programms an, so sperrt Firejail statt der Shell dieses in die Sandbox.

Abbildung 2: Hängen Sie an den Befehl den Namen eines Programms an, so sperrt Firejail statt der Shell dieses in die Sandbox.


Abbildung 3: Firejail bringt rund 300 vordefinierte Profile mit, in denen die Entwickler festgelegt haben, was die Anwendung in der Sandbox darf und was nicht.

Abbildung 3: Firejail bringt rund 300 vordefinierte Profile mit, in denen die Entwickler festgelegt haben, was die Anwendung in der Sandbox darf und was nicht.

Viele Profile

Firejail bringt im Pfad /etc/firejail/ mehr als 300 vordefinierte Profile für die gängigsten Anwendungen mit. Restriktionen beziehen sich je nach Applikation auf Dateien und Verzeichnisse im Home-Verzeichnis, auf Dateien des Systems wie /etc/shadow oder auf Befehle wie mount oder su. So darf etwa Firefox lediglich per Whitelist auf die Verzeichnisse für Downloads und Plugins zugreifen.

Sie haben die Möglichkeit, bestehende Profile nach Bedarf zu ändern oder neue zu erstellen. Dabei dürfen Sie Parameter wie whitelist, blacklist, read-only oder tmpfs verwenden. Zusätzlich beschränken Sie, falls nötig, die Applikation mittels --seccomp weiter. So dürfen Programme in Jails, die Sie mit diesem Parameter einrichten, weder neue Kernel-Module laden oder das System neu starten.

Ein Profil darf per Include-Anweisung andere Profile referenzieren. Über die Befehle firejail --list und firejail --tree (Abbildung 4) informieren Sie sich darüber, was in den Zellen des Gefängnisses alles passiert. Während der erste alle Zellen und die darin laufenden Prozesse zeigt, sehen Sie mit dem zweiten die von eingesperrten Anwendungen gestarteten Prozesse samt deren Benutzerkennung.

Abbildung 4: Die Parameter <code>--list</code> und <code>--tree</code> helfen Ihnen, einen &Uuml;berblick &uuml;ber die Vorg&auml;nge in einer Sandbox sowie von Anwendungen gestartete Prozesse zu erhalten.

Abbildung 4: Die Parameter --list und --tree helfen Ihnen, einen Überblick über die Vorgänge in einer Sandbox sowie von Anwendungen gestartete Prozesse zu erhalten.

Lesen ja, schreiben nein

Bis auf wenige Ausnahmen – /tmp/ und Teile des Home-Verzeichnisses – dürfen Anwendungen aus der Zelle heraus nur lesend auf Verzeichnisse des Hosts zugreifen. Einige Verzeichnisse aus /var/ lädt die Software mittels Tmpfs [9] in den Hauptspeicher.

Möchten Sie, dass das Programm im Jail auf weitere Verzeichnisse schreibend zugreift, kommt ein Trick zum Einsatz, der etwa bei einer Live-CD das Aktualisieren ermöglicht. Dazu legt Firejail das virtuelle Dateisystem OverlayFS über das lokale Dateisystem. Damit verwirft das Host-System die getätigten Schreibzugriffe nach dem Beenden der Zelle wieder. Allerdings ist es möglich, das Overlay über eine andere Sandbox zu legen.

Das virtuelle Dateisystem ergibt etwa beim Kasernieren von Browsern Sinn, weil dadurch am Ende der Verlauf, der Cache und die erstellten Cookies automatisch ins Nirwana entschwinden. Ein anderes Szenario sind etwa Änderungen an Konfigurationen, die Sie vorab testen wollen, ohne das System zu verändern: Dazu starten Sie einen Editor mit dem Befehl firejail --overlay kate.

Nutzen Sie zusätzlich den privaten Modus, versteckt Firejail das gesamte lokale Dateisystem vor der Software. Nach dem Start einer Anwendung mit dem Parameter --private sieht diese ein komplett leeres, als Tmpfs über das Home-Verzeichnis gemountetes Verzeichnis. Alles, was ein Programm darin schreibt, löst sich nach Beenden des Jails in Luft auf.

Alternativ hängen Sie ein persistentes Verzeichnis an den Befehl zum Starten der Applikation an. Das Beispiel aus Listing 3 startet eine Firefox-Instanz, die Daten und Downloads im angegebenen Verzeichnis speichert. Das setzt jedoch voraus, dass das Verzeichnis bereits besteht und dem ausführenden User gehört. Es bleibt samt Inhalt nach dem Beenden der Anwendung erhalten, sodass es sich später wieder einhängen lässt.

Listing 3

$ firejail --private=~/firejail-test firefox

Distribution eingesperrt

Firejail versteht sich zusätzlich auf das Paketformat AppImage, und vermutlich dauert es nicht mehr sehr lange, bis dasselbe für Snap und Flatpak gilt. Es ist darüber hinaus in der Lage, ein vollständiges Dateisystem einzubinden. Dieses liegt entweder bereits auf einer anderen Partition, oder Sie erstellen eine Chroot-Umgebung in einem Verzeichnis innerhalb des lokalen Dateisystems. Letzteres erledigen Sie bei Debian vergleichsweise einfach mit Debootstrap (Listing 4, erste Zeile). Danach starten Sie das neue gekapselte Linux-System mit darin gestartetem LibreOffice in Firejail (zweite Zeile).

Listing 4

$ sudo mkdir-p /debian && sudo debootstrap arch=amd64 unstable /debian
$ firejail --chroot=/debian libreoffice --name=debian

Wenn Sie eine Sandbox daraufhin überprüfen wollen, ob Wände, Gitter und Tür gut gesichert sind, steht dazu in den Firetools ein Audit-Werkzeug bereit. Darüber hinaus erlaubt das Tool Firemon das Monitoring des Systems und das Erheben statistischer Daten zum Netzwerkverkehr [10]. Die sehr ausführliche Dokumentation geht unter anderem auf die vielfältigen Möglichkeiten ein, den Netzwerk-Stack innerhalb der Zellen zu manipulieren [11].

Firetools mit GUI

Wo sich Firejail in den Archiven einer Distribution findet, dort findet sich meist auch die bereits erwähnte, auf dem Qt-Framework in Version 5.9.1 basierende grafische Oberfläche Firetools. Ansonsten bauen Sie die GUI schnell selbst aus den Quellen.

Nach dem Start zeigt Firetools den Sandbox Launcher, ein knallrotes Fenster mit Icons zum Starten auf dem System installierter Apps (Abbildung 5). Ein Doppelklick auf ein Icon startet die jeweilige Applikation in einem virtuellen Gefängnis. Das Fenster des Launchers bietet Platz für 24 Einträge.

Abbildung 5: Der Sandbox Launcher bietet per <span class="ui-element">Edit</span> die M&ouml;glichkeit, weitere Anwendungen in die Oberfl&auml;che einzugliedern.

Abbildung 5: Der Sandbox Launcher bietet per Edit die Möglichkeit, weitere Anwendungen in die Oberfläche einzugliedern.

Im Test waren 17 Plätze bereits vorbelegt. Die beiden ersten Icons oben links bieten Zugang zu den beigefügten Werkzeugen sowie zum Configuration Wizard; damit waren noch fünf Felder frei. Um diese mit Anwendungen zu belegen, klicken Sie mit der rechten Maustaste auf ein leeres Feld und wählen Edit.

Im sich öffnenden Fenster tragen Sie unter Name den Programmnamen ein, im Feld darunter eine Beschreibung, und unten den Befehl, der die Sandbox mit dem Programm erstellt – die Syntax gleicht hier jener in der Konsole. Nach der Konfiguration erscheint das vom System verwendete Icon der Software im Launcher. Es ist nicht möglich, vom System mitgebrachte Anwendungen als Anwender zu entfernen, eigene dagegen schon.

Schnell angepasst

Weitere Optionen für die Konfiguration verstecken sich hinter dem Icon mit dem Zauberstab. Hier legen Sie bei Bedarf genauer fest, was ein Programm in seiner Zelle darf. Nachdem Sie eine Applikation ausgewählt haben, entscheiden Sie, ob diese mit dem vorgegebenen Profil startet oder mit einer angepassten Version (Abbildung 6).

Abbildung 6: Der <span class="ui-element">Configuration Wizard</span> erlaubt das Starten von Anwendungen mit vorgegebenem oder angepasstem Profil.

Abbildung 6: Der Configuration Wizard erlaubt das Starten von Anwendungen mit vorgegebenem oder angepasstem Profil.

In ersterem Fall startet nach einem weiteren Klick die Anwendung. Wollen Sie das Profil abändern, leitet die Software Sie durch drei weitere Tableaus mit Einstellungsmöglichkeiten. Dabei haben Sie die Möglichkeit, Einfluss auf zugreifbare Verzeichnisse, das Netzwerk (Abbildung 7) sowie auf Multimedia- und Kernel-Funktionen (Abbildung 8) zu nehmen, bevor das Programm startet.

Abbildung 7: Hier schlie&szlig;en Sie Verzeichnisse aus der Sandbox aus und nehmen Einfluss auf das Netzwerk.

Abbildung 7: Hier schließen Sie Verzeichnisse aus der Sandbox aus und nehmen Einfluss auf das Netzwerk.


Abbildung 8: Mit oder ohne X11, ohne Sound- oder DVD-Unterst&uuml;tzung, strikte Regeln mit Seccomp oder Capabilities &ndash; hier legen Sie es fest.

Abbildung 8: Mit oder ohne X11, ohne Sound- oder DVD-Unterstützung, strikte Regeln mit Seccomp oder Capabilities – hier legen Sie es fest.

Mit den Firetools erhalten Sie Angaben über den Verbrauch an Ressourcen der einzelnen virtuellen Gefängnisse. Bei einem Klick auf die Prozess-ID sehen Sie statistische Angaben zur entsprechenden Applikation (Abbildung 9). In dieser Ansicht erkunden Sie bei aktivierten Capabilities oder via Seccomp auferlegte Fesseln über einen Mausklick.

Abbildung 9: Haben Sie das Monitoring und die Statistiken auf dem letzten Tableau aktiviert, so haben Sie dadurch einen &Uuml;berblick, welche Ressourcen die eingesperrte Applikation verbraucht.

Abbildung 9: Haben Sie das Monitoring und die Statistiken auf dem letzten Tableau aktiviert, so haben Sie dadurch einen Überblick, welche Ressourcen die eingesperrte Applikation verbraucht.

Fazit

Firejail ist ein nützliches Werkzeug, um Anwendungen zur Laufzeit vom Rest des Systems zu isolieren. Ob Webbrowser, proprietäre Anwendungen oder sonstige Programme – in ein virtuelles Gefängnis gesperrt, richtet die Software im Rest des Systems keinen Schaden an. Dabei erlaubt Firejail, den Anwendungen vielfältige Restriktionen aufzuerlegen, die alle auch in der grafischen Oberfläche Firetools bereitstehen. Das Spektrum der zu inhaftierenden Objekte reicht von Dateien über Verzeichnisse bis hin zu kompletten Systemen im Chroot.

Somit bringt Firejail ein wenig mehr Sicherheit und eignet sich unter anderem zum Einsperren von Webseiten, Diensten oder Testumgebungen. Die Tools, die der GUI beiliegen, erlauben dabei die Kontrolle, ob eine Anwendung wirklich eingesperrt ist, welchen Restriktionen sie unterliegt und wie viele Ressourcen sie verbraucht. Firejail unterliegt ständiger Weiterentwicklung, für die nächste Ausgabe 0.9.51 ist ein Werkzeug zum Erstellen neuer Profile geplant. Zudem wollen die Entwickler die Zahl vordefinierter Profile erneut stark erhöhen. Es lohnt sich also, am Ball zu bleiben. 

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 12/2017 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