Kann für interpretierte / VM-Sprachen (z. B. Python, Java, Shell-Skripte) Apparmor so eingestellt werden, dass nur ein bestimmtes Skript oder Programm beschränkt wird? Wenn das so ist, wie?
Ja es ist möglich. Es wird auch in Ubuntu verwendet, insbesondere am Telefon.
Um ein grundlegendes Apparmor-Skript zu erhalten, können Sie aa-autodep aus dem apparmor-utils-Paket verwenden.
Schnelles Beispiel für Python:
cat >> ~/myapp << EOF
#! /usr/bin/python
EOF
sudo aa-autodep ~/myapp
cat /etc/apparmor.d/home.<user-name>.myapp
Dies gibt Ihnen so etwas wie:
# Last Modified: Mon Feb 24 18:31:50 2014
#include <tunables/global>
/home/sam/myapp flags=(complain) {
#include <abstractions/base>
#include <abstractions/python>
/home/sam/myapp r,
/usr/bin/python2.7 ix,
}
Dann können Sie das erweitern.
Ich denke, yurii ist möglicherweise verwirrt und denkt, dass "ix" "unbeschränkt" bedeutet, was "Ux" oder "ux" wäre. Ich sehe hier keine Escape-Schwachstelle, wenn Python entweder über eine Shell oder einen Unterprozess erneut gestartet wird.
Weitere Informationen zu den Ausführungsflags finden Sie unter https://gitlab.com/apparmor/apparmor/wikis/QuickProfileLanguage
Die Verwendung von '/usr/bin/python2.7 ix' ist keine gute Idee. Da ausgenutzter Code Python aus der Shell ausführen kann, zum Beispiel: Python -c 'irgendein böser Code'.
Dies ist definitiv nicht das, was Sie wollen und bricht das Sandbox-Konzept (was Apparmor ist) völlig.
ix
bedeutet, dieselben Einschränkungen wie das übergeordnete Profil zu erben. In diesem Fall bin ich mir nicht sicher, ob es eine gute Idee ist, externe Befehle unter denselben Einschränkungen wie / home / sam / myap auszuführen.
Da es sich um Sicherheit handelt, sollten wir uns fragen: Warum sollte der externe Befehl / Python, von dem aus aufgerufen wird /home/sam/myapp
, auf Lese- / Schreib- / Löschdateien zugreifen können, die von /home/sam/myapp
oder systemweit vertraulichen Dateien erstellt wurden? oder sogar eine Verbindung zum externen System herstellen? (Erinnern Sie sich an den alten Fall, dass Skype unnötige Dateien unter / etc liest?)
Die sicherere Lösung ist daher die Verwendung eines untergeordneten Profils (Unterprofils) zum Ausführen eines externen Python-Programms
#include <tunables/global>
/home/sam/myapp flags=(complain) {
#include <abstractions/base>
/home/sam/myapp r,
/usr/bin/python2.7 Cx -> trusted_domain,
profile trusted_domain {
#include <abstractions/....>
#include <abstraction/python>
/usr/bin/my-python-app r,
... your policy for data, logs, connections, python files...
}
}
ix
bedeutet , dass Sie dieselben Einschränkungen wie das übergeordnete Profil erben. In diesem Fall bin ich mir nicht sicher, ob die Ausführung externer Befehle unter denselben Einschränkungen erfolgt, wie dies/home/sam/myap
eine gute Idee ist./home/sam/myapp
, auf Lese- / Schreib- / Löschdateien zugreifen können, die von erstellt wurden/home/sam/myapp
? oder sogar eine Verbindung zum externen System herstellen?