J'ai toujours fermement cru que l'obscurcissement est essentiellement inutile. Le code obscurci n'est pas impossible à lire, mais plus difficile à lire. J'avais la conviction qu'un attaquant suffisamment qualifié serait en mesure de ramener le code obscurci dans un état plus lisible.
Cependant, OWASP recommande l'utilisation de l'obfuscation pour les clients mobiles, ce qui me fait me demander s'il y a plus de crédibilité à l'obfuscation que je ne lui en avais donné.
D'où ma question: l'obscurcissement apporte-t-il un avantage de sécurité mesurable? 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 "obfuscation", 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 pour empêcher l'ingénierie inverse.
Il y a deux avantages à coder l'obfuscation:
@SteveSether a doublement raison dans son commentaire - réel mesures sera presque impossible à trouver, et de nombreuses bases de code sont obscurcies pour des raisons de propriété * 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 de code est liée à sa qualité asymétrique - il est moins cher d'obscurcir que de désobscurcir.
* Par "raisons exclusives", j'entends "le désir de garder son code et ses algorithmes plus confidentiels, ou plus difficiles à reproduire, dans le but de conserver un avantage concurrentiel sur le marché". Les entreprises et les particuliers sont tous deux enclins à cette tendance.
Aussi longtemps que j'ai vu du code obscurci (principalement dans virus et rootkits ) sur potentiellement tout ce qui peut recevoir d'Internet (courrier, ftp, web, DNS, etc., dans les requêtes, les journaux, les transferts de fichiers), le temps humain impliqué dans la désobfuscation le code suffisamment bien pour trouver des informations essentielles telles que l'adresse du serveur , id administrateur et le mot de passe haché pour un botnet, ou les chaînes sensibles ou les appels de bibliothèque pour les virus sont généralement comptés en minutes.
Donc, en termes de protection contre le code étrange, ce n'est pas un gros travail (sinon trivial).
En revanche, la construction de sources modifiables à partir de ce type de code peut prendre beaucoup de temps (à compter en jours, semaines ou même plus si le de toute façon, plus les processus de désobfuscation progressent, plus ils sont efficaces et rapides, comme quand la lumière arrive).
Concernant la recommandation de l'OWASP, je suis d'accord: l'obscurcissement implique des ressources humaines, donc elles représentent un certain coût , ce qui rend le piratage moins attrayant .
À propos de measurablility
de security benefit
... désolé, mais je ne peux pas! En fonction de qui pourrait être intéressé par le piratage de votre code, qui partie de votre code et pourquoi .
Dans l'ensemble, ma propre recommandation est la suivante: utiliser l'obscurcissement n'est pas essentiellement une mauvaise idée, mais ce n'est pas à considérer comme une grande amélioration de la sécurité!
Pour être plus clair: ne pensez jamais à brouiller du code pour cacher des clés/fonctions secrètes afin qu'elles soient plus sécurisées que si elles n'étaient pas brouillées!
Un autre point dans l'obscurcissement est qu'il est plus difficile pour les attaquants de nier 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 que quelqu'un l'exploite, il peut être difficile de prouver au tribunal que le contrevenant avait vraiment l'intention d'attaquer, et pas seulement de mal comprendre votre accord de licence et a supposé que cela était autorisé. Si votre client s'authentifie auprès du serveur à l'aide d'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 d'ingénierie inverse intentionnel.
L'obfuscation 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 faire 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'obfuscation de code est le sujet de recherches CS considérables ... votre axiome que l'obfuscation est essentiellement sans valeur serait controversé.
Je suggère le livre Logiciels clandestins: obscurcissement, filigranage et inviolabilité pour la protection des logiciels. par Christian Collberg et Nagra Jasvir.
Cela augmente la probabilité que, lorsque les bogues exploitables de votre logiciel soient trouvés et exploités, ce sera par des attaquants très motivés et probablement bien financés qui souhaitent spécifiquement vous cibler (ou quiconque utilise votre logiciel) plutôt que de skript kiddies, ransomware , etc.
Pour la plupart, je pense que vous préféreriez que les bogues de votre logiciel soient détectés par des chercheurs de whitehat ou de grayhat, avec des kiddies et des ransomwares comme deuxième choix, et des attaquants au niveau de l'État et tels que le pire des cas. Mais vous devez faire cet appel.