Hace sólo un año los usuarios de ordenadores Apple eran sobre todo los especialistas en diseño, compaginación; los fotógrafos y los músicos. Pero el año pasado fue crucial en muchos aspectos: Después de que Apple declarara que empezaría a fabricar ordenadores con procesadores Intel, muchas personas empezaron a prestar atención a los ordenadores Apple y a considerar usarlos en calidad de ordenadores domésticos. Los productores de programas también prestaron atención a la creciente popularidad de Mac OS x y sacaron al mercado versiones para Mac OS X de sus programas.
Sin embargo, Mac OS X sigue siendo algo misterioso y enigmático no sólo para muchos usuarios, sino también para los especialistas en el campo de la seguridad informática. En este artículo trataremos de prestar ayuda a los especialistas para entender aquellas peculiaridades de Mac OS X que son críticas durante la investigación de los programas nocivos para este sistema operativo.
Vale decir que Mac OS X es un sistema operativo similar a Unix, que tiene muchas de los rasgos característicos propios de otros sistemas Unix y por esto el material que presentresmos será más comprensible a los lectores que tengan experiencia con sistemas como Linux o FreeBSD. Los lectores también podrán sacar provecho de la experiencia de la investigación en cualquier tipo de sistemas operativos.
- Principales peculiaridades de Mac OSX
- Utilidades para el análisis de programas
- Ejemplos de análisis de programas nocivos
- Conclusion
Principales peculiaridades de Mac OSX
El conocer las peculiaridades de un sistema operativo es útil durante el análisis de programas, entre ello de los programas nocivos. Muchas de las peculiaridades de Mac OS X están relacionadas con su origen: Mac OS X fue creada basándose en sistemas Unix, lo que se reflejó en el diseño y los principios del sistema en general. Del sistema operativo Mach heredó las interrelaciones entre procesadores; de BSD, la pila de red.
Soporte de las llamadas del sistema de Mach y BSD
El núcleo de Mac OS X (xnu) está basado en los núcleos de los sistemas operativos Mach y FreeBSD, pero también incluye parte de MkLinux, NetBSD, OpenBSD y otras tecnologías de Mach. Mac OS X Admite las llamadas del sistema de Mach y BSD Como el núcleo de OS X está basado tanto en Mach cómo en FreeBSD, xnu contiene dos tablas de llamadas del sistema, de Mach y BSD y admite los API de los sistemas BSD y Mach.
El medio del tiempo de ejecución
Para poder admitir por lo menos parte de la herencia de los sistemas operativos anteriores, Mac OS X consta de un medio de tiempo de ejecución de tres componentes:
- Dyld Runtime Environment. El medio de tiempo de ejecución basado en el cargador dinámico de dyld.
- CFM Runtime Environment. La herencia de OS 9 sirve para el soporte de las aplicaciones que dyld no puede ejecutar, pero que usan las posibilidades brindadas por Mac OS X. Esta parte está realizada en la biblioteca Carbon.
- Classic Runtime Environment. Sirve para ejecutar las aplicaciones de OS en OS X.
De esta manera, en Mac OS X existe la posibilidad de ejecutar diferentes tipos de aplicaciones, incluso para versiones anteriores de Mac OS.
El formado de ficheros ejecutables macho
En Mac OS X casi todos los ficheros que contienen código ejecutable, como las aplicaciones, bibliotecas y módulos del núcleo se realizan en forma de ficheros en formato macho.
El formato macho no es un programa desarrollado originalmente por Apple. Fue desarrollado por Open Source Foundation para su sistema operativo OSF/1 y luego adaptado por Apple para la arquitectura x86 en el marco del proyecto OpenStep.
El formato de ficheros macho y la especificación ABI (Application Binary Interface) describen la manera en que el núcleo debe cargar y lanzar elfichero ejecutable. Ambos le comunican al sistema operativo:
- cómo funciona el cargador dinámico,
- cómo cargar las bibliotecas compartidas,
- cómo organizar el espacio de direcciones del proceso,
- dónde buscar el punto de entrada,
- etc.
Como macho es el principal formato de los ficheros ejecutables en Mac OS X, analizaremos con más detalle su organización.
Cómo está organizado macho
A grandes rasgos, macho se puede dividir en tres partes: título, instrucciones de carga y segmentos, que pueden constar de varias secciones. El título y las instrucciones de carga describe las principales características del fichero, mientras que el segmento de datos contiene un conjunto de bytes a los cuales se remiten las instrucciones de carga.
Título. Los primeros cuatro bytes del título determinan el así llamdo “magic number”, que identifica el fichero como de 32 o 64 bytes. Además, permiten al procesador determinar el orden de los bytes. El título define la arquitectura para la cual se ha compilado el fichero. Esto permite al núcleo garantizar el lanzamiento de los ficheros sólo en aquella plataforma para la que fueron compilados. A veces, el fichero binario puede contener código para más de una arquitectura. Este formato se conoce como Universal Binaries. En este caso el fichero empieza por un título fat.
Instrucciones de carga. El campo de instrucciones de carga contiene una lista de instrucciones que comunican al núcleo de qué manera debe cargar los diferentes segmentos del fichero. Estas instrucciones describen cómo cada segmento está alineado en la memoria, qué derechos de acceso tiene y dónde está ubicado en la memoria.
Segmentos y secciones. El fichero ejecutable macho suele tener 5 segmentos:
- __PAGEZERO. Ubicado en la dirección virtual cero, no tiene ninguna protección. Este segmento no tiene ningún campo en el fichero en el disco.
- __TEXT. Contiene datos con acceso sólo de lectura y ejecución.
- __DATA. Contiene datos con acceso de escritura. Esta sección está marcada como copy-on-write.
- __OBJC. Contiene datos usados por el medio de ejecución Ojective-C.
- __LINKEDIT. Contiene datos que se usan para establecer relaciones dinámicas.
Los segmento __TEXT y __DATA contienen cero o más secciones. Cada sección contiene un determinado tipo de datos, por ejemplo: el código usado, las constantes, líneas de texto, etc. Así, el código ejecutable y no ejecutable se guardan en un segmento separado.
Utilidades para el análisis de programas
Existen dos formas principales de encarar el análisis de programas: el análisis dinámico y el estático. El análisis dinámico presupone el lanzamiento del código del programa en un depurador o un medio virtual y el análisis de su comportamiento. El análisis estático de los programas es el estudio del código con la ayuda de un desensamblador, sin ejecutar el código.
Cada situación dicta que tipo de análisis es mejor usar. Ambos enfoques no se excluyen el uno al otro, sino que con frecuencia se complementan.
Utilidades para el análisis dinámico de programas
Al igual que la mayoría de los sistemas Unix, Mac OS X ofrece muchas utilidades que pueden ser de gran provecho durante el análisis dinámico de aplicaciones y el diagnóstico del sistema. Muchas de ellas llegaron a Mac desde Unix, pero también hay programas que existen sólo para Mac OS X. Analizaremos varias utilidades que pueden instalarse desde la distribución de Mac OS X.
Todas las utilidades se pueden dividir en dos categorías.
- Utilidades de investigación de los procesos:
- fs_usage presta información sobre las llamadas del sistema respecto a las actividades relacionadas con el sistema de archivos;
- heap enumera todos los bloques de memoria asignados en la memoria dinámica para un proceso en particular;
- lsof muestra los ficheros abiertos en diversos procesos;
- top muestra la estadística de utilización de diferentes recursos en el sistema;
- vm_stat muestra la estadística de utilización del sistema de memoria virtual;
- gdb es un depurador que permite depurar los programas de forma remota;
- ddb es un depurador del núcleo. Exige conexión por medio del puerto serial;
- ktrace sirve para el seguimiento de la información sobre los eventos del sistema de determinado proceso en el nivel del núcleo;
- kdump muestra la información generada por el programa ktrace;
- sc_usage muestra la estadística del proceso indicado. Por ejemplo, utilización del tiempo del procesador, de las llamadas del sistema, etc.
Las utilidades de red enumeradas a continuación son bien conocidas en el mundo de Unix.
- netstat facilita diferentes datos del subsistema de red;
- tcpdump muestra el tráfico de red.
Para Mac OS X existen otros instrumentos de red conocidos a los usuarios de Unix, como nmap y WireShark.
Hay que mencionar que la mayoría de los programas con texto fuente abierto que existen para Unix, pueden fácilmente compilarse para Mac OS X. Un usuario experto en Unix puede crear un entorno de trabajo muy parecido a que está acostumbrado.
Utilidades para el análisis estático
Con mucha frecuencia, durante el análisis de programas nocivos no hay la posibilidad de ejecutar el programa analizado, o la ejecución del código no es deseable por criterios de seguridad. En estos casos es necesario recurrir al desensamblaje de ficheros.
Debido a que Mac OS X usa ficheros ejecutables en formato macho, el análisis estadístico en este sistema operativo tiene determinadas particularidades.
Así, la principal utilidad para analizar ficheros en formato macho es el programa otool. Con su ayuda se puede obtener información como: título del fichero, instrucciones de carga, punto de entrada y hasta se puede desensamblar el contenido de la sección que contiene el código ejecutable.
- file determina el tipo del fichero;
- otool sirve para analizar los ficheros macho;
- xxd permite realizar la conversión del fichero binario en hexadecimal y viceversa;
- IDAPro es un desensamblador.
A la par del crecimiento de la popularidad de Mac OS X en la plataforma Intel, muchos fabricantes de software han lanzado versiones de sus programas para esta plataforma. En la nueva versión 5.1 de Mac OS X se incluye.
Esto les facilitará la vida a los usuarios que “inmigran” desde Windows. Además, a veces el uso de IDAPro permite ejecutar algunas tareas de forma más rápida y simple que usando los medios estándar de Mac OS X.
Ejemplos de análisis de programas nocivos
Como ejemplo, analizaremos IM-Worm.OSX.Leap y Virus.OSX.Macarena usando algunas de las utilidades mencionadas. Es necesario mencionar que los programas nocivos que analizaremos son “pruebas de concepto”, que no tienen efectos destructivos y no representan serio peligro para los usuarios. Su principal objetivo es demostrar que es posible crear programas de ese tipo.
Análisis de IM-Worm.OSX.Leap
Leap no puede propagarse por Internet, pero lo hace por iChat. En la primera etapa Leap se difunde mediante la aplicación iChat como un enlace a un recurso de RapidShare. Se le dice a usuario que son capturas de pantalla de la nueva versión de Mac OS X Leopard. El destinatario de pulsar el enlace, confirmar la descarga del fichero, descomprimirlo y abrirlo. Después de lo cual el ordenador infectado envía el fichero (sin ninguna modificación) a toda la lista de contactos de Bonjour.
Leap se propaga como un fichero con el nombre latestpics.tgz y al ser descomprimido en finder aparenta ser un fichero jpeg.
Como Leap usa spotlight, es capaz de funcionar sólo en Tiger (Mac OS X 10.4.x). Para ejecutar Leap es necesario InputManager, pero InputManager no funciona en los sistemas para x86. Además, el fichero binario contiene código sólo para PowerPC. Por lo tanto, Leap funciona sólo en los ordenadores PowerPC.
Para empezar el análisis, esclarecermos el formato del fichero latestpics. Iniciamos la utilidad file con el argumento latestpics #file latestpics. Los resultados obtenidos muestran que estamos ante un fichero en formato macho.
Acto seguido, mediante la utilidad otool visualizamos el título del fichero binario: #otool -h latespics.
A continuación podemos ver el punto de entrada de Leap. El punto de entrada en macho se determina por medio de la instrucción #:otool -l latestpics, que muestra las instrucciones de carga. En este caso nos interesa la instrucción LC_UNIXTHREAD, en la cual se refleja el contenido de los registros del procesador al iniciarse. En PowerPC no interesa el contenido del registro srr0, que es el punto del entrada.
Con la ayuda de la utilidad nm (conocida por todos los usuarios de Unix) se puede ver la lista de todos los símbolos en el fichero binario, donde también se enumeran las siguientes funciones, cuyos nombres hablan por sí mismos y confirman que este fichero es potencialmente peligroso:
- _copySelf
- _infect
- _infectApps
Ahora podemos analizar con más atención el código. En esta tarea nos ayudará la utilidad otool -vt. Mediante esta utilidad podemos visualizar el contenido de la sección en el segmento __TEXT, donde está el código ejecutable del fichero latestpics:
Se envían líneas de texto a las funciones del sistema, pero están cifradas por la utilidad _xor:
Como resultado del descifrado obtenemos las siguientes líneas:
/Library/InputManagers
/bin/rm -rf /Library/InputManagers/apphook
/bin/mv -f /tmp/apphook /Library/InputManagers
~/Library/InputManagers
/bin/rm -rf ~/Library/InputManagers/apphook
/bin/mv -f /tmp/apphook ~/Library/InputManagers
%s/Contents/MacOS/%s /bin/cp ‘%s’ ‘%s/..namedfork/rsrc’
/bin/cp -f ‘%s’ ‘%s’
(kMDItemKind == ‘Application’) (kMDItemLastUsedDate >= $time.this_month)
/usr/bin/gzip -f -q /tmp/latestpics
El análisis de las líneas obtenidas nos hace comprender cuales son las acciones que ejecuta IM-Worm.OSX.Leap:
- e copia a sí mismo a /tmp como latestpics;
- crea el fichero tgz;
- extrae InputManager, llamado “apphook.bundle” y lo copia a /tmp;
- si el uid es igual a 0, se crea el catálogo /Library/InputManagers/, se eliminan todos los apphooks existentes y se copia el nuevo apphook de /tmp;
- si el uid no es igual a 0, se crea ~/Library/InputManagers/;
- desde este momento, al lanzarse cualquier aplicación de Mac OS X, se carga el nuevo apphook en su espacio de direcciones;
- después de lo cual al iniciarse las aplicaciones se trata de enviar latestpics.tgz mediante iChat.
Análisis de Virus.OSX.Macarena
Empezaremos el análisis determinando el formato del fichero. Para esto, como la vez pasada, usaremos la utilidad file:
El resultado de file nos dice que el fichero está en formato macho.
Luego, con la ayuda de otool podemos ver el título del fichero y determinar el punto de entrada:
Si miramos detenidamente, nos llama la atención el extraño punto de entrada en la dirección 0. La siguiente etapa debe ser el análisis del código, empezando desde el punto de entrada. Pero aquí surge un problema. No es posible desensamblar esta parte del fichero macho con otool, ya que esta utilidad permite analizar sólo el código en la sección text del segmento __TEXT.
En esta situación nos puede salvar IDAPro. Pero es necesario cargar en IDA el fichero binario. Después, se puede desensamblar el fichero:
Macarena es el primer virus que realmente infecta los ficheros en formato macho en el directorio dónde se encuentra.
El análisis del fichero infectado nos permite hacer las siguientes observaciones.
El virus modifica el punto de entrada en la entrada 0. En la dirección 0 de macho se carga el segmento __PAGEZERO. Como ya lo hemos mencionado al analizar la estructura de macho, __PAGEZERO no tiene lugar en el fichero en el disco. Por esta razón, en el disco el código se escribe al final del fichero. Esta técnica tiene un efecto inesperado: las aplicaciones como gdb, IDA o otool no muestran el código del virus.
Macarena es un virus bastante simple. Cuando se ejecuta, lista los ficheros en el directorio donde se encuentra e infecta los ficheros de formato macho para la arquitectura x86. Existen dos nuevas versiones del virus que también infectan los ficheros ppc. En lo demás, son similares a las versiones anteriores.
El virus no ejecuta ninguna otra acción.
Conclusion
Mac OS X se está volviendo cada vez más popular. A pesar de que por el momento existen sólo virus conceptuales para este sistema operativo, con el aumento del número de usuarios de Mac OS X también aumentará el interés de los delincuentes. Con este motivo, será necesario analizar con más frecuencia los programas para Mac OS X.
Afortunadamente, en Mac OS X hay muchos instrumentos útiles para el análisis de programas en particular y para el diagnóstico del sistema en su conjunto. Además, están empezando a aparecer programas de otros fabricantes que pueden ayudar a los especialistas y a los aficionados al análisis de programas.
Investigación de programas en Mac OS X