lunes, 21 de agosto de 2017

Categorización de la ofuscación utilizada en ciertos códigos JavaScript

Quiero desde aquí hacer eco, como recordatorio para todo el mundo entre los que me incluyo, del artículo: Reverse Engineering a JavaScript Obfuscated Dropper , del día 31/07/2017, que referencia al estudio: The Power of Obfuscation Techniques in Malicious JavaScript Code: A Measurement Study (no muy actual que digamos), en donde se puede obtener información sobre la categorización de los distintos tipos de ofuscación utilizada en archivos JavaScript.

NOTA: Recomiendo encarecidamente la lectura del artículo en toda su totalidad, el ejemplo puesto en el artículo es clarificador. Además ofrece un par de herramientas muy útiles al realizar ingeniería inversa de archivos JavaScript.

El estudio define cuatro tipos de técnicas de ofuscación:

Randomization Obfuscation

En este tipo de ofuscación, ciertos elementos del código JavaScript son modificados sin por ello modificar la semántica del código. Los "elementos" más tu utilizados son: espacios en blanco, comentarios, variables que no aportan nada al código y nombres de variables incomprensibles.

Data Obfuscation

El principal objetivo de estas técnicas es convertir los valores de variables y constantes en formatos que no afecten a la ejecución del código pero dificulten la lectura del mismo.

Las dos principales técnicas son:

    1. String splitting (división de cadenas de texto). Consiste en convertir un cadena de texto e un concatenación de subcadenas de texto.
                  
             2. Keyword substitution (sustitución de palabras clave). Consiste en colocar un comando JavaScript dentro de una variable y utilizar dicha variable en el resto del código.

      3. Encoding Obfuscation

Normalmente, hay tres maneras de codificar un código:

1.  Convertir el código en caracteres ASCII, Unicode o hexadecimales.

2.  Personalizar la codificación mediante funciones que se encarguen de codificar el código, este método implica que el propio código adjuntará un función de descodificación que deberá ser ejecutada antes de nada.

3.  Emplear métodos de cifrado/descifrado estándar. Por ejemplo: JScript.Encode, es un método creado por Microsoft para codificar código JavaScript.

 Logic Obfuscation

Está técnica consiste en manipular el flujo de ejecución del código javaScript sin afectar la semántica original del código mediante la modificación de estructuras lógicas. Existen dos maneras de hacerlo:

1.  Insertando instrucciones que nada tiene que ver con el flujo original del código.

2.  Añadiendo o cambiando estructuras condicionales.



NOTA FINAL

Cada técnica por sí sola no complica demasiado el análisis del código, el problema viene cuando se combinan.

Lo que hagas con la información es cosa tuya, no mía ... pero ten conciencia.

No hay comentarios:

Publicar un comentario