Question

A mon entreprise, nous développons un grand système, composé de plusieurs serveurs. Le système est composé d'environ 5 composants logiques. Les données sont stockées dans XMLs, MS SQL, et SQLite. Il est un système .Net (la plupart du temps), les composants communiquent en utilisant WCF, et certains UDP personnalisé. Les clients accèdent au système principalement par l'UDP personnalisé ou WEB (ASP.NET et Silverlight).

Protéger la communication est facile, certains SSL, et une certaine sécurité sur la WCF et nous fait.

Le principal problème auquel nous sommes confrontés est que le système doit être déployé sur le site d'un client, un client qui nous ne nécessairement confiance. Nous devons défendre les données sur les serveurs et le logiciel lui-même de l'ingénierie inverse. Les deux sont d'une importance cruciale pour nous.

Nous avons également besoin d'un coupe-circuit, je voudrais quelque chose qui détruit les données et le logiciel, sur commande, ou si incapable d'appeler à la maison pendant une certaine période de temps.

La direction que je pensais utilise TPM, ou quelque chose aussi bien - une solution de chiffrement matériel, en combinaison avec un autre service que nous pourrions garder en interne pour chiffrer tous les logiciels et les données sur les serveurs, de sorte que les clés de l'viendra de notre serveur en toute sécurité sur notre site, et peut-être curtaining mémoire du TPM.

Comment proposez-vous résoudre ce problème?


UPDATE 04/02 Je cherche des suggestions pratiques, ou des conseils sur les produits qui pourraient me aider, alors je commence une prime ...

les gars Regardez, nous mettons essentiellement notre machine sur le site du client (pour des raisons d'affaires et l'aspect pratique), nous possédons cette machine, et le client reçoit tout ce qu'il paie pour quelques heures, et il peut le faire avec les données tout ce qu'il veut . Mais je les algorithmes en cours d'exécution sur cette machine, et certaines des données qui y sont stockées sont nos secrets commerciaux, que nous voulons protéger. Idéalement, je voudrais que l'appareil ne travail pas du tout, même si je ne boot que c'est OK, et sans mon OK pour tout sur la machine restent cryptés. Mémoire curtaining ressemble également à une manière agréable de protéger la machine lors de l'exécution.

En outre idéalement je veux la HD et de stockage sur toutes les machines à exploser dès que quelqu'un se près d'eux avec un tournevis ... :-) mais je pense que cela prendra trop loin ...


UPDATE 10/02 D'ACCORD. après avoir fait quelques recherches, je pense que nous allons essayer quelque chose dans le même sens que le système de cryptage PS3, sauf que nous allons apporter les clés pour décrypter le logiciel et les données de nos serveurs. Ce faisant, nous pouvons décider de nos machines si nous faisons confiance au serveur demandant les clés, nous pouvons obtenir un coupe-circuit juste en rasseyant la machine. cela est probablement être basé sur TPM ou quelque chose de similaire, peut-être TXT Intel ... Je suis aussi très intéressé par curtaining mémoire comme une caractéristique importante de la sécurité ...

BTW, nous ne pouvons pas résoudre ce problème en déplaçant les éléments importants de notre système sur notre site, à la fois en raison des besoins de l'entreprise et parce que sa technologie ne permettait pas - nous aurions besoin d'une bande passante énorme ....

Était-ce utile?

La solution

Qu'est-ce que vous demandez, en effet, est le Saint Graal. Ceci est à peu près équivalent à ce qui est fait pour les consoles de jeu, où vous avez une plate-forme de confiance en cours d'exécution dans un environnement non sécurisé.

Déterminez si oui ou non vous pouvez traiter la machine compromise du jour 1. Si vous pouvez travailler dans cette hypothèse, alors les choses deviennent beaucoup plus facile pour vous, mais cela ne semble pas très viable ici.

En ce qui concerne la sécurisation, il y a effectivement quelques préoccupations:

  • Vous devez chiffrer le système de fichiers et l'utilisation du matériel de décryptage
  • Vous devez isoler vos applications les unes des autres, de sorte que les questions de sécurité dans un ne proposent pas d'autres compromis
  • Vous devez planifier les problèmes de sécurité peuvent se produire, des moyens mettant des stratégies d'atténuation comme un hyperviseur sécurisé en place

Je sais que ce sont assez vagues, mais c'est vraiment l'histoire des protections de la console de jeu sur les deux dernières années - si vous êtes curieux de savoir comment cela a été résolu (et cassé) à plusieurs reprises, regardez les fabricants de consoles.

Il n'a jamais été fait complètement avec succès, mais vous pouvez soulever la barrière à l'entrée de manière significative.

Autres conseils

... Pour être honnête, il semble que vous vous demandez comment écrire un virus dans votre application qui me fait penser que votre client a probablement plus de raison de ne pas vous faire confiance que l'inverse.

Cela étant dit, c'est une idée terrible pour un certain nombre de raisons:

  1. Qu'est-ce qui se passe si leur internet matrices de connexion ou ils se déplacent des bureaux et déconnecter la machine pour un bit?
  2. Que faire si vous le code mal et ? ratés d'allumage Suppression de données même si la client utilise correctement?
  3. Je ne peux que supposer votre demande implique que vos offres d'application capacités aucune sauvegarde. Suis-je correct? Sons exactement comme un Je produit pas acheter.
  4. Quelle est la valeur des données de votre application gère? Si c'est supprimé quel genre de financier les pertes seraient ce résultat pour le client? A votre service juridique signé sur et ce que vous avez vérifié ne peut être tenu responsable?

Cette question est posée sur le SO 2-3 fois par semaine, et la réponse est toujours la même - tout ce que vous avez donné à l'utilisateur ne vous appartient plus.

Vous pouvez le rendre plus difficile pour l'utilisateur d'obtenir les données, mais vous ne pouvez pas l'empêcher d'y arriver complètement. Vous pouvez crypter les données, vous pouvez garder la clé de déchiffrement sur CryptoToken USB (qui ne pas exposer la clé secrète), mais en théorie, si le code peut appeler CryptoToken et lui demander de déchiffrer le bloc de données, le pirate peut dupliquer votre code (en théorie) et de faire cet appel de code CryptoToken pour déchiffrer toutes les données.

Pratiquement la tâche peut être assez compliqué pour le rendre impossible pour obtenir les données. À ce stade, vous devriez vérifier, combien l'importance des données décryptées est vraiment pour l'utilisateur.

A propos de kill switch : cela ne fonctionne pas. Jamais. L'utilisateur peut faire une copie et restaurer de la sauvegarde en cas de besoin. Il peut changer l'horloge de l'ordinateur. Il peut sans doute même de ralentir l'horloge de l'ordinateur (si les données sont si précieux que l'investissement dans le matériel d'émulation personnalisée est possible).

A propos des données critiques : parfois il se avère que votre atout précieux est vraiment de peu de valeur à quelqu'un d'autre [et un autre aspect de votre solution est]. Exemple: nous expédier le code source de nos produits pilotes. Il est le plus précieux atout pour nous, mais les utilisateurs paient pas pour les lignes de code, mais pour le soutien, mises à jour et d'autres avantages. L'utilisateur ne sera pas en mesure d'utiliser efficacement le code source [volée] sans investir la somme, comparable au coût de notre licence.

A propos de l'obscurcissement : la virtualisation des morceaux de code (. Par exemple, produit VMProtect) semble être très efficace, cependant, il peut aussi être contournée avec certain effort.

En général, je peux penser à un matériel personnalisé avec système d'exploitation intégré sur mesure, scellé comme un distributeur automatique de billets (afin que le client ne peut pas entrer sans briser le sceau), avec des inspections régulières, etc. Cela pourrait travaux. La tâche est non seulement technique, mais la plupart du temps d'organisation - vous aurez besoin d'organiser des inspections régulières de la machine, etc.

Pour Résumer : si les données sont que précieux, gardez-le sur vos serveurs et offre une connexion Internet seulement. Sinon, vous ne pouvez minimiser les risques, ne pas les éviter complètement.

Comme tout le monde l'a déjà dit, il n'y a pas de solution magique. L'utilisateur peut éteindre la machine, obtenir le HD comme esclave à une autre machine, tout sauvegarde, moteur inverse votre code, puis craquer avec succès. Une fois que l'utilisateur a accès à l'exécutable physic, il est potentiellement compromise et il n'y a rien à faire pour l'arrêter dans 100% des cas.

Le mieux que vous pouvez faire est de faire le travail d'un pirate potentiel dur comme l'enfer, mais peu importe ce que vous ne, il ne serait pas incassable.

En utilisant une destruction auto en cas de quelque chose de mal peut être contourné par un pirate qui tout backup'd.

En utilisant une clé dans un pilote USB permet de rendre la vie de pirate plus difficile, mais peut être finalement vaincu par un pirate déterminé compétent: Le code que les choses unencrypt ne peuvent pas être dans un état chiffré (y compris la partie qui obtient la clé ), il est donc le grand point faible. Piratage cette partie du code pour enregistrer la clé de défaites quelque part ailleurs la clé.

Si le logiciel ne l'authentification dans un serveur distant, cela peut être travaillé en attaquant le client et circunventing l'authentification. Si elle obtient une clé du serveur, sniffant le réseau pourrait être utilisé pour intercepter les données du serveur qui contient la clé. Si les données du serveur sont cryptées, le pirate peut déchiffrer en analysant le logiciel qui déchiffre et pêche les données non cryptées.

En particulier, tout ce qu'il serait beaucoup plus facile à un pirate s'il utilise un émulateur pour exécuter votre logiciel qui est capable d'enregistrer des instantanés de la mémoire (y compris une version non crypté de l'algorithme). Encore plus facile s'il peut manipuler et épingler la mémoire directe lors de l'exécution de votre logiciel.

Si vous ne vous attendez pas que votre client non sécurisé sont très déterminés, vous pouvez simplement compliquer les choses et espérons qu'ils ne seront jamais assez d'énergie et de compétences pour être Worthing pour le briser.

La meilleure solution, à mon avis, est d'obtenir tous les logiciels de votre serveur de confiance et faire leur serveur il suffit de demander votre serveur pour faire le travail, et de garder vos algorithmes dans votre serveur. Ceci est beaucoup plus sûr et plus simple que tout le reste, car il élimine le problème fondamental: L'utilisateur ne dispose d'un accès physique à l'algorithme. Vous devriez vraiment, vraiment penser à une façon de le faire en éliminant vos besoins pour maintenir le code dans le client. Cependant, même ce n'est pas incassable, un pirate peut en déduire ce que l'algorithme fait en analysant ce qui est la sortie en fonction de l'entrée. Dans la plupart des scénarios (ne semble pas comme ça c'est votre cas), l'algorithme n'est pas le plus important dans le système, mais les données.

Donc, si vous ne pouvez vraiment pas éviter l'exécution de l'algorithme dans la partie non fiable, vous ne pouvez pas faire beaucoup plus que ce que vous avez déjà dit à faire: cryptez tout (preferencially dans le matériel), Authentifier et tout vérifier, détruire importante les données avant que quelqu'un pense à backuping si vous pensez que quelque chose ne va pas, et de faire du mal comme l'enfer à quelqu'un se fissurer il.


MAIS, si vous voulez vraiment des idées et vraiment envie de le faire, nous allons ici:

Je pourrais suggérer pour vous de faire votre mutant programme. I.e.: Lorsque vous déchiffrez le code, chiffrer avec une clé différente et jeter l'ancienne clé. Obtenez une nouvelle clé du serveur et affirmons que la clé elle-même est codé de manière qu'il serait très difficile de se moquer du serveur avec quelque chose qui donne de nouvelles clés compromis. Faire une garantie que la clé est unique et jamais réutilisé. Encore une fois, ce n'est pas incassable (et la première chose qu'un pirate ferait est d'attaquer cette fonctionnalité très).

Une autre chose: mettre beaucoup de non évidentes diversions qui ne contrôles de cohérence étranges non-sens, que beaucoup de version bogus non fonctionnelle de votre algorithme et ajouter beaucoup de overbloat complexe qui fait effectivement rien et affirme qu'il fonctionne comme prévu à partir du code réel. Faire le code réel do certaines choses qui semble étrange et trop non-sens. Cela rend le débogage et inverse ENGINERING encore plus difficile, bacause le pirate auront besoin de beaucoup d'efforts à essayer de séparer ce qui est utile de ce qui est indésirable.

EDIT: Et évidemment, faire une partie du code indésirable regardant mieux que le bon, donc un pirate regarderait il d'abord, de perdre efficacement le temps et la patience. Inutile de dire que, obfuscate tout, même si le pirate obtenir le code de fonctionnement non crypté plaine, il semble encore confus et très étrange.

Je sais que d'autres vont probablement faire des trous dans cette solution - et se sentir libre de le faire comme je le fais ce genre de chose pour vivre et accueilleraient le défi! - mais pourquoi ne pas faire ceci:

  1. Puisque vous utilisez clairement les fenêtres, activez la protection entraînement casier à peu sur le disque dur avec les paramètres de sécurité max. Cela aidera les gens Atténuer le clonage du lecteur comme ma compréhension - Si je me trompe, dites! -. Est son contenu seront chiffrés en fonction des systèmes que les paramètres matériels

  2. Activer TPM sur le matériel et le configurer correctement votre logiciel. Cela vous aidera matériel d'arrêt reniflant.

  3. Désactiver les comptes non utilisés par vous et verrouiller les comptes du système et les groupes à utiliser uniquement ce dont vous avez besoin. Les points bonus pour la mise en place Active Directory et un réseau privé virtuel sécurisé afin que vous puissiez accéder à leur réseau à distance via une porte arrière pour vérifier le système sans faire une visite officielle sur place.

  4. Pour augmenter la barre technique nécessaire pour entrer dans ce, écrire le logiciel en C ++ ou une autre langue non-.Net depuis byte-code MSIL est facilement de compilable dans le code source des outils gratuits accessibles au public et il prend plus de compétences techniques à quelque chose décompiler dans l'assemblage, même si elle est encore très faisable avec les bons outils. Assurez-vous d'activer toutes les instructions cpu pour le matériel que vous allez utiliser, pour les questions de compliquer encore.

  5. Demandez à votre logiciel validate le profil matériel (Hardware ID unique de) du système déployé tous si souvent. Si cela ne fonctionne pas (comme dans le matériel a changé) avoir Autodestruction.

  6. Une fois que le matériel a été validé charge votre logiciel à partir d'une image binaire crypté chargé dans un disque RAM crypté qui est alors lui-même de décryptées en mémoire (non épinglé!). Ne pas épingler, ou utiliser une adresse mémoire constante qui est une mauvaise idée.

  7. Soyez très prudent que, une fois le décryptage se fait, les clés ont été retirées de la RAM comme certains compilateurs bêtement optimiser sur un appel BZERO / memset0 non sécurisés et laissez votre clé dans la mémoire.

  8. Rappelez-vous que les clés de sécurité peuvent être détectées en mémoire par leur caractère aléatoire par rapport aux autres blocs de mémoire. Pour aider à atténuer ce faire que vous utilisez plusieurs clés « factices » que si elle est utilisée, déclencher une détection d'intrusion et scénario exploserait. Puisque vous ne devriez pas épingler la mémoire utilisée par les touches, ce qui permettra aux gens de déclencher les mêmes touches factices plusieurs fois. Les points de bonus si vous pouvez avoir toutes les clés fictives générées au hasard, et la vraie clé différente à chaque fois en raison de la # 12 ci-dessous, de sorte qu'ils ne peuvent pas regarder simplement la clé qui ne change pas .. parce qu'ils font tous.

  9. Faire usage du code assembleur polymorphes. Rappelez-vous que est l'assemblage vraiment que des chiffres qui peuvent être faites auto en train de modifier en fonction des instructions et de l'état de la pile / ce qui a été appelé avant. Par exemple, dans un système simple i386 0x0F97 (Set octet si ci-dessus) peut facilement être l'exact opposé (Set octet si ci-dessous) instruction en soustrayant simplement 5. Utilisez vos clés pour initialiser la pile et le levier de cache L1 / L2 du CPU si vous avez vraiment veulent aller noyau dur.

  10. Assurez-vous que votre système comprend la date / heure et valide la date / heure actuelle est dans une plage acceptable. À partir du jour avant le déploiement et en lui donnant une limite de 4 ans serait compatible avec la courbe en cloche de défaillance matérielle pour les disques durs sous garantie / support afin que vous puissiez profiter de cette protection et vous permettre un bon temps entre les mises à jour matérielles. En cas d'échec de cette validation, le faire se tuer.

  11. Vous pouvez aider les gens Atténuer vissant avec l'horloge en vous assurant que votre fichier pid est mis à jour avec l'heure de temps en temps; En comparant la dernière modification (comme les données chiffrées et ses attributs de fichier sur le système de fichiers) à l'heure actuelle sera un système d'alerte précoce pour si les gens ont vised avec l'horloge. Le problème détecté, exploser.

  12. Tous les fichiers de données doivent être chiffrées avec une clé qui se met à jour sur votre commande. Configurez votre système pour le mettre à jour au moins une fois par semaine, et à chaque redémarrage. Ajoutez ceci à la mise à jour-de-vos-serveurs du logiciel fonctionnalité que vous devriez avoir.

  13. Toutes cryptographie doit suivre les directives FIPS. Il faut donc utiliser Crypto forte, l'utilisation HMAC, etc. Vous devriez essayer de frapper FIPS-140-2 niveau-4 spécifications compte tenu de votre situation actuelle, mais compréhensible certaines des exigences peut ne pas être réalisable d'un point de vue économique et réaliste, FIPS-140 -2-niveau 2 peut être votre limite.

  14. Dans tous les cas d'autodestruction, ont à la maison de téléphone pour vous d'abord si vous savez immédiatement ce qui est arrivé.

Et enfin des solutions non-logiciel:

  1. Si la maison ne peux pas de téléphone .. comme un dernier effort d'un périphérique matériel personnalisé connecté à un port série / USB interne qui est configuré pour activer un relais qui déclenche alors un bloc de Thermite si elle détecte tous les cas , le matériel ou la falsification des logiciels. Mettre sur le dessus des disques durs et les placer sur la carte mère fera le travail mieux. Toutefois, vous aurez besoin de vérifier auprès de votre service juridique pour les permis, etc. requis si ce n'est pas une situation approuvée par l'armée américaine comme je suppose que vous êtes aux Etats-Unis.

  2. Pour vous assurer que le matériel ne trafiqué, Voir FIPS exigences de sécurité physique pour plus de détails sur la réalisation que le système est sécurisé physiquement. Les points de bonus si si vous pouvez le voir sur les boulonnage / souder les supports modernes que vous utilisez dans un vieux cas AS400 camouflage pour aider à atténuer le mouvement / altération du matériel. les gars plus jeunes ne sauront pas quoi faire et Craindre pour casser « sucer vieux trucs », les gars plus âgés se demanderont « wtf? », et la plupart tout le monde laissera le sang derrière qui peut être utilisé plus tard comme preuve de falsification si elles autoprotegee le souvent légèrement pointu cas, au moins en fonction de ma propre expérience.

  3. Dans le cas d'une notification d'intrusion, nuke orbite .. son seul moyen d'être sûr. ;) Assurez-vous que vous avez toutes les formes et les exigences légales pour l'accès rempli de façon légale est satisfait de la réduction du risque ou la responsabilité ... Ou vous pouvez configurer votre système de notification aux personnes email / texte / téléphone automatiquement une fois que vous obtenez une notification vous dire qu'il a explosé.

« La seule façon d'avoir un système totalement sécurisé est de briser avec un marteau »

Cela dit, il est possible de visser avec les pirates assez serait-être pour le rendre plus d'ennuis que cela vaut la peine. Si la machine est une « boîte noire » où ils ne peuvent pas accéder vraiment directement, mais plutôt avoir des programmes qui traitent avec elle, votre plus grande menace pour l'accès physique est. Vous pouvez verrouiller les cas vers le bas, et même installer un petit élément cassable dans le cas qui sera cassé si le dossier est ouvert ... assurez-vous que les gens de service toujours remplacer cet article ... il vous permettra de savoir si quelqu'un a ouvert sans autorisation (oui, c'est un vieux truc de l'adolescence, mais cela fonctionne). Quant à la boîte elle-même, désactivez physiquement les bits de matériel (comme les ports USB) que vous n'avez pas absolument besoin.

Si vous avez affaire à une machine qui n'est pas une boîte noire, chiffrez l'enfer hors de tout ... cryptage de 256 bits est effectivement impossible de se fissurer sans la clé ... alors l'affaire devient obtenir la clé.

En théorie, vous pourriez éventuellement avoir la touche changement (par re-chiffrer les données) et seulement par un processus récupérable qui communique directement avec vos (sécurité) des serveurs.

En outre, suivre tout ce qui arrive à la boîte, en particulier tout ce qui se produit dans le logiciel qui est en dehors d'une utilisation normale. Une grande partie de cela ne peut pas vous protéger de quelqu'un qui est vraiment, vraiment déterminé ... mais peut alerte vous que votre système a été compromis. (Sur lequel vous pouvez poursuivre le diable hors de celui qui a éclaté dans)

En ce qui concerne le coupe-circuit ... eh bien, les virus dormants sont là, mais comme cela a été dit, ils peuvent être dupes ou déclenché par accident. Je suggère que, plutôt que d'essuyage se nettoyer, si vous soupçonnez une violation, ont le tout Crypter du système, il peut avec une clé générée de manière aléatoire, envoyer la clé de vos serveurs (vous pouvez réparer les dégâts), puis «déchiqueter la fichier qui contenait la clé. (Beaucoup de déchiqueteuses de fichiers là-bas peuvent détruire assez bien les données qu'il est (presque) impossible à récupérer.)

Résumer les réponses, oui. Il n'y a pas « parfaitement sûr » des solutions à ce problème, car il aurait besoin homomorphique cryptage (qui existe maintenant que sous la forme de prototypes limités qui nécessitent des quantités ridicules de calcul).

Dans la pratique, ce que vous avez besoin est la combinaison de l'ingénierie des exigences proprement dites et l'ingénierie de la sécurité (évaluer les parties prenantes, des intérêts, des atouts précieux au sein du système déployé, les attaques possibles et les dommages de chaque scénario d'attaque réussie coûte VS pour en défendre.)

Après cela, vous aurez soit voir que la protection ne soit pas vraiment nécessaire, ou vous pouvez déployer des mesures raisonnables et couvrir d'autres « trous » avec des trucs juridiques, OU Restructurer tout le système, en commençant par le modèle d'affaires ( Peu probable, mais possible aussi).

En général, la sécurité est le problème de l'ingénierie des systèmes, et vous ne devriez pas vous limiter à des approches techniques seulement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top