Firejail: Unterschied zwischen den Versionen

Aus Linux Bibel
Wechseln zu: Navigation, Suche
K
K
 
Zeile 1: Zeile 1:
 
[[Category:System]][[Category:Sicherheit]]
 
[[Category:System]][[Category:Sicherheit]]
 +
<seo title="Firejail - Anwendungen in der Sandbox" metakeywords="linux,debian,ubuntu,kubuntu,mint,fedora,opensuse,mandriva,manjaro,arch,firejail,anwendungen,prozesse,absichern,in,einer,sandbox,verzeichnis,auf,beschränken,profile,firetools,privat,sicherheit" metadescription="Mit der Software Firejail sperren Sie unter Linux Anwendungen / Prozesse in ein von Ihnen vorbestimmtes Verzeichnis aus denen diese nicht ausbrechen können und sorgen so für noch mehr Sicherheit unter diesem System auch wenn Sie zu gewissen Anwendungen kein Vertrauen haben, wie es funktioniert lesen Sie in diesem Beitrag der Linux Bibel" google-site-verification="AVSf_G9kQatS3exsfCCg77wPWhSUOFOgAeO7NEk2SSQ" />
 
== Informationen ==
 
== Informationen ==
 
Unter Linux gibt es unzählige Software für alles mögliche, wenn ich mir den Paket-Umfang von Debian heute in der Version Unstable so ansehe komme ich auf 58818 Software-Pakete. Doch auch dann kann es natürlich immer wieder mal vorkommen das einem etwas fehlt, was macht man dann - natürlich - man sieht sich im Internet um, lädt sich die Software, ein passendes Script oder was auch immer herunter - und dann fragt man sich "Soll man die Software wirklich ausführen, was tut die eigentlich?". Nehmen wir zum Beispiel [[Appimage]]s - hiervon sind so einige keine freie Software, kein Quellcode ist verfügbar, ... Führt man eine solche Software gar als Administrator aus, was macht diese mit dem System?
 
Unter Linux gibt es unzählige Software für alles mögliche, wenn ich mir den Paket-Umfang von Debian heute in der Version Unstable so ansehe komme ich auf 58818 Software-Pakete. Doch auch dann kann es natürlich immer wieder mal vorkommen das einem etwas fehlt, was macht man dann - natürlich - man sieht sich im Internet um, lädt sich die Software, ein passendes Script oder was auch immer herunter - und dann fragt man sich "Soll man die Software wirklich ausführen, was tut die eigentlich?". Nehmen wir zum Beispiel [[Appimage]]s - hiervon sind so einige keine freie Software, kein Quellcode ist verfügbar, ... Führt man eine solche Software gar als Administrator aus, was macht diese mit dem System?

Aktuelle Version vom 13. Mai 2018, 14:45 Uhr

Informationen

Unter Linux gibt es unzählige Software für alles mögliche, wenn ich mir den Paket-Umfang von Debian heute in der Version Unstable so ansehe komme ich auf 58818 Software-Pakete. Doch auch dann kann es natürlich immer wieder mal vorkommen das einem etwas fehlt, was macht man dann - natürlich - man sieht sich im Internet um, lädt sich die Software, ein passendes Script oder was auch immer herunter - und dann fragt man sich "Soll man die Software wirklich ausführen, was tut die eigentlich?". Nehmen wir zum Beispiel Appimages - hiervon sind so einige keine freie Software, kein Quellcode ist verfügbar, ... Führt man eine solche Software gar als Administrator aus, was macht diese mit dem System?

Besonders unter Linux wenn man freie Software schon aus Überzeugung nutzt, man sicher sein will das die eigenen Daten auch auf dem lokalen Rechner bleiben und nicht irgendwo im Netz versinken - man denke jetzt nur einmal an Microsoft Windows wo selbst dann noch Daten umher wandern wenn man schon alles mögliche deaktiviert hat. Nun nutzt man bei Software der man nicht gleich vertraut meist einen Container wie etwa Docker oder eine virtuelle Maschine wie VirtualBox oder das effizientere Qemu/KVM - für eine einzelne Software aber wirklich so einen Aufwand zu betreiben?

In vielen Fällen, vor allem wenn es sich um einzelne Software wie etwa Appimages, Flatpacks oder Snaps (Snappy), natürlich auch Scripts handelt eine nicht so aufwendige Sandbox, also eine abgeschottete Umgebung in der die Software läuft, zwar auf das System zugreifen kann um dessen Bibliotheken zu nutzen aber Daten nicht verändern kann. Man isoliert also die gewünschte Anwendung vom restlichen System. Eine solche Software ist nun Firejail.

Firejail installieren

Unter auf Debian basierenden Systemen wie Ubuntu, Kubuntu, Linux Mint und so weiter installieren Sie die Software ganz einfach über die Paket-Verwaltung APT - Software installieren, löschen, aktualisieren durch die Pakete "firejail firejail-profiles". Eine rudimentäre grafische Oberfläche erhalten Sie über das Paket "firetools".

Firejail nutzen

Als erstes sollte man sich überlegen für welche Anwendungen man wirklich eine Sandbox nutzen möchte, für einen einfachen Texteditor oder Taschenrechner ist es eher weniger sinnvoll. Meist handelt es sich eher um Software die Nutzerdaten preis geben würde - also Daten von Ihrem System irgendwo hin ins Netz sendet ohne das Sie das wollen, oder auch Software die besonders kritisch für das System ist - also für Hacks anfällige Software die man oft nutzt wie etwa Webbrowser, Mail-Klients oder Chat-Software wie Skype.

Je nachdem wie man die jeweilige Software einschränken will funktioniert dies mit Firejail auch, man kann der Software erlauben auf das System nur lesend zuzugreifen sodass diese keine Daten verändern oder neue Dateien anlegen kann oder die Kommunikation gänzlich untersagen, je nach Vorgabe des Nutzers setzt die Software dazu chroot oder overlayfs, Kerneltechniken wie namespaces, seccomp und capabilitis ein. Sicherlich wäre es auch hier möglich mit viel Aufwand aus der Isolation auszubrechen - dazu muss der Angreifer jedoch erst einmal wissen das Sie dies überhaupt nutzen und vor allem wie.

Nun wollen wir gleich einmal eine erste Sandbox starten, ganz einfach einmal das Terminal Terminal / Konsole / Kommandozeile - alles was darin abläuft läuft isoliert vom System. Dazu öffnen wir ganz einfach ein beliebiges Terminal und nutzen darin den Befehl:

firejail
Reading profile /etc/firejail/default.profile
Reading profile /etc/firejail/disable-common.inc
Reading profile /etc/firejail/disable-passwdmgr.inc
Reading profile /etc/firejail/disable-programs.inc
** Note: you can use --noprofile to disable default.profile **
Parent pid 20293, child pid 20294
Child process initialized in 29.71 ms
Firejail - Software unter Linux in einer Sandbox ausführen

Die Ausgabe verrät uns welche Profile Firejail für den Start der Bash nutzt, welche Prozess-ID der Prozess hat und öffnet nun den Terminal-Prompt wie gewohnt.

Würden wir zum eigentlichen Befehl die Option "--debug" nutzen würde die Software noch dazu jede Aktion der gestarteten Software anzeigen, also was dieser verboten wird, im Falle vom Texteditor Kate darf diese nicht einmal die eigene Konfigurationsdatei beschreiben / ändern:

Firejail - Software unter Linux in einer Sandbox ausführen

Die über Firejail gestartete Software darf also zwar lesend auf das System zugreifen jedoch keine bestehende Datei verändern - dies ist die Standardkonfiguration wenn man die Bash mit Firejail startet. Man muss jedoch nicht unbedingt erst die Bash mit Firejail starten und dann erst beliebige Prozesse darüber - dies würde eventuell später gestartete Anwendungen behindern die man ohne Sandbox nutzen will. Man startet also den jeweiligen Prozess direkt mit Firejail, nachfolgende werden dadurch wieder ohne Isolation gestartet:

firejail kate
Reading profile /etc/firejail/kate.profile
Reading profile /etc/firejail/disable-common.inc
Reading profile /etc/firejail/disable-passwdmgr.inc
Reading profile /etc/firejail/disable-programs.inc
Parent pid 21485, child pid 21486
Blacklist violations are logged to syslog
Child process initialized in 33.45 ms
Parent is shutting down, bye...

Oder eben mit ausführlicher Ausgabe:

firejail --debug kate

Wie man in der Ausgabe nun sieht liest die Software wieder einige Profile ein bevor die Software gestartet wird, man sieht auch das diese Profile im System-Verzeichnis "/etc/firejail/" liegen, je höher die Version der Software desto mehr Profile liegen darin auch - aktuell rund 360 (18. November 2017). Diese Profile zeigen Firejail was die jeweilige Software darf und was nicht:

Firejail - Software unter Linux in einer Sandbox ausführen

Solche Profile können Sie selbst verändern oder neue erstellen, der Dateiname muss den korrekten Namen des auszuführenden Prozesses haben mit der Dateiendung ".profile" - im Falle von "firefox" also "firefox.profile".

Startet man also einen Befehl wie zuvor direkt über Firejail liest die Software erst das angegebene Profil aus und gibt dem zu startenden Programm die darin enthaltenen Rechte und Erlaubnisse. Wie man solche Konfigurationsdateien selbst bearbeitet oder selbst erstellt lesen wir etwas später. Grundsätzlich kann man sagen wenn man eine Bash mit Firejail startet und dann darüber eine Software hat diese nicht einmal die Rechte eine bereits bestehende Konfigurationsdatei einzulesen, darf aber neue Dateien anlegen was etwa bei einem Texteditor natürlich sinnvoll ist. Startet man eine Software mit Firejail - also etwa:

firejail firefox

werden die Rechte genutzt die in der "firefox.profile" stehen. Will ich jetzt zum Beispiel das Firefox zwar alles machen darf, auf seine Konfiguration zugreifen, Dateien herunter laden und auch verändern wäre dies ein Problem wenn ein Angreifer eine Lücke nutzt und dann etwas nicht gewolltes ins System einschleust - so nutzt man die Option "--overlay", diese arbeitet ähnlich wie ein Live-System, Dateien können also angelegt und verändert werden - beendet man Firefox dann jedoch sind alle diese Daten wieder weg - genau so wie wenn Sie ein Live-System neu starten - ein virtuelles Dateisystem. Der Angreifer kann also keinen bleibenden Schaden am Dateisystem / System anrichten. Eine ähnliche Geschichte mit der Option "--private" - diese arbeitet jedoch noch restriktiver, Firefox (oder welche Software auch immer) hat überhaupt keinen Zugriff auf Ihre privaten Dateien, auch hier startet für Firefox wieder ein virtuelles Dateisystem - der Browser startet komplett neu mit neu angelegter Konfiguration und dem Browser wird vorgegaukelt das nichts in Ihrem Home-Verzeichnis vorhanden ist - niemand hat also Zugriff auf Ihre Daten auch wenn der Browser gehackt wird. Nach dem Beenden der Software sind alle Daten wieder weg - aber natürlich auch herunter geladene Daten. Möchte man das voran gegangene Problem umgehen - also etwa herunter geladene Dateien behalten richtet man sich ein fixes Verzeichnis dafür ein, im Beispiel lege ich mir dazu in meinem Home-Verzeichnis ein neues Verzeichnis namens "firefox" ein und gebe dieses nun als Home-Verzeichnis beim Start ein:

firejail --private=/home/robert/firefox firefox

Alle Dateien die Firefox zum laufen benötigt, Änderungen die Sie an dessen Konfiguration vor nehmen und Dateien die Sie damit herunter laden landen in diesem Verzeichnis und selbst ein Einbrecher der über Firefox in Ihr System eindringt sieht nur dieses Verzeichnis:

Firejail - Software unter Linux in einer Sandbox ausführen

Selbst wenn nun ein Angreifer über eine Lücke des Browsers eindringen würde hätte er so keinen Zugriff auf Ihr reales Home-Verzeichnis, Daten wie den Bank-Zugang und ähnliches, Dateien die Sie herunter geladen haben kopieren Sie in Ihr reales Home-Verzeichnis und den Inhalt des virtuellen Verzeichnisses löschen Sie einfach. Dies funktioniert wie schon beschrieben nicht nur mit Firefox sondern mit jeglicher anderen Software.

Firejail-Profile anlegen verändern

Auch wenn es schon massenhaft Profile gibt gibt es natürlich viele weitere Software ohne Profile oder solche deren Optionen Sie ändern möchten. Wie schon beschrieben liegen bereits vorhandene im Verzeichnis "/etc/firejail/" mit dem Namen des Befehls und als Datei-Endung "profile". Als Beispiel hier das Profil für Firefox (gibt es in mehreren Varianten für ESR und auch Nightly):

# Firejail profile for firefox
# This file is overwritten after every install/update
# Persistent local customizations
include /etc/firejail/firefox.local
# Persistent global definitions
include /etc/firejail/globals.local
noblacklist ~/.cache/mozilla
noblacklist ~/.config/okularpartrc
noblacklist ~/.config/okularrc
noblacklist ~/.config/qpdfview
noblacklist ~/.kde/share/apps/okular
noblacklist ~/.kde/share/config/okularpartrc
noblacklist ~/.kde/share/config/okularrc
noblacklist ~/.kde4/share/apps/okular
noblacklist ~/.kde4/share/config/okularpartrc
noblacklist ~/.kde4/share/config/okularrc
noblacklist ~/.local/share/gnome-shell/extensions
noblacklist ~/.local/share/okular
noblacklist ~/.local/share/qpdfview
noblacklist ~/.mozilla
noblacklist ~/.pki
include /etc/firejail/disable-common.inc
include /etc/firejail/disable-devel.inc
include /etc/firejail/disable-programs.inc
mkdir ~/.cache/mozilla/firefox
mkdir ~/.mozilla
mkdir ~/.pki
whitelist ${DOWNLOADS}
whitelist ~/.cache/gnome-mplayer/plugin
whitelist ~/.cache/mozilla/firefox
whitelist ~/.config/gnome-mplayer
whitelist ~/.config/okularpartrc
whitelist ~/.config/okularrc
whitelist ~/.config/pipelight-silverlight5.1
whitelist ~/.config/pipelight-widevine
whitelist ~/.config/qpdfview
whitelist ~/.kde/share/apps/okular
whitelist ~/.kde/share/config/okularpartrc
whitelist ~/.kde/share/config/okularrc
whitelist ~/.kde4/share/apps/okular
whitelist ~/.kde4/share/config/okularpartrc
whitelist ~/.kde4/share/config/okularrc
whitelist ~/.keysnail.js
whitelist ~/.lastpass
whitelist ~/.local/share/gnome-shell/extensions 
whitelist ~/.local/share/okular
whitelist ~/.local/share/qpdfview
whitelist ~/.mozilla
whitelist ~/.pentadactyl
whitelist ~/.pentadactylrc
whitelist ~/.pki
whitelist ~/.vimperator
whitelist ~/.vimperatorrc
whitelist ~/.wine-pipelight
whitelist ~/.wine-pipelight64
whitelist ~/.zotero
whitelist ~/dwhelper
include /etc/firejail/whitelist-common.inc
caps.drop all
netfilter
nodvd
nogroups
nonewprivs
noroot
notv
protocol unix,inet,inet6,netlink
seccomp
shell none
tracelog
# private-bin firefox,which,sh,dbus-launch,dbus-send,env
private-dev
# private-etc passwd,group,hostname,hosts,localtime,nsswitch.conf,resolv.conf,xdg,gtk-2.0,gtk-
3.0,X11,pango,fonts,firefox,mime.types,mailcap,asound.conf,pulse
private-tmp
noexec ${HOME}
noexec /tmp

Alles was hinter der Raute "#" steht sind reine Erklärungen und werden von der Software nicht benötigt. Was wirklich dabei sein sollte wenn Sie ein neues Profil erstellen wollen zeigt folgender Code:

include /etc/firejail/disable-common.inc
include /etc/firejail/disable-devel.inc
include /etc/firejail/disable-passwdmgr.inc
include /etc/firejail/disable-programs.inc
noblacklist ~/.cache/mozilla
noblacklist ~/.config/okularpartrc
noblacklist ~/.config/okularrc
noblacklist ~/.config/qpdfview
noblacklist ~/.kde/share/apps/okular
noblacklist ~/.kde/share/config/okularpartrc
noblacklist ~/.kde/share/config/okularrc
noblacklist ~/.kde4/share/apps/okular
noblacklist ~/.kde4/share/config/okularpartrc
noblacklist ~/.kde4/share/config/okularrc
noblacklist ~/.local/share/gnome-shell/extensions
noblacklist ~/.local/share/okular
noblacklist ~/.local/share/qpdfview
noblacklist ~/.mozilla
noblacklist ~/.pki
whitelist ${DOWNLOADS}
whitelist ~/.cache/gnome-mplayer/plugin
whitelist ~/.cache/mozilla/firefox
whitelist ~/.config/gnome-mplayer
whitelist ~/.config/okularpartrc
whitelist ~/.config/okularrc
caps.drop all
netfilter
nodvd
nogroups
nonewprivs
noroot
notv
protocol unix,inet,inet6,netlink
seccomp
shell none
tracelog
private-dev
private-tmp
noexec ${HOME}
noexec /tmp

Was Sie hier sehen nennt man nun Plugins - diese erlauben oder verbieten Zugriffe, die selbe Geschichte mit Befehlen. Mit include fügen Sie bestehende Konfigurationen hinzu - die zu Beginn stehenden vier Zeilen sollten also unbedingt vorhanden sein. Mit "noblacklist" haben Prozesse zwar Zugriff darauf dürfen damit aber nichts anfangen, mittels "blacklist" verbieten Sie den Zugriff auf Verzeichnisse oder Dateien und mit "whitelist" erlauben Sie diesen. "read-only" bietet auf die jeweiligen Verzeichnisse nur lesenden Zugriff und mit "tmpfs" handelt es sich um das schon besprochene virtuelle Dateisystem. Fast ganz unten sehen Sie die Rechte am System, "seccomp" beispielsweise verbietet das Nachladen von Kernel-Modulen - mehr zu diesen finden Sie wie üblich über die Manpage (Hilfe unter Linux) mit dem Befehl:

man firejail

Ganz unten wiederum legen Sie fest wo die Software keine weiteren Prozesse starten darf - etwa automatisch herunter geladene Dateien wie etwa die unter Windows in letzter Zeit bekannten Verschlüsselungstrojaner.

Firetools - die grafische Oberfläche

Die Firetools bieten eine grafische Oberfläche zu Firejail, Sie finden diese Software nach der Installation wie ganz oben beschrieben im Anwendungsmenü im Verzeichnis "System", alternativ starten Sie die Anwendung wie üblich über den Schnellstarter (Alt + F2) oder über das Terminal durch den Befehl:

firetools
Firejail - Firetools - Anwendungen unter Linux in einer Sandbox ausführen

In dieser selbst für Linux ungewohnten grafischen Oberfläche finden Sie einige bereits vorkonfigurierte Anwendungen, per Doppelklick auf die jeweilige wird diese mit dem jeweiligen Profil gestartet. Per Doppelklick auf das untere Werkzeug-Symbol gelangen Sie in die Konfiguration:

Firejail - Firetools - Anwendungen unter Linux in einer Sandbox ausführen

Hier finden sich nun bereits die vorkonfigurierten Anwendungen in Kategorien geordnet, ein Klick auf eine Kategorie öffnet die jeweiligen Anwendungen im rechten Teil des Fensters, der zugehörige Befehl wird darunter angezeigt (inklusive Pfad). Mit dem Schalter "Browse Filesystem" können Sie Anwendungen einfügen für die es noch keine Konfiguration gibt, ob diese im System installiert ist oder einfach eine im Home-Verzeichnis liegende ausführbare Datei ist dabei egal.

Ganz unten finden Sie nun zwei Schalter, mit dem oberen können Sie das bestehende Profil einer Anwendung bearbeiten, mit dem unteren ein neues anlegen - was bei noch nicht integrierten Anwendungen oder Scripts der Fall ist. Im Beispiel von Firefox - ein Klick auf "Continue":

Firejail - Firetools - Anwendungen unter Linux in einer Sandbox ausführen

bringt uns zur weiteren Konfiguration. Sie aktivieren wenn gewünscht "Restrict /Home directory" um ein spezielles virtuelles Home-Verzeichnis fest zu legen, deaktivieren das Netzwerk für diese Anwendung oder legen gleich einen eigenen DNS-Server und dergleichen fest. Ein weiterer Klick auf "Continue" lässt uns mögliche Hardware für diese Software unterbinden oder natürlich erlauben und ein weiterer Klick bringt uns zu diversen Statistiken.

Ein Rechtsklick im Starter bringt uns zur Konfiguration eines bestehenden Starters oder zur Erstellung neuer:

Firejail - Firetools - Anwendungen unter Linux in einer Sandbox ausführen

Erstellen Sie über den Eintrag "Edit" mit dem normalen Befehl einen neuen Starter und editieren diesen dann wiederum in den Einstellungen, Sie können aber auch gleich den kompletten angepassten Firejail-Befehl eingeben.

Weiteres

Sie müssen natürlich nicht alles wie beschrieben immer über das Terminal starten, sobald Sie eine Konfiguration erstellt haben oder den Befehl im Kopf haben wie Sie die Anwendung starten wollen können Sie genau damit einen Starter im Anwendungsmenü erstellen oder ein passendes Script basteln.