Seguimos cubriendo Virus Bulletin 2013, desde la ciudad de Berlín donde podemos apreciar interesantes charlas e investigaciones en seguridad informática. El primer día contó con charlas sobre diferentes temáticas como bitcoins, la seguridad en Google Play y App Store, Ingeniería Social y demás. En esta oportunidad, nos centraremos en la charla de Xinran Wang hablando sobre una herramienta para detectar java exploits e identificar la vulnerabilidad que explotan.
Como es de público conocimiento, Java es una plataforma que ha recibido múltiples ataques en los últimos meses. Algunos de ellos, son conocidos como 0-days, vulnerabilidades que fueron explotadas antes que el fabricante emitiera la actualización para poder solucionarla o incluso antes que la pudieran detectar. En esta presentación, Wang nos muestra una herramienta para poder detectar exploits en Java e incluso prevenir que se aprovechen de estas vulnerabilidades 0-day.
Para eso, comienza mostrando el modelo Sandbox de Java y su estructura, donde podemos ver el verificador, el cargador de clase y el security manager. En este ultimo, fue realizado el bypass cuando observamos una de las primeras vulnerabilidades 0-day que ha aparecido sobre la plataforma Java en el año 2012, la CVE-2012-4681. En esa oportunidad se buscaba deshabilitar el método SetSecurityManager para ejecutar un applet no firmado con privilegios de administrador.
Luego, Wang muestra los tipos de vulnerabilidades y algunos ejemplos de las que se han explotado últimamente, entre ellas CVE-2013-0422, CVE-2013-0431, etc. Entre los diferentes tipos de vulnerabilidades menciona: problemas de tipos, errores lógicos, corrupción de memoria e inyección de argumentos. Entre ellas, la primera es la más grave ya que confunde al verificador de Java para permitir que objetos de otros tipos manipulen campos protegidos. Eso significa que un applet malicioso podría engañar a Java y ejecutar aplicaciones que no están permitidas, entre ellas, malware para infectar la computadora de la víctima.
Luego, se centra en la vulnerabilidad CVE-2013-0422 y un PoC (prueba de concepto) para explotarla. El exploit hace una llamada al método “findClass” de la clase "com.sun.jmx.mbeanserver.MBeanInstantiator" con el parámetro “sun.org.mozilla.javascript.internal.GeneratedClassLoader”. Eso permite obtener referencias de la clase para cualquier paquete. Lo cual es claramente un bug de Java ya que esa información no debería ser proporcionada de forma externa. Además, Wang utiliza ofuscación en su exploit para evitar que sea fácilmente detectado al ingresar al sistema. Las técnicas de ofuscación son utilizadas hace mucho tiempo en Java para impedir que un código sea plagiado, no obstante muchos atacantes lo hacen actualmente para dificultar su detección por parte de las soluciones de seguridad.
A pesar de los resultados visibles que muestra el investigador, vale aclarar que para cada prueba de concepto analizada, es importante tener en cuenta el tipo de ofuscamiento (en este caso fue utilizado ofuscamiento en strings). Si bien es cierto que las muestras ofuscadas son difíciles de detectar, muchas soluciones de seguridad hoy cuentan con desofuscadores embebidos que se utilizan para analizar las muestras. Por lo tanto, es verdad que ofuscar el código lo hace más difícil de detectar pero, por otro lado, cada exploit ofuscado es un caso diferente y no se pueden generalizar todos los exploits ofuscados en función de un caso analizado.
Después de eso, Wang aprovecha para recordar que las vulnerabilidades en Java constituyen uno de los mayores vectores de explotación. Adicionalmente, menciona que la ofuscación hace que el análisis estático y el modelo de detección tradicional sea menos efectivo.
Finalmente, Xinran Wang afirma que su herramienta puede identificar con un alto nivel de precisión vulnerabilidades conocidas en las amenazas para Java analizadas. En su evaluación, utilizó 357 exploits (descargados de VirusTotal) para la vulnerabilidad CVE-2013-0422, donde el 41% fueron confirmados como amenazas de esa vulnerabilidad, mientras que un 8% eran exploits de otras vulnerabilidades. La mayor ventaja de esta herramienta es que puede identificar con un buen grado de precisión la vulnerabilidad (bajo un determinado CVE) que aprovecha el exploit más que la detección del exploit en si mismo.
Además de eso, Wang garantiza poder identificar exploits 0-day a través de una detección intuitiva. Es decir, que se lanzan applets no firmados en la última JVM de Java y en caso de observar un comportamiento no permitido por la sandbox, ya sea escritura en disco o creación de un nuevo proceso, se clasifica como un exploit 0-day.
Veremos cómo evoluciona esta herramienta en el futuro y si se puede extender su uso para facilitar la identificación de las vulnerabilidades explotadas por los exploits de Java, ya que, como su autor menciona, las muestras de este tipo chequeadas en VirusTotal subieron de 8.000 al comienzo del año a 300.000 en marzo.
Imagen de Andreas Marx en Virus Bulletin