Técnicas de ingeniería inversa para pruebas de penetración de aplicaciones móviles

La ingeniería inversa de una aplicación móvil significa desarmar un binario de Android o iOS para aprender sobre su composición. Esta información facilita la manipulación de una aplicación de maneras que su desarrollador no pretendía originalmente. Como evaluador de penetración móvil, analista de seguridad o investigador, saber cómo aplicar ingeniería inversa a las aplicaciones móviles mejora la calidad y la profundidad de su análisis y ayuda en los esfuerzos de prueba de seguridad de las aplicaciones móviles.

Desafortunadamente, los analistas e investigadores de seguridad no son los únicos que rutinariamente aplican ingeniería inversa a los binarios móviles. Los atacantes también aplicarán ingeniería inversa a un binario móvil para sus propias intenciones maliciosas. El conocimiento de las técnicas mediante las cuales tanto los profesionales de la seguridad como los atacantes realizan ingeniería inversa de una aplicación móvil puede garantizar que esta área de enfoque no se pase por alto durante el proceso de desarrollo seguro.

Los analistas de seguridad o los atacantes tienen varias razones para utilizar técnicas de ingeniería inversa de aplicaciones móviles. Alguien que intente aplicar ingeniería inversa a una aplicación móvil podría querer revelar información sobre servidores y servicios backend para lanzar ataques contra esas entidades. Algunos otros podrían intentar aplicar técnicas de ingeniería inversa para revelar valores criptográficos estáticos e identificar cifrados específicos en uso dentro del tiempo de ejecución de la aplicación. Incluso otros pueden utilizar la ingeniería inversa de una aplicación móvil para comprender mejor su lógica general, identificar formas en que se puede realizar la modificación posterior del código o incluso robar propiedad intelectual.

Independientemente de la intención, cada intento exitoso de ingeniería inversa debe identificar los servicios con los que se comunica la aplicación, ubicar los valores criptográficos codificados que pueden permitir el acceso a datos confidenciales, determinar el nivel de esfuerzo requerido para eludir la defensa específica en profundidad o anti- manipular técnicas o descubrir funcionalidades de aplicaciones no reportadas.
Hay varias formas de aplicar ingeniería inversa a una aplicación móvil. Uno de los métodos más comunes implica el uso de un descompilador o un desensamblador. Sin embargo, no necesita ninguna de esas herramientas para aplicar ingeniería inversa a una aplicación móvil. Puede realizar ingeniería inversa a través de una interfaz de línea de comandos (CLI), una herramienta personalizada o Frida guion. Este tutorial cubre cada uno de esos métodos de ingeniería inversa sin un descompilador o desensamblador.

Puede realizar ingeniería inversa a través de una interfaz de línea de comandos (CLI), una herramienta personalizada o un script de Frida.

Ingeniería inversa de una aplicación móvil a través de la línea de comandos

Un kit de paquete de Android (APK) o un paquete de la tienda de aplicaciones de iOS (IPA) se pueden aplicar mediante ingeniería inversa mediante una interfaz de línea de comandos (CLI) simple. Los siguientes dos ejemplos usan el terminal iTerm2, que solo está disponible para dispositivos Mac. Use una CLI alternativa para otras máquinas.

Verificación de la presencia de daños en la memoria Protecciones de seguridad integradas

Al investigar una IPA, es posible que desee determinar rápidamente si la aplicación está utilizando o no medidas de protección de seguridad integradas de corrupción de memoria gratuitas dentro de sus bibliotecas o marcos nativos. A menudo, las características de seguridad gratuitas, como la protección contra destrucción de pila y el recuento automático de referencias, pueden haber sido deshabilitadas durante el desarrollo del binario. En general, no hay inconvenientes en habilitar estas funciones integradas porque ayudan al binario a mitigar posibles ataques de desbordamiento de búfer y administración de memoria.

Si no tiene acceso al código fuente del IPA, simplemente puede aplicar ingeniería inversa al binario para determinar la respuesta usted mismo. Para hacer esto, descomprima el archivo binario en la terminal, cd a la carpeta IPA y el subsiguiente.app carpeta, y luego hacer uso de la grep dominio. Para buscar en IPA instancias de protección contra destrucción de pilas, simplemente ingrese grep -iERstack_chk”. Este comando CLI buscará recursivamente la totalidad del binario para instancias del indicador de protección contra destrucción de pila, ignorando mayúsculas y minúsculas. Si aparecen instancias, sabemos que se ha habilitado la protección contra destrucción de pila. Si no se encuentran instancias, podemos realizar más análisis para ver si el binario puede ser susceptible a un ataque de desbordamiento de búfer. También puede usar el enfoque que se muestra a continuación para verificar la protección ARC a través del grep -IERobjc_release» dominio. Usando la aplicación iOS Damn Vulnerable iOS (DVIA) disponible para descargar desde GitHub, ingresamos los comandos anteriores para verificar manualmente que la protección contra destrucción de pila estaba habilitada para el binario.

Tecnicas de ingenieria inversa para pruebas de penetracion de aplicaciones

Supervisión del registro del dispositivo para la entrada de datos confidenciales

Cuando esté investigando un binario de Android, es posible que sienta curiosidad por saber si se exponen datos confidenciales en el registro del dispositivo mientras usa la aplicación. Puede aplicar ingeniería inversa al binario a través de la CLI usando el adb logcat dominio. Para que este comando funcione en su terminal, primero debe habilitar la depuración USB en su dispositivo Android. A continuación, ingrese el comando y luego verá una serie de entradas de registro. Iniciar su aplicación le permite buscar en las entradas de registro entradas específicas de la aplicación. En el siguiente ejemplo, instalamos el binario de Android InsecureShop. Usando adb logcat durante el inicio de la aplicación y el flujo de inicio de sesión posterior, puede ver que el dispositivo registra esta entrada. La entrada incluye información confidencial, como el nombre de usuario y la contraseña del dispositivo.

1682271479 951 Tecnicas de ingenieria inversa para pruebas de penetracion de aplicaciones
1682271479 299 Tecnicas de ingenieria inversa para pruebas de penetracion de aplicaciones

Ingeniería inversa de una aplicación móvil a través de herramientas personalizadas

Otra forma de aplicar ingeniería inversa a un IPA o APK requiere herramientas personalizadas. Por ejemplo, la herramienta Objection para la ingeniería inversa de Android e iOS. Objection es una herramienta de exploración móvil en tiempo de ejecución que funciona en dispositivos con jailbreak/rooted y sin jailbreak. Frida activa Objection, por lo que deberá instalarlo primero para que funcione el conjunto de herramientas.

Para ejecutar Objeción, ingrese “objection –gadget [package name of app] explore”.

1682271479 96 Tecnicas de ingenieria inversa para pruebas de penetracion de aplicaciones

Supervisión de funciones criptográficas durante el tiempo de ejecución de la aplicación

La objeción a menudo puede ser útil para descubrir cómo funciona una aplicación móvil en tiempo real. ¿Quiere saber qué funciones criptográficas utiliza una aplicación durante el tiempo de ejecución? La objeción puede ayudar. Inicie Objeción e ingrese iOS monitor crypto. A medida que navega por la aplicación, Objection mostrará qué funciones criptográficas están en uso durante cada acción o actividad. Si tiene curiosidad por saber si la aplicación móvil usa un algoritmo criptográfico débil para operaciones críticas de seguridad, Objection puede ayudar a responder esa pregunta.

1682271480 682 Tecnicas de ingenieria inversa para pruebas de penetracion de aplicaciones

En el siguiente ejemplo, usamos Objeción para determinar qué funciones criptográficas se usan para cifrar una contraseña («reglas_de_objecion”) dentro de la aplicación DVIA para iOS. Después de ejecutar el iOS monitor crypto caso de uso y enviando una contraseña, vemos las funciones criptográficas presentes en ese proceso. La contraseña se muestra como “entrada de datos” y la forma encriptada de la contraseña se ve en “salida de datos”. Vemos que KCCPBKDF2 y KCCAlgorithmAES128 son los algoritmos criptográficos principales para este proceso.

1682271480 227 Tecnicas de ingenieria inversa para pruebas de penetracion de aplicaciones
1682271480 529 Tecnicas de ingenieria inversa para pruebas de penetracion de aplicaciones

Si tomamos el “algoritmo”, “llave«, y «IV” valores de la operación CCCCryptorCreate, así como el “salida de datos”, podemos comprobar que se utiliza el algoritmo AES para cifrar la contraseña. Con este conocimiento, podemos suponer que el algoritmo AES también se puede usar para descifrar texto cifrado. Usar un sitio web simple como CyberChef puede ayudarnos a hacer esto rápidamente.

1682271481 598 Tecnicas de ingenieria inversa para pruebas de penetracion de aplicaciones

Enganche y lanzamiento de actividades de Android que revelan datos confidenciales

Otro ejemplo de cómo Objection puede ayudar a la ingeniería inversa es cuando desea iniciar una actividad confidencial para una aplicación de Android. Ciertas actividades, cuando se inician, pueden revelar datos confidenciales. Puedes usar Objeciones android hooking capacidad para enumerar las actividades, los servicios y los receptores de la aplicación. El enganche puede ser especialmente útil si el código fuente de la aplicación no se puede desofuscar. Con la aplicación Damn Insecure and Vulnerable (DIVA), puede usar android hooking list activities para enumerar todas las actividades especificadas por AndroidManifest.xml. Esto puede ser útil si desea determinar rápidamente si se puede abusar de alguna actividad o revelar datos confidenciales. Después de ejecutar el comando, inmediatamente encontramos una actividad («.APICredsActivity”) que parece prometedor.

1682271481 674 Tecnicas de ingenieria inversa para pruebas de penetracion de aplicaciones

Ahora podemos usar un comando de objeción de seguimiento, android intent launch_activity, para iniciar una clase de actividad específica creando un nuevo Intent y ejecutando startActivity() con él como argumento. Al iniciar .APICredsActivity y ejecutar la intención, se revelan las credenciales confidenciales de la API del proveedor dentro de la interfaz de usuario de la aplicación.

1682271481 32 Tecnicas de ingenieria inversa para pruebas de penetracion de aplicaciones
1682271481 46 Tecnicas de ingenieria inversa para pruebas de penetracion de aplicaciones

Ingeniería inversa de una aplicación móvil a través de Frida Scripts

Si bien Objection es una herramienta poderosa para la ingeniería inversa, el uso de un guión real de Frida puede abrir aún más oportunidades. Frida es un conjunto de herramientas de instrumentación dinámica diseñado específicamente para la ingeniería inversa de otras funciones. Puede usar Frida para inyectar sus propios scripts personalizados en los procesos de una aplicación o usar scripts disponibles públicamente creados por otros.

Omitir la autenticación biométrica de Android

A menudo, al probar una aplicación de Android, puede encontrarse con una aplicación que tiene la función de identificación de huellas dactilares. Normalmente, la mayoría las aplicaciones requieren un nombre de usuario y una contraseña para iniciar sesión. Otras aplicaciones pueden utilizar la autenticación multifactor en forma de PIN, OTP o datos biométricos. Dependiendo de la aplicación, la configuración biométrica puede haberse configurado de manera insegura para permitir que un atacante eluda la autenticación de huellas dactilares por completo. En ese caso, un atacante que obtenga acceso físico al dispositivo podría aplicar ingeniería inversa al proceso de autenticación biométrica para poder iniciar sesión en la aplicación, incluso si no tiene acceso a la huella digital del usuario original.

Un guión de Frida puede venir al rescate en este escenario. Por ejemplo, un script de Frida disponible públicamente por investigadores de F-SECURE puede omitir la autenticación biométrica de Android por completo si la aplicación no hace un uso correcto de la BiometricPrompt.CryptoObject. Normalmente, el uso adecuado de este objeto requiere que el objeto de autenticación biométrica del usuario se almacene en Android Keystore, lo que evita que el dispositivo se desbloquee sin esa huella digital específica. Sin embargo, si el BiometricPrompt.CryptoObject es de un null valor, entonces el objeto no se almacena en el almacén de claves y no se requiere una huella digital válida, lo que configura la omisión. Este script resulta útil porque muchas aplicaciones son susceptibles al script anterior. Sin embargo, tenga en cuenta que esto solo funciona si el usuario ya ha configurado una identificación de huella digital inicial para la aplicación.

1682271482 573 Tecnicas de ingenieria inversa para pruebas de penetracion de aplicaciones
1682271482 673 Tecnicas de ingenieria inversa para pruebas de penetracion de aplicaciones
1682271482 213 Tecnicas de ingenieria inversa para pruebas de penetracion de aplicaciones

Eludir los controles de tiempo de ejecución de defensa en profundidad de la red

Los scripts de Frida para la ingeniería inversa pueden permitirle eludir ciertos controles de defensa en profundidad de la red que podrían interferir con un ataque de intermediario (MiTM). Si bien no se recomienda expresamente, cuando se implementa correctamente, la fijación de certificados puede mitigar los ataques MiTM al aceptar solo certificados específicos para conexiones cliente-servidor. Una secuencia de comandos de Frida puede ayudar a aplicar ingeniería inversa a la aplicación para descubrir qué método se utiliza para fijar el certificado y luego conectarse al proceso para deshabilitar u omitir el mecanismo durante el tiempo de ejecución. En el siguiente ejemplo, una aplicación Flutter de iOS evitó inicialmente la intercepción de la red debido a la fijación de certificados. Sin embargo, después de ejecutar un script de Frida disponible públicamente, pudimos conectarnos al SecTrustEvaluate, SecTrustGetResulty SecTrustEvaluateWithError() métodos. Al conectarse a esos métodos, se aseguró que el objeto del certificado de administración de confianza se considerara confiable, lo que nos permitió interceptar el tráfico mediante un proxy de intercepción debido a la omisión. Puede encontrar guiones de Frida adicionales para otros esfuerzos de ingeniería inversa en Código compartido de Frida.

1682271483 61 Tecnicas de ingenieria inversa para pruebas de penetracion de aplicaciones

Conclusión

Este tutorial le mostró tres tácticas de ingeniería inversa que funcionan sin un descompilador o desensamblador. Sin embargo, hay otras tácticas de ingeniería inversa que no fueron cubiertas.

La ingeniería inversa es un aspecto necesario de las pruebas de penetración de aplicaciones móviles. Encuentre más información y amplíe sus habilidades de ingeniería inversa con capacitación gratuita de Academia NowSecure. Los cursos en línea enfocados en tácticas adicionales de ingeniería inversa incluyen Gran diversión con Frida y Radare y Ingeniería inversa de iOS con Frida.



Fuente del artículo

Deja un comentario