martes, 28 de agosto de 2012

Algunos apuntes curiosos sobre el 0-day de Java 7

La última vulnerabilidad descubierta en Java está dando que hablar últimamente. No es para menos, Java junto con los complementos para Flash y Adobe PDF Reader de los navegadores nos dejan un reguero de CVEs cuyo catálogo no deja de crecer.

Lo curioso del asunto es que no se trata de una vulnerabilidad al uso. Es decir, no es un desbordamiento de pila, de entero o un puntero nulo. En principio los applet de Java corren en un entorno sin privilegios, bajo la atenta mirada del SecurityManager. Si el applet intenta hacer algo que no debe el SecurityManager lo pillará y saltará una excepción. ¿Pero qué ocurriría si deshabilitamos el SecurityManager? Pues que ojos que no ven... troyano que se descarga... Se trata de un problema en la "cadena de confianza" de Java.

La vulnerabilidad en sí reside en que han encontrado una forma de poder deshabilitar al SecurityManager, dejando al applet con los mismos privilegios que una aplicación de escritorio, es decir: luz verde para usar cualquier API de Java. Aquí lo explican de manera magistral.

Vamos a explicar un poco el payload del exploit encontrado. Por supuesto, las teorías que lanzaremos son simplemente especulaciones. Este exploit en concreto encontrado no tiene por qué ni el único, ni representativo de otros que puedan haber estando infectando sistemas en los últimos días... pero es el único público que se ha descubierto atacando realmente sistemas.

El código que efectúa la deshabilitación del SecurityManager:




Viendo el código da para especular. Apuntado por mi compañero Sergio de los Santos que ha diseccionado a la criatura.


Eso pertenece a la clase que hace de Applet. La primera en ejecutarse cuando el navegador carga el .jar malicioso. Y ese código se interpreta prácticamente como un: "Si el ordenador donde me estoy ejecutando es un Windows llama al método estático xrun de la clase Gondzz". Ya está. Ninguna otra referencia a otro sistema, ya sea Mac OSX o Linux. Sin embargo vayámonos al  método xrun de la clase Gondzz:


Vemos en las primeras lineas que se prepara la llegada de un archivo que se descargará con el método downFile. Ese archivo se llamará update.exe. Más abajo hay una sentencia if que literalmente dice: "Si el ordenador donde me ejecuto NO es Windows, haz una llamada a chmod y cambia los permisos a rwxr-xr-x. Siendo esto último una llamada característica de sistemas UNIX para permitir la ejecución.

Curiosamente ya en la primera clase, se discrimina la llamada a xrun si el sistema no es Windows, así que un sistema "no Windows", no llegará ahí. ¿Para qué una segunda comprobación? ¿Para qué un chmod?

Con todo esto y el nombre que usaron en el paquete que contiene las clases "cve2012xxxx" (es la nomenclatura que se usa en el estándar CVE de la industria) da la impresión de que el 0-day les quemaba las manos. Sabían que iba a ser detectado se le asignaría un CVE más pronto que tarde. Leyendo el código pueden aparecer todo tipo de teorías: que querían liberar una versión que infectara tanto a Windows como a sistemas OSX o Linux y se quedaron "a medias". O que hayan reutilizado partes de otros exploits, y no han "limpiado" del todo el código. O que en el futuro estaba pensado infectar a otras máquinas no Windows...

Además el código no esta ofuscado. Se lee limpia y perfectamente. Un descuido sutil pero que pocas veces se observa en código Java malicioso. La ofuscación para Java es trivial, pasar un programa y listo. Lo único ofuscado son las URL de descarga del troyano, algo ya clásico. ¿Nos decantamos por "las prisas", entonces?


viernes, 24 de agosto de 2012

Renovamos el Blog del Laboratorio de Hispasec

En Hispasec, estamos aprovechando el verano para realizar algunos cambios. Entre muchos otros asuntos internos y externos, vamos a renovar el blog del laboratorio después de más de siete años. Abandonamos el antiguo a su suerte (lo dejamos como contenido estático), y estrenamos este en Blogger.

Por aquel entonces, se realizaba una declaración de intenciones en la primera entrada que podría seguir siendo válida:



Abajo a la izquierda podrás encontrar un enlace al antiguo blog. En él a su vez aparecerá un enlace a este. Los usuarios ya suscritos por RSS serán redirigidos automáticamente y en principio, no notarán demasiada diferencia.

Esperemos que la renovación no solo sea estética/técnica, y usemos el blog con entradas que resulten interesantes y con una regularidad mayor que la que hasta ahora hemos podido mantener...