Neutron, nuestro motor de IA, obtuvo un 96.75% en el benchmark CyberGym de UC Berkeley. Más información

Seguridad

Seguridad

Pruebas de seguridad de aplicaciones en iOS sin jailbreak desde Linux

Cómo realizar comprobaciones de seguridad de un archivo de aplicación iOS en un iPhone sin jailbreak desde una máquina Linux.

Descripción general

Las pruebas de seguridad de aplicaciones iOS no requieren un iPhone o iPad con jailbreak. Este artículo es un documento vivo que enumera cómo evaluar distintos aspectos de una aplicación móvil en un teléfono sin jailbreak.


NOTA

Se asume que se dispone de un IPA sin cifrar.


Cuenta de desarrollador de Apple

Para las pruebas de seguridad solo necesitamos una cuenta de desarrollador de Apple gratuita. Para inscribirse, consulte el enlace de requisitos.

En el caso de un particular, solo necesitamos un Apple ID y activar la autenticación de dos factores.

La cuenta de desarrollador de Apple de pago ofrece funciones para los creadores de aplicaciones y para la distribución de aplicaciones.

El método sencillo: instalación con Cydia Impactor

La forma más fácil de instalar una aplicación IPA en un dispositivo iOS es usar Cydia Impactor. Cydia Impactor es una herramienta gratuita, pero no de código abierto.

En primer lugar, asegúrese de restablecer el certificado de la cuenta de desarrollador de Apple, compruebe que se detecta su dispositivo iOS o iPad y, a continuación, seleccione instalar el paquete para instalar su aplicación.

Aunque Cydia es muy sencillo de usar, la instalación fallará si la aplicación no está en modo de depuración, o bien fallará en tiempo de ejecución porque el entitlement no se parcheó correctamente

Método de control total: ideviceinstaller y parcheo manual

Este método es manual y consiste en parchear los entitlements del IPA y luego usar ideviceinstaller para instalar la aplicación parcheada.

Parchear el IPA para habilitar el modo de depuración

El primer problema con el que puede encontrarse es intentar instalar una aplicación sin el modo de depuración habilitado. iOS se quejará de una firma no válida.

Para habilitar el modo de depuración, primero extraiga los entitlements del IPA:

Esto puede hacerse con jtool:

unzip app.ipa
./jtool.ELF64 -arch arm64 --ent Payload/myOstorlabApp.app/myOstorlabApp > /tmp.ent.xml

Los entitlements generados tendrán este aspecto:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>application-identifier</key>
    <string>4ZX4Z3MVHG.com.appleseedinc.MyProject</string>
    <key>com.apple.developer.team-identifier</key>
    <string>4ZX4Z3MVHG</string>
    <key>get-task-allow</key>
    <true/>
    <key>keychain-access-groups</key>
    <array>
        <string>4ZX4Z3MVHG.com.appleseedinc.MyProject</string>
    </array>
</dict>
</plist>

Las aplicaciones en modo de depuración tienen la clave get-task-allow establecida en <true/>. Si no es así, modifique los entitlements y parchee su binario con los entitlements recién creados.

Para ello, en Linux, utilice la siguiente versión bifurcada de isign, que admite entitlements alternativos. isign solo funciona con Python2:

from isign import isign
isign.resign("file.ipa", output_path="/tmp/new_ipa.ipa", alternate_entitlements_path="/tmp/ent.xml")

Si obtiene un error de OpenSSL, intente reinstalar pyOpenSLL:

sudo python2 -m pip install pyOpenSSL

En caso de error, para ver los registros de isign, utilice el siguiente código

import logging
import sys

root = logging.getLogger()
root.setLevel(logging.DEBUG)

handler = logging.StreamHandler(sys.stdout)
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
root.addHandler(handler)

isign puede fallar en una comprobación de construcción; la comprobación es incorrecta, así que basta con comentarla y volver a intentarlo.

Instalación con ideviceinstaller

Para ideviceinstaller, primero necesitamos aprovisionar un certificado de desarrollador; para ello, utilice las herramientas del siguiente repositorio:

 ./genProvisioningProfileFree.sh <AppleID> <Password> <Device UUID>

El UUID de su dispositivo puede obtenerse con lsusb.

Una vez aprovisionada la cuenta de desarrollador, inspeccione el archivo generado en su carpeta personal, en el archivo .isign/isign.mobileProvision, y busque el valor de <TeamIdentifier>, que debería tener un aspecto similar a 4ZX4Z3MVHG. Utilice ese valor para modificar el archivo de entitlements, reemplazando todas las apariciones del identificador de equipo anterior por el valor de su equipo.

Firme la aplicación con los entitlements modificados:

from isign import isign
isign.resign("file.ipa", output_path="/tmp/new_ipa.ipa", alternate_entitlements_path="/tmp/ent.xml")

Por último, utilice ideviceinstaller para instalar el IPA recién generado.

ideviceinstaller -i /tmp/new_ipa.ipa

Acciones diversas

La siguiente es una lista de acciones útiles que se pueden realizar durante una evaluación:

Obtener la imagen de disco de desarrollador

Varias herramientas de imobiledevice requieren montar una imagen de disco de desarrollador. Para descargar la imagen de disco que corresponda a la versión de su sistema operativo, consulte el repositorio.

Para montar la imagen de disco, utilice ideviceimagemounter:

ideviceimagemounter -t Developer DeveloperDiskImage.dmg DeveloperDiskImage.dmg.signature

Para comprobar que el disco se ha montado correctamente:

ideviceimagemounter -l                                                                                                                                                                                     2 ↵
ImageSignature[1]: 
 0: OIrMZfwD5TcdgVaizBMAaImjwDXsrldgRDbsiSWbtafuf1t0BSJR9tDycyYPG3E+wmUY8fmP0l0S3UkMkQpJksFOx2fn0h1lAuhAiP9bJBjZ6PvbetHE/A2XJNVu78obBZl9dAzgpIEHPSvu6HJM7mdZrdFjA7GG7QJOnCL4Vnc=

Acceder a los registros del dispositivo

Para acceder al registro del dispositivo iOS, utilice idevicesyslog después de montar la imagen de disco de desarrollador.

Hacer una captura de pantalla

Para hacer una captura de pantalla, utilice idevicescreenshot después de montar la imagen de disco de desarrollador.

Conectar el depurador LLDB

El depurador LLDB en Linux no admite remote-ios como destino.

Etiquetas:

ios