Aplicaciones móviles iOS de ingeniería inversa

Aplicaciones móviles iOS de ingeniería inversa no es una tarea sencilla. En comparación con la ingeniería inversa de Android con herramientas como apktool, jadx y similares, las herramientas de inversión para iOS son escasas debido a que las medidas de seguridad implementadas por Apple y iOS son menos de código abierto en general. Esto hace que el proceso de inversión sea un poco más complicado pero no imposible de ninguna manera.

En este blog, aprenderemos los conceptos básicos de la ingeniería inversa de los binarios de iOS utilizando algunas de las herramientas más populares proporcionadas por Apple (Xcode Command Line Tools) y también algunas herramientas de terceros. Estos nos ayudarán a obtener información valiosa sobre la aplicación móvil que estamos analizando.

Tenga en cuenta que usaremos macOS para realizar estas pruebas porque proporciona las utilidades y los comandos más útiles para lograr nuestro objetivo. Si no tiene acceso a macOS, siempre puede tomar las ideas presentadas en el contenido de este blog y utilizar herramientas similares disponibles en otros sistemas operativos para lograr un objetivo similar.

Herramientas y utilidades para aplicaciones iOS de ingeniería inversa

Primero, echemos un vistazo rápido a algunas de las herramientas y utilidades que usaremos para obtener conocimiento adicional sobre la aplicación con la que estamos trabajando:

Estos son bastante sencillos de usar y pueden proporcionar mucha información relacionada con el binario que estamos intentando aplicar ingeniería inversa. Antes de comenzar, asegúrese de configurar todas las herramientas anteriores y asegúrese de que funcionen correctamente. Una buena manera de probar esto en herramientas basadas en terminales es emitir el help comando, que en la mayoría de los casos será una variación de --help, --h, o similar. Si la lista de comandos relacionados con la herramienta es devuelta por el --help llamada, lo más probable es que la herramienta esté funcionando correctamente.

Aplicaciones moviles iOS de ingenieria inversa

Empezando

Una vez que nuestro entorno está configurado, estamos listos para comenzar. Trabajaremos con iGoat, una aplicación de iOS intencionalmente vulnerable disponible públicamente en GitHub y presentada por OWASP. Sigamos adelante y descarguemos el binario: https://github.com/OWASP/iGoat-Swift

Una vez que hayamos descargado el archivo .ipa, localicémoslo y abrámoslo con la herramienta Archive Utility de macOS. Esto descomprimirá el binario y revelará algunas carpetas. Todos los binarios de iOS tienen un Payload carpeta que contiene un archivo .app, a menudo con el mismo nombre que el binario que estamos analizando. Al hacer clic con el botón derecho en este archivo y seleccionar ‘Mostrar contenido del paquete’, se mostrarán los diferentes archivos que componen el propio binario.

1677580145 257 Aplicaciones moviles iOS de ingenieria inversa

1677580145 242 Aplicaciones moviles iOS de ingenieria inversa

1677580145 878 Aplicaciones moviles iOS de ingenieria inversa

Al mostrar el contenido del paquete de cualquier archivo .app que pertenezca a un .ipa, notaremos que también hay un archivo ejecutable de Unix con el mismo nombre que el .app. Este será el archivo binario principal de la aplicación, mientras que los otros archivos allí son componentes de apoyo que mantienen la aplicación en funcionamiento.

Ahora que hemos repasado los componentes de un binario de iOS, ¡comencemos a invertir! Abra la terminal y navegue hasta la carpeta Payload que acabamos de descompilar. Una vez en ese directorio, estamos listos para comenzar.

Nuevo Méjico

Empezaremos con nm. Como se mencionó anteriormente, esta utilidad nos ayudará a mostrar diferentes componentes de la aplicación para recopilar información. Lo uso principalmente cuando realizo tareas relacionadas con el cumplimiento en las que necesito verificar si la aplicación que estoy probando implementa un determinado método que va en contra de un determinado estándar, cuando realizo tareas de reconocimiento (por ejemplo, cuando busco nombres de funciones relacionados con implementaciones criptográficas débiles como ‘SecRandomCopyBytes’ o similar), y cuando quiero ver qué nombres de funciones no han sido ofuscados por el desarrollador. Esto es útil ya que ayuda a que la recopilación de información sea un poco más fácil al permitirnos formular un plan sobre las funciones a las que nos dirigiremos a continuación como parte de nuestro proceso de ingeniería inversa. En mi experiencia, nm funciona mejor con la Terminal grep utilidad ya que me permite filtrar el contenido descargado por nm y eche un vistazo rápido a los resultados en lugar de tener que desplazarse por muchos resultados. Un requisito de cumplimiento muy común es el uso de la clase de protección de datos NSFileProtectionComplete, por lo que una forma de ver las diferentes clases de protección de datos implementadas en el código fuente es usar el siguiente comando: nm iGoat-Swift.app/iGoat-Swift | grep -i protect

1677580145 653 Aplicaciones moviles iOS de ingenieria inversa

En la captura de pantalla anterior, podemos identificar llamadas a NSFileProtectionNone y similares, lo que podría provocar fallas de cumplimiento para ciertas organizaciones. El nm La utilidad también se puede usar de manera similar para buscar el uso de métodos obsoletos (incluyendo el nombre del método deseado después del grep comando en lugar de ‘proteger’) y revelar nombres de funciones que no han sido ofuscados (nm iGoat-Swift.app/iGoat-Swift | less mostrará estos: ¡advertencia de salida larga!)

1677580146 133 Aplicaciones moviles iOS de ingenieria inversa

herramienta

A continuación tenemos otool, que es una de las herramientas más útiles para la ingeniería inversa de iOS, ya que es muy versátil y se puede utilizar para volcar mucha información sobre la aplicación. Un uso muy común es volcar las diferentes bibliotecas y buscar las obsoletas o vulnerables, ya que esto podría comprometer la aplicación. Emitir el siguiente comando mostrará las bibliotecas en uso por la aplicación: otool -L iGoat-Swift.app/iGoat-Swift

1677580146 816 Aplicaciones moviles iOS de ingenieria inversa

instrumentos de cuerda

Analicemos el strings utilidad siguiente. Como sugiere el nombre, esta utilidad descarga todas las cadenas codificadas en el binario, lo que la hace especialmente útil cuando se buscan credenciales codificadas, secretos e información similar que el desarrollador de la aplicación podría haber dejado en el código fuente por error. Podemos hacer esto ejecutando strings iGoat-Swift.app/iGoat-Swift | grep -i <your_search_here>

1677580151 832 Aplicaciones moviles iOS de ingenieria inversa

codiseño

El codesign La herramienta, como se mencionó anteriormente, nos permite agregar y manipular firmas, verificar derechos y mucho más. Volcar los derechos de la aplicación suele ser una buena manera de obtener más información sobre la configuración de la aplicación (por ejemplo, si la aplicación utiliza una determinada clase de protección de datos para todos los archivos, aparecerá aquí). Usa el comando codesign -d --entitlements :- iGoat-Swift.app/ lograr esto.

1677580151 752 Aplicaciones moviles iOS de ingenieria inversa

Desensamblador de tolva

Por último, pero no menos importante, tenemos el desensamblador Hopper, que es probablemente la herramienta más poderosa de las mencionadas anteriormente pero, al mismo tiempo, la más compleja de aprender y utilizar correctamente, ya que requiere conocimiento del código a nivel de máquina (ensamblaje). para poder entender qué está pasando exactamente dentro de la aplicación. Si bien hay otros desensambladores más poderosos como Radare2me gusta usar Hopper por su simplicidad y algunas de las funciones que discutiremos pronto.

Cuando usamos Hopper, tenemos la opción de desensamblar todo el .ipa si queremos centrarnos en la aplicación en sí y todos los componentes de terceros que implementa, o también podemos seleccionar solo el ejecutable de Unix si queremos examinar el código fuente Debido a que hasta ahora hemos estado trabajando solo con el código fuente, sigamos adelante y sigamos haciéndolo. Haga clic derecho en el ejecutable de Unix y seleccione abrir con Hopper Disassembler. Hopper tardará unos minutos en cargar y realizar su análisis de código fuente automatizado, pero una vez que haya terminado, veremos una pantalla similar a la de la captura de pantalla a continuación.

1677580151 311 Aplicaciones moviles iOS de ingenieria inversa

En el menú que aparece en el lado izquierdo de la pantalla, justo debajo de la barra amarilla en la parte superior, podemos ver algunas opciones diferentes, incluidas Etiquetas, Procesos y Cadenas. Las etiquetas contienen las diferentes direcciones de memoria con su nombre/instrucción asociado. El Proc. La pestaña contiene todos los métodos utilizados por la aplicación. Por último, Strings muestra todas las cadenas en el binario (similar a la utilidad que usamos anteriormente). Una cosa que me gusta hacer es utilizar las herramientas anteriores para recopilar la mayor cantidad de información posible, luego ir a Hopper y ver los métodos específicos y cómo interactúan con la aplicación con más detalle. Por ejemplo, al descargar las cadenas de la aplicación, notamos algunas relacionadas con secretos. Si seguimos adelante y buscamos ‘secreto’ en Str. pestaña estos deberían aparecer y deberíamos poder acceder a la función que los contiene haciendo doble clic en él.

1677580154 990 Aplicaciones moviles iOS de ingenieria inversa

Al hacer clic derecho en el aYouFoundTheSec podemos inspeccionar todas las referencias hacia y desde él que hace la aplicación.

1677580154 346 Aplicaciones moviles iOS de ingenieria inversa

Haciendo clic en ‘Referencias a “aYouFoundTheSec” (en 0x1b8ca0)’ y seleccionando la primera referencia que aparece en la ventana que aparece nos lleva al método en cuestión.

1677580154 165 Aplicaciones moviles iOS de ingenieria inversa

Además, Hopper tiene una opción muy útil que convierte el código de máquina en pseudocódigo para facilitar la lectura que se puede habilitar haciendo clic en la opción resaltada por el cuadrado rojo en la captura de pantalla a continuación. El cuadrado verde muestra el pseudocódigo correspondiente a las instrucciones de montaje enumeradas anteriormente.

1677580154 852 Aplicaciones moviles iOS de ingenieria inversa

Hopper es una herramienta increíble y muy poderosa que nos permitirá realizar muchas actividades de ingeniería inversa. Todavía no instalé esta aplicación en mi dispositivo iOS, pero al mirar el código puedo decir que hay algún tipo de desafío o validación que se puede omitir profundizando en estos métodos, identificando direcciones específicas que contienen las diferentes validaciones, y eludirlos para alcanzar la función específica en la que la cadena que contiene el real se almacena el código secreto.

Otras herramientas para aplicaciones móviles iOS de ingeniería inversa

Estos son solo algunos pasos básicos que nos ayudarán a comenzar con las aplicaciones móviles iOS de ingeniería inversa. Las herramientas explicadas anteriormente son muy poderosas y tienen muchas capacidades que no se explicaron en esta publicación de blog, así que asegúrese de enumerar siempre los comandos disponibles para cada una de ellas y profundizar leyendo la documentación oficial de cada una de ellas. Además, hay muchas otras herramientas increíbles, como Frida y Radare, que podemos usar para aplicar ingeniería inversa a todo tipo de aplicaciones de iOS. En una nota similar, si desea obtener más información sobre los conceptos básicos de la ingeniería inversa en Android, consulte mi publicación de blog anterior, donde explico terminología básica y demuestro técnicas de inversión utilizando jadx-gui. Y para obtener más información sobre la seguridad de las aplicaciones móviles, pruebe NowSecure Academy cursos gratis.

Deja un comentario