Español | English
rss facebook linkedin Twitter

Una imagen vale más que mil palabras

En los últimos días parece que está tomando cierta relevancia el uso de viejas técnicas de compresión de código javascript, para ofuscación y evasión de sistemas de detección de malware y/o phishing.

Lo que originalmente se ideó como una forma de conseguir el máximo rendimiento con código llevado a su mínima expresión, ha dado ciertos quebraderos de cabeza a los sistemas de detección de malware o código malicioso, más por su uso ahora de forma más habitual que por su novedad técnica. Lo sencillo si efectivo dos veces productivo.

En su vertiente más simple, nos podemos encontrar ficheros gráficos donde los datos de cada pixel han sido substituidos por el valor ASCII de cada carácter que forma el código JavaScript, donde posteriormente estos datos son leídos utilizando los métodos específicos del objeto HTML ‘Canvas’ y luego tratado según el objetivo del mismo.

Esta forma de uso de los formatos gráficos, ya fue comentada allá por el año 2008 por Jacob Seidelin, con la única diferencia que ahora parece que se está utilizando de forma más habitual para dificultar la detección de código malicioso, en vez de la optimización de tamaños de la idea original.

 Maliciosa

Original

Como se puede ver, comparando el código original y código utilizado para inyección del tag IFRAME a través de una imagen PNG utilizando esta técnica, las diferencias son mínimas ya que las funcionalidades realmente importantes residen en la imagen en sí misma y no en la forma de cargar dicha información.

Este básico concepto se lleva a la práctica en dos pasos, el primero evidentemente es generar la imagen con el código JavaScript lo cual podemos hacer con el mismo script PHP que proporciona Jacob Seidelin, y una vez tenemos la imagen, bastaría con incluir el código de carga en nuestro HTML, ya sea insertando la función loadPNGData en un fichero aparentemente lícito (como podría ser jQuery) y que pase desapercibida, directamente en el cuerpo de la página o de la forma que creáis más oportuna.

Aunque este método es muy efectivo y funcional, existe una variación del mismo en la cual se puede añadir el código JavaScript a una imagen ya existente, teniendo así un fichero que puede cumplir dos funciones, la de imagen gráfica y la de código malicioso, bastando para su uso el incluir la imagen como fuente del tag "script".

Para conseguir esta doble funcionalidad, tras la firma del tipo de fichero se insertan los caracteres /* indicando el inicio de un comentario, los cuales se cierran */ al final de la imagen, y adicionalmente se añaden los caracteres =1; para una correcta sintaxis (Ej: BM/*......*/=1;) por lo que cualquier contenido a partir de estos caracteres sería interpretado como código totalmente correcto y la cabecera de la imagen aunque modificada continua siendo correcta y la imagen será interpretada correctamente (esta variante será posible llevarla a la práctica dependiendo del formato de la cabecera de la imagen, pero a día de hoy es posible usarla en diferentes formatos gráficos como puede ser GIF o BMP) como ya detallaban los siguientes enlaces:

Sea cual sea el método de los anteriores que nos encontremos, o alguna variación o combinación de estos, o nuevos vectores que puedan surgir a partir de las funcionalidades HTML5 (audio, video o cualquier contenido multimedia), no podemos olvidar que el código malicioso no va a estar siempre en los puntos más lógicos, y sin embargo cualquier dato tratado por un navegador es susceptible de ser usado para tareas para las que no fueron pensadas inicialmente, y si no pongamos atención en la multitud de técnicas que años atrás se desarrollaron para optimizar recursos en el uso de JavaScript encapsulando este en formatos gráficos. Era cuestión de tiempo que estas fueran utilizadas para ocultar código malicioso.
 
Eugenio delfa
Acss México


(+34 902 222 521)


24 horas / 7 días a la semana



© Copyright S21sec 2013 - Todos los derechos reservados


login