10
votes

Protéger une application C # haute valeur avec un seul utilisateur

J'ai une seule application - écrite en C # - qui est utilisé par un seul utilisateur. Je fournis ce logiciel à des frais mensuels très élevés (> 10 000 $). J'aimerais protéger cette application contre l'utilisation par un autre utilisateur et j'aimerais pouvoir empêcher l'utilisateur d'utiliser l'application si elles arrêtent de payer les frais de licence.

Je sais qu'il n'y a pas de schéma de protection parfait et j'ai examiné les nombreuses questions similaires à ce sujet, mais ma question est un peu différente, car je n'ai qu'un seul client, j'ai un accès complet à leur matériel, et je n'ai pas «Tenez-vous même quelques heures par installation pour une augmentation substantielle de la sécurité.


5 commentaires

Est-ce un bureau ou une application ASP.NET?


Pourriez-vous fournir un contexte sur le niveau d'attaque que vous souhaitez protéger contre E.G. S'attendriez-vous qu'ils essaient activement de pirater votre système de protection si tout s'est bien passé, ou est-ce que cela est plus protecteur contre Casual »ne pas distribuer des copies à d'autres personnes» abusif?


En outre, une mention de la sophistication technique que vous attendez de votre attaquant (et que tout le monde enlèverait) serait utile aussi. Essayez-vous d'empêcher une personne disposée à courir un outil comme le réflecteur contre votre application, décourager les protections et la reconstruire?


Je suis curieux: si votre contrat le permet, quel type d'application avez-vous ce qui est bon?


Répondre aux commentaires: c'est une application de bureau. Je m'attendrais à ce qu'ils essaient activement de pirater mon système de protection si tout s'est bien passé. Je m'attendrais à ce que mon attaquant soit un "pistolet embauché" techniquement sophistiqué ". L'application englobe les connaissances spécialisées du domaine acquises depuis des décennies.


9 Réponses :


3
votes

La sécurité est un processus.

Je questionne la raison pour laquelle quelqu'un paierait 10k par mois pour une demande. La duplication des fonctionnalités de cette application ne serait probablement pas à ce prix. Donc, si l'entité utilisant elle le décrit à un autre programmeur pourraient-ils le dupliquer? Probablement.

En tout cas, si vous avez accès à leur matériel et vous contrôlez leur nom d'utilisateur / mot de passe du système d'exploitation, faites simplement expirer le mot de passe chaque mois.


2 commentaires

Si l'application fait un travail qui vous coûterait plus de 10 000 par mois de salaire, il s'agit d'une proposition parfaitement raisonnable.


@Mathias - Je suis d'accord, mais cela semble trop beau pour être vrai. Même si cela économise 10k par mois, quel type d'homme d'affaires paierait 10k par mois au lieu d'un paiement unique, en particulier pour les logiciels. Cela nécessite-t-il beaucoup de maintenance? Bon pour le point de négociation de cet accord. Combien de temps ça va durer?



2
votes

Vous pouvez lier votre application à la case. Vous pouvez également limiter l'utilisation à l'utilisateur en lui fournissant une connexion. Je ne vois pas ce que vous pouvez faire à propos de votre utilisateur partageant ses informations d'identification et la boîte avec quelqu'un d'autre.

Si la liaison à une boîte est suffisante, il y a des techniques pour le faire - c'est-à-dire que vous pouvez le lier à l'ID de matériel de carte réseau.


0 commentaires

12
votes

Pour 10k / mois, vous pouvez vous permettre de l'exécuter sur votre matériel, que vous administrez, au lieu de leur quincaillerie. Vous pouvez mettre votre matériel dans un centre de données, auquel ils n'ont pas d'accès physique.


Le matériel doit être exécuté sur le matériel sur le site du client.

Alors, je suppose qu'ils sont sensibles à l'endroit où se trouve leurs données.

Il existe de nombreuses solutions de licence de 3ème partie (par exemple, infralution, réacteur .NET, ORANS Winlicense, Armadillo, Xheo Deploylx et, probablement beaucoup d'autres). Si vous êtes intéressé par la propre solution de Microsoft, voir Inishtech ici < / a> et ici .


2 commentaires

Le matériel doit être exécuté sur le matériel sur le site du client.


J'ai édité ma réponse pour faire référence à divers logiciels de licence existants.



8
votes

Le seul moyen de protéger vraiment votre code et de vous assurer que vous pouvez charger pour cela, est de créer une application Web basée sur une abonnement. En empêchant que plusieurs options puissent fonctionner:

  1. Exécution de l'application sur un serveur que vous contrôlez, mettez à jour l'application afin qu'il ne fonctionne que sur ce système et qui leur accordent une accès à distance de bureau
  2. Fabrication du programme Contactez un système d'abonnement et d'autorisation à distance que vous contrôlez (bien que cela puisse être contourné en ingénierie inverse, le code)

    Note latérale: Dang, j'ai besoin de trouver un client qui paiera 10 000 $ par mois pour un progiciel! Lol.


1 commentaires

L'application a un composant d'interface graphique haute performance qui nécessite qu'il soit exécuté localement.



3
votes

Je vais assumer une plate-forme Windows (c'est-à-dire pas mono).

Vous pouvez envisager de générer et d'installer un certificat sur la machine que votre logiciel est installé sur. Cela signifie que votre logiciel peut vérifier que la machine est autorisée à exécuter votre logiciel et vous pouvez également utiliser le certificat pour chiffrer et décrypter des trucs. Je pouvais rechercher de chiffrer vos assemblées, puis vous pouvez les déchiffrer avant de les charger de manière dynamique, ou vous pouvez utiliser le cryptage / décryptage sur toutes les données que vous fournissez.

Ce lien peut être un Bon début pour vous de vérifier cela.


0 commentaires

9
votes

La meilleure solution est probablement une combinaison de tactiques populaires utilisées aujourd'hui:

verrouille l'application vers le bas

... à l'adresse MAC, le numéro de série du disque dur et la clé de produit Windows du système d'exploitation hôte (si disponible). Vous pouvez coder cela dans l'application après la collecte sur le site. Si le mauvais matériel est détecté, arrêtez-le. Aussi, recherchez des articles dans le registre que suggèrent la présence de fonctionnalités d'intégration VMware ou Virtual PC et refusent de fonctionner lorsqu'il est trouvé .

Obfuscate

... il sera donc plus difficile d'ingénieur inverseur et de supprimer votre licence. CIL est extrêmement facile à inverser l'ingénieur afin de pouvoir être une mise au point avec votre application (comme décrit) quoi que ce soit d'autre que vous faites. Cela peut prendre beaucoup de temps pour avoir raison, surtout si vous comptez sur la sérialisation. Si possible, enveloppez toutes vos assemblées dans un fichier EXE crypté et dispose d'une bootstrapper non gérée.

Envoyer un battement de coeur

... à un serveur hors site, avec des données spécifiques au matériel ou au site. Si le logiciel est copié et démarré sur un autre ordinateur, vous pouvez obtenir un pourboire. Cela a également le potentiel de vous avertir si l'application est hors ligne. De plus, vous pouvez configurer l'application pour nécessiter une réponse cryptée de base de votre serveur ou de l'arrêt.

Une dernière note: ne pas aller à la mer . Vraisemblablement, vous êtes payé de 10 000 $ en raison de l'expérience de votre application sur des solutions de remplacement éventuelles (quoi que ce soit). Lorsque vous ajoutez des mesures de protection, vous augmentez le nombre de bogues (très gênants), ajoutez des coûts de maintenance et des maux de tête pour votre client. Un schéma de licences fortement perturbatrice pourrait faire penser votre client autrement.


0 commentaires

2
votes

Cela ressemble à une situation où une dongle matérielle pourrait être appropriée. Payez quelqu'un pour créer une dongle matérielle (on dirait que vous pouvez vous le permettre!) Et envoyer un au client. Construisez votre logiciel tel que l'utilisateur doit entrer un mot de passe pour déverrouiller quelque chose crypté sur le dongle que votre logiciel doit fonctionner.

L'authentification est généralement basée sur au moins deux aspects de la situation de l'utilisateur:

  1. quelque chose que vous sont (biométrie)
  2. quelque chose que vous avez (dongle)
  3. quelque chose que vous sais (mot de passe)

    Si vous voulez aller pour les trois, combinez votre dongle matériel avec un lecteur d'empreintes digitales.


8 commentaires

Cela ne répond pas à l'OP désirant désactiver le logiciel si leur licence expire.


Dans ce cas, incorporer une date d'expiration sur le dongle (peut-être une date "douce" qui met le logiciel en mode agace et une date "dure" qui l'éteint entièrement) et envoyez l'utilisateur une nouvelle dongle une fois par mois ou peu importe. Et si c'est pas assez, combinez tout ce qui précède avec une fonctionnalité "Home de téléphone".


@Chrisw: Cela peut, certains dongs (comme Aladdin HASP KEY) prennent en charge les minuteries d'expiration, qui peuvent être mises à jour à distance par le fournisseur.


Un dongle n'a-t-il pas exactement le même problème que le même problème que la maison de téléphone, c'est-à-dire que le pirate informatique peut supprimer le code qui abaisse l'application s'il y a une vérification de licence infructueuse? Et pour contrer cette menace, lorsque l'O / S est contrôlé par l'utilisateur, la seule solution que je puisse penser est l'obscurciation ... ou peut-être en exécutant une partie cruciale de la demande sur le dongle prétendument-plus-digifère lui-même.


@Chrisw: Exactement, j'ai entendu parler des applications dans lesquelles un calcul critique a été mis en œuvre dans un FPGA à l'intérieur du dongle (qui le rendait vraiment rapide). Les copies "craquées" de l'application n'auraient même pas le code pour effectuer les calculs corrects, de sorte que les auteurs d'origine substituèrent une version inexacte de l'algorithme si le dongle manquait, ce qui semblait avoir fonctionné mais n'a pas vraiment fonctionné.


Même si vous mettez une date d'expiration sur le dongle, comment le dongle sache-t-il quelle est la date de Crrent: le dongle contient-il sa propre horloge?


Avez-vous des recommandations sur la manière dont je pourrais trouver quelqu'un pour "créer une dongle matérielle"? Suggérez-vous une sorte de matériel personnalisé?


Auparavant mentionné dans les commentaires ci-dessus se trouve le HASP de Aladdin: aladdin.com/hap/default.aspx Ils ont été dans les affaires de Dongle depuis longtemps et mériteront de parler.



1
votes

J'ai, dans le passé, j'ai utilisé une authentification "Home de téléphone" sur la mise en route de l'application, qui assure qu'il ne peut exécuter que si vos serveurs lui donnent une authentification.

Cela nécessite, bien sûr, que vous pouvez fournir une disponibilité très élevée sur vos serveurs d'authentification et avoir une base de code bien obscopée, mais cela fonctionne très bien.


0 commentaires

0
votes

Jetez un coup d'œil à l'article Développement de la protection logicielle et de la licence ; Il explique comment choisir une solution, pourquoi vous devriez obscorer votre application et donner un certain nombre de conseils pour la structuration de votre code pour être plus difficile à craquer.

Le gist de l'article est que vous devriez penser à ces choses dès le début du développement, mais il n'est jamais trop tard pour les aborder.

La chose à retenir est qu'une fois votre application exécutée sur une autre machine, il n'y a pas de moyen garanti de 100% de prévenir l'exécution. Ce que vous pouvez faire, si vous faites attention, augmentez la barre suffisamment élevée qu'il est plus facile d'acheter votre logiciel que de le casser.

Clause de non-responsabilité obligatoire: La société I co-fondée produit le .


0 commentaires