Qu'est-ce que l'obfuscation JavaScript et pourquoi est-ce une menace?

Réponses:

38

L'obfuscation est un moyen «d'obscurcir» la véritable signification et l'intention de votre code javascript. Certains sites l'utilisent comme un obstacle pour les personnes qui souhaitent copier / emprunter leur code. D'autres sites l'utilisent pour masquer l'intention réelle du code.

Quelques formes d'obscurcissement:

  1. Renommer automatiquement les variables en noms courts sans signification pour rendre le code moins lisible et plus difficile à comprendre.
  2. Suppression de tous les espaces et sauts de ligne supplémentaires afin que le code soit une longue ligne géante.
  3. Création de parties du code auto-générées de sorte qu'une première passe du code s'exécute pour créer le code réel qui s'exécute ensuite pour effectuer l'opération prévue.
  4. Utilise des codes de caractères et une manipulation de chaînes combinés avec eval plutôt que du code javascript normal pour construire le code réel qui s'exécuterait.

L'obscurcissement n'est pas en soi un mal, mais il peut être utilisé pour essayer de cacher une mauvaise intention et c'est probablement à cela qu'AVG s'opposait. Il a détecté tellement d'obscurcissement qu'il ne pouvait pas dire si le javascript tentait de faire quelque chose qu'il essayait d'empêcher. En tant que tel, il a déclaré le code comme non sûr par défaut car il ne peut pas vérifier que le code semble correct.

jfriend00
la source
C'est ce que je pensais mais je voulais vérifier. Merci pour la clarification.
L84
SI AVG bloque l'accès à un site Web réputé et réputé, vous pouvez probablement le remplacer. Je ne dirais pas que si vous ne connaissez pas le représentant du site.
uSlackr
4
Certains sites utilisent la compression js pour qu'elle se charge plus rapidement (enfin presque tout le monde), le code semblera obscurci.
jcubic
9
1et 2sont également effectués par des compresseurs javascript. Les compresseurs masquent le code comme un effet secondaire, mais ce n'est pas leur objectif principal; leur objectif principal est de rendre le javascript plus petit, de réduire la bande passante.
BlueRaja - Danny Pflughoeft
5. Il est également utilisé pour compresser les fichiers JS pour des téléchargements plus rapides. Yahoo l'a fait depuis qu'ils sont sur le Web, et les outils de Google pour créer des applications Web le font également (comme GMail et Calendar).
Chloé
13

L'obfuscation fait référence à la dissimulation du sens voulu de quelque chose.

Dans ce cas, un extrait de code JavaScript clairement lisible, tel que

window.onload = function() { alert("Hello " + username) };

peut être remplacé par

var _0xc5b2=["\x6F\x6E\x6C\x6F\x61\x64",
        "\x48\x65\x6C\x6C\x6F\x20"];window[_0xc5b2[0]]=
    function (){alert(_0xc5b2[1]+username);} ;

ou même

eval(unescape("var%20_0xc5b2%3D%5B%22onload%22%2C%22Hello%20%22%5D%3Bwindow"+
  "%5B_0xc5b2%5B0%5D%5D%3Dfunction%20%28%29%7Balert%28_0xc5b2%5B1%5D+username"+
  "%29%3B%7D%20%3B"));

Les trois extraits de code font exactement la même chose, mais seule la lecture du premier vous permettra de comprendre facilement ses intentions.

Apparemment, AVG tente de comprendre l'objectif du code JavaScript avant d'autoriser son exécution. Lorsque le code est obscurci, AVG échouera probablement. D'où l'avertissement.

Cela étant dit, certains sites Web masquent leur JavaScript non pas à cause de mauvaises intentions, mais pour rendre difficile le vol de leur travail. L'obfuscation est généralement inutile si elle est utilisée à cette fin, mais le fait est que l'obfuscation ne signifie pas nécessairement de mauvaises intentions.

Dennis
la source
3
Bien que comme je l'ai souvent trouvé, le code désobfustiquant m'a souvent montré qu'il cache un javascript mal codé qui ne vaut pas la peine d'être volé. C'est un signe que le programmeur passe plus de temps à s'inquiéter du vol que d'une technique de programmation appropriée et ne peut même pas obtenir correctement l'obfustication, il est donc facilement craqué. Les seules personnes qui mettent du temps à rendre le code très difficile à désobfustiquer sont les programmeurs de logiciels malveillants, c'est pourquoi AVG le considère comme une très bonne raison d'éviter le site.
Fiasco Labs
2
AVG est une machine, pas un être humain. De toute évidence, une machine peut comprendre le code, c'est ainsi que ce code fait la même chose. De plus, les gens ne regardent généralement pas Javascript lorsqu'ils surfent. Il s'agit simplement d'un cas de "culpabilité par association". Certains Javascript qui sont dangereux utilisent certains modèles d'obscurcissement. Par conséquent, d'autres Javascript avec des modèles similaires sont suspects.
Kaz
@Kaz: Ce n'était qu'un exemple, mais il existe des méthodes d'obscurcissement plus sophistiquées qui nécessitent la compréhension d'un moteur JavaScript. Les analyseurs de logiciels malveillants recherchent généralement certains modèles au lieu d'exécuter les scripts, pour des raisons de performances.
Dennis
être théoriquement sans valeur et pratiquement sans valeur sont différents - théoriquement, le code obscurcissant est inutile, a convenu. Mais, si le coût de la désobfuscation est similaire au coût de création d'un nouveau code (ou même, le coût devient suffisamment élevé pour dissuader les voleurs paresseux), alors l'obscurcissement pour empêcher le vol gratuit pourrait être bénéfique.
Ronald
Exactement, ce qui est en cause n'est donc pas l'obscurcissement en soi , mais la similitude du code avec un code malveillant connu.
Kaz