Darwin Nuke

En diciembre de 2014 detectamos una vulnerabilidad muy interesante en el núcleo de XNU del sistema operativo Darwin (sistema operativo de código abierto que sirve de fundamento a OS X y iOS de la compañía Apple). Un delincuente puede explotar de forma remota esta vulnerabilidad, y le basta un solo paquete formado de una manera especial para realizar un ataque DoS (Denial-of-Service, denegación de servicio). Logramos establecer que los sistemas operativos OS X 10.10 y iOS8 son susceptibles a esta vulnerabilidad.

La vulnerabilidad consiste en el funcionamiento incorrecto del procesamiento de un paquete IP de determinado tamaño con opciones IP erróneas. Como resultado del procesamiento incorrecto del paquete, el sistema operativo concluye su funcionamiento en modo de emergencia.

Conclusión del funcionamiento de OS X 10.10 en modo de emergencia

Al principio descubrimos la vulnerabilidad en los sistemas OS X 10.10, pero en investigaciones posteriores llegamos a la conclusión de que está también presente en los dispositivos con procesadores de 64 bytes que tienen instalados iOS8:

  • iPhone 5s y más nuevos
  • iPad Air y más nuevos
  • iPad mini 2 y más nuevos

Para entender qué etapa del procesamiento del paquete IP ocurre el error, basta analizar el volcado del cese de funcionamiento.

Volcado de depuración del núcleo

Como podemos observar en el volcado de depuración, el error ocurre en la función icmp_error(). La tarea de esta función es crear y enviar un mensaje ICMP sobre el error (paquete incorrecto). En la captura de pantalla de más arriba vemos que se llamó esta función después de la función que realiza el análisis de las opciones IP del paquete.

Este es el código que provoca la interrupción de emergencia del funcionamiento del sistema:

Condición que provoca la caída del sistema

Cuando cierta condición especificada en el código se cumple, se llama la función panic y el sistema se apaga en modo de emergencia. Esto sucede porque han cambiado las estructuras internas del núcleo y, como consecuencia, el nuevo tamaño del buffer resulta insuficiente para almacenar el paquete ICMP recién creado.

Para que esta condición se cumpla, es necesario que el paquete IP satisfaga los siguientes requisitos:

  • El tamaño del encabezado IP debe ser mayor a 60 bytes
  • El tamaño de los datos IP adicionales debe ser igual o mayor a 65 bytes
  • Las opciones IP deben ser incorrectas (tamaño equivocado, opciones de clase erróneas, etc.).

Ejemplo de paquete que provoca el cese de emergencia del funcionamiento del sistema

A primera vista parece que a un delincuente le sería muy difícil diseñar un escenario de explotación de esta vulnerabilidad. Pero un profesional en el campo de la seguridad de redes, después de crear un paquete adecuado, puede con facilidad y a distancia apagar el dispositivo del usuario e incluso detener el funcionamiento de una red corporativa.

Algunos enrutadores o cortafuegos no dejan pasar paquetes IP con opciones erróneas. Pero nosotros hemos conseguido generar un paquete de red que durante las pruebas pasó fácilmente a través de enrutadores comunes y corrientes y explotó esta vulnerabilidad.

Esta vulnerabilidad está cerrada en las siguientes versiones de sistemas operativos: OS X 10.10.3 y iOS8.3.

Los usuarios de los productos de Kaspersky Lab están protegidos de esta vulnerabilidad en OS X 10.10 por el componente “Protección contra ataques de red”. Este componente funciona también en Kaspersky Internet Security for Mac 15.0.

Detectamos este ataque de red con el siguiente veredicto: DoS.OSX.Yosemite.ICMP.Error.exploit.

Publicaciones relacionadas

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *