Tabla de contenidos:
Introducción
Tal como venimos recorriendo en esta serie de publicaciones sobre el pentesting en aplicaciones iOS, hoy toca el turno de abordar temas relacionados con la metodología de análisis de seguridad en sí, considerando, por ejemplo, las fuentes de donde puedan provenir las aplicaciones que queremos analizar y las metodologías de análisis asociadas según organizaciones como OWASP.
Ya tenemos nuestro dispositivo con jailbreak, pero ¿Qué sigue?, ¿qué herramientas utilizamos?, ¿cómo instalamos la aplicación que queremos analizar en nuestro dispositivo?, ¿qué pruebas comenzamos a ejecutar para llevar a cabo nuestros análisis? Todas estas preguntas, entre otras que irán surgiendo, son las que intentaremos desarrollar a lo largo del presente artículo a fin de abordar las bases del pentesting sobre aplicaciones iOS.
El entorno y escenario de trabajo
Tal como hemos visto en el post relacionado a jailbreaking, una vez que tenemos nuestro dispositivo con jailbreak es necesario comenzar a instalar las aplicaciones que nos servirán para llevar a cabo nuestras pruebas. Como también mencionamos, para esto será esencial el uso Cydia, un repositorio de software que funciona sobre la base de distintas fuentes que se pueden modificar para ampliar la cantidad de software disponible a la hora de instalar aplicaciones en nuestro dispositivo. El hecho de que Cydia funcione como repositorio nos hace muy sencillo el trabajo de instalar herramientas, dado que solo basta con ingresar a la herramienta, buscar la aplicación que queremos y la instalamos. Pasando a la acción, una de las primeras funcionalidades que necesitaremos incorporar a nuestro dispositivo será, sin dudas, el sistema SSH. De esta forma podremos tomar control del dispositivo desde nuestra PC, situación que veremos cómo llevar a cabo a continuación.
Tal como se muestra en las siguientes imágenes, nuestra intención será abrir Cydia y buscar OpenSSH para llevar a cabo su instalación.
Una vez que tenemos instalado OpenSSH averiguaremos qué direccion IP tenemos asignada en nuestro dispositivo para luego poder conectarnos desde nuestra PC.
Identificamos nuestra red:
Revisamos las propiedades de la red y encontraremos nuestra dirección IP, la cual debemos recordar para conectarnos más tarde desde nuestra PC por SSH.
Una vez obtenida la direccion IP de nuestro dispositivo, desde nuestra PC abriremos un terminal y nos conectamos por SSH ejecutando la siguiente línea (ssh root@direccionIPdeldispositivo). Luego observaremos que el sistema nos solicita la contraseña, la cual, tal como se observa en la imagen a continuación, por defecto es “alpine”.
Nota: Recordar cambiar la contraseña por defecto una vez que ingresamos al sistema.
Como podemos observar, estamos conectados desde nuestra PC al dispositivo con privilegios de root, lo cual, como sabemos, nos permite realizar multiples tareas.
Creo que queda claro lo sencillo que es incorporar aplicaciones en nuestro dispositivo mediante Cydia. Con esta misma lógica podemos instalar multiples aplicaciones, como APT Strict, que nos permite instalar software desde el terminal usando el clásico apt-get install u otro software que creamos conveniente para formar nuestro entorno de trabajo. Hay que considerar también que para muchas aplicaciones será necesario agregar las fuentes correspondientes a Cydia para llevar a cabo su instalación, tema con el que debemos tener máximo cuidado dado que hay muchas fuentes que descargan malware. Por lo tanto, antes de instalar una aplicación por medio de fuentes agregadas, siempre será necesario validar las mismas.
Sin dudas que hay muchas otras herramientas que podríamos instalar y esto siempre dependerá de nuestras necesidades, entre otras variables. Y aunque más adelante hablaremos de ello con más detalle, OWASP Mobile Security Project nos brinda diversas herramientas según el tipo de análisis que necesitemos ejecutar (Lista de herramientas). A su vez, estas se complementan con las herramientas propuestas por la guía MSTG, de la cual también hablaremos cuando llegue el turno.
Ahora bien, ya disponemos de nuestro dispositivo con jailbreak y algunas herramientas para comenzar a trabajar. Es hora de plantearnos algunas cuestiones. Por ejemplo, ¿cuál será nuestra aplicación de análisis?, ¿cómo vamos a instalarla en el dispositivo? A partir de estas preguntas surgirá sin dudas parte del escenario de trabajo. Antes de comenzar, es importante destacar que a la hora de interactuar con un “cliente” que nos solicita un pentesting de una aplicación iOS, normalmente este nos proveerá de una aplicación en formato IPA que pude compartirla tanto por algún medio de transferencia de datos, donde tendremos concretamente el archivo .ipa, o bien nos puede brindar un enlace a un sistema tipo TestFlight, el cual nos obliga a descargar e instalar una aplicación desde AppleStore en nuestro dispositivo y a partir de allí abrir el enlace que el “cliente” nos envía para llevar acabo la instalación. Es decir que en este caso no tendríamos el archivo .ipa en sí, sino que lo instalamos por medio de TestFlight, y en un caso más black también puede suceder que nos digan que descarguemos directamente la aplicación desde AppleStore. Dependiendo de cada una de estas circunstancias veremos que a la hora de manipular una aplicación necesitaremos de distintas técnicas que nos ayuden, tanto a instalar la aplicación en el dispositivo como a desplegar las pruebas que necesitemos ejecutar.
Estructura e instalación de aplicaciones iOS
Tal como mencionamos anteriormente, a la hora de realizar pentesting sobre una aplicación iOS básicamente trabajaremos con un archivo de extensión .ipa. Por esta razón, antes de comenzar a manipular nuestra aplicación de estudio es necesario que mencionemos algunos aspectos de estos archivos. En principio, los archivos con la extensión IPA son archivos de aplicación iOS y funcionan como contenedores (como ZIP) para guardar los diversos datos que componen una aplicación iOS disponible para ser ejecutada en dispositivos que corren este sistema operativo.
Por otra parte, cabe destacar que, por lo general, los archivos .ipa se encriptan con la tecnología FairPlay DRM de Apple y, como veremos más adelante, estos archivos se pueden descomprimir cambiando la extensión a .zip para poder observar su contenido. La estructura de un archivo IPA es la misma para todas las aplicaciones. Por lo general encontraremos la carpeta Payload que contiene todos los datos de la aplicación, como los binarios de la misma. Si la aplicación está diseñada para su distribución a través de App Store, también tendrá algunos archivos de datos y metadatos tipo iTunesMetadata donde se guarda la información sobre el desarrollador y la aplicación, como sucede con el archivo iTunesMetadata.plist. Es común también que encontremos un archivo iTunesArtwork, que es un archivo PNG (a veces JPEG) que se utiliza como icono de la aplicación. Sin dudas esto es solo un pantallazo de la estructura de este tipo de archivos. Nos quedan por resolver varias interrogantes en cuanto a los sistemas de cifrado que se utilizan al generar estos archivos, así como también las características de los binarios que contienen y las arquitecturas y compiladores que estos manejan, Y aunque estos temas exceden los alcances de esta serie de artículos sobre pentesting en aplicaciones iOS, a medida que avancemos en los contenidos iremos complementando estos conocimientos según las pruebas de seguridad que necesitemos ejecutar.
Instalación de aplicación de estudio
Si bien existen diversas aplicaciones que son vulnerables y están preparadas para el ámbito académico, en nuestro caso utilizaremos DVIA (Damn Vulnerable IOS App), la cual utiliza un esquema de vulnerabilidades relacionado al OWASP Mobile Top 10 del cual hablaremos más tarde cuando hagamos referencia a las metodologías de análisis. En esta etapa nuestro objetivo será obtener el archivo .ipa de nuestra aplicación, para luego instalarlo en nuestro dispositivo. Si recordamos el post de Jailbreaking, ya hemos visto cómo instalar aplicaciones ipa en nuestro dispositivo, concretamente hemos visto que podíamos instalar nuestro ipa mediante la herramienta Cydia impactor o bien generando el proyecto con el IDE Xcode para firmar la aplicación. Y si bien estos métodos son absolutamente válidos, en esta oportunidad veremos un método distinto para instalar nuestra aplicación de estudio en el dispositivo. Como hemos mencionado más de una vez, es importante contar con diversas técnicas de manipulación y análisis dado que los escenarios siempre pueden ser muy relativos y pueden obligarnos, por ejemplo, a necesitar tener a mano distintas formas de instalar estos archivos.
Como mencionamos anteriormente, utilizaremos la aplicación DVIA para nuestro caso de estudio, la cual descargamos desde el siguiente enlace.
Nota: Una vez descargado nuestro archivo .ipa procedemos a guardarlo en algún directorio. Para este caso creamos una carpeta llamada Damn, en la cual guardamos el archivo .ipa.
Luego accederemos a un terminal y nos ubicaremos en el directorio donde se encuentra nuestro archivo .ipa, para más tarde ejecutar el comando unzip -x DamnVylnerableiOSApp.ipa y descomprimir el archivo .ipa (recodar que los archivos .ipa básicamente son “.zip”) tal como se muestra en la imagen.
Luego de descomprimir nuestro archivo .ipa, si hacemos un ls sobre el directorio veremos que se ha generado una carpeta llamda Payload y otra llamada Symbols, tal como se observa en la siguiente imagen.
Ingresando a la carpeta Payload veremos el directorio DamnVulnerableIOSApp.app, el cual contiene el binario que nos interesa tener en nuestro dispositivo para poder instalar la aplicación. Parados en el terminal sobre la carpeta Payload, nos vamos a ayudar del comando scp ejecutando la siguiente sintaxis scp -r DamnVulnerableiOSApp.app root@tudireccionip:/Applications/. Esto copiará el directorio de la aplicación desde nuestra PC al dispositivo.
Ingresando por SSH a nuestro dispositivo, si nos ubicamos en la carpeta /Applications y ejecutamos un ls, como lo muestra la siguiente imagen, veremos que se encuentra la aplicación que hemos copiado (DamnVulnerableIOSAPP.app).
Como se observa, podemos identificar en el directorio Applications la aplicación que hemos copiado. Cabe destacar que en el directorio Applications se encuentran todas las aplicaciones que vienen instaladas por defecto con iOS y también las que están preinstaladas mediante Cydia. Llegado el momento veremos que existe otro directorio donde se guardan las aplicaciones que se instalan desde AppStore, Cydia e ipainstaller, entre otros.
Una vez ubicada nuestra aplicación en el directorio /Applications ingresaremos al directorio de nuestra aplicación y, tal como se muestra a continuación, le daremos permisos de ejecución al binario de la aplicación mediante la ejecución de chmod +x DanmVulnerableiOSApp. Luego, ejecutamos el comando uicache para refrescar el springboard y poder encontrar el icono de la aplicación en nuestro dispositivo.
Tal como lo muestran las siguientes imágenes, una vez ejecutado el comando uicache vemos en el springboard de nuestro dispositivo que se agrega el ícono de la aplicación que nosotros hemos copiado, dando lugar a que podamos ejecutarla y dar por terminado el proceso de instalación.
Si bien es cierto que este método no es el más “prolijo” para instalar una aplicación, es una opción válida más que debemos aprovechar cuando tenemos un dispositivo con jailbreak, como es nuestro caso. Como hemos visto a lo largo de estas entregas, existen varios caminos para instalar un archivo .ipa a los que se les puede sumar el uso de herramientas como iFunbox o iTools, que también nos ofrecen recursos para llevar a cabo la instalación de estos archivos en nuestro dispositivo.
El análisis de aplicaciones
Aunque podríamos considerar que tenemos las herramientas básicas para comenzar con nuestros análisis, dado que tenemos nuestro dispositivo con Jailbreak, sabemos cómo instalar herramientas en nuestro dispositivo, y ya hemos instalado una aplicación de estudio que utilizaremos para realizar pruebas, es evidente que empezar a realizar pruebas al azar o sin un orden o fin determinado no tiene mucho sentido. Sin lugar a dudas necesitaremos apoyarnos de referencias que nos guíen por dónde comenzar y terminar nuestros análisis. Para ello hablaremos de OWASP Mobile Security Project, ya que desde este proyecto podemos encontrar no solo herramientas metodológicas, sino también técnicas en cuanto a cómo desplegar auditorías de seguridad sobre aplicaciones móviles, tanto para iOS como Android.
Este proyecto no solo contempla herramientas para auditores de seguridad, sino también para desarrolladores y equipos de seguridad, ofreciendo los recursos que se necesitan para crear y mantener aplicaciones móviles seguras. A través del proyecto, su objetivo es clasificar los riesgos de seguridad móvil y proporcionar controles de desarrollo para reducir su impacto o probabilidad de explotación. Por otra parte, el proyecto contempla un Estándar de Verificación de Seguridad de Aplicaciones Móviles (MASVS, por sus siglas en inglés) que puede ser utilizado por arquitectos y desarrolladores de software que buscan desarrollar aplicaciones móviles seguras, así como también por auditores de seguridad que quieren garantizar la integridad y coherencia de los resultados de sus pruebas.
Por otra parte, y más enfocados en nuestro rol de auditores, dentro del proyecto también encontraremos una guía llamada Mobile Security Testing Guide (MSTG, por sus siglas en inglés) el cual es un manual completo de pruebas de seguridad e ingeniería inversa en aplicaciones móviles, tanto para iOS como Android, y contempla en su contenido una serie de guías metodológico técnicas con ejemplos prácticos y recomendaciones de herramientas disponibles. Esta guía sin dudas es complementaria a lo que propone al standard MASVS, y también a otro tipo de recursos como las MobileAppSecurityChecklist, que nos servirán para ir contabilizando los controles que debemos ejecutar según lo que nos propone el Mobile Security Testing Guide. Dentro de otros recursos que podemos encontrar es importante mencionar también el OWASP Mobile Top Ten, que nos acerca una clasificación de los 10 riesgos más importantes a los que se ven afectadas las aplicaciones móviles ofreciéndonos una vista general de los controles más importante que debemos contemplar a la hora de realizar nuestros análisis.
Como vemos en la imagen, en la guia MSTG se encuentra un apartado dedicado a iOS.
Realmente es muy jugoso el contenido de esta guía, puesto que más allá de ofrecernos controles clasificados y numerados de pruebas, también nos aporta informacion en cuanto a cómo desplegar un ambiente de pruebas, ejemplos concretos tanto para pruebas de análisis dinámico como estático, así como recomendaciones y referencias, entre otra valiosa información.
Si ingresamos a la sección iOS Testing Guide de la MSTG veremos que en principio se despliga información relativa a la arquitectura de seguridad iOS, al entorno necesario de trabajo, y luego a las pruebas que se recomiendan ejecutar según las distintas fases de análisis. Como dijimos anteriormente, cada prueba que vayamos ejecutando según lo que nos recomienda la guía podemos ir contabilizándola en una checklist, tal como se muestra en la imagen a continuación.
En términos generales, MSTG nos propone la ejecución de unos 90 controles de seguridad correspondientes a los sistemas iOS, aunque por supuesto no siempre aplica la ejecución total de los mismos. Esto dependerá de la estructura de la aplicación, de sus funcionalidades, y del objetivo de análisis, entre otros aspectos que se podrían presentar. Por otra parte, si bien MSTG estructura ordenadamente los diversos controles que podemos ejecutar, a la hora de ejecutar estos controles no debemos olvidar tener presente el OWASP Mobile Top 10, ya que es una manera de complementar los controles que propone MSTG de manera generalizada al exponer, como mencionábamos antes, los 10 riesgos de seguridad más críticos que podría tener nuestra aplicación.
Pues bien, si bien podemos decir que a partir de esta documentación tenemos una serie de controles de seguridad ordenados que podemos ejecutar, también es cierto que durante todo el análisis tendremos que respetar las fases de un pentesting (recolección de información, búsqueda de vulnerabilidades, explotación de vulnerabilidades, etc.) contemplando llevar a cabo ordenadamente las distintas fases y enfoques de trabajo.
Conclusión
Como vimos, el proceso de realizar pentesting en una aplicación para iOS nos exige conocer sobre metodologías de pentesting y también sobre las tecnologías relacionadas a este tipo de aplicaciones. Fuera de todo estándar y metodología, la experiencia del pentester será radical en el resultado de los análisis, pues como podemos deducir, el pentesting no solo se compone de la ejecución de una serie de pruebas y controles de seguridad ordenados, sino que durante todo el proceso de ejecución hay un gran trabajo de análisis que excede a cualquier guía de ejecución y relaciona todas las fases de ejecución a fin de ser lo más minucioso posible.
Si bien como ya dijimos el formato de estas entregas no intenta ser un curso de pentesting, es interesante considerar estas generalidades que estamos desarrollando como puntos de partida o puntos orientativos para poder iniciarnos en este maravilloso mundo. Siguiendo con esta intención de aportar información introductoria sobre el pentesting en aplicaciones iOS, aprovecharemos que tenemos una aplicación de estudio instalada para abordar en una próxima entrega distintos puntos teórico/prácticos que debemos considerar según la fase de análisis con la que estemos trabajando a fin de formar una serie de recomendaciones que nos pueden ser de utilidad a la hora de hacer pentesting en una aplicación.
Lee también:
Arquitectura de Seguridad iOS: las bases del pentesting para este sistema operativo
Jailbreak: todo lo que debes saber para realizar pentesting sobre aplicaciones iOS