
Piense en una aplicación móvil como una bóveda digital que contiene todo, desde contraseñas de usuario hasta detalles de pago. Como evaluador de penetración, su trabajo es asegurarse de que la bóveda esté sellada herméticamente, mucho antes de que cualquier atacante real intente entrar. En esta guía, lo guiaremos a través de todo el proceso de prueba de penetración móvil , desde la recopilación de las herramientas adecuadas hasta el análisis del código y el tráfico. ¡Comencemos!
Vivimos en un mundo en el que los dispositivos móviles son casi una extensión de nosotros mismos. Dado que las personas realizan operaciones bancarias , compras y socializan a través de sus teléfonos, garantizar la seguridad de las aplicaciones es primordial. Y por eso es importante realizar pruebas de penetración en dispositivos móviles: simulamos ataques contra aplicaciones para exponer debilidades y ayudar a los desarrolladores a corregirlas.
Esto es lo que obtendrás:
En esencia, el pentesting móvil consiste en encontrar formas creativas de entrar en una aplicación (tal como lo haría un atacante real) para poder corregir las debilidades primero. Es diferente del pentesting web estándar porque las aplicaciones móviles:
Ejecútelo en plataformas únicas : Android y iOS tienen sus propias reglas, modelos de seguridad y peculiaridades.
Almacenar datos en dispositivos : la información confidencial se puede guardar localmente, por lo que es crucial examinar el almacenamiento específico del dispositivo.
Dependencia en gran medida de las API : las aplicaciones móviles a menudo se comunican con servidores back-end a través de API, que pueden estar mal configuradas o ser vulnerables si no se prueban correctamente.
Los desafíos comunes incluyen lidiar con la detección de root/jailbreak , eludir la fijación SSL y analizar la lógica tanto del lado del cliente como del servidor .
Imagínese una fortaleza medieval: estos son los típicos “puntos débiles” que los atacantes atacan:
Código que puede modificarse mediante ingeniería inversa para revelar secretos o lógica que puede manipularse en tiempo de ejecución.
Consulte la lista OWASP Mobile Top 10 y la Guía de pruebas de seguridad de aplicaciones móviles (MASTG) para obtener más información sobre estos riesgos. Son como mapas que resaltan todos los peligros posibles.
Antes de asaltar el castillo, necesitas la armadura y las armas adecuadas . En términos de pruebas de penetración, eso significa configurar un entorno en el que puedas experimentar de forma segura sin dañar los datos del mundo real. Veamos los conceptos básicos para Android e iOS.
Al probar aplicaciones de Android, puedes crear dispositivos virtuales con herramientas como Android Emulator o Genymotion . Estos emuladores te permiten instalar y probar aplicaciones rápidamente sin necesidad de un dispositivo físico. En esta guía puedes encontrar los pasos detallados para configurar uno.
Emulador de Android
Sin embargo, el uso de un dispositivo físico suele arrojar resultados más precisos, especialmente cuando se necesitan probar las condiciones de la red, los sensores o la autenticación biométrica en el mundo real. Si está planeando realizar pruebas más avanzadas, como verificaciones de raíz o análisis forense de datos en profundidad, contar con hardware real es una gran ventaja.
Si decides comprar o pedir prestado un dispositivo dedicado, ten en cuenta que algunos teléfonos Android son más fáciles de rootear . El rooteo te brinda un acceso más profundo al sistema operativo, lo que te permite analizar archivos ocultos, eludir restricciones de aplicaciones y ejecutar herramientas potentes que requieren permisos elevados.
El rooteo de Android es como encontrar una llave maestra para el sistema operativo de tu teléfono. Normalmente, lo que harás será:
Cada teléfono y versión del sistema operativo tiene sus peculiaridades, así que prepárate para varios intentos. La buena noticia es que, una vez que se rootea un dispositivo, generalmente permanece así a menos que restablezcas los valores de fábrica o actualices el firmware. Ten en cuenta que los jailbreaks de iOS se pueden perder después de un reinicio, por lo que Android a veces ofrece una plataforma más persistente para realizar pruebas.
Sigue siempre las guías de confianza para tu teléfono específico: un rooteo incorrecto puede dañar el software o introducir fallos de seguridad. Y, por supuesto, ¡haz una copia de seguridad de tus datos antes de lanzarte a ello! Ejemplo de rooteo de un Pixel 3a
Piensa en un proxy como Burp Suite como tu "cataladro". Te permite ver y modificar todo el tráfico que entra y sale de la aplicación. Detectarás comunicaciones inseguras, autenticaciones defectuosas o solicitudes sospechosas. Configurar un proxy para dispositivos móviles es similar en iOS y Android. Puedes encontrar instrucciones oficiales para cada plataforma aquí .
Las cosas se complican con ciertos marcos:
Xamarin a veces ignora las configuraciones de proxy de todo el sistema debido a bibliotecas de red personalizadas.
Flutter puede respetar los servidores proxy, pero podría imponer la fijación de certificados , impidiéndole ver el tráfico.
Para superar estos obstáculos, puedes modificar el código, usar herramientas como Frida u Objection para desactivar la fijación o configurar servidores proxy inversos (por ejemplo, mitmproxy ) para capturar el tráfico. ¡Adaptar tu enfoque es parte de la diversión!
Si la aplicación aún no está en Google Play Store (algo habitual en las pruebas de penetración), es probable que tengas un archivo APK para descargar. Puedes compartir el APK a través de Google Drive o un enlace de descarga directa. Otra opción conveniente es usar Firebase App Distribution , que organiza las pruebas enviando invitaciones a las partes interesadas.
En iOS, un dispositivo físico también ofrece la experiencia de prueba más genuina. Puedes sumergirte en funciones específicas del hardware, como Face ID , Touch ID y sensores, y al mismo tiempo capturar interacciones de red realistas. Si estás comprando o usando un dispositivo personal, considera modelos que se sabe que son más fáciles de desbloquear (ya que no todos los iPhones son igualmente compatibles con este proceso). Si necesitas dispositivos iOS virtuales, Corellium ofrece pruebas potentes basadas en la nube, aunque no son gratuitas. La mayoría de los evaluadores aún dependen de un dispositivo físico para realizar comprobaciones exhaustivas.
El jailbreak de iOS se parece mucho a quitar los candados que Apple pone en sus dispositivos. Obtienes privilegios de root, lo que te permite instalar ajustes, explorar directorios de archivos ocultos o ejecutar scripts de pentesting avanzados. Las herramientas más populares incluyen unc0ver y Checkra1n . La mejor opción depende de tu versión de iOS y del modelo de tu dispositivo.
Recordar:
Tenga en cuenta también que ciertas capas de seguridad se reactivan automáticamente cuando su dispositivo se reinicia, por lo que es posible que tenga que volver a realizar el jailbreak cada vez que lo encienda.
Las aplicaciones de iOS vienen en archivos IPA , similares a los APK de Android. En un teléfono con jailbreak, puedes instalar archivos IPA usando administradores de archivos como Filza o aplicaciones como Sideloadly . Para una ruta más oficial, los desarrolladores suelen confiar en TestFlight , que les permite invitar a los evaluadores por correo electrónico: solo tienes que pulsar el enlace y iOS se encarga del resto.
Configurar el entorno correctamente (elegir los dispositivos correctos (virtuales o físicos), configurar servidores proxy y comprender cómo instalar aplicaciones de forma local) garantiza que estará listo para analizar en profundidad el funcionamiento interno de una aplicación. Puede que requiera algunos ajustes, pero una vez que tenga la configuración perfecta, ¡puede comenzar la verdadera prueba de penetración!
Ahora pasemos a examinar la aplicación en sí, sin ejecutarla por completo. Es como leer el plano de un castillo antes de entrar. Buscamos secretos codificados , configuraciones inseguras y otros problemas en el código o en los archivos de configuración.
Secretos codificados
Las claves API, los tokens, las credenciales y las claves de cifrado a veces terminan directamente en el código fuente. Si los atacantes realizan ingeniería inversa de la aplicación, pueden extraer estos secretos con un mínimo esfuerzo y hacerse pasar por usuarios o servicios.
Configuraciones inseguras
Los permisos demasiado permisivos, las banderas de depuración que se dejan habilitadas o la firma incorrecta pueden abrir brechas en la armadura de tu aplicación. Una única configuración (como NSAllowsArbitraryLoads en un Info.plist de iOS o android:debuggable="true") puede abrir la puerta a ataques de intermediario (MITM) o a una depuración sin protección.
Exposición de datos confidenciales
Almacenar tokens de sesión o información personal en texto sin formato en el dispositivo (registros, preferencias compartidas, archivos locales) es una receta para el desastre. Cualquiera con acceso físico o un teléfono rooteado o liberado podría husmear y robar datos valiosos, sin necesidad de recurrir a la fuerza bruta.
Lógica y fallas de la aplicación
A menudo, los problemas de fondo surgen de la forma en que se implementan las funciones. Cuando faltan comprobaciones esenciales (como la autenticación) o no se aplican estrictamente, los atacantes pueden eludir fácilmente sus defensas. Del mismo modo, las funciones criptográficas débiles o los componentes de la aplicación no seguros también pueden hacer que la vida sea más fácil para cualquiera que intente sondear su aplicación.
La Guía de pruebas de seguridad móvil (MSTG) ofrece una lista de verificación completa para ayudarlo a abordar el análisis estático metódicamente:
Varias herramientas pueden ayudarte a analizar tu código, configuraciones y binarios sin ejecutar la aplicación:
MobSF (Marco de seguridad móvil)
Uso : Conecte un APK/IPA y MobSF generará un informe detallado: enumerará posibles configuraciones incorrectas, permisos sospechosos o secretos codificados.
Bono : También tiene algunas características dinámicas, lo que lo convierte en una excelente solución todo en uno.
Herramienta APK (Android)
Uso : Descompila y vuelve a compilar un APK para ver qué contiene. Esto es perfecto para leer AndroidManifest.xml, examinar recursos o ajustar la aplicación.
apktool d app.apk -o output_director
JADX (Android)
Uso : Convierte el código de bytes de Dalvik (.dex) en código Java legible. Ideal para detectar líneas de código con posibles vulnerabilidades, como claves API.
jadx app.apk -d output_directory
Volcado de clases, Hopper, Ghidra (iOS)
Uso : Extraer encabezados de clase Objective-C (Class-Dump) o desensamblar binarios de iOS (Hopper/Ghidra). Si la aplicación se ha convertido en Swift, también verás metadatos de Swift.
Las aplicaciones de Android se pueden descompilar de sus archivos APK utilizando herramientas como APKTool , JADX o MobSF .
Este proceso revela el código fuente, la estructura de la aplicación y componentes confidenciales como archivos AndroidManifest.xml o .smali, que pueden exponer la lógica y los permisos de la aplicación.
Permitir el tráfico de texto sin formato
<application android:usesCleartextTraffic="true" />
Los atacantes pueden aprovechar la comunicación no cifrada (HTTP) para espiar o manipular.
<application android:debuggable="true" />
Cualquier persona con un dispositivo (o emulador) puede conectar un depurador y hurgar en datos o lógica confidenciales.
public class ApiClient { private static final String API_KEY = "12345-abcdef-67890"; private static final String API_SECRET = "superSecretPassword123!"; }
Una descompilación rápida con APKTool o JADX revela estas claves, lo que permite a los atacantes hacerse pasar por la aplicación o acceder a servicios backend sin autorización.
<map> <string name="session_token">abc123XYZ987</string> <string name="user_email">user@example.com</string> </map>
Si los tokens o detalles del usuario se almacenan en texto simple, un dispositivo rooteado puede extraerlos fácilmente.
<key>NSAppTransportSecurity</key> <dict>
<key>NSAllowsArbitraryLoads</key> <true/> </dict>
Apple impone conexiones seguras de manera predeterminada, por lo que anular esta opción expone la aplicación a riesgos de MITM o tráfico no cifrado.
Las herramientas de descompilación como Class-Dump , Hopper Disassembler y Ghidra extraen el contenido del archivo IPA de la aplicación, incluidas las clases Objective-C, los nombres de métodos y los archivos binarios.
Si el análisis estático consiste en estudiar el plano de un castillo, el análisis dinámico consiste en recorrer el interior del castillo comprobando cada puerta y ventana. Ejecutamos la aplicación, observamos cómo se comporta y vemos si podemos aprovechar alguna debilidad en tiempo real.
Comunicación en red
Asegúrate de que los datos de tu aplicación no se filtren durante el tránsito. Si tu aplicación depende de HTTP o de HTTPS configurado incorrectamente, un atacante puede intervenir, interceptar o incluso modificar los datos. Lo mismo ocurre con la falta o debilidad de la fijación de certificados SSL/TLS , lo que expone tu aplicación a ataques de intermediario (MITM).
Autenticación y autorización
Incluso si sus pantallas de inicio de sesión y roles de usuario parecen sólidos en el papel, la prueba real es si alguien puede evitarlos en tiempo de ejecución. Por ejemplo, ¿puede un atacante reutilizar tokens de sesión o adivinarlos? ¿La aplicación agota el tiempo de espera correctamente o mantiene las sesiones abiertas para siempre?
Controles de seguridad e integridad en tiempo de ejecución
Muchas aplicaciones intentan detectar si un dispositivo está rooteado (Android) o jailbreakeado (iOS) y luego se niegan a ejecutar o bloquean ciertas funciones. Durante el análisis dinámico, querrás ver si puedes eludir estas comprobaciones enganchándote en el código de la aplicación, para poder seguir probando de todos modos. Si puedes eludir estas medidas fácilmente, los atacantes también podrán hacerlo.
Fuga de datos durante la ejecución
¿La aplicación registra información confidencial (como contraseñas o tokens) en texto sin formato? Cuando cambias de aplicación o pones el dispositivo en segundo plano, ¿se sigue viendo la pantalla con los datos confidenciales? Este tipo de rastro de "migas de pan" involuntario puede llevar a los atacantes directamente al tesoro.
Verificación del lado del servidor y API
La aplicación puede parecer segura desde la perspectiva del cliente, pero si la API del backend no valida los permisos o la entrada del usuario, un atacante podría modificar las solicitudes sobre la marcha para obtener acceso no autorizado o romper el sistema. Es fundamental probar el comportamiento del cliente y del servidor al mismo tiempo.
La Guía de pruebas de seguridad móvil (MSTG) también cubre el análisis dinámico. A continuación, se indican algunas comprobaciones que conviene tener en cuenta:
[ ] MSTG-RESILIENCE-1 : La aplicación detecta y previene intentos de manipulación o ingeniería inversa.
[ ] MSTG-RESILIENCE-2 : La aplicación detecta dispositivos rooteados o con jailbreak.
[ ] MSTG-RESILIENCE-3 : La aplicación valida la integridad de su código y recursos en tiempo de ejecución.
[ ] MSTG-NETWORK-1 : La aplicación cifra todo el tráfico de la red mediante criptografía sólida.
[ ] MSTG-NETWORK-3 : La aplicación aplica la fijación de certificados cuando corresponde.
[ ] MSTG-PLATFORM-1 : La aplicación no depende únicamente de los mecanismos de seguridad de la plataforma y aplica medidas de seguridad de forma independiente.
[ ] MSTG-AUTH-2 : La aplicación aplica correctamente los tiempos de espera de sesión y los requisitos de reautenticación del usuario.
[ ] MSTG-STORAGE-4 : La aplicación no registra datos confidenciales en los registros del sistema.
[ ] MSTG-STORAGE-5 : La aplicación no almacena datos confidenciales en una ubicación insegura.
[ ] MSTG-CRYPTO-1 : La aplicación utiliza algoritmos criptográficos actualizados para operaciones en tiempo de ejecución.
Piense en ellos como una hoja de ruta para sus pruebas en el mundo real. Le ayudan a tocar sistemáticamente cada puerta y ventana para confirmar que estén cerradas.
A diferencia de SAST, que se centra en la inspección del código, DAST se centra en ejecutar la aplicación y comprobarla. A continuación, se muestran herramientas populares para facilitar ese proceso:
Suite para eructos / OWASP ZAP
Uso : Ambos son servidores proxy de interceptación que permiten capturar y modificar el tráfico entre la aplicación y los servidores backend. Son ideales para detectar puntos finales inseguros, fallas de sesión o fugas de datos.
Frida
Uso : Un kit de herramientas de instrumentación dinámica que se conecta a los procesos en ejecución, ayudándole a evitar la fijación de SSL, la detección de root/jailbreak u otras restricciones del lado del cliente.
Comandos comunes de Frida
Acción | Dominio |
---|---|
Adjuntar a un proceso en ejecución | |
Listar todos los procesos en ejecución | |
Inyectar un script personalizado | |
Funciones específicas de seguimiento | |
Enganchar una función específica | |
Drozer (Android)
Uso : se centra en escanear componentes de Android, como actividades, servicios, receptores de transmisión y proveedores de contenido, en busca de debilidades de seguridad.
Comandos comunes de Drozer
Acción | Dominio |
---|---|
Conectarse a un dispositivo | |
Enumerar actividades | |
Interactuar con actividades exportadas | |
Prueba de inyección SQL | |
objeción
Uso : Desarrollado sobre la base de Frida, pero con comandos más simples para tareas como deshabilitar la fijación SSL o explorar el sistema de archivos de la aplicación. Perfecto si no eres un experto en scripts.
Órdenes de objeción comunes
Acción | Dominio |
---|---|
Adjuntar a una aplicación en ejecución | |
Deshabilitar la fijación SSL | |
Información de la aplicación de impresión | |
Al enrutar el tráfico de Android a través de una herramienta como Burp Suite , los evaluadores pueden interceptar y modificar las solicitudes. Por ejemplo, si la aplicación envía credenciales a través de HTTP o no logra validar los certificados TLS correctamente, un atacante podría realizar ataques de intermediario (MITM) .
POST /login HTTP/1.1 Host: api.example.com Content-Type: application/json { "username": "test_user", "password": "secret_password" }
Los tokens de sesión, los datos personales o la información de pago podrían quedar expuestos o manipulados.
03-09 12:34:56.789 1234 5678 I MyAppLogger: User token = "abc123XYZ987" 03-09 12:34:56.789 1234 5678 I MyAppLogger: Payment info: "card_number=4111111111111111"
Cualquiera con ADB (o una aplicación maliciosa) podría leer estos registros y explotarlos.
Actividades inseguras / Proveedores de contenido
Con Drozer , los evaluadores pueden descubrir actividades exportadas o proveedores de contenido que no requieren autenticación.
drozer console connect run app.provider.query
content://com.example.app.provider/users
Si se devuelven datos sin los permisos adecuados, los atacantes pueden leer o modificar la información de un usuario.
Herramientas como Frida u Objection te permiten eludir la detección de raíz o las comprobaciones de fijación SSL en tiempo de ejecución:
frida -U -n com.example.app --eval "..." objection -g com.example.app explore android sslpinning disable android root disable ios sslpinning disable ios root disable
Los atacantes en teléfonos rooteados pueden continuar probando o accediendo a funciones sensibles, revelando secretos o alterando la lógica de la aplicación.
Muchas aplicaciones de iOS no se ejecutarán si detectan un teléfono con jailbreak . Con Frida , puedes anular el método de detección:
Interceptor.attach(Module.findExportByName(null, "jailbreakDetectionFunction"), { onEnter: function (args) { console.log("Bypassed jailbreak check!"); // Force return a 'clean' status } });
Los atacantes pueden ejecutar la aplicación en dispositivos comprometidos y hurgar en datos o ganchos.
2023-03-09 12:34:56.789 MyApp[1234:5678] Payment info: card_number=4111111111111111 2023-03-09 12:34:56.789 MyApp[1234:5678] session_token=abc123XYZ987
En dispositivos con jailbreak (o mediante recopilación de registros externos), los atacantes recopilan datos confidenciales directamente.
¿Qué es el pentesting móvil?
Se trata de probar la seguridad de una aplicación móvil simulando ataques del mundo real, buscando posibles vulnerabilidades antes de que lo hagan los atacantes.
¿Por qué es importante el pentesting móvil?
Debido a que los teléfonos inteligentes contienen una enorme cantidad de datos personales y financieros, son objetivos principales para los ciberdelincuentes.
¿Cuales son los pasos principales?
¿Qué herramientas necesito?
Burp Suite o ZAP para interceptación de tráfico, MobSF para escaneos, APKTool/JADX (Android), Class-Dump/Hopper (iOS), además de herramientas de enlace como Frida u Objection.
¿Con qué frecuencia debemos realizar pruebas de penetración?
Después de actualizaciones importantes, nuevas funciones o cambios significativos en la infraestructura, lo ideal es integrarlo en CI/CD para realizar comprobaciones continuas.
¿Cuáles son las vulnerabilidades comunes?
Almacenamiento de datos inseguro, sin HTTPS, secretos codificados, mala gestión de sesiones y API mal configuradas.
¿Se puede automatizar todo?
En realidad, no. Las herramientas pueden automatizar algunos análisis, pero las pruebas manuales revelan fallas lógicas más complicadas o reglas comerciales complejas.
¿Necesitamos probar tanto Android como iOS?
Sí, cada uno tiene modelos de seguridad y dificultades únicos.
¿Es legal realizar pruebas de penetración?
Por supuesto, si tienes permiso explícito del propietario de la aplicación. De lo contrario, es ilegal.
¿Por dónde empiezo?
Estudie la Guía de pruebas de seguridad móvil OWASP (MASTG) , aprenda cómo revertir errores básicos y practique con aplicaciones de código abierto o objetivos de muestra.
El pentesting móvil es como una gran misión : se empieza reuniendo el equipo (herramientas y dispositivos), luego se explora el terreno (SAST) y, por último, se adopta un enfoque práctico (DAST) para encontrar todos los puntos débiles. Si haces esto con regularidad e informas de tus hallazgos, mantendrás tus aplicaciones sólidas y a tus usuarios seguros.
Recuerde: el software evoluciona todos los días, al igual que las amenazas. Haga que las pruebas de penetración sean una parte continua de su ciclo de vida de desarrollo, porque la mejor manera de proteger un reino es no bajar nunca la guardia.
Este artículo fue preparado por Anastasiia Tolkachova , ingeniera de pruebas de seguridad en Sekurno , y revisado por Alex Rozhniatovskyi , director de tecnología de Sekurno . Anastasiia tiene más de cinco años de experiencia práctica en pruebas de penetración y evaluaciones de seguridad. Se especializa en probar aplicaciones web, infraestructura (tanto local como en la nube) y plataformas móviles (iOS y Android). Su experiencia abarca metodologías de caja negra, caja gris y caja blanca, junto con competencia en evaluaciones de vulnerabilidad y revisiones de seguridad de código fuente.
Alex tiene siete años de experiencia en desarrollo y ciberseguridad. Es colaborador de código abierto de AWS y se dedica a promover prácticas de codificación seguras. Su experiencia cierra la brecha entre el desarrollo de software y la seguridad, y brinda información valiosa para proteger las aplicaciones web modernas.