¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Seguridad informática y Malwares
  3. Malwares dirigidos contra los sistemas iOS
Extrait - Seguridad informática y Malwares Análisis de amenazas e implementación de contramedidas (3ª edición)
Extractos del libro
Seguridad informática y Malwares Análisis de amenazas e implementación de contramedidas (3ª edición)
1 opinión
Volver a la página de compra del libro

Malwares dirigidos contra los sistemas iOS

Introducción

iOS es el sistema operativo que funciona en los dispositivos Apple, excepto los Mac. Es, pues, el sistema operativo de los iPhone, iPad, iPod, Apple TV así como de los Apple Watch. Se encuentra en el centro del ecosistema Apple. Los Mac (ordenadores de sobremesa y portátiles) funcionan con otra variante: macOS. En este capítulo hablaremos, solamente, del sistema iOS. En 2017, Apple representó el 25 % de los teléfonos en el mundo, principalmente en los países ricos. Al ser un sistema operativo patentado, y dada la seguridad implementada por Apple en sus terminales, son muy pocos los programas malignos dirigidos contra el iOS. Sin embargo, la amenaza no es nula y, en los últimos años, se han visto cada vez más ataques contra estos dispositivos, a pesar del coste que supone a los atacantes el tomar como objetivo esta plataforma.

Este capítulo presentará brevemente el sistema operativo iOS, así como el formato de las aplicaciones. Veremos para qué sirve el jailbreak, en qué puede ser útil para un analista y, por otro lado, el riesgo que puede representar en un dispositivo que se utiliza a diario. Estudiaremos los principales vectores de infección, así como la manera de configurar un laboratorio de análisis. Como colofón, veremos cómo realizar un análisis estático y dinámico de un malware...

El sistema operativo iOS

1. Historia

La primera versión de iOS la presentó Apple en 2007. En aquel momento, el sistema operativo se llamaba iPhone OS y funcionaba en la primera generación de iPhone. A partir de esta fecha, más o menos cada año, una nueva versión mayor de este OS (Operating System; sistema operativo) está disponible en los productos compatibles con Apple. En el momento de escribir este libro, la última versión estable es la iOS 16.5.1.

Al igual que en el caso de Android, este sistema operativo permite gestionar el hardware del dispositivo (pantalla, teclado, sensores tales como el acelerómetro, GPS, sensor de huella digital…), conexiones (Wi-Fi, Bluetooth, telefonía móvil…), cámara o incluso la tarjeta de memoria. El sistema operativo proporciona una API a los desarrolladores para que una misma aplicación pueda funcionar en todos los modelos que usan este sistema operativo. Las aplicaciones pueden desarrollarse en lenguaje Objective-C o Swift.

2. Arquitectura

iOS es un sistema operativo patentado. No se tiene acceso al código fuente ni al usuario root para poder estudiar su funcionamiento. Esta es una de las razones por las cuales nació jailbreak. Este consiste en usar vulnerabilidades existentes para poder convertirse en root en nuestros dispositivos. La arquitectura de funcionamiento de iOS se ha documentado gracias a estos jailbreaks. Veremos este tema en detalle en la sección JailBreak. Los comandos Unix ejecutados en este capítulo se realizan en un dispositivo con jailbreak. No se pueden ejecutar en un dispositivo estándar.

He aquí un esquema de la arquitectura de iOS:

Images/EP06_captura001_arquitectura_iOS.png

Adentrémonos un poco más en cada una de las capas de esta arquitectura, de abajo hacia arriba.

Hardware

La primera capa no representa realmente al sistema operativo, sino que empieza por el hardware. Este comprende todos los aspectos físicos del dispositivo: pantalla, sensor, conexiones, etc.

Núcleo XNU y sus extensiones

El núcleo permite establecer el vínculo entre la parte lógica (software) y la material (hardware). El objetivo es hacer una abstracción de la parte material. En efecto, dependiendo del tipo de dispositivo (iPhone o iPad) o incluso de la generación de un mismo dispositivo, los componentes pueden cambiar. Esta abstracción hace que no haya que gestionar todas esas diferencias.

El núcleo está, históricamente, basado en un núcleo BSD (Berkeley Software Distribution), pero este se ha desarrollado con los años. El núcleo dispone de Syscall BSD, pero también de una tecnología propia de XNU (X is Not Unix): Mach Trap.

Las Syscall (system call o llamadas al sistema) son interrupciones que permiten al espacio de usuario (userland) solicitar una acción al núcleo. Por ejemplo, si una aplicación quiere escribir en un archivo, tiene que solicitarle al núcleo que escriba en el sistema de archivos. Esta aplicación envía un Syscall «write» para realizar esta tarea. Al ser el núcleo XNU software de código abierto, la lista de las Syscall está disponible en línea en: https://opensource.apple.com/source/xnu/xnu-1504.3.12/bsd/kern/syscalls.master. En el caso de nuestro ejemplo, el valor de la Syscall será 4:

0    AUE_NULL      ALL    { int nosys(void); }   { indirect syscall } 
1    AUE_EXIT      ALL    { void exit(int rval); }  
2    AUE_FORK      ALL    { int fork(void); }  
3    AUE_NULL      ALL    { user_ssize_t read(int fd, user_addr_t cbuf, 
user_size_t nbyte); }  
4    AUE_NULL      ALL    { user_ssize_t write(int fd, user_addr_t cbuf, 
user_size_t nbyte); }  
5    AUE_OPEN_RWTC ALL    { int open(user_addr_t path, int flags,  
int mode); }  
6    AUE_CLOSE     ALL    { int close(int fd); }  
7    AUE_WAIT4     ALL    {...

Vectores de infección

1. Acceso físico al dispositivo

Uno de los vectores de infección más extendidos es el acceso físico al dispositivo. El atacante necesita el código PIN para poder instalar una aplicación. Lo puede hacer a través de iTunes o usando Cydia Impactor, como veremos en la sección Crear un laboratorio de análisis.

2. Enlace hacia un archivo .ipa

Se puede enviar un enlace a la víctima hacia la aplicación por e-mail o mensajería instantánea. El atacante intentará manipular a la víctima para hacerle instalar la aplicación. Por ejemplo, se hará pasar por una mujer durante varios días y pedirá a la víctima que instale una aplicación para poder hacer una videoconferencia con ella. En iOS, la instalación manual de una aplicación necesita mucha interacción por parte del usuario.

3. Tiendas alternativas

Al igual que para Android, existen tiendas alternativas para las aplicaciones iOS. En particular, en la comunidad tweak que modifica aplicaciones reales con el propósito de añadirles funcionalidades. Existe, por ejemplo, el sitio Tweakbox: www.tweakboxapp.com. En este tipo de sitios las aplicaciones no están tan controladas como en la tienda de Apple. Para poder instalar las aplicaciones de este tipo de sitios, el usuario debe instalar un perfil o confiar en el certificado...

Crear un laboratorio de análisis

1. Analizar la red

Las mismas técnicas que se describieron para Android en el capítulo Malwares dirigidos contra los sistemas Android se pueden utilizar con el objetivo de vigilar las comunicaciones de redes entre el dispositivo iOS e Internet. El uso de Burp, requiere una configuración un poco diferente a la de Android. Para usarlo con iOS, hay que ir al menú Preferencias, después Wi-Fi, y hacer clic en el icono I rodeado de un círculo azul (icono de Wi-Fi):

images/06EP03.PNG

Aparece el menú Proxy. Ahora hay que optar por el modo Manual y escribir la dirección IP del proxy y el número de puerto. El certificado para interceptar las conexiones HTTPS se añade de la misma manera que para Android: hay que conectarse a http://burp, hacer clic en CA Certificate y validar las ventanas de advertencia en el dispositivo.

2. Jailbreak de una terminal y despliegue de una aplicación

La pregunta que nos podemos hacer cuando estamos creando un laboratorio para el análisis de los malwares para iOS es: ¿es necesario hacer un jailbreak al dispositivo de análisis? La respuesta es no; no es obligatorio, pero hace la vida de analista más fácil. En efecto, la mayoría de las herramientas de análisis no necesitan que el dispositivo esté liberado, pero entonces están limitadas en términos de funcionalidades. Es por esto...

Análisis estático de una aplicación

1. Introducción

La herramienta de análisis, de código abierto, Ghidra que ya hemos utilizado anteriormente, admite a la perfección el formato Mach-O, así como la arquitectura ARM. En los ejemplos de esta sección, la arquitectura será, precisamente, ARM. En este libro no describiremos dicha arquitectura. En el caso de análisis en iOS (o Android), a veces es necesario aprender una nueva arquitectura, sus instrucciones, la manera en la que se pasan los argumentos en las funciones, etc. La arquitectura ARM está completamente documentada.

Si ese campo le interesa, le recomendamos que lea esta documentación: https://developer.arm.com/documentation/100076/0200/preface

Con el objetivo de facilitar la lectura y de evitar tener que aprender la nueva arquitectura, vamos a usar el pseudocódigo de Ghidra.

2. Analizar con Ghidra

Tomemos de nuevo el ejemplo precedente del falso WhatsApp. Tenemos la aplicación y también una librería dinámica. Esta librería está inyectada en el binario de WhatsApp para poder modificar su comportamiento. Abramos este binario con Ghidra. Aparecerá la siguiente ventana:

images/06EP07.PNG

El archivo boptionspro.dylib contiene binarios para distintas arquitecturas. Ghidra admite este tipo de archivo. Basta con hacer clic en Batch y elegir la carpeta de la aplicación:

images/06EP08.PNG

Podemos ver que el binario contiene una versión de 32 y otra de 64 bits. En cuanto hayamos elegido, vamos a ver las dos arquitecturas en Ghidra:

images/06EP09.PNG

Al hacer doble clic en ARM-32, elegiremos la versión 32 bits del binario.

Las aplicaciones iOS están desarrolladas en Objective-C o Swift. Estos dos lenguajes están orientados a objetos, lo que hace que el análisis del flujo de ejecución del binario sea complicado. En efecto, los métodos son ejecutados como resultado de un evento o una acción del usuario.

Las clases presentes en el binario están disponibles en la ventana Symbol Tree (Árbol de símbolos):

images/06EP10.PNG

En este ejemplo, el atacante no ha intentado esconder el nombre de las clases ni los métodos, lo que facilitará el análisis. Veamos los métodos de la clase PhnNumber:

images/06EP11.PNG

Basándonos simplemente en los nombres de los métodos, podemos adivinar que permiten obtener información del dispositivo, como la lista de contactos o el nombre del dispositivo. Veamos más de cerca el inicio del método SendPicToSrv:

  local_18 = 0;  
 local_14 = param_2;  
 local_10 = param_1;  
 _objc_storeStrong(&local_18,param_3);  
 local_1c = 0;  
 _objc_storeStrong(&local_1c,param_4);  
 local_20 = 0;  
 _objc_storeStrong(&local_20,param_5);  
 (*(code *)_objc_msgSend)(&PhnNumber,"getInstance");  
 uVar1 = _objc_retainAutoreleasedReturnValue();  
 (*(code *)_objc_msgSend)(uVar1,"giveMeUrl:",local_1c);  
 uVar2 = _objc_retainAutoreleasedReturnValue();  
 (*(code *)_objc_msgSend)(&PhnNumber,"getInstance");  
 uVar3 = _objc_retainAutoreleasedReturnValue();  
 (*(code *)_objc_msgSend)(uVar3,"readDevieName");  
 uVar4 = _objc_retainAutoreleasedReturnValue();  
 (*(code *)_objc_msgSend)(uVar4,"stringByAddingPercentEscapesUsing 
Encoding:",4);  
 uVar5 = _objc_retainAutoreleasedReturnValue();  
 (*(code *)_objc_msgSend)(local_20,"stringByAddingPercentEscapes  
UsingEncoding:",4);  
 uVar6 = _objc_retainAutoreleasedReturnValue();  
 (*(code *)_objc_msgSend)  
           (&_OBJC_CLASS_$_NSString,"stringWithFormat:",  ...

Análisis dinámico

1. Usar Frida

En el capítulo Malwares dirigidos contra los sistemas Android, hemos visto cómo utilizar Frida. Esta herramienta admite también iOS. Se puede instrumentar la ejecución de una aplicación iOS. En un dispositivo liberado mediante jailbreak, la instalación se hace usando Cydia. Hay que ir al menú Manage (Administrar), seleccionar Sources (Fuentes), luego Edit (Editar) y hacer clic en Add (Añadir) para agregar la URL del repertorio de Frida: https://build.frida.re. A partir de ese momento, Frida aparecerá en Cydia. Bastará con hacer clic en ella para instalarla.

Para tener un resumen de la utilización de Frida en iOS, tomemos el ejemplo de una falsa aplicación Safari:

ID -[websf_webldlnk](ID param_1,SEL param_2)  
{  
  undefined4 uVar1;  
  ID IVar2;  
  undefined4 local_14;  
  SEL local_10;  
  ID local_c;  
 
  local_10 = param_2;  
  local_c = param_1;  
  _objc_msgSend(param_1,"webencpass:",  
                &cf_cqtT3V19LfSsOX/rsjgEfMg-  
duQRrs+HKrSWRiaWKqTLv1vx8dvVhTA1/0h5ErGkT);  
  local_14 = _objc_retainAutoreleasedReturnValue();  
  uVar1 = _objc_retain(local_14);  
  _objc_storeStrong(&local_14,0);  
  IVar2 = _objc_autoreleaseReturnValue$shim(uVar1);  
  return IVar2;  
} 

Este método descifra la cadena con el método webencpass. Si miramos este...

Técnica utilizada para los malwares en iOS

1. Inyectar librerías

Una de las técnicas más frecuentemente utilizadas en iOS consiste en usar una aplicación legítima y cargar una librería maliciosa. La comunidad de creadores de tweaks utilizan esta técnica, aplicada legítimamente, en la que los desarrolladores añaden funcionalidades a las aplicaciones existentes: por ejemplo, admitir varias cuentas en la aplicación WhatsApp.

Para realizar esta técnica, el desarrollador necesita la aplicación original (descifrada, en el caso de que esté cifrada) y el script iOS Dylib Patching disponible en GitHub: https://github.com/depoon/iOSDylibInjectionDemo. El primer paso consiste en crear una librería dinámica en XCode, el compilador de Apple. He aquí un ejemplo de librería que va a modificar los datos de la geolocalización del usuario y poner el dispositivo en el centro de la central nuclear de Chernóbil:

LocationSwizzler.swift  
 
import Foundation  
import CoreLocation  
 
public class LocationSwizzler: NSObject {  
   static var currentLocation = CLLocationCoordinate2DMake(51.3861, 
30.0993) //Geolocalización de Chernóbil  
  
   static var originalMethod: Method?  
   static var swizzleMethod: Method?  
   static var originalDelegate: CLLocationManagerDelegate?  
 
   static public func turnOnSwizzleForCoordinate(){  
       let m1 = class_getInstanceMethod(CLLocation.self, #selector  
(getter: CLLocation.coordinate))  
       let m2 = class_getInstanceMethod(self, #selector  
(self.fakeCoordinate))  
 
       method_exchangeImplementations(m1, m2)  
   }  
 
   public func fakeCoordinate() -> CLLocationCoordinate2D {  
       return LocationSwizzler.currentLocation  
   }  
 
} 

Esta clase manipula el objeto CLLocation que contiene la geolocalización. Se utiliza un hook para remplazar el código...

Resumen

Este capítulo explica cómo funciona el sistema operativo iOS y cómo los desarrolladores de malwares trabajan en esta plataforma. Hay dos grandes familias de amenazas: las aplicaciones estándares maliciosas y los malwares que funcionan en los dispositivos liberados por jailbreak. El jailbreak puede ser obra del propietario o de un atacante si dispone de un 0-day o si el dispositivo no está actualizado.

Los malwares en iOS son raros, pero existen. Es importante estar preparados y disponer de las herramientas necesarias, así como de un laboratorio de análisis funcional el día que se nos solicite este tipo de investigación. El número de casos está en constante evolución, año tras año.