lunes, 9 de abril de 2012

Una vulnerabilidad para explotarlos a todos: Java, un mal común


Más de 600.000 Mac OS X infectados por FlashBack, incontables Windows afectados por el malware de la policía... todos con un origen común: para instalarse en el equipo, aprovechan un fallo de seguridad en Java. El entorno de ejecución de Java (JRE) sigue siendo uno de los programas más peligrosos que se pueden tener en un ordenador, independientemente del sistema operativo.

Por qué JRE

JRE es el entorno necesario para que el sistema entienda los programas hechos en Java y los ejecute. También es el entorno necesario para que el navegador entienda los "applets", que son pequeños programas que se suponen añaden funcionalidad a la web. Aunque JRE esté pensado para correr código Java en una sandbox, las vulnerabilidades permiten salir de ese círculo cerrado y ejecutar código en el equipo. Java es tremendamente popular, precisamente por ser multiplataforma, podemos encontrar JRE en todos los sistemas operativos conocidos (en su versión de Oracle o en la de OpenJRE). Cuando se encuentra un fallo en JRE, normalmente las potenciales víctimas son todos los sistemas.

JRE es muy atacado desde hace tiempo. Uno de los últimos fallos ha permitido disponer a los atacantes de una jugosa arma entre las manos. El fallo CVE-2012-0507, corregido el 14 de febrero por Oracle, permitía la ejecución de código. Era una vulnerabilidad potente, de la que se conocían los detalles, reciente y ubicua... una bomba de relojería. Desde entonces, se ha usado para instalar malware a través del navegador de los sistemas no actualizados. Por ejemplo, todos nuestros análisis del malware de la policía indicaban que el virus había llegado al sistema de esta forma. Ahora, con la botnet de Mac OS X destapada, también se descubre que han estado usando este fallo para ejecutar el código necesario. Desde el 25 de marzo además, la vulnerabilidad se incorporó a varios kits de explotación usados por atacantes. Estos kits permiten, con una cómoda interfaz, crear exploits personalizados. Por ejemplo Blackhole. Este kit permite, a través de golpe de ratón, preparar un exploit en el que, según el sistema operativo, versión, navegador, etc. se prepara un ataque concreto.

Además, se está dando un fenómeno muy interesante, y es que en los últimos tiempos el mercado de los navegadores está más repartido (no se centran tanto en Internet Explorer) y la seguridad de estos programas ha mejorado sustancialmente. En concreto, Chrome e Internet Explorer con el uso que hacen de Mandatory Integrity Control en Windows, ASRL y DEP, son cada vez más complejos de explotar vulnerabilidades. Los atacantes abandonan así estas "víctimas" y se centran en "la fruta más baja" que pasa por los plugins comunes: Java, Flash, PDF, etc.

Los antivirus no ayudan

Cuando se aprovecha uno de estos fallos, los motores antivirus tienen dos oportunidades de detener el problema:

* Cuando el usuario descarga el "applet" (archivo .jar) que contiene el código para la explotación (aprovechar el fallo en JRE y escapar de la sandbox).
* Cuando este exploit descarga el payload real (el malware final con el que se infecta al usuario).

Por poner un ejemplo, las primeras muestras de applets que aprovechan la vulnerabilidad CVE-2012-0507, suelen ser detectadas por 2-3 motores antivirus por firmas en Virustotal cuando llegan por primera vez. Al malware de la policía le ocurre exactamente lo mismo. Las muestras muy recientes no son detectadas por más de 3-4 motores. A los pocos días, tanto el .jar como el .exe comienzan a ser mucho más reconocidos.

Las actualizaciones tampoco

Actualizar, actualizar y actualizar, es la primera ley de la seguridad. Pero en esto tampoco estamos de suerte.

  • Los usuarios de Windows podían actualizar desde el mismo 14 de febrero de forma automática... pero no todos lo hicieron, evidentemente.


  • Los usuarios de Red Hat tenían paquetes rpm actualizados el día 15 de febrero.
  • Los de Ubuntu el día 24 de febrero.
  • Los de Debian, podían descargar los paquetes .deb de openjdk el día 28 de febrero.
  • HP-UX podían actualizar con paquetes el 28 de marzo.
  • Los usuarios de Apple tuvieron que esperar al 5 de abril, sin ninguna posibilidad de actualizar. Se debe a que implementación para OS X le corresponde a Apple y no a Oracle. Esto dejó una ventana de exposición muy amplia que los atacantes han sabido aprovechar.

En resumen, deshabilitar Java del navegador (e incluso del sistema completo) puede ser una de las mejores opciones para prevenir que se aprovechen vulnerabilidades a través del navegador.

Más información:

Java CVE-2012-0507 / CVE-2011-3521 (see update below) samples


Sergio de los Santos
Twitter: @ssantosv

6 comentarios:

  1. ¿Que medidas deberiamos tener adicionales a la de evitar que nuestros navegadores utilicen java?
    Tengo aplicaciones corriendo con este lenguaje y realizo constantes actualizaciones del jre.
    ¿Que consejos podrian darme para tener una alternativa a Java y estar protegido o sencillamente lo sigo usando?

    ResponderEliminar
  2. --Doctor, me he torcido un tobillo.
    --No se preocupe le cortaremos la pierna para que ya no le vuelva a suceder.

    Desde que oracle compró Java, no ha parado la operación de descrédito a esta tecnología. Una vez derrocado Java, cuál será el próximo lenguaje que nos impongan los "gurus"?

    ResponderEliminar
  3. Estoy totalmente de acuerdo con Miguel: ya puestos, desenchufemos el ordenador de Internet o, mejor aún, no lo encendemos y así estaremos protegidos. No hay que confundir las cosas: tenéis que "educarnos" en seguridad informática pero decirnos que tenemos que desactivar Java "del sistema completo" cuando es el segundo lenguaje de desarrollo de aplicaciones me parece poco serio (este mes).

    http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

    Un saludo

    ResponderEliminar
  4. Yo pienso que realmente hay un porcentaje muy alto de usuarios que nunca han ejecutado un JAR (o un .class) en su equipo. Díganme para que quieren esos usuarios tener instalada el JRE. Si tenerla instalada supone un problema al típico usuario que utiliza su ordenador para consultar las redes sociales, el mail y poco más no veo el inconveniente en recomendar que se desinstale.

    Es cierto que alguno habrá que use el programa padre de hacienda y sí necesite tener instalada la JRE.

    Por otra parte los applets java se podría decir que están casi muertos en la mayoría de las páginas web. Hay que ser realistas.

    Es cierto que Java es un entorno líder en muchos proyectos, sobre todo en el mundo empresarial. Por lo tanto no nos engañemos, Java para aplicaciones de escritorio está prácticamente en K.O técnico. Evidentemente para acceder a la web de un banco cuyo "server side" está escrito enteramente en java no necesitamos tener ningún JRE instalado, con lo cual...

    ¿Cual es la utilidad real que un usuario promedio de un ordenador (el que sólo consulta páginas web) le va a dar a la JRE instalada en su máquina?

    ¿Y en una empresa, cual sería el problema si el personal de sistemas decidiera eliminar el JRE de todas las máquinas de los empleados si antes han comprobado que NO necesitan el JRE en su actividad diaria?

    ResponderEliminar
  5. Impresionante comentario final: "En resumen, deshabilitar Java del navegador (e incluso del sistema completo) puede ser una de las mejores opciones para prevenir que se aprovechen vulnerabilidades a través del navegador."

    Supongo que por la misma regla después deshabilitaremos Flash player (¡qué hago que todavía lo tengo instalado!), ya puestos, el navegador, y lo mejor es dejarlo aislado sin conexión a internet. Aunque... ¿para qué queremos un ordenador sin internet?

    #deshabilitarjava debería ser trending topic

    ResponderEliminar
  6. Pienso que no deberiamos dejarle todo el trabajo al antivirus para que se ocupe de las detecciones generadas por las vulnerabiloidades. Ademas desactivar JAVA. tampoco es buena idea, seria ignorar completamente el problema. Creo que para mitigar esta clase de falals, seria combinar una solucion antimalware + IPS de Host.

    ResponderEliminar