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

Respostas:

38

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

Algumas formas de obscurecimento:

  1. Renomear variáveis ​​automaticamente para abreviar nomes sem sentido para tornar o código menos legível e mais difícil de entender.
  2. Removendo todo o espaço em branco extra e quebras de linha, para que o código seja uma linha longa gigante.
  3. Tornar partes do código autogeradas para que uma primeira passagem do código seja executada para criar o código real que será executado para executar a operação pretendida.
  4. Usa códigos de caracteres e manipulação de strings combinados com eval, em vez do código javascript normal, para construir o código real que seria executado.

A obscuridade não é, por si só, ruim, mas pode ser usada para tentar ocultar uma intenção maligna e é provavelmente para isso que o AVG se opunha. Ele detectou tanta obscuridade que não sabia se o javascript estava tentando fazer algo que estava tentando impedir. Como tal, declarou o código como inseguro por padrão, pois não pode verificar se o código parece bom.

jfriend00
fonte
Era isso que eu pensava, mas queria verificar. Obrigado pelo esclarecimento.
L84
Se o AVG estiver bloqueando o acesso a um site bem conhecido e respeitável, você provavelmente poderá substituí-lo. Eu não sugeriria que, se você não conhece o representante dos sites.
precisa saber é o seguinte
4
Alguns sites usam a compactação js para carregar mais rápido (quase todo mundo), o código parecerá ofuscado.
Jcubic
9
1e 2também são feitos por compressores javascript. Os compressores ofuscam o código como efeito colateral, mas esse não é o objetivo principal; seu principal objetivo é reduzir o javascript, reduzir a largura de banda.
BlueRaja - Danny Pflughoeft
5. Também é usado para compactar arquivos JS para downloads mais rápidos. O Yahoo faz isso desde que estão na Web, e as ferramentas do Google para criar aplicativos da Web também fazem isso (como GMail e Calendar).
Chloe
13

Ofuscação refere-se a ocultar o significado pretendido de alguma coisa.

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 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 somente a leitura do primeiro permitirá que você entenda suas intenções facilmente.

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 ofuscam 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 esse fim, mas o ponto é que a ofuscação não significa necessariamente más intenções.

Dennis
fonte
3
Embora, como eu sempre descobri, o código desobficitante geralmente me mostre que oculta javascript codificado maldosamente, não vale a pena roubar. É um sinal de que o programador passa mais tempo se preocupando com o roubo do que uma técnica de programação adequada e não consegue nem acertar a ofensiva, por isso é facilmente quebrada. As únicas pessoas que dedicam tempo para tornar o código realmente difícil de desobedecer são os programadores de malware, e é por isso que o AVG o sinaliza como um bom motivo para evitar o site.
Fiasco Labs
2
O AVG é uma máquina, não um ser humano. Obviamente, uma máquina pode entender o código, e é assim que esse código faz a mesma coisa. Além disso, as pessoas geralmente não olham para o Javascript quando navegam. Este é simplesmente um caso de "culpa por associação". Algum Javascript perigoso usa certos padrões de ofuscação. Portanto, outro Javascript com padrões semelhantes é suspeito.
Kaz
@Kaz: Foi apenas um exemplo, mas existem métodos mais sofisticados de ofuscação que exigem que um mecanismo JavaScript seja entendido. Os scanners de malware geralmente pesquisam certos padrões em vez de executar os scripts, por motivos de desempenho.
Dennis
ser teoricamente inútil e praticamente inútil são diferentes - teoricamente, o código ofuscante é inútil, concordou. Mas, se o custo da desobstrução for semelhante ao custo da criação de um novo código (ou até mesmo, se o custo for alto o suficiente para impedir ladrões preguiçosos), a ofuscação para impedir o furto pode ser benéfica.
Ronald
Exatamente, o que está em questão não é a ofuscação em si , mas a semelhança do código com o código malicioso conhecido.
Kaz