2010-10-25 3 views
8

Comment protéger mon serveur contre les activités malveillantes lors de l'acceptation et de l'exécution de code téléchargé non fiable?JVM Sandbox pour sécuriser le serveur à partir de sources non fiables

Les utilisateurs devraient être en mesure d'implémenter mon interface et données, effectuer quelques calculs et retourner des données. Aucune opération d'E/S n'est nécessaire et certainement pas de manipulation de thread/processus ou d'autres foutaises. En utilisant le fichier java.policy, il est possible de tout nier (en n'accordant rien) en utilisant le fichier java.policy. En utilisant ce fichier de stratégie, les opérations non accordées entraîneront une exception de sécurité.

$ cat Print.java 
public class Print { 
    public static void main(String a[]) throws Exception { 
     System.out.println(System.getProperty("os.name")); 
    } 
} 

$ javac Print.java 
$ java -Djava.security.manager -Djava.security.policy==test.policy Print 
Exception in thread "main" java.security.AccessControlException: 
    access denied (java.util.PropertyPermission os.name read) 
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323) 
    at java.security.AccessController.checkPermission(AccessController.java:546) 
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:532) 
    at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1285) 
    at java.lang.System.getProperty(System.java:650) 
    at Print.main(Print.java:3) 

Est-ce infaillible? Dois-je en faire plus pour sécuriser mon environnement serveur de sources non fiables?

Répondre

10

Je ne compterais pas simplement sur SecurityManager si j'étais vous. Oui, votre configuration semble correcte et cela suffirait si le sandbox Java était parfait. Mais regardez combien de vulnérabilités Java sont corrigées dans chaque version de sécurité de Java. Par exemple, le latest Oracle Java CPU. Beaucoup de ces vulnérabilités Java sont celles qui s'échappent du Sandbox. C'est très mauvais côté client (plusieurs personnes préconisent de désactiver Java depuis le navigateur), mais ce serait encore pire du côté du serveur, car les attaquants n'ont pas à vous attirer sur leur site, ils peuvent simplement attaquer votre serveur. Par exemple, actuellement, j'ai personnellement plusieurs vulnérabilités de ce type que j'attends d'Oracle, ou je suis en train de les communiquer à Oracle. Et je ne suis pas le seul chercheur à les avoir. Et il doit y avoir des méchants qui les ont aussi. Donc, même si vous mettez à jour votre Java religieusement la seconde, la nouvelle version sortira, vous ne seriez pas en sécurité.

Je pense au moins que vous devriez avoir quelque chose au niveau du système d'exploitation, des permissions, etc., pour contrôler le processus du serveur. Désolé, je n'ai pas de très bonnes suggestions là-bas, mais je dis juste que non, vous ne pouvez absolument pas compter sur le JVM Sandbox pour la sécurité sur le serveur.

+0

Ça sonne bien. Et si je m'exécutais aussi en tant qu'utilisateur non privilégié dans une machine virtuelle Linux? – Synesso

+1

Cela me semble bon, mais je ne peux pas en parler avec beaucoup d'autorité. Je sais seulement que la sécurité de la JVM est fragile face au monde entier. –

Questions connexes