¿Qué es la ofuscación de JavaScript y por qué es una amenaza?

Respuestas:

38

La ofuscación es un medio de "oscurecer" el significado real y la intención de su código javascript. Algunos sitios lo usan como un obstáculo para las personas que desean copiar / tomar prestado su código. Otros sitios lo usan como un medio para ocultar la intención real del código.

Algunas formas de oscurecimiento:

  1. Cambiar automáticamente el nombre de las variables a nombres cortos sin sentido para que el código sea menos legible y más difícil de entender.
  2. Eliminando todos los espacios en blanco adicionales y los saltos de línea para que el código sea una línea larga gigante.
  3. Hacer que las partes del código se autogeneren de modo que se ejecute un primer paso del código para crear el código real que luego se ejecuta para llevar a cabo la operación prevista.
  4. Utiliza códigos de caracteres y manipulación de cadenas combinados con eval en lugar de código javascript normal para construir el código real que se ejecutaría.

El oscurecimiento no es en sí mismo malvado, pero se puede usar para tratar de ocultar una mala intención y eso es probablemente a lo que AVG se oponía. Detectó tanto oscurecimiento que no pudo determinar si el JavaScript intentaba hacer algo que intentaba evitar. Como tal, declaró el código como inseguro por defecto ya que no puede verificar que el código parece estar bien.

jfriend00
fuente
Eso es lo que pensé pero quería verificar. Gracias por la aclaración.
L84
SI AVG está bloqueando el acceso a un sitio web conocido y de buena reputación, probablemente pueda anularlo. No sugeriría que si no conoces el representante de los sitios.
uSlackr
44
Algunos sitios usan compresión js para que se cargue más rápido (bueno, casi todos), el código se verá ofuscado.
jcubic
99
1y 2también se realizan mediante compresores javascript. Los compresores ofuscan el código como un efecto secundario, pero ese no es su objetivo principal; su propósito principal es hacer que el javascript sea más pequeño, para reducir el ancho de banda.
BlueRaja - Danny Pflughoeft
5. También se usa para comprimir archivos JS para descargas más rápidas. Yahoo lo ha hecho desde que han estado en la web, y las herramientas de Google para crear aplicaciones web también lo hacen (como GMail y Calendar).
Chloe
13

La ofuscación se refiere a ocultar el significado deseado de algo.

En este caso, un fragmento de JavaScript claramente legible, como

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

puede ser sustituido por

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

o incluso

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

Los tres fragmentos de código hacen exactamente lo mismo, pero solo leer el primero le permitirá comprender fácilmente sus intenciones.

Aparentemente, AVG intenta comprender el propósito del código JavaScript antes de permitir su ejecución. Cuando el código se ofusca, AVG probablemente fallará. De ahí la advertencia.

Dicho esto, algunos sitios web ofuscan su JavaScript no por malas intenciones, sino por dificultar el robo de su trabajo. La ofuscación generalmente es inútil si se usa para este propósito, pero el punto es que la ofuscación no significa necesariamente malas intenciones.

Dennis
fuente
3
Aunque, como he encontrado a menudo, el código desobusticante a menudo me ha demostrado que esconde JavaScript mal codificado que no vale la pena robar. Es una señal de que el programador pasa más tiempo preocupándose por el robo que la técnica de programación adecuada y ni siquiera puede obtener la ofuscación correcta, por lo que se puede descifrar fácilmente. Las únicas personas que dedican tiempo a hacer que el código sea realmente difícil de desobusticar son los programadores de malware, razón por la cual AVG lo señala como una muy buena razón para evitar el sitio.
Fiasco Labs
2
AVG es una máquina, no un humano. Obviamente, una máquina puede entender el código, que es cómo ese código hace lo mismo. Además, las personas no suelen mirar Javascript cuando navegan. Esto es simplemente un caso de "culpa por asociación". Algunos Javascript que son peligrosos usan ciertos patrones de ofuscación. Por lo tanto, otros Javascript con patrones similares son sospechosos.
Kaz
@Kaz: Fue solo un ejemplo, pero existen métodos más sofisticados de ofuscación que requieren un motor JavaScript para ser entendido. Los escáneres de malware generalmente buscan ciertos patrones en lugar de ejecutar los scripts, por razones de rendimiento.
Dennis
ser teóricamente inútil y prácticamente inútil son diferentes: teóricamente, el código ofuscador es inútil, de acuerdo. Pero, si el costo de la desofuscación es similar al costo de crear código nuevo (o incluso, el costo se vuelve lo suficientemente alto como para disuadir a los ladrones perezosos), entonces la ofuscación para evitar el robo sin sentido podría ser beneficioso.
Ronald
Exactamente, entonces lo que está en cuestión no es la ofuscación per se , sino la similitud del código con el código malicioso conocido.
Kaz