O que é Obfuscação de JavaScript e por que é uma ameaça?

27

O AVG recentemente me disse que uma página da web foi bloqueada devido a Obfuscação JavaScript .

Por que a página da Web foi bloqueada e o que exatamente isso significa?

    
por L84 28.04.2012 / 20:05

2 respostas

36

A ofuscação é um meio de "obscurecer" o real significado e intenção do seu código javascript. Alguns sites usam isso como um obstáculo para pessoas que querem copiar / emprestar seu código. Outros sites usam isso como um meio de ocultar a intenção real do código.

Algumas formas de obscurecimento:

  1. Renomeando automaticamente as variáveis para nomes curtos sem sentido para tornar o código menos legível e mais difícil de entender.
  2. Remover todos os espaços em branco e quebras de linha extras para que o código seja uma longa linha gigante.
  3. Tornar partes do código autogeráveis para que uma primeira passagem do código seja executada para criar o código real que, em seguida, é executado para executar a operação pretendida.
  4. Usa códigos de caracteres e manipulação de string combinados com eval em vez de código javascript normal para construir o código real que seria executado.

A obsolescência não é, por si só, má, mas pode ser usada para tentar esconder uma intenção maligna e isso é provavelmente o que a AVG estava objetando. Ele detectou tanto obscurecimento que não poderia dizer se o javascript estava tentando fazer algo que estava tentando evitar. Como tal, declarou o código como inseguro por padrão, uma vez que não pode verificar se o código parece OK.

    
por 28.04.2012 / 20:08
12

A ofuscação refere-se a esconder o significado pretendido de algo.

Nesse caso, um snippet JavaScript claramente legível, como

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

pode ser substituído por

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

ou até mesmo

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"));

Todos os três trechos de código fazem exatamente a mesma coisa, mas apenas a leitura do primeiro permitirá que você entenda suas intenções com facilidade.

Aparentemente, o AVG tenta entender o objetivo do código JavaScript antes de permitir sua execução. Quando o código é ofuscado, o AVG provavelmente falhará. Daí o aviso.

Dito isto, alguns sites ofuscar seu JavaScript não por causa de más intenções, mas para dificultar o roubo de seu trabalho. A ofuscação é geralmente inútil se usada para este propósito, mas o ponto é que a ofuscação não significa necessariamente más intenções.

    
por 28.04.2012 / 20:18