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