Pour les langages interprétés/vm (par exemple, les scripts python, Java et Shell), peut-on configurer apparmor pour ne confiner qu'un script ou un programme particulier? Si c'est le cas, comment?
Oui c'est possible. Il est également utilisé dans Ubuntu, notamment au téléphone.
Pour obtenir un script apparmor de base, vous pouvez utiliser aa-autodep à partir du paquet apparmor-utils.
Exemple rapide pour python:
cat >> ~/myapp << EOF
#! /usr/bin/python
EOF
Sudo aa-autodep ~/myapp
cat /etc/apparmor.d/home.<user-name>.myapp
Cela vous donnera quelque chose comme:
# 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,
}
Ensuite, vous pouvez développer cela.
En fait, utiliser '/usr/bin/python2.7 ix' n'est pas une bonne idée. Le code exploité pouvant exécuter python à partir de Shell, par exemple: python -c 'du code malveillant'. Ce n’est certainement pas ce que vous voulez et casse totalement le concept de bac à sable (ce qu’apparmor est)
#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>
... your policy for data, logs, connections, python files...
}
}
Je pense que yurii est peut-être confus et pense que "ix" signifie "non confiné", ce qui serait "Ux" ou "ux". Je ne vois aucune vulnérabilité en matière d’échappement lors du lancement de python à partir d’un shell ou d’un sous-processus.
Pour en savoir plus sur les drapeaux d'exécution, consultez la page https://gitlab.com/apparmor/apparmor/wikis/QuickProfileLanguage