2013-03-15 11 views
5

Wir haben ein Gerät, auf dem Linux ausgeführt wird, und wir müssen nicht vertrauenswürdige Anwendungen auf diesem ausführen. Wir versuchen, die folgende Sicherheitsprobleme zu lindern -Ausführen einer nicht vertrauenswürdigen Anwendung unter Linux in einer Sandbox

  1. Die nicht vertrauenswürdige Anwendung sollte sich negativ auf nicht in der Lage sein, um die Core-OS-Daten und Binärdateien zu beeinflussen
  2. Die nicht vertrauenswürdige Anwendung sollte nicht negativ sein können, eine andere Anwendung Daten und Binärdateien beeinflussen
  3. die nicht vertrauenswürdige Anwendung sollte nicht in der Lage zu konsumieren seine übermäßigen CPU, Arbeitsspeicher oder Speicherplatz und verursacht eine DoS/Ressource Hunger wie Situation auf den Kern O oder andere Anwendungen

Von dem nicht vertrauenswürdigen Anwendung Stand Punkt, es muss nur in der Lage sein, sein eigenes Verzeichnis zu lesen und schreiben und vielleicht montierten USB-Laufwerk

Wir daran denken, eine der folgenden Ansätze -

Ansatz 1 - Verwenden Sie SELinux als Sandbox

  • Ist das möglich? Ich habe ein wenig SELinux gelesen und es sieht ein wenig kompliziert aus, eine Richtliniendatei einzurichten und zur Laufzeit zu implementieren. Kann SELinux das tun und die nicht vertrauenswürdige Anwendung darauf beschränken, nur ihr eigenes Verzeichnis zu lesen/schreiben und auch in der Lage zu sein Quotengrenzen setzen?

Ansatz 2 - Erstellen ein neues Sandbox auf unserem eigenen

  • Während der Installation Zeit

    • Erstellen Sie einen neuen App Benutzer für jede nicht vertrauenswürdige Anwendung
    • die gesamte Anwendung Stempel Verzeichnis und Dateien mit Berechtigungen, so dass nur der Benutzer der Anwendung
    • lesen und schreiben kann
    • Set Quoten für die Anwendung Benutzer ulimit/Quote
  • Während der Laufzeit, starten Sie das nicht vertrauenswürdige Anwendung mit

    • Schließen Sie alle geöffneten Dateideskriptoren/Griffe
    • Verwenden chroot mit der Wurzel zu setzen in das Anwendungsverzeichnis
    • Starten Sie die Anwendung im Kontext der Anwendung Benutzer

Gedanken zu den oben genannten? Welcher Ansatz ist sicherer als der andere? Gibt es einen anderen Ansatz, der besser funktionieren könnte? Wir haben aus einigen Gründen keine Wahl, Android zu verschieben, daher können wir die Sandbox-Funktionen, die Android nativ bereitstellt, nicht verwenden ...

ich

Dank wissen lassen,

+0

Ihre Wahl Nummer 2 klingt tatsächlich viel wie Android Sandboxing-Funktionen (mit Ausnahme der Chroot) - die funktionieren in dem Maße, in dem das Kernel-Benutzer Sicherheitsmodell intakt bleibt ... –

+0

@ Chris-Stratton - Android ist was Wir haben uns als Referenz für unser Approach-2 entschieden. Leider können wir zu diesem Zeitpunkt nicht zu Android wechseln. Sie haben also nicht die Möglichkeit, das Android-Sandboxing sofort zu verwenden. – user967973

+0

Wie wäre es mit dem Namespace & cgroups von Linux? Ehrlich gesagt, ich bin nicht so vertraut mit ihr, aber nach meinem bescheidenen Wissen könntest du die Ressourcen eines Prozesses nur für das, was du festgelegt hast, isolieren. Mit anderen Worten, Sie erstellen ein eigenes Containerisierungssystem, ähnlich wie Docker. Jeder Prozess/App ist nur darauf beschränkt, das zu sehen, was ihm zugewiesen wurde. –

Antwort

0

Die SELinux eine Reihe von Regeln, die als Benutzerrechte noch komplexer ein bisschen ähnlich gelten. Sie können es für jeden Prozess verwenden, um eine Domäne dieses Prozesses festzulegen und nahezu jeden Zugriff zuzulassen oder zu verweigern. Es bedeutet Zugriff auf Dateien, Netzwerk oder Prozesse/Threads. So kann es als eine Art Sandbox benutzt werden. Sie müssen jedoch einen Regelsatz für jeden Prozess vorbereiten oder Sie können ein Skript erstellen, das vor einer Sandbox-Anwendung ausgeführt werden muss, um die Regeln selbst vorzubereiten.

Wenn Sie die Kontrolle über den CPU-Verbrauch übernehmen wollen, hat SELinux keinen CPU-Planer, da jede Regel nur eines von zwei logischen Ergebnissen hat, 'erlauben' oder 'verweigern'. Ich empfehle Ihnen "Cgroups", um CPU-Verbrauch zu steuern.

0

Die legato project verwendet ein höheres Sandboxing. Es verwendet chroot und bind mount, um Anwendungen zu enthalten. Ein Hauptmerkmal davon ist eine formale deklarative API, so dass Anwendungskomponenten unter einer verwalteten Sicherheitskonfiguration mit Systemdienstkomponenten kommunizieren können. Und Dienste und Anwendungen können nach Bedarf hinzugefügt und entfernt sowie über Funk aktualisiert werden. Die Anwendungsspeicherauslastung, Prozessorfreigabe, Speicher usw. werden ebenfalls eng verwaltet. Es behauptet, die Anwendungsentwicklung zu erleichtern.