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
- Die nicht vertrauenswürdige Anwendung sollte sich negativ auf nicht in der Lage sein, um die Core-OS-Daten und Binärdateien zu beeinflussen
- Die nicht vertrauenswürdige Anwendung sollte nicht negativ sein können, eine andere Anwendung Daten und Binärdateien beeinflussen
- 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,
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 ... –
@ 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
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. –