2010-04-01 3 views
7

Sur le site Ideone, un utilisateur télécharge du code à exécuter sur un serveur distant. Ceci est similaire aux fonctions d'un juge en ligne.Comment protéger un juge en ligne contre un code malveillant?

Le problème est que les utilisateurs peuvent télécharger du code qui tente de «pirater» le système. Je comprends que dans C et C++ il est facile de désactiver un certain ensemble d'appels système (patcher quelques .dll), mais je ne suis pas si sûr au sujet d'autres langues.

Comment protégeriez-vous votre système si vous deviez supporter des langages de plus haut niveau (Erlang, Haskell) sur le juge en ligne?

+0

Vous pouvez consulter le projet « safeexec » sur GitHub – daveagp

Répondre

2

Exécuter dans un sandbox en tant qu'utilisateur non privilégié. Ce n'est pas absolument infaillible, mais cela fait de la barre pour faire des dommages durables ou des compromis sérieux très élevé. Il ne dépend pas non plus des options possibles ou des modifications de l'exécution de la langue en question. Si vous travaillez avec un langage entièrement compilé (c'est-à-dire sans interpréteur d'exécution), vous pouvez le faire également.

Par exemple, prenez Erlang. Configurez un chroot jail qui contient uniquement ce dont vous avez besoin pour exécuter Erlang. Ajoutez un compte d'utilisateur non-privilégié et un répertoire de base. Apportez le code à exécuter, vérifiez toutes les autorisations de fichier/répertoire, passez à l'UID non privilégié et exécutez le code.

Vous trouverez des instructions plus détaillées sur la configuration des prisons dans l'article Wikipédia référencé ci-dessus. Les procédures et les exigences sont légèrement différentes pour différents systèmes d'exploitation.

Questions connexes