Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 10/11/2014, à 16:00

Metatr0n

AppArmor + Java

Bonjour à tous.

J'aimerais exécuter un programme Java auquel je n'accorde pas la moindre once de confiance.
Je compte donc utiliser AppArmor. Si j'ai bien compris, il faut associer un profil au programme qu'on veut exécuter.
Seulement, je compte exécuter mon programme de la manière suivante :
   java monprog.class
Le programme réellement exécuté est donc java, mais je ne veux pas appliquer le profil sur java dans tous les cas, juste dans le cas de l'exécution de ce programme en particulier.
Est-ce possible ?
Est-ce que le fait de mettre cette ligne dans un fichier .sh et d'appliquer un profil AppArmor à ce fichier est suffisant ?

merci d'avance


http://www.microcontest.com - Site de challenges de programmation : Cryptographie - Multimedia - Intelligence Artificielle - Réseaux - Algorithmique - Mathématiques

Hors ligne

#2 Le 12/11/2014, à 14:15

voxpopuli

Re : AppArmor + Java

Pourquoi ne pas le lancer dans une machine virtuelle? tu évite ainsi de te casser la nenette et surtout de lancer un programme auquel tu n'as pas confiance sans savoir tout se qu'il faudrait faire pour le verrouiller (avec le risque d'oublier quelque chose)


« Si la destinée ne nous aide pas, nous l'aiderons nous même à se réaliser !  »
$Wold.Action.Boot();

Hors ligne

#3 Le 12/11/2014, à 15:37

Metatr0n

Re : AppArmor + Java

En effet ça pourrait être une solution.
Je détaille un peu ce que je veux faire. L'objectif est d'exécuter automatiquement des programmes (C/C++, Java et Python) uploadés par les utilisateurs de mon site (celui que j'ai en signature).
Ces programmes seraient constamment exécutés pour constituer un classement entre eux (ce serait des programmes joueurs d'échecs par exemple).
Donc ce n'est pas une exécution unique, ponctuelle, ce sont des exécutions automatiques et perpétuelles.

Donc OK si je les exécute dans ma VM, mon serveur serait protégé, mais pas ma VM en elle même. Alors oui c'est pas bien grave, mais si je dois redémarrer la VM à partir du snapshot sain et qu'à chaque fois un malin me la met en vrac, ça va pas me faciliter la vie.


http://www.microcontest.com - Site de challenges de programmation : Cryptographie - Multimedia - Intelligence Artificielle - Réseaux - Algorithmique - Mathématiques

Hors ligne

#4 Le 12/11/2014, à 19:17

voxpopuli

Re : AppArmor + Java

En VM ce n'est pas totalement sûr, un programme malveillant peut détecter qu'il est en VM et tenter de s'en évader. (par exemple si tu fais tourner windows sous virtualbox, il suffit de rechercher les additions invitées)
L'avantage est que tu augmentes la complexité de la défense et que tu utilises un environnement plus facile a verrouiller sans trifouiller dans la config de ton serveur au risque de le rendre instable (tu peux par exemple taper un parefeu entre t'as VM et le net, ou des scripts Haka, tu peux aussi utiliser un OS différent sur t'as VM que sur ton serveur, se qui bloque l'auto-reproduction d'un vers non polymorphe donc de la grosse majorité des bestioles). Petit avantage aussi: en cas d'erreur de programmation provoquant un boucle infinie gargantuesque qui se met a bouffer la RAM et le processeur, grâce a la VM tu peux limiter les ressources disponible afin de ne pas risquer la stabilité du serveur.
Si la VM crash, c'est bien entendu plus intéressant que de voir ton serveur crasher wink (tu peux la relancer via ligne de commande/contrôle a distance)

Bien entendu il faut exécuter la VM en utilisateur restreint et restreindre l'utilisateur dans la VM (double défense: il doit faire une privilege escalation dans ta VM, arriver a prendre le contrôle de l'hyperviseur qui gère la VM et refaire une privilege escalation pour avoir accès root sur ton server ^^).
Aussi, je pense qu'il y a moyen de restreindre les commandes de certains langages, tu pourrais chercher des infos dans ce sens et n'autoriser que les langages que tu as sécurisé.

Le désavantage par contre: consommation de ressource supplémentaire.


« Si la destinée ne nous aide pas, nous l'aiderons nous même à se réaliser !  »
$Wold.Action.Boot();

Hors ligne

#5 Le 13/11/2014, à 11:35

Metatr0n

Re : AppArmor + Java

Bien, merci pour ta réponse complète et intéressante, je vais creuser.
Je reste cependant curieux par rapport à ma question originale.


http://www.microcontest.com - Site de challenges de programmation : Cryptographie - Multimedia - Intelligence Artificielle - Réseaux - Algorithmique - Mathématiques

Hors ligne

#6 Le 13/11/2014, à 14:03

voxpopuli

Re : AppArmor + Java

Je ne suis pas familiarisé avec AppArmor, je sais juste qu'il utilise les PATH pour accepter de lancer ou non un logiciel (se qui et abominable quand le path du logiciel pointe vers un disque monté après AppArmor).

Pour java, le profil c'est l'utilisateur non? Si tu lance ton logiciel et sa machine Java via un utilisateur créé spécifiquement et restreint au minimum, son profil sera de facto restreint non?


« Si la destinée ne nous aide pas, nous l'aiderons nous même à se réaliser !  »
$Wold.Action.Boot();

Hors ligne

#7 Le 13/11/2014, à 14:21

Metatr0n

Re : AppArmor + Java

C'est beaucoup plus puissant qu'une simple restriction utilisateur. Le profil AppArmor d'une application consiste à définir ce qu'elle PEUT faire. Si tu le laisses vide, elle ne peut meme pas démarrer.
Ce qui est intéressant, c'est que tu peux demander à AppArmor de monitorer une application pendant une utilisation normale, ce qui crée le profil qui va bien, et tu le passes ensuite en mode restreint. De ce fait, l'application ne pourra pas faire de nouvelles choses à partir de là. C'est très adapté à ce que je veux faire, le soucis c'est que la restriction va s'appliquer à tout Java et non une application particulière, et vu comme je veux la restreindre c'est très embetant.


http://www.microcontest.com - Site de challenges de programmation : Cryptographie - Multimedia - Intelligence Artificielle - Réseaux - Algorithmique - Mathématiques

Hors ligne