Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2/61
Auditoría de aplicaciones móviles
En los siguientes apartados, se exponen las diferentes pruebas que deben constituir una
auditoría de aplicaciones móviles, para garantizar la confidencialidad de la información
adaptándose al escenario cambiante de las amenazas y poder adelantarse al riesgo.
II. Objetivos
Al igual que en la unidad anterior, en esta parte del módulo de Hacking Ético se pretende conseguir que
el estudiante aplique el conocimiento aprendido a la auditoría específica de aplicaciones móviles
centrándonos, sobre todo, en aplicaciones iOS y Android.
Para ello es necesario tener un conocimiento adecuado sobre la estructura de estas aplicaciones, así
como de la guía OWASP Mobile Security Testing Guide que utilizaremos frecuentemente en este tipo de
auditorías.
A lo largo de la unidad, el estudiante aprenderá cómo realizar diferentes técnicas necesarias para la
auditoría de seguridad como el análisis estático o dinámico de aplicaciones de iOS y Android, además del
uso de herramientas específicas para trabajar con aplicaciones de cada sistema operativo.
III. Metodología
Las revisiones de seguridad sobre aplicaciones móviles siguen las pautas marcadas por la guía de
pruebas de OWASP Mobile Security Testing Guide . Esta guía está destinada a proporcionar a los equipos
de seguridad los recursos necesarios para verificar si las aplicaciones móviles no constituyen un riesgo
capaz de comprometer la seguridad de la información almacenada en el dispositivo móvil, la información
transmitida y los recursos gestionados por la aplicación.
3/61
Auditoría de aplicaciones móviles
Antes de profundizar en las pruebas de seguridad, resulta oportuno exponer el top ten de riesgos en
aplicaciones móviles definido por OWASP:
Los vectores de ataque se corresponden con los vectores tradicionales de OWASP, las llamadas al
API y los servicios web expuestos que utilizan las aplicaciones móviles, constituyen puntos de entrada
de los vectores de ataque.
Si los datos almacenados en el dispositivo no han sido correctamente securizados, sería posible
acceder a la información sensible mediante el acceso físico al dispositivo o haciendo uso de software
malicioso.
M3 – Comunicaciones inseguras
M4 – Autenticación no segura
4/61
Auditoría de aplicaciones móviles
M5 – Criptografía insuficiente
Los vectores de ataque incluyen el descifrado de los datos almacenados en el dispositivo, así como
los datos capturados a través de la red, debido al uso de protocolos no seguros o algoritmos de cifrado
deprecados.
M6 – Autorización no segura
Una vez que la aplicación se instala en el dispositivo, el código y los datos residen en él. Se podría
alterar el comportamiento del mismo, modificar directamente el código, los datos contenidos de la
memoria de forma dinámica, reemplazar las API del sistema que utiliza la aplicación o modificar los
datos y recursos de la aplicación.
M9 – Ingeniería inversa
Se analiza el código fuente del aplicativo para identificar las librerías, algoritmos y recursos
embebidos en la aplicación mediante el uso de herramientas de desensamblado de código y debuggers .
Se identifican funcionalidades ocultas o puertas traseras en las aplicaciones móviles, así como
funcionalidades o características que no deberían estar presentes en entornos de producción, habiendo
sido incluidas de forma accidental por los desarrolladores.
5/61
Auditoría de aplicaciones móviles
2
Revisión de los datos transmitidos entre el aplicativo y el servidor.
3
Revisión de la infraestructura en el lado del servidor con la que se comunica la aplicación.
La OWASP Mobile Security Testing Guide (MSTG) es una guía de pruebas para evaluar la seguridad de
las aplicaciones móviles en la cual se describen los procesos técnicos para verificar los requerimientos
definidos en Mobile Application Security Verification Standard (MASVS), que establece el nivel de
confidencialidad en la seguridad de las aplicaciones móviles.
Esta guía incluye una lista de pruebas agrupadas en las siguientes categorías:
Esta categoría cubre los requerimientos correspondientes a la arquitectura y el diseño de las aplicaciones
móviles.
6/61
Auditoría de aplicaciones móviles
Verificar si todos los componentes de la aplicación han sido definidos de acuerdo al modelo de
negocio y las prestaciones de seguridad que proveen.
Verificar si se ha establecido el modelado de amenazas para el aplicativo móvil y los servicios
remotos, que presenta amenazas potenciales y contramedidas.
Verificar si todos los controles de seguridad tienen una implementación centralizada.
Verificar si los componentes que no forman parte de la aplicación, pero que son necesarios para
su operativa, han sido claramente identificados y se conocen las implicaciones de seguridad
debido a su uso.
Verificar si los endpoints remotos comprueban que el usuario está empleando la última versión
del aplicativo.
Verificar si ha sido establecida una política para la gestión de llaves criptográficas y se hace
cumplir el ciclo de vida de las mismas, siguiendo el estándar NIST SP 800-57.
Verificar si se han ejecutado las pruebas de seguridad como parte del ciclo de vida del desarrollo
del aplicativo.
7/61
Auditoría de aplicaciones móviles
Verificar que la aplicación no utiliza algoritmos de cifrado simétricos, con claves hardcodeadas
en el código como único método de cifrado.
Verificar que la aplicación utiliza primitivas criptográficas demostradas científicamente.
Verificar que la aplicación utiliza primitivas criptográficas que son apropiadas para cada caso de
uso en particular, configuradas con parámetros que se ajusta a las buenas prácticas de la
industria.
Verificar que la aplicación no utiliza algoritmos de cifrado deprecados o inseguros.
Verificar que la aplicación no reutiliza la misma clave de cifrado para múltiples funcionalidades.
Verificar que los valores aleatorios han sido generados utilizando algoritmos de generación de
números aleatorios seguros.
Esta sección define los requerimientos básicos en relación a la gestión de las cuentas de usuario y las
sesiones.
Verificar que la aplicación implementa un método de autenticación seguro con el servicio remoto.
Verificar que el servidor remoto genera de forma aleatoria tokens de acceso para autenticar las
peticiones del usuario, sin enviar constantemente las credenciales del usuario.
Verificar que el servicio remoto finaliza la sesión una vez que el usuario cierra su sesión en el
aplicativo.
Verificar que existe una política de contraseñas robusta ejecutada por el servicio remoto.
Verificar que el servicio remoto implementa una política de bloqueo de usuario de forma
temporal, cuando se realizan numerosos intentos de inicio de sesión fallidos comprendidos en un
periodo de tiempo.
Verificar que la autenticación biométrica no ha sido implementada mediante una API que
devuelve “verdadero” o “falso” según sea válida o no la comprobación, sino que esté basada en
desbloqueos del keychain/keystore.
Verificar que la sesión de usuario finaliza pasado un tiempo de inactividad.
Verificar que los datos transmitidos en la red van cifrados utilizando TLS. Se debe utilizar un
canal seguro en las transmisiones de datos.
Verificar que la aplicación comprueba el certificado X.509 del servidor remoto al establecerse la
comunicación segura. Solo serán válidos aquellos certificados firmados por una CA válida.
8/61
Auditoría de aplicaciones móviles
Verificar que la aplicación no confía únicamente en canales como email o SMS, para realizar
operaciones críticas, como, por ejemplo, para la recuperación de contraseñas.
Esta sección asegura que la aplicación utiliza las API de la plataforma y los componentes estándar de
forma segura.
El objetivo de estas pruebas es asegurar que se cumplen las prácticas de código seguro.
Esta sección cubre las medidas de resiliencia contra la ingeniería inversa, dificultando a los atacantes el
acceso y entendimiento del aplicativo.
9/61
Auditoría de aplicaciones móviles
Actualmente se trata del sistema operativo más extendido en dispositivos móviles, llegando a una cuota
de mercado de alrededor del 80 %.
Por otro lado, se trata de un sistema operativo que soporta aplicaciones desarrolladas habitualmente en
Java, C o C++ a través del Android SDK ( Android Software Development Kit), ofreciendo la posibilidad
de que cualquier usuario pueda desarrollar su propia aplicación y ponerla a disposición de cualquier otro
usuario de forma gratuita o de pago.
Las aplicaciones pueden ser descargadas desde la tienda oficial de Google Play, conocida actualmente
como Play Store, e instaladas automáticamente en el dispositivo en cuestión. Es preciso mencionar que,
aunque Android solo cuente con una tienda oficial, es posible instalar aplicaciones móviles en el dispositivo
de forma manual, hecho que provoca la aparición de mercados “alternativos” en los que frecuentemente se
encuentran aplicaciones maliciosas que ponen en riesgo la confidencialidad y la integridad de los datos del
usuario, así como del propio dispositivo. Algunos ejemplos de estos mercados alternativos son “Black
Market” o “F-droid”.
El análisis estático consiste en analizar el comportamiento de la aplicación sin que ésta se encuentre en
ejecución, observando, a partir de la información y código fuente, cómo se comportaría la aplicación y
qué partes de código son susceptibles de ser vulnerables en función de los datos de entrada o
variaciones que sufren en tiempo de ejecución.
Cabe destacar que, si se lleva a cabo un análisis estático en profundidad de la aplicación, se facilitará su
posterior proceso de análisis dinámico.
10/61
Auditoría de aplicaciones móviles
El primer paso será por tanto obtener el fichero .apk de la aplicación; para ello existen varios métodos:
11/61
Auditoría de aplicaciones móviles
12/61
Auditoría de aplicaciones móviles
Tras realizar estos pasos, se deberá comprobar que en las “Opciones de desarrollador” se cuenta con
la opción “Depuración por USB” activada. De ser así, se deberá conectar el USB al PC y mediante el
siguiente comando se listarán los dispositivos accesibles:
Como se puede observar, con el uso del comando adb shell se obtiene acceso remoto al dispositivo.
13/61
Auditoría de aplicaciones móviles
A través de adb es posible obtener el archivo APK de una aplicación instalada en el dispositivo. Las
aplicaciones se encuentran instaladas en el directorio /data/app/<package_name_app>/ y cuentan con el
archivo APK. Listar directamente estos directorios requiere que el dispositivo se encuentre rooteado.
Para listar los paquetes de aplicación instalados sin permisos de root se utilizará el siguiente comando:
pm list packages -f
En el siguiente ejemplo se puede observar el contenido del directorio donde se aprecia el archivo
APK.
Imagen 5.8. Proceso descarga del archivo APK de una aplicación instalada.
Fuente: captura de Kali Linux.
https://developer.android.com/studio/releases/platform-tools#download
14/61
Auditoría de aplicaciones móviles
https://apkpure.com/app
https://apps.evozi.com/apk-downloader/
Una vez se ha obtenido el fichero APK de la aplicación, es preciso descomprimirlo para obtener los
directorios y archivos que conforman la aplicación. A continuación, se detallan varios métodos para
realizar este proceso:
A continuación se puede observar como mediante el siguiente comando se obtiene los archivos de la
aplicación:
15/61
Auditoría de aplicaciones móviles
Cabe mencionar que Apktool permite obtener el archivo APK a partir de los archivos que lo conforman
mediante el comando:
Una vez se ha descomprimido los archivos de la APK se puede observar como el código fuente se
encuentra en los archivos binarios con extensión .dex conocidos como “ Dalvik Executable” con estructura
similar a ASM (Assembly language).
Llegados a este punto, mediante la herramienta dex2jar se deberá convertir el código DEX en JAR y
posteriormente decompilarlo en Java para su entendimiento. Mediante el siguiente comando se obtendrá el
JAR a partir del archivo APK:
sh d2jar-dex2jar.sh -f <nombre_app.apk>
16/61
Auditoría de aplicaciones móviles
Imagen 5.11. Obtención del código fuente en formato JAR mediante dex2jar.
Fuente: captura de Kali Linux.
https://sourceforge.net/projects/dex2jar/files/latest/download
Cabe mencionar que, debido a las limitaciones de la propia herramienta, o si se han utilizado técnicas
avanzadas de ofuscación del código fuente, se puede dificultar el proceso de ingeniería inversa. En este
caso, se deberá recurrir a más bajo nivel y examinar el código SMALI, lenguaje de ensamblador utilizado
en DEX basado en JASMIN, el código de ensamblador para la máquina virtual de Java (JVM). Estas
representaciones quedarán fuera del alcance de este apartado, pero se presentan como alternativa a técnicas
avanzadas de análisis.
Una vez se han obtenido los archivos .jar se deberá obtener el código Java, por lo que se hará uso de la
herramienta jd-gui (http://jd.benow.ca/) para su conversión. Esta herramienta ofrece una interfaz gráfica para
visualizar el código fuente y un buscador que puede resultar útil para establecer patrones de búsqueda
dentro del código fuente de la app.
Posteriormente, se abrirá el archivo .jar y se mostrará el código fuente de la aplicación, tal y como se
observa a continuación:
17/61
Auditoría de aplicaciones móviles
Es posible que el auditor desee obtener el código Java sin necesidad de una interfaz gráfica para realizar
patrones de búsqueda por línea de comandos con el uso, por ejemplo, de la herramienta nativa “grep”. En
este caso, se podría utilizar la herramienta jd-cmd (https://github.com/kwart/jd-cmd) para su obtención:
El código decompilado se almacenará en el directorio indicado y podrá ser utilizado para realizar
búsquedas en todos los ficheros mediante el uso de la herramienta “grep”.
18/61
Auditoría de aplicaciones móviles
4.2.4.1. AndroidManifest.xml
Se trata del fichero XML de configuración donde se especifica toda la información que el dispositivo
precisa para poder determinar las acciones que llevará a cabo la aplicación en base a los permisos
(etiquetas XML definidas que indican las acciones permitidas por parte de la aplicación), requisitos de
software o hardware que se utilizarán durante la aplicación, la versión del sistema operativo y los
diferentes componentes que se ejecutarán en función de las notificaciones o eventos que se produzcan
en el sistema.
Puntos a revisar:
19/61
Auditoría de aplicaciones móviles
El hecho de que se puedan realizar backups de la aplicación permite a un tercero obtener una copia de
la aplicación y los datos que utiliza como por ejemplo bases de datos locales.
20/61
Auditoría de aplicaciones móviles
Se deberá comprobar que los elementos “ intent-filters ” que permiten la interacción entre los
diferentes componentes Activity de la aplicación cuentan con el atributo
android:exported=”false” definido. Por defecto, si no se encuentran definidos con este
atributo, se comportarán como si el valor fuese “true” y podrán ser utilizados por otras
aplicaciones, pudiendo exponer, modificar o eliminar la información o acciones que llevan a
cabo.
CERTIFICADO.RSA: Para poder definir un propietario de la aplicación, esta deberá firmarse con un
certificado digital que se adjuntará en la aplicación (archivo con extensión .rsa en la mayoría de los
casos o .dsa) para poder verificar su firma. Google requiere que, para poder subir una aplicación en su
repositorio de aplicaciones (market), estas se encuentren firmadas y con un certificado adjunto.
Este certificado permitirá relacionar diferentes aplicaciones con un mismo propietario, en el caso de
que este haya utilizado el mismo certificado. También se deberá tener muy en cuenta la fecha de validez
de este certificado o si se encuentra revocado.
Para obtener información sobre el certificado, se deberá descomprimir el archivo apk como si se
tratase de un ZIP (es posible que previamente se deba cambiar la extensión a .zip). A continuación, se
utilizará la herramienta keytool mediante el siguiente comando:
Adicionalmente, es posible que la aplicación cuente con un directorio donde almacenar los
certificados de las aplicaciones web a las que realiza consultas o envía información como una medida de
protección a ataques “Man-in-the-Middle”. Durante el análisis estático es necesario identificar si cuenta
con certificados almacenados para poder evitar este tipo de protección, la cual será explicada en detalle
a lo largo de este módulo.
21/61
Auditoría de aplicaciones móviles
En relación al resto de la aplicación, es necesario detectar si se hace uso de bases de datos locales
(archivos .db) que podrán ser consultados mediante sqlite browser. Las bases de datos suelen
encontrarse almacenadas en el directorio “/data/data/<package_name>/databases”.
Finalmente, mediante la shell que proporciona adb, se deberá acceder a los datos de la aplicación
almacenados en el dispositivo, tanto en el directorio cache como donde se encuentre instalada la
aplicación (generalmente en /data/data/<package_name>), revisando los permisos de lectura, escritura y
ejecución de los archivos que la conforman.
NOTA: Es posible que para acceder a los directorios indicados se requieran permisos de root. En el
apartado de análisis dinámico se adjunta una guía para rootear el dispositivo Android.
22/61
Auditoría de aplicaciones móviles
Es bastante común que los desarrolladores hagan uso de mensajes de control y logs de la
aplicación para analizar su comportamiento, pudiendo filtrar información sensible. A continuación, se
muestran ejemplos de este tipo de mecanismos de control:
Log.i(...+var+...) Log.w(...+var+...)
Log.e(...+var+...) Log.d(...+var+...)
Log.wtf(...+var+...) Log.v(...+var+...)
System.out.print(“STRING”+var);
Cabe mencionar que, si el Log contiene el valor de una variable concatenado en un string y dicha
variable proviene de datos introducidos por el usuario, solo podrán ser obtenidos en tiempo de
ejecución durante el análisis dinámico.
Es preciso revisar si la aplicación hace uso de algoritmos de cifrado débil, especialmente si estos
se utilizan para almacenar o transmitir credenciales o datos sensibles. A continuación, se muestran
varios ejemplos de métodos que se verían afectados:
Cabe destacar que es muy común que las aplicaciones móviles utilicen codificaciones en Base64
para que la información no se altere al ser enviada a través del protocolo HTTP. Una mala práctica es
utilizar la codificación Base64 sobre datos sensibles en sustitución de algoritmos de cifrado por lo
que es conveniente revisar qué datos se codifican en Base64.
import android.util.Base64;
23/61
Auditoría de aplicaciones móviles
Ficheros temporales
File file;
El componente WebView se utiliza en las aplicaciones Android para cargar contenido HTML de
forma dinámica. A través de WebView la aplicación puede ser susceptible a ataques de MITM o
XSS. Es preciso mencionar que, para verificar si este componente es vulnerable, se deberá realizar un
análisis dinámico de la aplicación. A continuación, se presentan varios ejemplos:
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(interface)
WebView omite los errores SSL, por lo que, si un certificado digital deja de ser válido, la
aplicación continuará su flujo de ejecución (susceptible a MitM):
handler.proceed();
24/61
Auditoría de aplicaciones móviles
SQL Injection
import android.database.sqlite;
cr = mDB.rawQuery( "SELECT * FROM sqliuser WHERE user = ’" + var + "’", null);
query = mDB.execSQL( "SELECT * FROM sqliuser WHERE user = ’" + var2 + "’", null);
Las aplicaciones Android pueden ejecutar comandos del sistema sobre el dispositivo en el que se
encuentran instaladas, pudiendo acceder a información del dispositivo, imágenes, datos que generan
otras aplicaciones, etc. A continuación, se muestra un ejemplo del método utilizado para la ejecución
de comandos:
getRuntime().exec(“ls -la”);
La criticidad aumenta cuando se concatena este tipo de métodos con una variable de tipo string
que recoge los datos que introduce el usuario.
La detección de dispositivo rooteado por parte de una aplicación puede ser una contramedida de
seguridad mediante la cual, si una aplicación es instalada en un dispositivo rooteado, ésta no permita
su ejecución.
Por otro lado, es lógico pensar que una aplicación maliciosa pueda realizar también
comprobaciones sobre el dispositivo rooteado para obtener información de éste, interactuar con
otras aplicaciones, acceder a sus datos, etc. Por este motivo, se deberá realizar un análisis en
profundidad de las partes del código involucradas en la detección de root, analizando por ejemplo si
la aplicación hace uso de las siguientes librerías o búsquedas en el dispositivo:
import com.noshufou.android.su;
import com.thirdpary.superuser;
import eu.chainfire.supersu;
isDeviceRooted();
RootTools.isAccessGiven();
25/61
Auditoría de aplicaciones móviles
.contains("test-keys");
/system/sd/xbin/su
/system/app/Superuser.apk
/system/bin/failsafe/su
Con el fin de evitar errores a la hora de realizar conexiones HTTPS entre la aplicación móvil y la
aplicación web, debido a que el certificado digital no coincide con el nombre de dominio, no se
verifica el hostname del certificado. Este procedimiento se considera una mala práctica, puesto que
facilita que la aplicación móvil sea susceptible de ataques MitM. A continuación, se muestra un
ejemplo de detección de esta estructura:
import javax.net.ssl ;
HttpsURLConnection.setDefaultHostnameVerifier(NullHostnameVerifier);
}
Math.random();
26/61
Auditoría de aplicaciones móviles
Es posible que la aplicación esté recolectando datos del dispositivo sin que el usuario sea
consciente. Entre esos datos podríamos destacar el IMEI del dispositivo donde se encuentra
instalada la aplicación o el número de la tarjeta SIM. Para ello se deberían verificar los siguientes
puntos:
import android.telephon.TelephonyManager
getSimSerialNumber();
getDeviceId();
Es posible que la aplicación envíe SMS/MMS sin el consentimiento del usuario o bién se encuentre
mal implementado y pueda ser objeto de explotación para un envío masivo. Por este motivo es
recomendable revisar este tipo de funcionalidades. En primer lugar, se deberá revisar si cuenta con el
permiso correspondiente y si se hace uso de alguna estructura similar a las siguientes:
sendIntent.setType("vnd.android-dir/mms-sms");
Localización activada
La aplicación puede estar consultando la geolocalización del dispositivo sin que el usuario sea
consciente. A continuación, se muestran diferentes ejemplos para localizar el dispositivo móvil:
27/61
Auditoría de aplicaciones móviles
import import
com.android.location; android.telephony.TelephonyManager;
getLastKnownLocation(); import
android.telephony.gsm.GsmCellLocation;
requestLocationUpdates(); getCellLocation();
getLatitude();
getLongitude()
Campos ocultos
Las aplicaciones pueden contener campos ocultos en los que se puede almacenar información para
la gestión de sesiones, por ejemplo, tokens o API-Keys, que se enviarán junto con el usuario y la
contraseña.
Por otro lado, es posible que la aplicación cuente con elementos ocultos, por ejemplo, botones,
que el usuario esté accionando sin conocimiento alguno. A continuación, se presentan algunos
métodos o atributos para revisar su funcionalidad:
setVisible(View.invisible);
android:visibility=invisible
android:background=@null
En este apartado se presentan varias herramientas que facilitan la obtención del código fuente y realizan
un análisis estático de la aplicación de forma automática basándose en reglas similares a las expuestas en el
apartado anterior:
Se trata de una herramienta multiplataforma desarrollada en Python que permite tanto el análisis
28/61
Auditoría de aplicaciones móviles
Se trata de una herramienta multiplataforma desarrollada en Python que permite tanto el análisis
estático como el dinámico.
Comandos de instalación:
cd Mobile-Security-Framework-MobSF
Para ejecutarlo se utilizará el comando “python3 manage.py runserver” que creará un servidor web en
el puerto 8000 por defecto.
Finalmente, el usuario solo deberá acceder a la URL http://127.0.0.1:8000 y subir el archivo APK para
su análisis. Una vez finalizado mostrará un panel donde se detallan las vulnerabilidades, se permite
realizar búsquedas en el código fuente de la aplicación, etc.
29/61
Auditoría de aplicaciones móviles
Se trata de una herramienta multiplataforma de análisis estático desarrollada en Rust. Cuenta con unos
tiempos de análisis muy cortos debido a que pretende realizar todas las fases de decompilación y
obtención del código sin dependencias externas.
Para su ejecución :
super {apk_file}
https://mobilesecuritywiki.com/
30/61
Auditoría de aplicaciones móviles
Para realizar un análisis dinámico de la aplicación es necesario que se configure el dispositivo o emulador
para poder interceptar el tráfico que genere la aplicación y poder así revisar las acciones y peticiones que
ésta realiza. Para ello se hará uso del proxy inverso utilizado anteriormente para las aplicaciones web Burp
Suite.
En este caso se debe diferenciar entre las versiones de Android anteriores a la 7.0 y las posteriores,
puesto que el proceso de configuración varía.
Adicionalmente, si se utiliza un dispositivo físico es posible que se requiera que este cuente con
permisos de root para ejecutar o instalar ciertos comandos adb. A continuación, se adjunta una guía para
poder rootear el dispositivo:
https://www.xda-developers.com/root/
Para ello, en primer lugar, se obtendrá la IP del host donde se ejecuta Burp y el puerto de escucha;
para ello se deberá seleccionar la opción de habilitar todas las interfaces de red en el proxy.
Posteriormente, se conectará el dispositivo a la misma red wifi que el host que ejecuta Burp y en
opciones avanzadas se configurará el proxy con la IP y el puerto, tal y como se muestra a continuación:
31/61
Auditoría de aplicaciones móviles
Imagen 5.20. Configuración del dispositivo móvil para redirigir el tráfico al proxy de Burp.
Fuente: captura de la configuración de un dispositivo móvil con Android.
Llegados a este punto, si se accede a la url “http://bup” se podrá descargar el certificado con la
extensión “.der”, que el dispositivo no puede reconocer. Por ese motivo es necesario cambiar la
extensión a “.cer” y posteriormente instalar el certificado como se observa a continuación:
Finalmente, si se navega a una página web con HTTPS o si una aplicación realiza conexiones a un
servidor web con HTTPS, el tráfico será redirigido e interceptado por Burp, pudiendo cambiar los
parámetros antes de ser enviados.
32/61
Auditoría de aplicaciones móviles
A partir de la versión 7.0 de Android, se ha introducido un mecanismo para evitar que las
aplicaciones consulten certificados instalados en el dispositivo por parte del usuario y dificultar de esta
forma el uso de proxies inversos para interceptar el tráfico. Por defecto, todas las aplicaciones utilizarán
únicamente certificados digitales de autoridades de certificación instalados en el dispositivo.
De esta forma, si se desea utilizar un certificado instalado por el usuario, se deberá indicar dentro de
la propia aplicación, en el archivo AndroidManifest.xml a través del uso del atributo
“ android:networkSecurityConfig” indicando la ruta al certificado digital o si se permite el uso de
certificados de usuario, tal y como se observa en el siguiente ejemplo:
<network-security-config>
<domain-config>
<domain includeSubdomains="true">example.com</domain>
<trust-anchors>
<certificates src="user"/>
</trust-anchors>
</domain-config>
</network-security-config>
https://github.com/levyitay/AddSecurityExceptionAndroid
Se ejecutará el script indicando la ruta al archivo APK. Si es la primera vez que se ejecuta y no se
cuenta con una clave de debugging en Android, se creará un par de claves RSA junto con el
correspondiente keystore para firmar la aplicación una vez se haya recompilado.
Una vez haya finalizado la ejecución del script, se creará una copia de la aplicación con el nombre
“_new.apk” que contará con el AndroidManifest.xml modificado. Llegados a este punto, solo restará
instalar la aplicación en el dispositivo tal y como se ha explicado anteriormente.
33/61
Auditoría de aplicaciones móviles
Imagen 5.22. Ejecución de script para recompilar la aplicación y que utilice certificados de usuario.
Fuente: captura de Kali Linux.
Como alternativa al proceso anterior, si a partir de Android 7.0 solo se admiten certificados digitales
instalados como autoridades de certificación, es posible instalar el certificado de Burp como tal
mediante el uso de los siguientes comandos. Es preciso indicar que se requiere privilegios de root sobre
el dispositivo.
En este caso se obtiene como output “ 9a5ba575” por lo que se renombra el certificado de la siguiente
forma:
mv cacert.cer 9a5ba575.0
adb shell
su
mv /sdcard/Downloads/9a5ba575.0 /system/etc/security/cacerts
34/61
Auditoría de aplicaciones móviles
Mediante adb se pueden obtener los logs de la aplicación en tiempo de ejecución. Para ello, se hace
uso de la funcionalidad logcat para observar las acciones, mensajes de depuración, llamadas internas e
información del dispositivo que se genera tras las interacciones del usuario con la aplicación. Si bien es
cierto que la velocidad y la cantidad de registros puede ser elevada, se recomienda obtener la salida en
un archivo para su posterior análisis. El comando es el siguiente:
adb shell
Para llevar a cabo el análisis dinámico de la aplicación se deberá revisar la interacción de la aplicación en
dos fases:
Se deberá revisar qué tipo de información almancena la aplicación en el dispositivo, tal y como se ha
mencionado en el apartado de metodología. Se deberá prestar especial atención a los datos almacenados
relacionados con credenciales, archivos de configuración, perfilados de usuarios, archivos temporales, etc.
La mayoría de aplicaciones móviles interactúan con un servidor externo para intercambiar información.
En este apartado se utilizarán los campos de datos de la aplicación para analizar la respuesta del servidor
externo.
Llegados a este punto, la aplicación se analizará como si se tratase de una aplicación web donde el
navegador en este caso es la propia aplicación móvil, a través de la que se interactuará con el servidor. Por
este motivo, la metodología de análisis a seguir será la misma que la que se ha explicado en el módulo de
aplicaciones web.
En este apartado se plantean las principales contramedidas para evitar que las aplicaciones Android
puedan ser analizadas y susceptibles de interceptar las comunicaciones que realizan con el servidor web
correspondiente. De esta forma, se dificultarían varios de los puntos explicados en este módulo.
Certificate Pinning
Esta contramedida se basa en asegurar que la aplicación móvil únicamente realiza el intercambio de
información con el servidor web legítimo. De esta forma se dificulta la intercepción del tráfico mediante
el uso de proxies inversos, como se ha explicado en anteriores apartados.
35/61
Auditoría de aplicaciones móviles
Para ello se requiere que la aplicación verifique que el certificado del servidor al que se realizan las
peticiones coincide el certificado digital que tiene precargado dentro del APK.
Para poder evitar esta contramedida, se deberá modificar en tiempo de ejecución las partes de código
que llevan a cabo dicha comprobación. Para ello se hará uso de la herramienta Frida
(https://www.frida.re/), que permite la inyección de código JavaScript en tiempo de ejecución de las
aplicaciones.
A continuación se especifican los comandos para realizar la instalación y el código JavaScript que se
utilizará para evitar el certificate pinning. Previamente, se debe descargar la última versión de frida-server
para la arquitectura correspondiente al dispositivo desde la siguiente url: https://github.com/frida/frida/rel
eases
Una vez más, se requiere un dispositivo virtualizado o con permisos de root para su ejecución.
adb shell
su
setenforce 0
cd /data/local/tmp
./frida-server &
A continuación, se deberá crear el archivo JavaScript que realizará la evasión. A grandes rasgos, la
evasión se lleva a cabo al monitorizar la ejecución del código de la aplicación y, por ejemplo, si se
ejecuta el método de verificación del certificado y este devuelve un valor “true” si es correcto, el código
JavaScript se encargará de devolver un valor “true” sin realizar la ejecución del método.
El código JavaScript para esta evasión se puede obtener de la siguiente URL y se deberá almacenar
en el código un fichero con extensión “ .js ”:
https://codeshare.frida.re/@pcipolloni/universal-android-ssl-pinning-bypass-with-frida/
Finalmente, se ejecutarán los siguientes comandos para utilizar el certificado de Burp en lugar del
certificado que utilice la aplicación para su comprobación:
36/61
Auditoría de aplicaciones móviles
Esta contramedida pretende detectar si el dispositivo se encuentra rooteado con el fin de evitar que
otras aplicaciones puedan acceder a los datos que genere la aplicación o evitar que se pueda hacer uso
de software para interceptar las comunicaciones y/o acciones que se realicen. Estas medidas se basan en
que la aplicación solicita permisos de root: si el dispositivo se los concede, se detectará que el
dispositivo se encuentra rooteado. Adicionalmente, se suele realizar una búsqueda de las aplicaciones
comunes que otorgan dichos permisos, tal y como se ha explicado en el apartado de análisis del código
fuente.
Java.perform(function () {
console.log('Patch isDeviceRooted');
return false;
console.log('Patch checkRootMethod1');
return false;
console.log('Patch checkRootMethod2');
return false;
});
37/61
Auditoría de aplicaciones móviles
Este código deberá ser almacenado como un archivo .js y ejecutar el siguiente comando una vez se ha
configurado el servidor de frida, tal y como se ha especificado anteriormente:
Adicionalmente, se puede hacer uso de aplicaciones como RootCloak, incluida en el módulo del
framework Xposed. La instalación de Xposed, así como de los módulos que lo conforman, se
consideran fuera del alcance de este módulo, por lo que en los siguientes enlaces se puede obtener
información sobre este punto:
https://www.xda-developers.com/xposed-framework-for-android-oreo-beta/
https://techviral.net/install-xposed-framework-in-android/
GoatDroid (https://github.com/jackMannino/OWASP-GoatDroid-Project/tree/android).
Diva (https://github.com/payatu/diva-android).
InsecureBanking2 (https://github.com/dineshshetty/Android-InsecureBankv2).
DVHA (https://github.com/logicalhacking/DVHMA)
Desde el punto de vista del análisis estático, se examinarán todos los archivos que constituyen el
aplicativo móvil, profundizando en el análisis del código, los archivos de configuración y la información
almacenada en el dispositivo durante su ejecución (como, por ejemplo, información de la sesión del
usuario, información almacenada en bases de datos, etc.).
En relación al análisis dinámico, se mostrarán las técnicas para capturar el tráfico en tiempo real y se
analizarán las distintas herramientas y los métodos que permiten eludir las medidas de evasión
implementadas en el aplicativo para dificultar su análisis.
38/61
Auditoría de aplicaciones móviles
iOS es el sistema operativo utilizado en los dispositivos móviles de Apple, incluyendo el iPhone, iPad y
iPod Touch. iOS está basado en Darwin, cuyo kernel híbrido combina componentes de FreeBSD y Mach.
Las aplicaciones se ejecutan en un entorno restrictivo (sandbox) aisladas unas de otras y del sistema de
archivos.
Las aplicaciones se distribuyen a través de la Apple Store y son sometidas a un proceso de revisión de
código (App Review) https://developer.apple.com/app-store/review/ para asegurar su fiabilidad,
funcionamiento esperado y cumplimiento del código ético.
Además, es posible instalar aplicaciones que no provienen de la Apple Store en un dispositivo sin
jailbreak:
Mediante Enterprise Mobile Device Management (MDM), que requiere un certificado empresarial
firmado por Apple https://developer.apple.com/programs/enterprise/
Aplicaciones firmadas con un certificado de tipo desarrollador
https://developer.apple.com/support/certificates/
Los requisitos mínimos para construir un entorno de pruebas son los siguientes:
Cydia.
OpenSHH.
Frida.
BigBoss Tools.
adv-cmds.
Class Dump.
Substrate.
AppSync.
Radare2 Suite.
iOS SSL Kill Switch.
Keychain Dumper.
Clutch.
Dumpdecrypted.
39/61
Auditoría de aplicaciones móviles
IPAinstaller.
Puede encontrar más información sobre la instalación de los componentes en el siguiente enlace:
https://github.com/OWASP/owasp-mstg/blob/master/Document/0x06b-Basic-Security-Testing.
md
Para realizar el análisis estático del aplicativo es necesario disponer del archivo IPA. Este formato de
archivo es utilizado por las aplicaciones de Apple en los dispositivos iPhone, iPad y iPod Touch.
Una vez instalada la aplicación en el dispositivo, se puede extraer el archivo IPA para su posterior
análisis, mediante diversas técnicas:
Realizar un backup del dispositivo vía iTunes y extraer el archivo IPA de la siguiente ruta:
/Users/<user>/Library/Application\ Support/MobileSync/Backup/
40/61
Auditoría de aplicaciones móviles
En caso que se disponga del archivo IPA (sin que haya sido descargado de la Apple Store) y sea
necesario instalarlo en el dispositivo, se puede utilizar la herramienta CydiaImpactor
http://www.cydiaimpactor.com la cual permite instalar aplicaciones en dispositivos que no tengan realizado
el jailbreak.
Las aplicaciones para dispositivos iOS se distribuyen en archivos IPA (iOS App Store Package), cuyo
formato ZIP comprimido contiene el código y los recursos necesarios para su ejecución (el archivo binario
de la aplicación, los archivos de configuración, las librerías e imágenes necesarias para su funcionamiento).
/Payload/: carpeta que contiene todos los archivos que constituyen la aplicación.
/Payload/Application.app: contiene el código ARM compilado y los recursos estáticos.
/iTunesArtwork: imagen de la aplicación.
/iTunesMetada.plist: información que incluye el identificador del desarrollador, bundle ID,
información de copyright, fecha de lanzamiento, etc.
/WatchKitSupport/WK: extensiones para interactuar con Apple Watch.
41/61
Auditoría de aplicaciones móviles
Apple define una estructura de directorios y archivos para las aplicaciones, en las que se encuentran:
42/61
Auditoría de aplicaciones móviles
Mediante acceso vía SSH al dispositivo móvil, es posible examinar los archivos almacenados de forma
local en el dispositivo.
Para identificar la ruta donde está ubicada la aplicación, se puede ejecutar el siguiente comando:
Dentro del directorio /var/mobile/Containers/ se encuentran las aplicaciones instaladas mediante Apple
Store, IPA Installer y Cydia.
43/61
Auditoría de aplicaciones móviles
/var/mobile/Containers/Bundle/Application/[UUID]/Application.app
/var/mobile/Containers/Data/Application/[UUID]/Documents
/var/mobile/Containers/Data/Application/[UUID]/Library
/var/mobile/Containers/Data/Application/[UUID]/tmp
iOS pone a disposición de los desarrolladores varias API para el almacenamiento de datos y hacen uso
del hardware criptográfico disponible en los dispositivos con sistema operativo iOS.
44/61
Auditoría de aplicaciones móviles
Para localizar los archivos de configuración en el sistema de archivos del dispositivo, se puede
ejecutar el siguiente comando:
Los archivos de propiedades .plist tienen un formato binario y requieren de utilidades específicas
para poder leer su contenido. La siguiente utilidad permite convertirlos a xml:
# plutil -p Info.plist
De igual forma, se pude emplear para mostrar el contenido de archivos que contienen cadenas o
strings del aplicativo.
# plutil -p *.app/en.lproj/Localizable.strings
En caso que no se disponga de acceso al sistema de ficheros del dispositivo (por ejemplo, si el
dispositivo no tiene jailbreak), existen herramientas que permiten recuperar la información almacenada en
los backups de iTunes y iCloud:
Es importante revisar las bases de datos que utiliza la aplicación para almacenar la información en
local e identificar si contienen información sensible sin cifrar.
# sqlite3 <base_datos>.db
Se pueden extraer mediante SFTP las bases de datos del dispositivo y utilizar un cliente de SQLite htt
p://sqlitebrowser.org/ para mostrar su contenido.
5.3.3.3. Keychain
El Keychain se utiliza para almacenar datos sensibles como son las llaves de cifrado, tokens de sesión
o la información de autenticación. Su implementación es similar a una base de datos SQLite, y solo se
puede acceder a través de las API específicas para Keychain.
/private/var/Keychains/keychain-2.db
45/61
Auditoría de aplicaciones móviles
# ./keychain_dumper
Se debe revisar que la información sensible ha sido configurada con las clases Data Protection
adecuada.
kSecAttrAccessibleAfterFirstUnlock
kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
kSecAttrAccessibleAlways
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
kSecAttrAccessibleAlwaysThisDeviceOnly
kSecAttrAccessibleWhenUnlocked
kSecAttrAccessibleWhenUnlockedThisDeviceOnly
El siguiente enlace muestra información más detallada respecto las clases de acceso de Data
Protection:
https://developer.apple.com/documentation/security/keychain_services/keychain_items/item_attribute
_keys_and_values#1679100
Por otra parte, si una aplicación se desinstala en el dispositivo, la información permanece almacenada
en el Keychain.
Por ello, se debe comprobar que los datos no se mantienen tras volver a reinstalar la aplicación. Para
ello está disponible needle framework https://github.com/mwrlabs/needle permitiendo la lectura del
Keychain, como se muestra a continuación:
46/61
Auditoría de aplicaciones móviles
# python BinaryCookieReader.py
Adicionalmente, se puede extraer el archivo mediante SFTP y utilizar un editor hexadecimal para
acceder a su contenido, o mediante una de las funcionalidades que incluye el framework needle.
Desde la perspectiva de la ingeniería inversa, se pone especial énfasis en el análisis del binario, para
entender cómo funciona la aplicación. Para ello es necesario:
47/61
Auditoría de aplicaciones móviles
Las aplicaciones descargadas de la Apple Store vienen cifradas con un par de claves
públicas/privadas generadas al crear la cuenta en iTunes y, posteriormente, son transferidas al
dispositivo tras el proceso de autenticación en iTunes.
Para analizar el archivo ejecutable, es necesario descifrarlo desde el dispositivo móvil y así poder
extraerlo para su posterior análisis.
En primer lugar, se debe identificar si la aplicación está cifrada, identificado el bit de cifrado. El
campo cryptid de la propiedad LC_ENCRYPTION_INFO identifica si la aplicación ha sido cifrada o
no.
Una vez se ha identificado si el binario está cifrado o no, hay disponibles varias utilidades para
descifrar el binario. Entre ellas se encuentran Clutch y dumpdecrypted.
https://github.com/stefanesser/dumpdecrypted
https://github.com/KJCracks/Clutch
48/61
Auditoría de aplicaciones móviles
Fuente: https://github.com/KJCracks/Clutch.
Para identificar la arquitectura para el que fue compilado el binario, los símbolos o strings y para
identificar si el binario ha sido cifrado, etc., se puede utilizar la herramienta rabin2 dentro de la suite de
radare2 https://github.com/radare/radare2
Los siguientes comandos permiten obtener la información del binario, el listado de los sub-binarios y
extraerlos para su posterior análisis:
$ rabin2 -I <APP>
$ rabin2 -A <APP>
$ rabin2 -x <APP>
Para extraer los símbolos y strings , se pueden ejecutar los siguientes comandos:
$ rabin2 -s <APP>
$ rabin2 -z <APP>
Para realizar el volcado de las clases se puede utilizar la herramienta Class Dump.
https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/networkpx/class
-dump-z_0.2a.tar.gz
49/61
Auditoría de aplicaciones móviles
https://github.com/KJCracks/Clutch/wiki/Tutorial
Hay disponibles varios frameworks que permiten realizar el análisis estático de la aplicación.
Estas herramientas permiten obtener información de los archivos de configuración, las clases de las que
hace uso el binario, librerías, strings , etc., e identifican posibles vulnerabilidades y/o errores de
configuración.
50/61
Auditoría de aplicaciones móviles
https://github.com/MobSF/Mobile-Security-Framework-MobSF
MobSF permite llevar a cabo análisis estático y dinámico (este caso solo está disponible para
aplicaciones Android) y ejecutar pruebas sobre la API web.
Además, extrae información de la aplicación y ejecuta un análisis del binario, de los ficheros que
componen la aplicación, las librerías, etc.
51/61
Auditoría de aplicaciones móviles
Passionfruit
https://github.com/chaitin/passionfruit
Passionfruit es una herramienta que permite analizar desde una perspectiva de caja negra aplicaciones
móviles iOS.
Soporta dispositivos sin jailbreak y ofrece una consola web como interfaz de usuario.
Así mismo, esta herramienta permite mostrar las bases de datos y archivos de configuración “plist”
almacenados en el dispositivo móvil, BinaryCookies o descargar el Keychain y el resto de archivos para
su posterior análisis.
52/61
Auditoría de aplicaciones móviles
Brida
https://github.com/federicodotta/Brida
https://techblog.mediaservice.net/2018/04/brida-a-step-by-step-user-guide/
Brida es una extensión de Burp Suite que trabaja como puente entre Burp Suite y Frida, permitiendo
manipular el tráfico entre el aplicativo móvil y los servicios publicados en el backend .
El análisis dinámico se utiliza para asegurar que los mecanismos de seguridad poseen las protecciones
suficientes contra los ataques más frecuentes, como, por ejemplo, revelación de información sensible
transmitida por los canales de comunicación, fallos en la autenticación y autorización y/o errores de
configuración en el servidor.
En este apartado no se tratará el análisis de vulnerabilidades contra los servicios web publicados en el
backend, debido a que la información correspondiente se puede encontrar en el Unidad 2 de este módulo.
En cambio, se centrará en la instalación del certificado para capturar el tráfico del aplicativo y en las
técnicas para evadir contramedidas implementadas para dificultar el análisis del tráfico.
53/61
Auditoría de aplicaciones móviles
5.4.1. Instalación del certificado para el análisis del tráfico con Burp Suite
Una vez se ha iniciado Burp Proxy en el ordenador, se debe visitar la siguiente ruta desde el dispositivo
móvil http://<IP_Ordenador>:<Puerto> (IP y puerto donde está el proxy iniciado), y hacer clic en el
enlace “CA Certificate” para descargar el certificado raíz CA de Burp e instalarlo en el dispositivo móvil.
54/61
Auditoría de aplicaciones móviles
Para interceptar el tráfico HTTP(S), se configura el proxy en el dispositivo móvil que apuntará a la IP y
puerto en el que está funcionando Burp Proxy.
Navegando por la aplicación, el tráfico es capturado por el proxy, mediante el cual se pueden interceptar
y modificar peticiones de la misma forma que durante un análisis de tráfico web.
Con más frecuencia los desarrolladores incluyen controles en las aplicaciones para obstaculizar el
análisis dinámico, como son SSL Pinning o cifrado End-to-End (E2E), los cuales previenen la
interceptación y manipulación del tráfico del aplicativo.
Otro mecanismo es la detección de jailbreak, el cual impide que la aplicación sea ejecutada en un
dispositivo con jailbreak, dificultando así el uso de herramientas avanzadas.
Para deshabilitar la validación de SSL Pinning, se puede utilizar la herramienta SSL Kill Switch 2 https://g
ithub.com/nabla-c0d3/ssl-kill-switch2 que parchea las funcionalidad de SSL a bajo nivel y también
deshabilita la verificación del certificado SSL.
5.4.2.1. Frida
55/61
Auditoría de aplicaciones móviles
Mediante el siguiente comando se trazan las llamadas que realiza el aplicativo cuando invoca a la
función que comprueba si el dispositivo tiene jailbreak o no.
$ frida-trace -U -f /Applications/DamnVulnerableIOSApp.app/DamnVulnerableIOSApp -m
"-[JailbreakDetectionVC isJailbroken]"
El comando arranca la aplicación y se crea un script en JavaScript, que permite modificar los
métodos onEnter y onLeave, modificando el valor de la función para la que devuelve (0), es decir,
isJailbroken a “false”.
/* TID 0x303 */
56/61
Auditoría de aplicaciones móviles
Estas aplicaciones pueden servir al alumno como práctica y entrenamiento de esta unidad:
Esta aplicación está desarrollada para estudiar las "trampas" en el desarrollo de aplicaciones híbridas,
por ejemplo, utilizando Apache Cordova o SAP Kapsel de forma segura. Actualmente, el enfoque
principal es desarrollar una comprensión más profunda de las vulnerabilidades de inyección que
explotan el nexo de unión entre JavaScript y Java.
VI. Resumen
De manera similar en la que hemos estudiado la auditoría de aplicaciones web, en esta unidad nos hemos
centrado en la auditoría de aplicaciones móviles.
Para establecer una metodología efectiva, hemos aprendido que podemos basarnos en la guía de
OWASP Mobile Security Testing Guide , ya que clasifica los riesgos de seguridad en aplicaciones móviles
y proporciona controles para reducir su impacto o probabilidad de explotación.
Para este tipo de auditoría, hemos estudiado aplicaciones móviles de diferentes sistemas operativos
como Android, iOS y, dentro de cada sistema operativo, los tipos de análisis existentes (estático o
dinámico), aplicaciones vulnerables para poder realizar pruebas.
En conclusión, para poder llevar a cabo una auditoría de seguridad completa, es importante conocer de
forma detallada los tipos de aplicaciones con las que vamos a trabajar, así como sus características
específicas que las diferencian de las aplicaciones web, por ejemplo.
57/61
Auditoría de aplicaciones móviles
Recursos
Enlaces de Interés
[1] Mobile Security Testing Guide
https://github.com/OWASP/owasp-mstg
Bibliografía
Hacking Android. 1st ed. Birmingham: Packt Publishing Ldt. : Kotipalli, S. and A. Imran,
M. (2016). Hacking Android . 1st ed. Birmingham: Packt Publishing Ldt.
Hacking de dispositivos iOS: iPhone & iPad. : Alonso Cebrián, J. (2016). Hacking de
dispositivos iOS: iPhone & iPad. OxWORD Computing.
ADB. : https://developer.android.com/studio/releases/platform-tools#download
AddSecurityExceptionAndroid. : https://github.com/levyitay/AddSecurityExceptionAndroid
APKTool. : https://ibotpeaches.github.io/Apktool/install/
App Review. : https://developer.apple.com/app-store/review/
Brida. : https://github.com/federicodotta/Brida
Certificados de Apple. : https://developer.apple.com/support/certificates/
Clutch. : https://github.com/KJCracks/Clutch
Cydia Impactor. : http://www.cydiaimpactor.com
Dex2jar. : https://sourceforge.net/projects/dex2jar/files/latest/download
Diva Android. : https://github.com/payatu/diva-android
Dumpdecrypted. : https://github.com/stefanesser/dumpdecrypted
DVHA. : https://github.com/logicalhacking/DVHMA
Enterprise Mobile Device Management (MDM). :
https://developer.apple.com/programs/enterprise/
58/61
Auditoría de aplicaciones móviles
Frida. :
https://www.frida.re/
https://github.com/frida/frida/releases
GoatDroid. : https://github.com/jackMannino/OWASP-GoatDroid-Project/tree/android
Guía de Brida. : https://techblog.mediaservice.net/2018/04/brida-a-step-by-step-user-guide/
InsecureBanking2. : https://github.com/dineshshetty/Android-InsecureBankv2
Instalación de Xposed. : https://techviral.net/install-xposed-framework-in-android/
iOS/macOS penetration testing cheat sheet. : https://github.com/ansjdnakjdnajkd/iOS
iPhone Backup Extractor. : https://www.iphonebackupextractor.com/
Java Decompiler. : http://jd.benow.ca/
jd-cmd. : https://github.com/kwart/jd-cmd
Keychain Accessibility Values. :
https://developer.apple.com/documentation/security/keychain_services/keychain_items/item_attribute_keys_an
Keychain-Dumper. : https://github.com/ptoomey3/Keychain-Dumper
Lista de herramientas de análisis Android. : https://www.xda-developers.com/root/
Mobile Security. : https://mobilesecuritywiki.com/
Mobile-Security-Framework-MobSF. : https://github.com/MobSF/Mobile-Security-
Framework-MobSF
Needle. : https://github.com/mwrlabs/needle
OWASP Mobile App Security Checklist. : https://github.com/OWASP/owasp-
mstg/blob/master/Checklists/Mobile_App_Security_Checklist.xlsx
OWASP Mobile Application Security Verification Standard. :
https://www.owasp.org/images/6/61/MASVS_v0.9.4.pdf
OWASP Mobile Security Project – Top 10 Mobile Risks. :
https://www.owasp.org/index.php/OWASP_Mobile_Security_Project
OWASP Mobile Security Testing Guide. : https://github.com/OWASP/owasp-mstg
https://github.com/OWASP/owasp-
mstg/blob/master/Checklists/Mobile_App_Security_Checklist.xlsx
OWASP owasp-mstg. : https://github.com/OWASP/owasp-
mstg/blob/master/Document/0x06b-Basic-Security-Testing.md
passionfruit. : https://github.com/chaitin/passionfruit
Project: Universal Android SSL Pinning Bypass with Frida. :
https://codeshare.frida.re/@pcipolloni/universal-android-ssl-pinning-bypass-with-frida/
radare2. : https://github.com/radare/radare2
SQLite Browser. : http://sqlitebrowser.org/
ssl-kill-switch2. : https://github.com/nabla-c0d3/ssl-kill-switch2
SUPER Android Analyzer. : http://superanalyzer.rocks/download.html
59/61
Auditoría de aplicaciones móviles
Glosario.
APK (Android Application Package): Archivo comprimido, muy similar al formato JAR de
Java o ZIP, que contiene una estructura de ficheros que se descomprimirá y replicará en el
dispositivo móvil una vez el usuario haya decidido instalar la aplicación en cuestión.
IOS: Sistema operativo utilizado en los dispositivos móviles de Apple, incluyendo el iPhone,
iPad y iPod Touch. iOS está basado en Darwin, cuyo kernel híbrido combina componentes de
FreeBSD y Mach.
60/61
Auditoría de aplicaciones móviles
61/61