¿Cómo hacer ingeniería reversa del iOS?

Share this…

iOS es una plataforma de código cerrado. El interés en mirar en núcleo de IOS puede estar justificado por diferentes razones. Por ejemplo, es posible que desee ver en el proceso de verificación de código de la firma e investigación de vulnerabilidad.

Este artículo le mostrará paso a paso cómo obtener, descifrar y extraer una versión binaria de núcleo de IOS con ayuda del experto de análisis de vulnerabilidades informáticas.

Santoku es un sistema operativo de código abierto y libre que se centra en el análisis forense del dispositivo móvil, análisis de malware móvil, y la seguridad móvil.

 

¿Que necesitas?

  • Una instalación funcionando de Linux Santoku
  • Un dispositivo iOS
  • Algunas herramientas que encontrarás al leer el artículo
  • IDA Pro y HexRays plugin

El núcleo de IOS se basa en el núcleo de XNU con algunas modificaciones. Este núcleo es un código abierto. Una vez que tenga una versión binaria del núcleo, necesitaras utilizar algunas herramientas de ingeniería inversa para completar tu análisis. En iOS en lugar de encontrar un núcleo independiente, nos encontraremos con un “kernelcache”. Según expertos de análisis de vulnerabilidades informáticas de organización de ciberseguridad el kernelcache es esencialmente un contenedor para el núcleo en sí mismo y todas las extensiones (kexts para los más familiarizados con OS X), empacadas juntas.

 

¿Cómo hacerlo?

En la primera parte del artículo, asumiremos que se está ejecutando en una nueva instalación de Santoku Linux, así podemos continuar juntos.

Para extraer la memoria caché del núcleo se pueden extraer y descifrar desde su teléfono, o extraer y descifrar el archivo. Ipsw. Un archivo IPSW es un archivo que contiene el firmware y actualizaciones para el dispositivo. Con el fin de encontrar dónde descargar nuestro objetivo IPSW de Internet podemos buscar en internet.

En este ejemplo hemos elegido para extraer un IPSW de iOS 7.0.2 para el iPhone 4, descargable desde Internet.

A continuación, en de la terminal nosotros haremos:

wget https://appldnld.apple.com/iOS7/091-9871.20130924.7imYu/iPhone3,1_7.0.2_11A501_Restore.ipsw

unzip iPhone3,1_7.0.2_11A501_Restore.ipsw

 

Como podemos ver que hay un archivo kernelcache.release.n90. Nosotros vamos a descifrar este archivo con algunas herramientas disponibles libremente y analizarlo en IDA Pro. Para ello, necesitaremos de xpwn y las herramientas de lzssdec.

Primero instalamos algunas dependencias y herramientas:

sudo apt-get install git build-essential libz-dev libbz2-dev libusb-dev cmake libpng12-dev

git clone <a href=”https://github.com/planetbeing/xpwn.git”>https://github.com/planetbeing/xpwn.git</a>

cd xpwn/

ls    

 

IOS reverse engineer  

La carpeta xpwntool

En la carpeta de BUILD podemos encontrar las instrucciones para construir la herramienta, o simplemente seguir esta guía:

mkdir build

cd build

cmake ../

make

Ahora encontraras xpwtool bajo la subcarpeta ipsw-patch:

IOS reverse engineer1

 

La locación de xpwntool

Ahora podemos copiar el xpwntool en nuestro directorio con nuestro kernelcache encriptado. Ahora necesitas encontrar tu IV y Key para  tu tipo particular de dispositivo y archivo (kernelcache). Ellos no serán incluidos en esta guía, pero puedes descargarlos desde su dispositivo con jailbreak (que es modelo de dispositivo, archivo, y la versión específica de IOS) o encontrarlos en línea el archivo kernelcache.

Según expertos de análisis de vulnerabilidades informáticas de organización de ciberseguridad, también necesitará la clave AES y IV para el archivo. Estos se almacenan en el archivo encriptado con la clave de GID en el dispositivo. Esta clave GID está en el hardware del dispositivo y que es compartido entre los dispositivos que se tienen el mismo procesador.

./xpwntool kernelcache.release.n90 kernelcache.decrypted -iv [MY_IV] -k [MY_KEY] -decrypt      

 

IOS reverse engineer2

 

Una lista de los archivos descifrados con kernelcache:

Para obtener un valido Mach-O ejecutable para analizar en IDA Pro vamos a tener que utilizar otra herramienta, lzssdec.

wget <a href=”https://nah6.com/~itsme/cvs-xdadevtools/iphone/tools/lzssdec.cpp”>https://nah6.com/~itsme/cvs-xdadevtools/iphone/tools/lzssdec.cpp</a>       g++ lzssdec.cpp -o lzssdec</em>  

 

IOS reverse engineer3

 

lzssdec compilado

Podemos ejecutar lzssdec sobre la imagen descifrada:

./lzssdec -o 448 < kernelcache.decrypted > kernelcache.mach.arm    

Podemos comprobar el resultado con:

xdd kernelcache.mach.arm | head    

Y ver que los primeros bytes son:

0xfeedface     

 

IOS reverse engineer4

 

Ver los resultados en Santoku-Linux

Usando comando de file:

file kernelcache.mach.arm    

Ahora podemos tomar nuestro kernelcache.mach.arm y ponerlo en IDA Pro. Vamos a utilizar IDA Pro en Windows con HexRays eventualmente. Abrimos el kernelcache.mach.arm con IDA Pro.

 

IOS reverse engineer5

 

kernelcache.mach.arm en IDA Pro

Dan Heyes, consultor de análisis de vulnerabilidades informáticas de organización de ciberseguridad menciona que la herramienta nos preguntará si queremos dividir el núcleo en las muchas kexts que se combinan en el interior (en el núcleo IOS y las extensiones cargables de kext están todos empacados dentro de kernelcache). Elegir sí y confirmando las otras ventanas para iniciar el análisis.

 

IOS reverse engineer6

IOS reverse engineer7

 

Áreas inexploradas en el análisis IDA Pro

Observe todas las áreas inexploradas por IDA, veremos que al final del análisis vamos a tener una idea más clara de lo que está pasando en el archivo binario.

Cuando se termina el análisis, podemos guardar la base de datos y eventualmente tomar una copia de seguridad.

 

IOS reverse engineer8

 

Análisis terminado en IDA Pro

Ahora podemos empezar a ingeniería reversa del núcleo IOS y ajustar el análisis automático inicial hecho por IDA Pro. Según expertos organización de ciberseguridad, ingeniería reversa del núcleo IOS ayudaría hacer análisis de vulnerabilidades informáticas en el núcleo IOS.