El panorama de amenazas móviles evoluciona y presenta desafíos cada vez más sofisticados para la comunidad de ciberseguridad. Comprender las herramientas y técnicas fundamentales para el análisis de malware en dispositivos móviles es crucial para investigadores, analistas forenses y profesionales de seguridad.
Por ello, a continuación, veremos una guía básica para tener de referencia a la hora de efectuar nuestros análisis en dispositivos con sistema operativo Android o iOS.
¿Por qué es diferente analizar malware móvil respecto a sistemas tradicionales?
El análisis de malware en móviles, a diferencia del análisis sobre sistemas Windows, Linux, o macOS, presenta desafíos únicos:
- Sistemas operativos cerrados o semicerrados (como iOS).
- Entornos virtualizados y emulados fácilmente detectables.
- Fuertes restricciones de permisos y acceso al sistema de archivos.
- Técnicas evasivas avanzadas, como el dynamic code loading y la detección de análisis.
- Sin embargo, estas diferencias no deben alejarnos, sino estimularnos a vencer estos desafíos.
Al analizar malware, tanto en Android como en iOS, contamos con dos enfoques de análisis bien diferenciados que nos van a ayudar a determinar las características y el comportamiento del malware que estemos analizando.
Por un lado, está el enfoque estático con el que analizaremos la muestra sin ejecutarla y con el que vamos a observar las características como el hash, las cabeceras del archivo y su arquitectura, las strings, identificación de ofuscación y llamadas a APIs, entre otras.
El enfoque dinámico, por otro lado, analiza las características observadas en el enfoque estático y busca determinar cómo se comporta la pieza de código que estamos analizando en el sistema. Aquí, observaremos si el malware ejecuta procesos, si se inyecta en otros, si crea, modifica o borra archivos, y la actividad de red, entre otras.
Si bien, tanto en Android como en iOS, la lógica de contar con un entorno aislado de análisis y luego analizar las muestras de modo estático y dinámico se mantiene, a la hora de la práctica hay diferencias que iremos abordando en cada sección, pues al fin y al cabo son sistemas distintos cada uno con su naturaleza propia.
Consideraciones para un entorno de laboratorio seguro
Antes de comenzar, es importante entender que vamos a necesitar un entorno de pruebas aislado y seguro para realizar los análisis. Hay que recordar que vamos a analizar piezas de código potencialmente maliciosas y debemos evitar ser víctimas de ellas.
Como dijimos antes, existen diferencias entre Android y iOS, por lo que vamos a detallar las consideraciones en cada sistema sobre el que vayamos a realizar los análisis.
Entorno de pruebas sobre Android:
Será esencial disponer de una PC dedicada donde puedas tener:
- Emuladores personalizados como Android Studio Emulator, Genymotion con soporte para arquitecturas x86 y ARM, ya que esto permitirá emular las piezas de código, incluso con la posibilidad de elegir versiones de sistemas operativos específicos y también distintos modelos de smartphones
- ADB (Android Debug Bridge) para control y extracción de datos.
Es importante también contar con dispositivos físicos rooteados, ya que, frente a detecciones de emulación, es más confiable contar con un smartphone dedicado que nos ayudará a precisar muchos comportamientos de las piezas que vayamos a analizar.
Entorno de pruebas sobre iOS:
Preferentemente, contar un equipo que tenga Xcode y una cuenta de apple developer, porque en muchos casos será necesario reempaquetar piezas de código y firmarlas.
También será de importancia contar dispositivos iPhones que soporten las últimas versiones de iOS y para los que existan posibilidad de realizar jailbreak. El uso de dispositivos físicos sigue siendo preferido para análisis más precisos, ya que muchas muestras de malware detectan emuladores y alteran su comportamiento.
Frida, Cycript y Objection son las herramientas de instrumentación y hooking, con las que debes contar.
Análisis Estático y dinámico en Android
Luego, según el tipo de enfoque, estático o dinámico, agregaremos una cantidad de herramientas para complementar los análisis.
Tanto para Android y como iOS es fundamental contar con entornos fáciles de restaurar a un estado limpio tras cada análisis, veremos que será muy común tener que volver una y otra vez a la instancia del sistema base.
Análisis estático en Android:
El análisis estático permite inspeccionar el código sin ejecutarlo. Entre las técnicas básicas que vamos a necesitar ejecutar se encuentran:
1) Técnicas
Descompilación del APK
- Extraer AndroidManifest.xml, recursos y clases DEX.
- Herramientas: apktool, JADX, dex2jar.
Revisión del AndroidManifest
- Permisos sospechosos (e.g., READ_SMS, SEND_SMS, INTERNET, SYSTEM_ALERT_WINDOW).
- Componentes maliciosos ocultos (services, receivers).
Análisis de strings
- Buscar dominios, IPs, comandos, rutas, credenciales.
- Herramientas: strings, grep, MobSF.
Análisis de código Java/Dalvik
- Buscar patrones sospechosos: Runtime.exec, Base64, Crypto, WebView.loadUrl.
- Identificación de técnicas de ofuscación.
Inspección de certificados
- Validar firma del APK y certificados de terceros embebidos.
Análisis de bibliotecas nativas (C/C++)
- Revisión de librerías .so sospechosas con Ghidra o IDA
2) Herramientas
Herramienta | Descripción |
APKTool | Descompila recursos y manifiestos de APK |
JADX / JEB / CFR | Descompiladores de código DEX a Java |
MobSF | Análisis automatizado de APK estático y dinámico |
Androguard | Framework en Python para analizar código DEX/APK |
Bytecode Viewer | Visor múltiple de bytecode para DEX/JAR/APK |
ClassyShark | Visualizador de APK y estructuras de clases |
Quark Engine | Analizador estático con heurísticas para detectar malware en APK |
VirusTotal | Subida de APK para escaneo rápido con múltiples motores |
ApkLeaks | Busca información sensible (tokens, keys, endpoints) en APKs |
Análisis dinámico Android:
El comportamiento del malware suele revelarse solo durante la ejecución y es por ello que mientras que ejecutamos el malware debemos tener las siguientes consideraciones:
Ejecución controlada del APK
- En emulador o dispositivo real con ADB.
- Configurar red para monitoreo de tráfico.
Monitoreo del comportamiento en tiempo real
- Uso de logcat, strace, frida, objection.
Captura de tráfico de red
- Proxy: Burp Suite, mitmproxy, Wireshark.
- Verificar si hay SSL pinning activo.
Hooking e instrumentación
- Interceptar funciones y modificar comportamientos.
- Herramientas: Frida, Xposed, AppMon.
Bypass de técnicas anti-análisis
- Desactivar detección de root/emulador.
- Desofuscar código dinámicamente.
Extracción de datos en runtime
- Obtener variables, memoria, credenciales desde RAM.
Herramienta | Descripción |
Xposed Framework | Permite hooks dentro de apps Android (root requerido) |
Frida | Instrumentación dinámica en tiempo real (ideal para hooking en apps) |
Magisk + LSPosed | Alternativa moderna a Xposed para entornos rooteados |
Genymotion / AVD | Emuladores para correr y monitorear comportamiento de apps |
Wireshark | Monitorea tráfico de red desde la app |
tcpdump | Captura de paquetes en Android (usando root o ADB) |
Strace / Logcat | Monitoreo de procesos y registros del sistema |
CuckooDroid | Sandbox de análisis automatizado de APKs (basado en Cuckoo) |
AppMon (Frida) | Instrumentación automática de llamadas de métodos Android |
Objection | Herramienta basada en Frida para bypass de root/jail, dumps, etc. |
Análisis Estático y dinámico en iOS
Análisis estático en iOS
Al igual que en sistemas Android existen técnicas básicas que vamos a necesitar ejecutar, entre las que se encuentran:
Extracción del archivo IPA
- Desempaquetar .ipa y extraer el binario Mach-O.
Inspección de estructuras Mach-O
- Revisar secciones, encabezados, librerías vinculadas.
- Herramientas: otool, MachOView.
Reversing del binario
- Desensamblado de ARM/ARM64.
- Herramientas: Hopper, IDA, Ghidra.
Extracción de clases Objective-C
- Usar class-dump o class-dump-z para analizar interfaces públicas.
Búsqueda de cadenas y funciones sospechosas
- API de redes, uso de NSURLSession, objc_msgSend, dlopen, etc.
Análisis de permisos y plist
- Revisión de archivos .plist, Entitlements, uso de servicios privados.
Nota: Apple aplica técnicas de code signing, lo que dificulta la inyección de código o modificación de binarios si no se hace en un entorno con jailbreak.
Herramienta | Descripción |
class-dump / class-dump-z | Extrae interfaces de Objective-C de binarios |
Hopper / Ghidra / IDA Pro | Disassemblers para binarios ARM/ARM64 |
Cycript | para inspección en vivo y manipulación de objetos del runtime Objective-C |
Genymotion / AVD | Emuladores para correr y monitorear comportamiento de apps |
ipa-extract | (parte de libimobiledevice) Para desempaquetar archivos IPA |
otool / MachOView | Herramientas para examinar binarios Mach-O |
Radare2 / rizin | Framework para reversing de binarios |
MobSF | También soporta análisis básico de archivos IPA |
bagbak | Extrae y decompila apps desde dispositivos jailbreakeados |
ppduck / IPAPatch | Herramientas para dumpear IPAs protegidas |
ios-deploy | Para instalar y conectar apps a dispositivos reales |
QARK (limitado) | Puede hacer análisis de seguridad en código fuente iOS |
Análisis dinámico iOS:
En cuanto a las técnicas esenciales sobre el análisis dinámico para iOS nos encontramos con:
Instrumentación del binario
- Inyección con Frida, uso de objection, Cycript, Flex.
Ejecución en dispositivo jailbreakeado
- Correr app maliciosa controladamente en iOS modificado.
Hooking de funciones clave
- Interceptar llamadas a API sensibles (red, archivos, crypto, sensores).
Captura de tráfico
- Uso de proxy con bypass de SSL pinning (ej: SSL Kill Switch 2).
Análisis de procesos y comportamiento
- Uso de herramientas de Xcode (Instruments, lldb) o de terceros.
Dump de memoria
- Extraer información en caliente desde procesos activos.
Herramienta | Descripción |
Frida | Instrumentación de apps iOS (requiere jailbreak o Frida gadget embebido) |
Cycript / MTerminal | Hooking e inspección en tiempo real en entornos jailbroken |
Objection | Interacción automatizada con apps iOS (necesita Frida) |
Instruments (Xcode) | Profiling y tracing nativo de iOS (con certificado de desarrollo) |
tcpdump / Wireshark | Para capturar tráfico de red en iOS (más complicado sin jailbreak) |
Flex | Herramienta para modificar comportamiento de apps en runtime |
SSL Kill Switch 2 | Bypass de pinning SSL en apps iOS |
Frida-trace | Para interceptar funciones clave en runtime |
Appmon (Frida) | Soporte limitado en iOS, pero útil para funciones comunes |
Buenas prácticas al analizar malware
No uses tu máquina principal: trabaja siempre desde un entorno aislado o máquina virtual.
Captura todo: tráfico, logs, imágenes del sistema y hashes antes y después de la ejecución.
Compara con versiones legítimas si sospechas de una aplicación troyanizada.
Mantente actualizado: el ecosistema móvil cambia constantemente. Sigue fuentes como VirusTotal, Koodous y WeLiveSecurity.
Conclusión
Entre iOS y Android, como pudimos observar, existen diferencias entre las que podemos destacar:
- OS tiene mayores barreras técnicas y legales, y requiere jailbreak o entorno de desarrollo certificado.
- Android ofrece mayor flexibilidad para análisis, incluso sin root en algunos casos.
- El análisis dinámico es crucial para detectar comportamientos ocultos, C2, cargas tardías, etc.
- La instrumentación con Frida es transversal y poderosa en ambos sistemas.
Sin dudas, el análisis de malware móvil es un campo desafiante y dominar las herramientas y técnicas presentadas aquí es fundamental para cualquier analista de seguridad. La combinación de análisis estático y dinámico, adaptado a las particularidades de cada plataforma, es clave para desentrañar las amenazas y proteger el mundo móvil.