Menú principal

lunes, 25 de enero de 2016

Reverseando el bug de syslogd en OS X El Capitan

Hace unos días se libero un conjuntos de actualizaciones para OS X El Capitan, Yosemite y Mavericks. En el boletín se describían vulnerabilidades relacionadas, en su mayoría, con el kernel e IOKit. Uno de los problemas de seguridad que se solventan trata de un problema de corrupción de memoria en syslog, el cual podría provocar la ejecución de código arbitrario, es decir, ejecución de un payload que permita realizar acciones sobre la máquina vulnerable. Estas acciones o código ejecutado sería con permisos de root, lo cual hace que se ponga aún más interesante. 

En el blog de Reverse Engineering Mac OS X han publicado un artículo en el que se lleva a cabo la ingeniería inversa de la vulnerabilidad. La excusa para llevar a cabo la prueba de concepto es que Apple no informa mucho de sus actualizaciones de seguridad, no dicen si es explotable en instalaciones OS X por defecto o requiere condiciones particulares. Tras la lectura del artículo se puede ver como el error no es explotable en instalaciones OS X por defecto. La herramienta Diaphora creada por Joxean Koret permite obtener las diferencias entre un binario vulnerable y la actualización. El binaio de syslogd se encuentra en /usr/sbin/syslogd. En la imagen se puede ver como difiere en poco código.

Figura 1: Diferencias en los binarios syslogd vulnerable y actualizado

El código fuente de syslogd para OS X El Capitan 10.11.2 puede descargarse desde el dominio opensource.apple.com. El parche se encuentra realizado en el tamaño de asignación de reallocf(). El detalle del proceso de ingeniería inversa puede ser observado en el artículo, el cual recomendamos la lectura con una taza de café.

El lenguaje C es poderoso, pero pequeños errores pueden suponer la ejecución de código arbitrario, e incluso la escalada de privilegio. El programador de la pieza de código cometió un pequeño error, y su arreglo puede ser tan simple como el añadir un conjunto de parentésis. La función vulnerable se encuentra en add_lockdown_session(), y para llegar a ella se puede visualizar este árbol de funciones.

Figura 2: Árbol de llamadas en syslogd

Cómo se puede visualizar el proceso de ingeniería inversa puede ser una tarea altamente compleja. La vulnerabilidad en syslogd se encontraba en una función, la cual con la configuración por defecto de OS X no es vulnerable, pero que dicha vulnerabilidad estaba ahí. Como se menciona anteriormente se recomienda la lectura de todo el proceso de reversing llevado a cabo y estar atentos al mínimo detalle.

No hay comentarios:

Publicar un comentario

Entrada destacada

Proteger tu cuenta de Google y de Gmail con Latch Cloud TOTP #Latch #Gmail #Google

La semana pasada se liberó la nueva versión de Latch y nuestro compañero Chema Alonso hizo un repaso de todo ello en su artículo Latch...

Otras historias relacionadas

Entradas populares