2010-11-07 17 views
2

Je voudrais vous demander conseil sur l'amélioration de la sécurité de l'exécution d'un programme compilé sur l'ordinateur d'un client. L'idée est que nous envoyons un programme compilé à un client, mais le programme a été écrit et compilé par un tiers. Comment faire en sorte que le programme ne nuise pas au système d'exploitation d'un client en cours d'exécution? Quel serait le meilleur pour atteindre cet objectif et ne pas diminuer considérablement les performances de l'exécution d'un programme?Exécution d'un programme compilé par un tiers sur l'ordinateur d'un client

MISE À JOUR: Je suppose que des tiers ne veulent pas nuire à l'OS du client, mais il peut arriver qu'ils font une erreur ou leur programme est infecté par quelqu'un d'autre.
Le programme a pu être compilé à bytecode ou natif, cela dépend de tiers.

+1

Pourriez-vous préciser les menaces qui vous inquiètent? La «tierce partie» de votre question devrait-elle être considérée comme mal intentionnée ou peut-être légèrement incompétente? –

+1

Quel système d'exploitation? Java Bytecode ou natif? – thejh

+1

@thejh Considérant que la question ne mentionne pas Java du tout, j'ai du mal à comprendre votre commentaire. –

Répondre

1

Selon la langue utilisée et le type d'autorisation requis, vous pouvez utiliser les fonctionnalités de sandbox intégrées à la langue. Par exemple, les versions antérieures de .NET ont un «niveau de confiance» qui peut être défini pour contrôler le niveau d'accès d'un programme lors de son exécution (les versions plus récentes ont une fonctionnalité similaire appelée Code Access Security (CAS)). Java a des fichiers de politique qui contrôlent la même chose.

Une autre méthode qui peut être utile consiste à exécuter le programme à l'aide du moniteur de processus (Microsoft) Sysinternals, tout en analysant toutes les opérations effectuées par le programme.

Si c'est développé par un tiers, alors il est très difficile de savoir exactement ce qu'il va faire sans passer en revue le code. Cela peut être une solution plus contractuelle - ajouter des pénalités dans le contrat avec le tiers et convenir de leur responsabilité pour tout dommage.

1

signez-le. Google pour «signature numérique» ou «signature de code»

+0

Errmm ... parce que vous êtes blessé qu'une machine puisse exploser, vous y mettez un panneau qui dit "Cette machine n'explose jamais et est sûre et fiable"? – thejh

+1

Eh bien, jusqu'à ce que la question soit clarifiée, c'est peut-être la réponse qui correspond le mieux à ce que le PO attend. Il n'y a pas d'appel à downvote. –

+0

Il est plus proche d'avoir la garantie du fabricant de la machine que, tant que le sceau inviolable n'est pas brisé, toute explosion sera la responsabilité du fabricant. –

2

Il existe deux options principales, selon que vous faites confiance ou non au tiers.

Si vous faites confiance à la 3ème partie, alors vous vous souciez juste que cela vient réellement d'eux, et qu'elle n'a pas changé pendant le transport. La signature de code est une bonne solution ici. Si le tiers signe le code, et que vous vérifiez la signature, vous pouvez vérifier que rien n'a changé au milieu et prouver que ce sont eux qui l'ont écrit.

Si vous ne faites pas confiance à un tiers, alors c'est un problème difficile. La solution habituelle consiste à exécuter du code dans un "sandbox", où il est autorisé à effectuer un ensemble limité d'opérations. Ce concept a été mis en œuvre pour un certain nombre de langues - google "sandbox" et vous trouverez beaucoup de choses à ce sujet. Pour Perl, voir SafePerl, pour Java, voir "Java Permissions". Des variantes existent pour d'autres langues aussi.

1

Si vous disposez des ressources nécessaires, utilisez une machine virtuelle. C'est - en général - un très bon bac à sable pour les applications non fiables.

S'il s'agit d'un système Unix, vérifiez ce que vous pouvez faire avec chroot.

1

L'autre chose est de ne pas sous-estimer la valeur des tests approfondis. vous pouvez exécuter l'application (dans un environnement non production) et vérifiez les points suivants (des niveaux croissants de paranoïa!)

  • CPU/utilisation du disque est acceptable
  • ne parle pas aux hôtes du réseau il ne devrait pas est ce que je.e pas de «capacité d'accueil téléphonique»
  • Scannez avec votre programme AV de votre choix
  • Vous pouvez même connecter pSpy ou quelque chose pour en savoir plus sur ce qu'il fait.

De plus, si possible, exécutez l'application avec un utilisateur à faible privilège. cela va offrir un certain degré de «sandboxing», à savoir l'application ne sera pas en mesure d'interférer avec d'autres processus

.. ne négligez pas non plus la valeur des contrats juridiques avec le fournisseur qui peut souvent vous donner une sorte de de récompense s'il y a un problème. bien sûr, le choix d'un fournisseur de bonne réputation en premier lieu offre également un niveau d'assurance.

-ace