1. Libros y videos
  2. Ciberseguridad y malwares
  3. Malwares dirigidos contra los sistemas macOS
Extrait - Ciberseguridad y malwares Detección, análisis y Threat Intelligence (4ª edición)
Extractos del libro
Ciberseguridad y malwares Detección, análisis y Threat Intelligence (4ª edición) Volver a la página de compra del libro

Malwares dirigidos contra los sistemas macOS

Introducción

MacOS es el sistema operativo desarrollado por Apple y utilizado en sus ordenadores desde 1984. Su nombre ha ido cambiando a lo largo de los años; las primeras versiones se llamaban Macintosh System Software, luego se acortó a System Software, después Mac OS, Mac OS X, OS X y finalmente a macOS, que es el nombre utilizado en la actualidad. Se trata de un sistema operativo propietario con ciertos componentes cuyo código se ha hecho público. El núcleo (XNU) y las utilidades relacionadas están disponibles en GitHub bajo el nombre de Darwin: https://github.com/apple-oss-distributions/xnu.

En 2023, macOS representó el 17 % del mercado de ordenadores de sobremesa y portátiles. Esta cifra se eleva al 30 % en el mercado estadounidense, y aumenta cada año. Este aumento convierte a este sistema operativo en un objetivo para los atacantes.

Este capítulo presenta el sistema operativo macOS. Veremos su arquitectura, sus formatos de archivo y los mecanismos de seguridad puestos en marcha por Apple. Como en los capítulos anteriores, veremos cómo montar un laboratorio de análisis en una máquina virtual. A continuación, veremos los distintos lenguajes de desarrollo utilizados en macOS y cómo analizarlos. Por último, veremos un caso práctico relacionado con el malware CloudMensys.

Sistema operativo macOS

1. Historia

Los ordenadores Apple han cambiado varias veces de tipo de procesador. De 1984 a 1994, la primera generación de ordenadores Apple utilizó procesadores Motora (serie 68000). De 1994 a 2005, la segunda generación de ordenadores utilizó procesadores PowerPC. En 2005, Apple cambió los procesadores PowerPC por los Intel (x86-64). Finalmente, en 2020, Apple pasó a utilizar procesadores ARM diseñados internamente por la empresa.

Esta tabla resume las principales versiones de macOS desde 1984. Algunas versiones del sistema operativo admitían varias versiones de procesador para facilitar la transición.

Nombre (nombre en clave)

Versión

Fecha de lanzamiento

Procesadores compatibles

Software del sistema Macintosh

1.0

Enero de 1984

Motorola

Software del sistema Macintosh

2.0

Abril de 1985

Motorola

Software del sistema Macintosh

3.0

Enero de 1986

Motorola

Motorola

4.0

Enero de 1987

Motorola

Software del sistema

5.0

Octubre de 1987

Motorola

Software del sistema

6.0

Abril 1988

Motorola

Sistema 7.1

7.1

Agosto de 1992

Motorola, PowerPC

Mac OS 7.6

7.6.1

Abril de 1997

PowerPC

Mac OS 8

8.0

Julio de 1987

PowerPC

Mac OS 9

9.0

Octubre de 1999

PowerPC

Mac OS X (Cheetah)

10.0

marzo de 2001

PowerPC

Mac OS X (Tiger)

10.4

Abril de 2005

PowerPC, Intel

Mac OS X (Lion)

10.7

Julio de 2011

Intel

Mac OS X (Yosemite)

10.10

Octubre de 2014

Intel

macOS (Sierra)

10.11

Septiembre de 2016

Intel

macOS (Catalina)

10.15

Octubre de 2019

Intel

macOS (Big Sur)

11

Noviembre de 2020

Intel, ARM

macOS (Monterey)

12

Octubre de 2021

Intel, ARM

macOS (Ventura)

13

Octubre de 2022

Intel, ARM

macOS (Sonoma)

14

Septiembre 2023

Intel, ARM

macOS (Sequoia)

15

Junio de 2024

Intel, ARM

En el momento de redactar este libro, la versión más reciente de macOS es Sequoia, lanzada en junio de 2024.

2. Arquitectura

El sistema operativo macOS es un sistema UNIX compuesto por varias capas sobre el hardware. El siguiente diagrama resume estas capas:

Images/5-cap5_pag4.png

Hardware

Esta capa no forma parte del sistema operativo como tal. Pero todos los sistemas operativos se ejecutan sobre hardware y representa todos los aspectos físicos del terminal: procesador, memoria, conexiones, etc.

Núcleo del SO

La primera capa que controla el hardware es el "core OS", también conocido como Darwin por Apple. Contiene el núcleo (XNU) y las utilidades del sistema que proporcionan al usuario...

Creación de un laboratorio de análisis

1. Restricciones de hardware

Para analizar, instalar y manipular código malicioso para macOS, necesitamos un laboratorio de análisis. El malware nunca se debe ejecutar en su entorno de trabajo real.

Como se explicó al principio de este capítulo, macOS se ejecuta en un procesador Intel o ARM. Una máquina física Intel ejecutará una máquina virtual Intel y una máquina física ARM ejecutará una máquina virtual ARM. Cruzar arquitecturas de procesador es posible gracias a la emulación, pero el rendimiento se ve muy afectado.

En este capítulo, utilizaremos una máquina Windows con un procesador Intel y crearemos una máquina virtual macOS Intel. La limitación de este enfoque es que solo podremos ejecutar binarios Intel (o binarios universales que contengan versiones Intel de la aplicación).

Si tiene un ordenador Apple con procesador ARM (M1, M2 o M3), puede utilizar el software gratuito UTM (https://mac.getutm.app/) para crear máquinas virtuales macOS ARM.

2. Configuración de VirtualBox

Al igual que con el análisis de malware de Windows, utilizaremos el hipervisor gratuito VirtualBox, que se puede descargar de https://www.virtualbox.org/wiki/Downloads.

 Para crear la nueva máquina virtual, haga clic en New. A continuación, configure el nombre de la máquina y su tipo....

Análisis de un binario Mach-O

1. Análisis estático con Ghidra

Ghidra es una herramienta gratuita de análisis estático que vimos en el capítulo de Ingeniería inversa. Se puede descargar de https://ghidra-sre.org/. No volveremos sobre cómo utilizarla, sino que nos centraremos en las características específicas de macOS.

Al abrir un binario universal, Ghidra muestra que hay varios archivos presentes en el archivo a analizar y sugiere analizarlo como un único archivo o en modo Batch.

images/05EP12N5.png

Cuando elegimos el modo Batch, podemos ver las arquitecturas presentes en el binario (ARM e Intel):

images/05EP13N5.png

Podemos analizar ambas arquitecturas o solo una. Es preferible elegir la arquitectura con la que nos sintamos más cómodos. Si el binario no es un binario universal, solo contiene una arquitectura y lamentablemente no tendremos elección.

2. Lenguajes C y C++

Los desarrolladores pueden optar por desarrollar su malware en C o C++. En este caso, el análisis es similar al de un binario Windows. El API es idéntico al API C utilizado por Windows o incluso Linux. Las herramientas de análisis como Ghidra no tienen ningún problema para analizar estos binarios y generar pseudocódigo.

3. Lenguaje Swift

Swift es el lenguaje de desarrollo más reciente de Apple. He aquí un ejemplo de código:

// declaración de una función  
func greet() {  
  print("Hello World!")  
}  
// llamar a la función  
func greet() 

Analizar malware desarrollado en Swift es particularmente complicado. Para ilustrarlo, hemos analizado malware compilado a partir de un proyecto de código abierto: SwiftBelt. El código fuente está disponible en GitHub: https://github.com/cedowens/SwiftBelt/blob/master/Sources/SwiftBelt/main.swift. Este es el hash del binario compilado: 71198a8e8b846d61c37954eb5577420f.

Si abrimos el archivo en Ghidra podemos ver que los símbolos se conservan más o menos, como podemos ver en esta imagen:

images/05EP14N5.png

SwiftBelt es el nombre del módulo y Clipboard en la línea seleccionada es el nombre de la función. Como podemos ver en la captura de pantalla de GitHub: 

images/05EP15N5.png

Todas las funciones que aparecen a la derecha en GitHub están efectivamente presentes en Ghidra (Banner, SecCheck, getaddy, etc.).

Las dificultades surgen cuando...

Caso práctico de CloudMensis

1. Introducción

El grupo atacante APT37 utiliza el malware CloudMensis, que lleva activo desde 2012 y parece estar vinculado a Corea del Norte. Este malware tiene como objetivo el sistema operativo macOS. Se trata de un binario universal compilado para arquitecturas Intel y ARM. Para facilitar la lectura de este capítulo, analizaremos la versión para Intel. CloudMensis es un malware que permite al atacante administrar máquinas comprometidas de forma remota. Su particularidad es que utiliza proveedores en la nube como servidores de control.

2. Persistencia

El malware se divide en dos binarios, el primero de los cuales configura la persistencia y descarga el segundo binario. El segundo binario es el malware CloudMensis. Aquí está el hash MD5 del primer malware: 01c0b7c5bf605ed267b2be3d024eb90f.

Este binario solo tiene dos clases: AppDelegate y pCloud:

images/05EP22N5.png

El punto de entrada del binario carga la clase AppDelegate (línea 10) y ejecuta el método start (línea 13).

images/05EP23N5.png

El propósito del método start es configurar la persistencia para iniciar el malware. Un agente se define creando el archivo /Library/LaunchDaemons/.com.apple.WindowServer.plist. El propósito de este archivo es ejecutar el archivo /Library/WebServer/share/httpd/manual/WindowServer previamente descargado. Es interesante observar que el archivo .plist comienza con un punto. Se trata de archivos ocultos de UNIX. No se muestran por defecto con el comando ls; hay que añadir la opción -a para listar los archivos ocultos.

La siguiente imagen muestra la creación del archivo .com.apple.WindowServer.plist (línea 49) mediante el API writeToFile. En las líneas anteriores vemos la creación del contenido XML del archivo con los campos RunAtLoad (línea 46), SessionCreate (línea 42) y ProgramArguments (línea 48), así como la ruta del binario a ejecutar (línea 29):

images/05EP24N5.png

El segundo paso consiste en descargar CloudMensis. El malware instancia una clase llamada pCloud (línea 51), ejecuta el método DownloadFile (línea 53) y finalmente escribe el archivo /Library/WebServer/share/httpd/manual/WindowServer (líneas 55 y 56):

images/05EP25N5.png

Como su nombre indica, la clase pCloud descarga un archivo del proveedor de la nube del mismo nombre. Podemos ver la creación de la URL de descarga en la línea 37:

images/05EP26N5.png

3. Configuración...

Resumen

En este capítulo hemos visto cómo funciona el sistema operativo macOS. Apple ha elegido lenguajes de desarrollo específicos para su ecosistema. Las herramientas de análisis no están maduras para algunos de estos lenguajes, como Swift lo que hace que el análisis de malware sea tedioso. Pero no es imposible: con práctica, es posible ignorar la complejidad y comprender los mecanismos del binario analizado. También hemos visto el caso del malware CloudMensis. Tiene la ventaja de obligar al analista a comprender el funcionamiento interno del sistema operativo para entender qué mecanismos de seguridad causan problemas al malware y cómo se eluden (explotando una vulnerabilidad en el contexto de CloudMensis).

Ningún sistema operativo es inmune al malware. Cuanta más cuota de mercado tenga macOS, más malware se desarrollará para esta plataforma. A medida que las empresas optan por utilizar este sistema operativo, los atacantes se interesan por él y comprenden cómo funciona. Los equipos de defensa y análisis de malware tienen que hacer lo mismo.