Question:
L'obscurcissement du code offre-t-il un avantage mesurable en matière de sécurité?
MechMK1
2019-10-09 19:44:37 UTC
view on stackexchange narkive permalink

J'ai toujours fermement cru que l'obfuscation est essentiellement inutile. Le code obscurci n'est pas impossible à lire, mais plus difficile à lire. J'avais la conviction qu'un attaquant suffisamment expérimenté serait en mesure de ramener le code obscurci dans un état plus lisible.

Cependant, OWASP recommande l'utilisation de l'obscurcissement pour les clients mobiles, ce qui me fait me demander s'il y a plus de crédibilité à l'obscurcissement que ce que je lui avais donné.

D'où ma question: l'obfuscation apporte-t-elle un avantage mesurable en matière de sécurité? Plus précisément, un avantage qui l'emporte sur le coût supplémentaire, la complexité et les performances réduites.


Remarque: Quand je dis "obscurcissement", je parle de mesures délibérées prises pour empêcher l'ingénierie inverse. Les optimisations du compilateur, même si elles rendent l'assemblage moins facile à lire, sont effectuées dans le but d'améliorer les performances et non d'empêcher la rétro-ingénierie.

D'après mon expérience, il n'y a pas beaucoup de mesures et de collecte de preuves empiriques dans le monde de la sécurité.C'est surtout beaucoup de "bien ça DEVRAIT fonctionner comme ça", d'expériences anecdotiques et d'extrapolation.Personnellement, je pense que l'obscurcissement du code est plus une tentative de protéger les intérêts commerciaux et les secrets de code que la sécurité.
@SteveSether J'ai pensé de la même manière, mais étant donné que je considère OWASP comme une source crédible, je voulais voir si mon affirmation était peut-être fausse.
Un petit avantage de l'obfuscation est la destruction des informations.Des choses comme la langue parlée, les habitudes de codage, etc. Le processus (finalement le code) peut être re-compris, mais les identifiants sont perdus.Bien que je ne puisse pas penser à une raison légitime à cela.De plus, certaines obscurcissements (par exemple Java à l'époque) peuvent introduire des fonctionnalités dans la sortie qui ne peuvent pas être facilement reconstruites avec la technologie / décompilateurs actuels.Cela rendait Java extrêmement compliqué à décompiler.Ainsi, dissuadant même les utilisateurs expérimentés de déduire le code.C'est une situation d'obscurcissement-vaut-mieux-que-ses-concurrents.
Je trouve fascinant que la possibilité de désobfusquer dépend fortement du style de code.Comme l'importance des noms de variables.Le code pourrait être écrit dans un langage de niveau relativement bas et utiliser des modèles de très haut niveau.Comme les classes orientées objet à peu près au niveau de java, toutes implémentées partiellement autant que nécessaire.En outre, l'utilisation de modèles de conception, couvrant des régions de code encore plus longues.Toute cette structure est principalement exprimée en termes de noms de variables.Deux valeurs du même type peuvent être de classes différentes, exprimées dans le nom.Différentes classes peuvent même être identiques.
"OWASP recommande l'utilisation de l'obscurcissement pour les clients mobiles" - peut-être simplement parce que, par exemple, la minimisation de JavaScript l'obscurcit, mais le véritable objet est simplement de le rendre plus petit, de transférer moins d'informations et d'accélérer le trafic Internet et les temps de chargement des pages Web
@Mawg Pourtant, OWASP ne recommande pas spécifiquement de masquer JavaScript
À quoi sert cette question?La page OWASP liée donne littéralement la menace que l'obfuscation est censée aider à se protéger et de longues descriptions de la menace et des solutions.
Considérez-le comme une serrure sur votre porte d'entrée.Cela n'empêche en aucun cas quelqu'un de s'introduire, mais si la maison voisine n'a pas de serrure ou n'est pas engagée, pourquoi la personne voudrait-elle jouer avec votre porte?S'ils sont suffisamment motivés pour vous cibler, même une clôture électrique ne les arrêtera pas.Une serrure cassée est également défendable devant le tribunal car elle prouve que la personne avait un motif pour l'obtenir plutôt que de pouvoir prétendre qu'elle a été invitée à l'intérieur.
@Mawg La recommandation se trouve dans un encadré intitulé «Comment éviter la« rétro-ingénierie »?».Cette page concerne la rétro-ingénierie, pas les performances.
Je pense que la question de savoir si cela donne un avantage en matière de sécurité est distincte de savoir si elle donne un avantage de sécurité mesurable.Je pense que cela donne un avantage de sécurité, mais je ne sais pas comment mesurer l'avantage.
Véritable obfuscation Javascript: traduisez tout en [JSFuck] (http://www.jsfuck.com/).
@Gloweye Sauf qu'il existe des outils automatisés comme [JSUnFuck] (http://codertab.com/jsunfuck) qui l'inversent complètement
C'est la même chose que si vous aviez deux mêmes voitures garées près l'une de l'autre, mais l'une aura (visiblement) une alarme installée et l'autre non.Si un méchant vient et veut en voler un, lequel pensez-vous qu'il choisira?Bien sûr, s'il veut le concret, il le prendra quand même.C'est juste une bonne pratique qui ne vous coûte généralement rien, alors faites-le;) Lié à JS, je le considère généralement comme une minification plutôt que comme une éducation.Et si la source peut être réduite à la moitié de l'original, c'est vraiment une bonne idée de le faire.
_ "... un avantage qui l'emporte sur le coût supplémentaire, la complexité et les performances réduites." _ - il répond au mauvais côté de votre question, mais j'ajouterai à cela (ou je rappellerai qu'il est inclus dans le "coût", dansoutre l'aspect «performances réduites») les difficultés rencontrées par les utilisateurs lorsque l'obscurcissement lui-même introduit des bogues dans le code.C'est l'un des plus gros problèmes des mesures techniques destinées à faire respecter le droit d'auteur: elles rendent invariablement l'expérience utilisateur plus pauvre.Utilisateurs légitimes, c'est-à-dire.Les personnes qui piratent et contournent la protection contre la copie ne souffrent pas de ces effets néfastes.
Je suis choqué que quiconque considère qu'il est nécessaire de masquer * intentionnellement * le code!
Cinq réponses:
gowenfawr
2019-10-09 20:18:18 UTC
view on stackexchange narkive permalink

L'obscurcissement du code présente deux avantages:

  1. Il élimine l'extrémité peu profonde du pool d'attaquants. Les enfants de script qui ont du mal à comprendre votre code iront ailleurs.
  2. Cela augmente l'effort requis des attaquants expérimentés. Peu importe leur habileté, l'obscurcissement est moins cher que la désobscurcissement, et le résultat est généralement moins compréhensible que l'original (les noms de variables resteront génériques, par exemple, là où les originaux étaient descriptifs).

@SteveSether a doublement raison dans son commentaire - les mesures réelles seront presque impossibles à trouver, et de nombreuses bases de code sont obscurcies pour des raisons propriétaires * plutôt que pour des raisons de sécurité.

Mais pour des raisons de sécurité et de propriété, la valeur de l'obscurcissement du code est liée à sa qualité asymétrique - il est moins cher de masquer que de désobscurcir.


* Par " raisons exclusives «Je veux dire« le désir de garder son code et ses algorithmes plus privés, ou plus difficiles à reproduire, dans l'intérêt de maintenir un avantage concurrentiel sur le marché ». Les entreprises et les particuliers sont tous deux sujets à cette tendance.

Les commentaires ne sont pas destinés à une discussion approfondie;cette conversation a été [déplacée vers le chat] (https://chat.stackexchange.com/rooms/99892/discussion-on-answer-by-gowenfawr-does-code-obfuscation-give-any-measurable-secu).
F. Hauri
2019-10-09 20:15:16 UTC
view on stackexchange narkive permalink
  • Depuis que j'ai vu du code obscurci (principalement dans des virus et rootkits ) sur potentiellement tout ce qui peut recevoir d'Internet (courrier, ftp, web, dns etc., dans les requêtes, les logs, les transferts de fichiers), le temps humain impliqué dans la désobfuscation du code assez bien pour trouver des informations essentielles telles que l'adresse du serveur , L ' admin id et le mot de passe haché pour un botnet, ou les chaînes sensibles ou les appels de bibliothèque pour les virus sont principalement comptabilisés dans minutes.

    Donc en termes de protection contre un code étrange, ce n'est pas un gros travail (si ce n'est trivial).

  • D'un autre côté, construire Les sources modifiables de ce type de code peuvent prendre beaucoup de temps (à compter en jours, semaines ou même plus si le code est volumineux. De toute façon, plus les processus de désobfuscation progressent, plus ils sont efficaces et rapide, comme quand la lumière arrive).

  • À propos de la recommandation de l'OWASP, je suis d'accord: l'obscurcissement implique des ressources humaines , donc ils représentent un certain coût , rendant le piratage moins attrayant.

  • À propos de mesurabilité de avantage de sécurité ... désolé, mais je ne peux pas! En fonction de pourrait être intéressé par le piratage de votre code, quelle partie de votre code et pourquoi .

Dans l'ensemble, ma propre recommandation est la suivante: utiliser obfuscation n'est pas essentiellement une mauvaise idée, mais cela ne doit pas être considéré comme une grande amélioration de la sécurité!

Pour être plus clair: ne pensez jamais à obscurcir le code pour cacher les clés / fonctions secrètes afin qu'il soit plus sûr que si elles n'étaient pas obscurcies!

Cela peut être vrai pour les logiciels malveillants, mais pour des applications ou des jeux entiers, le code devient plus difficile à rétroconcevoir.Certainement pas une question de minutes.
@HugoZink Je pense qu'il veut dire le cas où les valeurs d'intérêt peuvent être trouvées non dissimulées.Une adresse IP doit être stockée comme valeur, par exemple.Fondamentalement, `gzip -d obfuscatedfile |chaînes |moins`
@VolkerSiegel Je ne suis pas d'accord.Il peut être généré de manière algorithmique, ou il peut être décrypté à partir d'une chaîne cryptée, forçant l'attaquant à déterminer les mécanismes de l'algorithme de décryptage et l'emplacement de stockage de la clé, etc.
@HugoZink Je voulais dire le cas "Certainement pas une question de minutes", ce n'était pas clair.Je voulais dire: il existe une méthode qui peut se faire en "minutes" et qui conduit souvent à des résultats.Ne vous objectez pas.
@HugoZink.ci-contre` *) ... Désolé pour mon anglais pas très bien.
@VolkerSiegel J'utilise souvent `smjs <(sed s / exec / print / ...)> deobfuscated.raw` ... Remplacez` print` par `cat` ou` echo` pour shell, php, perl, etc ...(Dans un bac à sable confiné, bien sûr;)
@JonBentley Jouer avec des sandbox (`qemu`,` lxc`) est très efficace.Voir mon commentaire précédent.
@JonBentley Vous pouvez avoir l'adresse IP la plus merveilleusement obscurcie / cryptée / générée au monde, et cela peut prendre une équipe de 100 ingénieurs 30 ans pour la déchiffrer, mais finalement le logiciel doit la fournir non cryptée à un appel système comme `connect ()».Et ces appels système sont faciles à enregistrer avec `strace` et à attraper avec` gdb`, du moins sous Linux.
@IwillnotexistIdonotexist Au moins dans le cas des logiciels malveillants, l'objectif est en grande partie de masquer l'adresse IP de l'analyse statique du programme comme le ferait un logiciel antivirus.Au moment où ils appellent `connect ()` cela fournit une valeur supplémentaire minimale pour savoir où ils se sont connectés.En fait, cela pourrait facilement être observé en dehors de la machine affectée en surveillant les paquets réseau.
@trognanders Un moyen simple d'exécuter du code obscurci tout en traçant l'opération avec strace, gdb, tcpdump, procurera beaucoup de * lumière *.Comme presque toutes les chaînes, les adresses, les ports, etc. deviendront lisibles.
@VolkerSiegel La plupart des gens penseraient-ils à rechercher la valeur «2144929806» comme adresse IP?Vous pouvez envoyer un ping à cette adresse et récupérer des paquets sur google.com.
@doneal24 Non. Sauf quand le contexte le suggère.Mais je parlais d'un hack rapide qui a une chance de donner des résultats utiles en peu de temps.Et peut-être que je suis un peu traditionnel, mais dans mon monde, les adresses IP sont écrites en notation décimale à points si c'est IPv4.C'est une constante de chaîne au niveau du code, quelque chose qui est souvent exclu de l'obscurcissement.Vous pouvez certainement dire à l'obfuscateur d'exclure une valeur int longue spécifique.Ou pensez-vous à des constantes de chaîne représentant l'adresse décimale?(Encore une fois, tout cela n'est pas vraiment pertinent)
"Quelques minutes" peut être vrai si vous recherchez simplement une chaîne cachée, mais certainement pas pour des algorithmes ou logiciels complexes de rétro-ingénierie.À titre d'exemple célèbre, Minecraft est obscurci.Il a fallu des mois à une grande équipe d'ingénieurs inverseurs talentueux pour désobfusquer complètement le code;et [jusqu'à il y a à peine un mois] (https://www.reddit.com/r/programming/comments/cznq2s/minecraft_now_releases_obfuscation_maps_for/) il a fallu plusieurs heures d'efforts pour [recréer les cartes d'obscurcissement après chaque version] (https: //minecraft.gamepedia.com/Programs_and_editors/Mod_Coder_Pack)
@BlueRaja-DannyPflughoeft J'ai écrit: * `La création de sources modifiables à partir de ce type de code pourrait prendre beaucoup de temps` *!
@Aaron J'ai écrit: * `... la création de sources modifiables à partir de ce type de code pourrait prendre beaucoup de temps ...` *
Mon commentaire précédent semble avoir été supprimé.Je ne sais pas pourquoi, car il n'y avait rien de mal à ce sujet.Je vais juste ajouter que cette réponse est très trompeuse et sous-estime considérablement l'effort nécessaire pour effectuer ces activités.
@Aaron Assez juste, le commentaire supprimé était agressif et faux!Ma réponse est correcte.J'ai déjà beaucoup joué avec de nombreux environnements de piratage.Comprendre l'objectif du code obscurci en quelques minutes et rendre le code source modifiable en quelques semaines ou plus.C'est vrai et expérimenté!
@F.Hauri Je ne discuterai pas de ce point, mais je vais simplement souligner à nouveau que vous prétendez faire en quelques minutes ce que la plupart des gens ne peuvent pas faire à cette époque, même avec le code source original à regarder, et encore moins un assemblage obscurci.Cela suppose bien sûr un logiciel non trivial: Office Word, pas Calculator.Je resterai très, très sceptique, mais si vous n'exagérez pas, bonne chance à vous.
@Aaron Encore une fois, je ne parle pas de créer un code source modifiable.Mais révélant l'adresse IP de destination, les chaînes secrètes, etc., oui, le temps doit être compté en minutes.Mais si je sais comment faire ça, je ne suis pas seul!Je connais de nombreuses personnes capables de faire de même.
Dmitry Grigoryev
2019-10-11 13:57:22 UTC
view on stackexchange narkive permalink

Un autre point d'obscurcissement est qu'il est plus difficile pour les attaquants de refuser leur activité de rétro-ingénierie.

Si vous avez un serveur qui laisse entrer n'importe quel client qui leur envoie une chaîne "Hello foobar", et quelqu'un l'exploite, il peut être difficile de prouver au tribunal que le contrevenant avait vraiment l'intention d'attaquer, et pas seulement mal compris votre contrat de licence et supposé que cela était autorisé. Si votre client s'authentifie auprès du serveur en utilisant une clé secrète obscurcie (contenue dans le client lui-même), vous gagnez peu en termes de sécurité, mais quelqu'un qui exploite votre serveur aura du mal à prouver qu'il a obtenu cette clé par hasard, et non via un effort intentionnel de rétro-ingénierie.

trognanders
2019-10-11 13:04:11 UTC
view on stackexchange narkive permalink

L'obscurcissement augmente considérablement le coût en temps de la rétro-ingénierie d'un programme. Bien qu'il soit peut-être rapide d'extraire quelques petits secrets d'un programme obscurci, le travail pour créer une version non obscurcie de ce programme rivalise simplement avec sa réécriture. Extraire un nouvel algorithme est possible mais non trivial.

Le code essentiellement obscurci peut être raisonné, mais pas réutilisé.

L'obscurcissement du code est le sujet de recherches considérables en CS ... votre axiome selon lequel l'obfuscation est essentiellement sans valeur serait litigieux.

Je suggérerais le livre Logiciel clandestin: obscurcissement, filigrane et inviolabilité pour la protection des logiciels. de Christian Collberg et Nagra Jasvir.

Parfois, même travailler avec du ** code source ** mal écrit est déjà assez mauvais pour que vous fassiez mieux de le réécrire.Et parfois, comprendre l'algorithme de quelqu'un dans le code source original peut être non trivial.Ce qui rend les choses 10 ou 100 fois pires (ou plus) ... OP pourrait aussi bien laisser les portes de leur maison et de leur véhicule déverrouillées et suspendues en grand ouvert et leurs objets de valeur à la vue, car les serrures ne ralentissent pas les gens autant que l'obscurcissement du code.
R.. GitHub STOP HELPING ICE
2019-10-12 19:00:02 UTC
view on stackexchange narkive permalink

Cela augmente la probabilité que, lorsque les bogues exploitables dans votre logiciel sont trouvés et exploités, ce soit par des attaquants très motivés et probablement bien financés qui veulent spécifiquement vous cibler (ou quiconque utilise votre logiciel) plutôt que skript kiddies, ransomware, etc.

Pour la plupart, je pense que vous préférez que les bogues de votre logiciel soient trouvés par des chercheurs whitehat ou grayhat, avec skript kiddies et ransomware comme deuxième choix, les attaquants de niveau et comme le pire des cas. Mais vous devez passer cet appel.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 4.0 sous laquelle il est distribué.
Loading...