Je sais que cela semble étrange, mais un collègue programmeur au travail a délibérément utilisé deux mauvaises pratiques de programmation! Je vais t'expliquer. Permettez-moi d'abord de dire qu'il est un gars intelligent et que, pour la plupart, il écrit du code intelligible.
Il a été invité à mettre en place une licence pour un projet d’application Web écrit en Java. Comme il s’agit de Java, si on le voulait vraiment, on pourrait probablement pirater les fichiers jar et lire les noms des classes et des méthodes écrites à l’intérieur. Sa solution à ce problème consistait à appeler littéralement et maladroitement des variables et des méthodes moins évidentes que des noms évidents et à les planter dans des classes déjà encombrées plutôt que de générer de nouvelles classes.
Sa justification était que si un pirate informatique voulait changer certaines classes afin de contourner les vérifications de licence (et donc obtenir une copie gratuite du produit), il aurait beaucoup plus de mal à le faire s'il ne savait pas exactement quelles méthodes effectuer ces tâches particulières. Après l'avoir fait, je l'ai confronté à ce sujet, suggérant que nous pourrions peut-être acheter une sorte de bibliothèque d'obscurcissement pour le faire pour nous, tout en maintenant de bonnes pratiques de programmation. Il affirme ne pas avoir eu le temps ni les ressources nécessaires pour rechercher ce type de solution.
..Qui me laisse à un dilemme. Est-ce que je cherche une bibliothèque d'obscurcisseur en Java et répare son ancien code (ce qui peut être un peu délicat pour le remodeler), ou est-ce que je le laisse comme ça, autant que cela me contrarie sans fin?
Réponses:
La sécurité par obfuscation n'est jamais une bonne sécurité. Il doit y avoir de meilleurs moyens de protéger votre propriété intellectuelle. Et c’est ce que vous et votre collègue devriez évoquer comme une préoccupation commune avec votre responsable. Si ensuite la direction décide qu'elle ne veut pas dépenser son temps ni son argent pour améliorer la sécurité, vous devrez alors tous les deux vivre avec cette décision (ce n'est pas votre produit, c'est le produit de l'entreprise) et mieux ne pas dépenser (gaspillage?) plus de temps sur le sujet.
la source
Original: Que dit votre patron? Découvrez - faites cela.
On m'a demandé d'élaborer ce qui précède:
Tout d'abord, je pense que vous avez plus d'un dilemme:
Tout d’abord, vu d’une analyse de rentabilisation, le problème est résolu. A est en place et constitue - très probablement - une solution "suffisante" au problème. Votre entreprise peut en être satisfaite en principe juste assez protégée pour qu’un effort délibéré soit nécessaire pour la résoudre.
Cela signifie que même si vous n'aimez pas cela (et croyez-moi, votre carrière sera bien pire ), il fait ce qu'il faut. Par conséquent, dès lors que le problème est résolu, vous ne devez pas simplement "le faire", mais plutôt convaincre la personne en charge de l'attribution de votre travail que le long termeLe prix de cette implémentation sera suffisamment élevé pour justifier un retour en arrière et le choix d’un obfuscateur d’actions. Cela nécessitera un peu de préparation de votre part et notez également que les obfuscateurs ont aussi des inconvénients que vous devez savoir (d'autres réponses couvrent bien ce problème). Par exemple, les traces de pile ne sont pas immédiatement utilisables, etc. Tout dépend de l'importance d'éviter le piratage. Notez que le plus difficile à résoudre est celui qui nécessite le fonctionnement de dongles matériels et est probablement plus coûteux que vos clients l’aimeront.
Par conséquent, cette décision n’appartient pas à vous, car votre entreprise doit utiliser des ressources supplémentaires pour accéder au point B. Par conséquent, vous devez faire part de vos préoccupations à la personne responsable, expliquez-la ainsi que toute autre préoccupation à long terme suffisamment pour lui permettre de comprendre pourquoi. vous le considérez inférieur à votre suggestion. Laissez-le ensuite prendre la décision et, quoi qu’il en soit, respectez -la et agissez en conséquence de manière professionnelle. Notez que l'auteur original devra très probablement le conserver comme il l'a écrit. S'il quitte ou ne veut plus le faire, vous pourrez à nouveau en parler.
En d'autres termes: que dit votre patron? Découvrez - faites cela.
Notez également que cela aurait été différent si vous aviez soulevé la question plus tôt, de sorte que le gaspillage d’argent pour le temps consacré à la mise en œuvre de A était réduit. En d'autres termes, lorsque le choix entre A et B devait être fait.
Enfin, je voudrais commenter votre question sur "corriger simplement le code des autres peuples". Ce n'est pas une petite solution au code existant (ce que je trouve très bien et qui est encouragé, en particulier avec les tests en place). Il s'agit d'un retour en arrière et d'une réimplémentation perturbants, et même dans les équipes avec la même propriété de code, cela ne serait pas une chose acceptable à faire - du moins pour moi - sans approbation préalable.
J'espère que cela clarifie mon point de vue.
la source
Non , revenir en arrière et modifier le code dont ils sont responsables serait une infraction pire que de rédiger un code douteux.
Vous en avez parlé au programmeur, votre prochaine étape consiste à ne pas vous mêler de rien ou à en discuter avec la direction, puis à ne pas vous mêler de rien.
la source
Y a-t-il eu une révision de code officielle de quelque nature que ce soit - ou la confrontation a-t-elle eu pour résultat une "révision de code" non officielle? Je dirais que puisqu'il s'agit d'un sujet délicat et important tel que la sécurité et les licences, vous devez en parler plus haut dans la chaîne. Vous avez terminé la première partie - confronter le programmeur. Cependant, maintenant qu'il n'écoute pas, vous pouvez / devriez le reprendre. Si vous ne le faites pas, vous pouvez faire partie du problème.
Je lui dirais que vous allez le faire - cela PEUT changer d’avis. Si ce n'est pas le cas, écrivez à votre patron, et au programmeur CC, un courrier électronique très correct, à la fois précis et concis, sur la situation. Dans le courrier électronique, demandez une réunion entre vous trois et / ou toute autre partie participante.
Rencontrez toujours ces choses de front - mais d’une manière politique et amicale.
la source
Si vous pouvez trouver un obscurcisseur capable d’obscurcir la signature de classes (noms de méthodes, etc.), alors proposez-vous de l’acheter et de l’utiliser.
Jusque-là, vous devrez peut-être vivre avec. J'avoue avoir fait quelque chose de similaire dans un projet Grails récent: les contrôles de licence sont délibérément intégrés à la méthode de connexion déjà très volumineuse. Il serait donc assez difficile de remplacer la méthode pour contourner le contrôle.
la source
Peut-il démontrer qu'un tel piratage est réalisable, ou s'agit-il simplement d'un scénario hypothétique qui le préoccupe un peu? Peut-il donner une démonstration en direct de ce travail? Il devrait essayer. Sérieusement. Si cela fonctionne, il devrait être présenté à la direction, puis suggérer de se faire assombrir.
Si un obfuscateur n'est pas assez sécurisé, avez-vous envisagé d'autres moyens de sécuriser le fichier JAR, par exemple en le cryptant ou en le compilant en code natif?
RE: retravailler son code: Est-ce juste une question de renommer? De nombreux IDE ont des outils de refactoring qui peuvent le faire assez facilement.
la source
Indépendamment de la valeur de votre adresse IP, l’intelligence n’est pas de modifier votre code dans l’espoir de semer la confusion parmi les pirates. Mis à part le fait que le maintien d'un futur cauchemar sera un cauchemar, cela ne résoudra pas vraiment le problème. Cela rend la tâche plus difficile mais pas impossible. Donc, ce n'est pas vraiment une solution et les effets secondaires sont mauvais. C'est comme si vous preniez des médicaments qui ne fonctionnent pas et ont des effets secondaires néfastes.
Votre problème est de savoir comment sécuriser votre adresse IP. Trouvez une solution pour cela: obfuscateurs, serveur de licences, etc.
la source
J'ai rencontré un problème similaire lorsqu'un autre développeur a nommé nos routines de cryptage / décryptage
str__copy
etstr__delete
(remarquez le deuxième tiret de soulignement). C'était boiteux et aurait pu être mieux fait, alors nous avons attendu qu'il y ait une histoire où la mise à jour de la licence était nécessaire. La direction n’a pas eu de problème avec les quelques heures supplémentaires qui lui ont été allouées, car nous l’avons décrite comme "un nettoyage, si bien que la prochaine fois que nous passerons aux licences, cela prendra moins de temps et sera plus sûr". Problème résolu, pas de sentiments blessés.la source
Ma première pensée a été la maintenance de ce code. Si le code est déjà obscurci et qu'il passe à autre chose, bonne chance pour essayer de le maîtriser. Vous serez alors le pirate essayant de déchiffrer le code.
Au lieu de cela, je recommanderais de nettoyer le code et d'utiliser un obfuscateur pour faire tout le travail difficile. À long terme, vous aurez un code bien gérable et vous laisserez toute la complexité insensée à quiconque voudra pirater votre licence.
Rappelez-vous qu’aucun obscurcisseur n’est parfait, et qu’un pirate informatique très déterminé peut faire de l’ingénierie inverse, mais au moins ce ne sera que lui. De plus, les observateurs ajoutent beaucoup plus de complexité qu’un gars ne le peut probablement.
la source
Je suis tout à fait d’accord avec les réponses que vous devriez demander à votre patron à ce sujet et faire ce qu’il dit.
Cependant, un additif très important à ces réponses est que vous devez documenter vos préoccupations à la fois sur la sécurité et la maintenabilité. Que vous changiez ou non le code, il est important que les gens sachent ce qui vous préoccupe et pourquoi. C’est important à la fois de manière proactive (votre patron ne peut pas prendre une décision qu’il ne sait même pas s’il faut le prendre) et de manière défensive (si / quand un pirate informatique dénonce le système de licences mal sécurisé, il ne peut pas vous en vouloir. erreur.)
la source
"Ne soyez pas le professionnel le plus qualifié pour connaître un problème".
En d'autres termes, informez votre patron et partez de là. Si vous restez silencieux et que vous êtes au sommet de la hiérarchie de ce secret, vous serez responsable lorsque vous le voudrez. Dites en passant à votre chef et laissez-le décider d'une façon de l'aborder. De cette façon, vous êtes soulagé du fardeau du choix.
Ne vous contentez pas de le dire à votre chef, car de nombreux gestionnaires ne sont peut-être pas aussi techniques, mais agissons comme nous le faisons toujours: donner le problème et les solutions possibles avec les avantages / inconvénients de chacune de ces solutions. Puis laissez-les décider et faites-les passer. C'est pourquoi les gestionnaires / dirigeants sont payés beaucoup d'argent!
la source
La vérité est que si on dispose de suffisamment de temps et de ressources, tout peut être craqué. C’est une fonction simple de la popularité de votre application. Plus il est populaire, plus il attire les pirates informatiques qualifiés et plus de temps est consacré à sa résolution. L'obfuscation de code fournit justement cela - un moyen d'augmenter le temps requis pour le casser, similaire à la cryptographie. Donc, si votre code est obscurci, l'attaquant doit être qualifié et y consacrer du temps, sinon il désespérera et abandonnera. Vous devez vous demander si votre application en vaut la peine des deux côtés.
En fait, il est étonnant de constater à quel point il peut être difficile de déchiffrer du code obfusqué. Vous pouvez facilement transformer un programme C simple en 10 lignes en un assemblage de 100 lignes par obfuscation. Si vous essayez de le déboguer, vous ferez un saut dans le code sans signification, ce qui peut être très frustrant. Cela finira par casser mais cela devient vraiment difficile et puisque rien n’est vraiment impossible, c’est le but. L'obscurcissement du code réduit le nombre de personnes capables de le casser.
Bien sûr, il existe de meilleurs moyens, comme d'essayer de confondre le débogueur, pas le pirate, mais un moyen économique et efficace. Cependant, nommer des choses maladroites ne suffit pas. Vous devez modifier les fonctions d'appel de flux de contrôle qui ne font pas vraiment quelque chose pour votre code global mais en augmentent la taille et la complexité: appelez des fonctions factices dont la valeur de retour n'est utilisée nulle part, à partir de fonctions internes qui font vraiment quelque chose. Vous pouvez déjà voir comment cela peut devenir vraiment déroutant.
Vous avez quelque chose que l'attaquant n'a pas. Le code source d'origine. Trouvez un moyen de mieux l’organiser pour vous-même.
la source