Kann Apparmor interpretierte Sprachen einschränken?

7

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?

Ian N.
quelle

Antworten:

2

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.

Labsin
quelle
0

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

AppArmor-Benutzer
quelle
0

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.

ixbedeutet, 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/myappoder 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...
  }

}
Yurii Oleynikov
quelle
-1. Vielleicht könnten Sie Ihre Alternative etwas besser erklären? Sie haben erklärt, warum die andere Antwort schlecht ist, aber nicht, was Ihre Antwort anders macht - was diesen gefährlichen Schrank zu einer Nur-Code-Antwort macht.
Starbeamrainbowlabs
Entschuldigung für die verspätete Antwort ixbedeutet , 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/myapeine gute Idee ist.
Yurii Oleynikov
Da es sich um Sicherheit handelt, sollten wir uns fragen: Warum sollten externe Befehle / Pythons, von denen aus aufgerufen wird /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?
Yurii Oleynikov
Ah, ich verstehe - danke für die Erklärung! Vielleicht könnten Sie Ihre Antwort damit aktualisieren? Dann kann ich meine -1 umkehren.
Starbeamrainbowlabs