it-swarm.com.de

Beste Methode für Sandbox X-Anwendungen in Ubuntu

Was ist der beste Weg, um eine X-Anwendung wie Firefox oder Thunderbird in Ubuntu zu sandboxen (in die Richtung, in die qubes os funktioniert, aber nur für einzelne Anwendungen)?

Ich weiß, dass es viele verschiedene Sandbox-Technologien gibt. Zum Beispiel

  • Nur eine virtuelle Box verwenden: Dies scheint sehr sicher zu sein, aber ein Ressourcen-Overkill. Sie benötigen ein minimales Betriebssystem in VirtualBox, um Firefox auszuführen.

  • Verwendung der SE-Linux Sandbox-Technologie . Dies scheint die beste Option zu sein, aber meines Wissens ist SElinux in Ubuntu verfügbar, aber standardmäßig nicht sehr gut konfiguriert (im Gegensatz zum Beispiel zu RedHat-Linux). Außerdem scheint der Sandbox-Teil von SELinux zu fehlen: https: //unix.stackexchange.com/questions/67127/how-do-i-install-selinuxs-sandbox-utility-on-linux-mint-debian -edition? lq = 1 also müsste man es kompilieren.

  • Das Apparmor-Äquivalent scheint nicht produktionsbereit zu sein und wird derzeit meines Wissens nicht mit Ubuntu ausgeliefert. Ich kann jedoch nicht abschätzen, wie sich die Entwicklung entwickelt und ob es sich lohnt, auf die nächste Ubuntu-Version zu warten, in der sie wahrscheinlich Teil davon sein wird.

  • Der Gnome-Desktop scheint X-Sandboxing zu unterstützen. Es ist mir nicht klar, ob man dies wm-unabhängig nutzen kann.

  • Das Lightweigt-Tool mbox scheint nur auf Dateisystemebene zu funktionieren, was für X-Anwendungen nicht ausreichen würde.

  • Das gleiche gilt für selbst erstellte Chroot-Lösungen wie zum Beispiel das Sandfox-Skript .

  • Eine leichtere und sicherere Option als chroot scheint Plash zu sein. Ich bin mir aber nicht sicher, wie gut der X-Schutz implementiert ist.

  • Gleiche Immunität und FBAC-LSM

  • Es gibt auch ein Programm namens arkose , das für Ubuntu gut unterstützt zu werden scheint, aber gleichzeitig gibt es nur sehr wenige Dokumentationen darüber, wie es funktioniert, und ich habe keine Ahnung, wie sicher es im Vergleich ist andere Ansätze.

  • Docker scheint eher für Serveranwendungen als für Desktopanwendungen gemacht zu sein. Ich sehe nicht, ob es für X-Anwendungen sicher ist. Es gibt ein neueres Projekt namens kagome , das Docker mit xephyr für die X-Isolation zu kombinieren scheint. Der Autor stellt jedoch fest, dass Docker einige Sicherheitslücken aufweist und es möglicherweise besser ist, zu einer anderen Containerlösung wie systemd-nspawn, rkt oder lxd zu wechseln.

  • Andere Lösungen sind: Seccomp-Krankenschwester , Regenbogen , Vagrantup

  • Schließlich gibt es speziell für Firefox ein Apparmor-Profil für Ubuntu, das aber standardmäßig nicht aktiviert ist . Dies ist keine Sandbox, sollte Ihnen aber ein gewisses Maß an Sicherheit bieten, wenn Sie Firefox verwenden (aber ich weiß nicht, wie es mit den oben genannten Sandbox-Lösungen verglichen wird).

Es scheint also viele Ansätze zu geben, aber ich weiß nicht, wie (und warum) diese in Bezug auf die Sicherheit für Sandboxing [~ # ~] x [~ # ~] - Anwendungen verglichen werden wie Firefox oder Thunderbird, in Bezug auf die Benutzerfreundlichkeit, insbesondere unter Ubuntu-Linux, und die produktionsbereit und gut unterstützt sind. Es wäre toll, wenn jemand einige Details dazu geben könnte, wie man sie kategorisiert und welche davon es wert wären, wenn ich sie mir für meinen Zweck genauer anschaue.

17
student

Sie können nterbenutzer verwenden, um eine Anwendung mit Docker zu sandboxen. Angenommen, Sie wollten Firefox sandboxen:

Sie würden einen Ordner my-subuser-images Erstellen und dann einen zweiten Ordner firefox im ersten erstellen:

my-subuser-images/firefox

Im Ordner firefox müssen Sie einen weiteren Unterordner erstellen: docker-image

Sobald Sie dies getan haben, müssen Sie zwei Dateien erstellen:

  • permissions.json

Und

  • docker-image/SubuserImagefile

Ihr Dateilayout sollte wie im subuser-default-repository aussehen

In der Datei permissions.json Teilen Sie dem Unterbenutzer mit, was Firefox tun darf:

{"description":"A popular web browser."
,"maintainer":"student"
,"executable":"/usr/bin/firefox"
,"gui":{"clipboard":true}
,"sound-card":true
,"allow-network-access":true
,"basic-common-permissions":true}

Hier ist eine Übersicht über die Berechtigungen, die ich gerade festgelegt habe:

  • "gui": Ermöglicht Firefox die sichere Anzeige von Fenstern für X11 mithilfe der XPRA X11-Brücke
  • "Soundkarte": Ermöglicht Firefox die Kommunikation mit Ihrer Soundkarte
  • "Netzwerkzugriff zulassen": Ermöglicht Firefox den Zugriff auf das Netzwerk
  • "basic-common-permissions": Ermöglicht Firefox, einige grundlegende Dinge zu tun, z. B. das Speichern von Einstellungen in einem eigenen, speziell enthaltenen Home-Verzeichnis, siehe LOCAL und Zeitzone ect.

Firefox kann jedoch NICHT auf Dateien außerhalb seines eigenen Unterbenutzers zugreifen. Sie können beispielsweise eine user-dirs - Berechtigung hinzufügen, um den Zugriff auf das Download-Verzeichnis zu ermöglichen, wenn Sie dies wünschen.

Nachdem Sie eine permissions.json - Datei erstellt haben, können Sie eine SubuserImagefile erstellen.

Der docker-image/SubuserImagefile Sollte genau wie ein Dockerfile aussehen:

FROM ubuntu
RUN apt-get update && apt-get upgrade -y && apt-get install -yq firefox

Jetzt sind Sie mit dem Einrichten Ihres Subuser-Images fertig.

Sie können einen Firefox-Unterbenutzer erstellen, indem Sie Folgendes ausführen:

$ subuser subuser add firefox [email protected]/home/student/my-subuser-images

Sie können den Firefox-Subbenutzer ausführen, indem Sie Folgendes ausführen:

$ subuser run firefox

Sie können mehr als einen Firefox-Unterbenutzer erstellen. Dies ist nützlich, wenn Sie mehr als ein Facebook- oder Google-Konto haben möchten und sich nicht ständig abmelden müssen. Dies ist auch nützlich, wenn Sie das Risiko von Cross-Site-Scripting beim Internet-Banking verringern möchten.

subuser subuser add internet-banking [email protected]/home/student/my-subuser-images

Mit dem Befehl können Sie Ihren Internetbanking-Subbenutzer ausführen

subuser run internet-banking

Sie können auf das Home-Verzeichnis eines Unterbenutzers zugreifen, indem Sie ~/.subuser/homes Aufrufen.

Hier ist ein Screenshot von Firefox, der auf meinem System mit der gezeigten Konfiguration ausgeführt wird:

(enter image description here

Beachten Sie, dass trotz der Tatsache, dass ich Debian verwende, die Ubuntu-Version von Firefox installiert ist!

Sie können Ihre Unterbenutzerbilder mit anderen teilen, um die Belastung durch Sandbox-Anwendungen für alle zu verringern. Wenn Sie Ihr Firefox-Image freigeben möchten, können Sie auf my-subuser-images CDen und diesen Ordner in ein Git-Repository verwandeln:

$ cd ~/my-subuser-images
$ git init
$ git add .
$ git commit -m "Add Firefox image"

Wenn Sie dieses Git-Repo dann irgendwohin schieben, können andere Ihr Firefox-Image einfach mit dem folgenden Befehl installieren:

$ subuser subuser add firefox [email protected]://example.com/student/my-subuser-images.git

Sie würden diesen Unterbenutzer auf die gleiche Weise ausführen, als hätten sie das Setup lokal durchgeführt.

6
timthelion

Die Ubuntu-Dokumentation enthält einen Sandbox-Befehl für X-Anwendungen, die SELinux verwenden:

http://manpages.ubuntu.com/manpages/precise/man8/sandbox.8.html

SELinux ist eine schöne Route, da es viele Webseiten, Bücher, Tools usw. gibt, die es verwenden. Es lässt sich sehr gut in das Betriebssystem integrieren, was einer der Gründe für die Komplexität ist. Tresys verkauft nette Tools, mit denen sich diese einfach konfigurieren lassen.

Dinge wie SELinux stammen von Compartmented Mode Workstations aus der Orange Book-Ära ab, die versuchten, die Sicherheit von Vanilla-Betriebssystemen zu erhöhen. Das letzte überlebende (und gewartete) Produkt, das ich kenne, ist die Argus Pitbull-Linie. Es war nur Solaris, aber jetzt ist RHEL. Sie sind viel umfassender als SELinux, obwohl Sie dafür bezahlen werden. Es gibt auch die General Dynamics High Assurance Platform, die VMWare und Linux kombiniert.

Der Ansatz VM ist einfacher zu verwenden, aber ressourcenintensiver und bietet mehr Funktionen in einer vertrauenswürdigen Computerbasis. Das Beste, was Sie tun können, ist die Verwendung einer sehr leichten Distribution (CrunchBang kommt in den Sinn) Was Sie benötigen und was Sie nicht tun. VMs können über SELinux- oder SMACK-Steuerelemente auf einzelne Ordner beschränkt werden, wenn Sie die Ordnerfreigabe zum Verschieben von Dateien zwischen Host und Gast zulassen möchten.

Es gibt auch das QubesOS-Projekt, das darauf abzielt, die Option VM) sicherer zu machen. Es ist derzeit in ziemlich gutem Zustand und einfach zu bedienen.

Das allgemeine Problem bei Ihrer Frage ist, dass weder X noch Ubuntu für die sichere Trennung von Apps konzipiert sind, die sich gegenseitig misstrauen. Jahrzehntelange Forschung hat dies für UNIX und X mit zahlreichen Prototypen/Produkten durchgeführt. Nachdem ich sie gesehen und Ubuntu gesehen habe, garantiere ich Ihnen, dass sie das nicht tun. Das SELinux-Zeug macht nur wenig dafür und Ansätze für virtuelle Maschinen haben immer noch viel Angriffsfläche (VMM, Dom0s usw.). Genode, QubesOS, Europas Perseus-Sicherheitsarchitektur, die OKL4/OKLinux-Suite und TU Dresdens Nizza-Architektur sind nur offene Methoden, die ich kenne, um dies mit Linux-Kompatibilität anzugehen. Ihre Funktionen und Vollständigkeit variieren erheblich.

Wenn es Mainstream-Linux ausführt, warten 0 Tage darauf, gefunden zu werden, das garantiere ich Ihnen. Ich behalte einfach meine alte Lösung bei, separate PCs zu haben, von denen einer nicht online ist, und einen KVM Schalter). Und die Verwendung von schreibgeschützten Medien (z. B. CD-Rs), Einwegkabeln oder Schutz vor dem Verschieben von Daten und Backups auf schreibgeschützten Medien. Und wenn möglich von schreibgeschützten Medien laden. Die gesamte Einrichtung kostet weniger als 1.000 US-Dollar, wenn Komponenten billig sind und eine mäßige Leistung akzeptiert. 2.000 bis 3.000 US-Dollar für hohe Leistung.

4
Nick P

Ich möchte dieses Projekt zur hervorragenden Liste der oben genannten Projekte hinzufügen. Es kann jede Art von Prozessen sandboxen: Server, grafische Anwendungen und sogar Benutzeranmeldesitzungen.

https://l3net.wordpress.com/projects/firejail/

Firejail ist ein SUID-Sicherheits-Sandbox-Programm, das das Risiko von Sicherheitsverletzungen verringert, indem die Ausführungsumgebung nicht vertrauenswürdiger Anwendungen mithilfe von Linux-Namespaces eingeschränkt wird. Es ermöglicht einem Prozess und allen seinen Nachkommen, eine eigene private Ansicht der global gemeinsam genutzten Kernelressourcen zu haben, z. B. des Netzwerkstapels, der Prozesstabelle und der Mount-Tabelle.

1
bensonw