miércoles, febrero 28, 2018

Latch’sApp: módulo de exfiltración de datos con Latch Python en iOS #Latch #pentesting

Hace un tiempo escribí una entrada en este post acerca de el desarrollo de un módulo multiplataforma para Python y Swift con el que poder exfiltrar datos entre dispositivos con Latch'sApp. Allí, introduje la aproximación que seguimos nuestro equipo del Trabajo de Fin de Máster sobre la idea que nos propuso Pablo González para nuestro proyecto basada en Latch'sApp, junto con todo el potencial que puede generar la implementación en esas dos plataformas.

Figura 1: Latch’sApp: módulo de exfiltración de datos con Latch Python en iOS

Con ganas de seguir explorando esta idea, se me ocurrió portar el módulo de Python a una app de iOS que he estado utilizando últimamente.

Pythonista

Pythonista es un entorno de desarrollo de Python 3 y Python 2 para iOS que permite ejecutar scripts e incluye las librerías y módulos de Python más populares. Además de todo esto, la aplicación aporta soporte extra para el control de elementos de iOS como contactos, fotos, localización, elementos de interfaz y mucho más. Es, junto a Working Copy, Coda o Prompt, de las mejores herramientas para el desarrollo en iPhone e iPad. Así, teniendo un interprete de Python en iOS tan completo como este, ¿por qué no usarlo?

Una vez me puse manos a la obra, lo primero que tuve que descartar fue almacenar la clave y el secreto de Latch en una variable de entorno, ya que por desgracia Pythonista no da soporte esta funcionalidad. Por ello, tuve que optar a almacenar las claves en un archivo global para importarlas en cualquier documento. Además añadí este archivo al gitignore del proyecto para evitar que pudiese filtrarse en una subida accidental. Debido a esto, también tuve que cambiar del script de ejecución la comprobación de la variable ‘account_id’ y eliminar el proceso de obtención de ésta a través de Latch.


Figura 2 - Video de exfiltración multiplataforma con Latch

Por lo demás, el funcionamiento sigue siendo el mismo y no difiere de la ejecución en cualquier otra plataforma. Siendo muy sencillo importar el proyecto, pensé en aprovechar varias de las herramientas que ofrece Pythonista para mejorar un poco el script y darle nuevas funcionalidades.

UI en Pythonista

El módulo UI que viene incluido en la app provee componentes similares a la interfaz gráfica de Apple. Este módulo está basado en el framework UIKit, simplificando muchos de sus aspectos. Además, Pythonista ofrece una herramienta de diseño UI para configurar los elementos que queremos incluir en nuestro script, facilitando mucho el proceso de creación de una interfaz gráfica para Python en esta aplicación.

Figura 3: Herramienta de diseño UI en Pythonista

Estos elementos se almacenan en forma de diccionario al que podemos acceder a través de cualquier archivo Python que importe UI y cargue la vista. Podéis encontrar más información acerca de este módulo en su documentación.

Figura 4: Código en Python de view_script.py con Interfaz Gráfica

Una vez construida la interfaz, modifiqué el script de escritura de latch para incluir las funciones que actualizan la interfaz. Hay que recordar que si queremos ejecutar la funcionalidad a través la interfaz gráfica hay que dejar el hilo principal para actualizar los elementos gráficos de la aplicación. Para ello, el módulo UI incluye el decorador “@ui.in_backgroud” para poder tener control de los hilos de ejecución.

PoC: Let´s do it

Una vez integrada la interfaz gráfica, se me ocurrió probar las nuevas funcionalidades con la app de iOS en Swift para exfiltrar datos con Latch. Como no quería abandonar el iPad como entorno de desarrollo y pruebas, decidí convertir el proyecto de XCode en una aplicación universal, para que pudiera ejecutarse tanto en iPhone como en iPad.

Figura 5: Proyecto de XCode optimizado para iPad

Para ello solo tuve que cambiar un poco los elementos de la interfaz, que al usar AutoLayout se adaptan a cualquier formato de pantalla, e indicar en la Property list del proyecto las orientaciones de pantalla tanto para iPhone como para iPad. Teniendo todos estos cambios es posible probar la exfiltración de un mensaje entre aplicaciones en un Ipad.


Figura 6: Video de exfiltración en iPad entre dos aplicaciones, una en Python y otra en Swift

Bonus extra - extensiones en iOS

Mientras estaba escribiendo este post, encontré en la documentación de Pythonista la posibilidad de crear Extensiones y Widgets fácilmente a través de un módulo Python que aporta la app. Básicamente, el módulo appex permite detectar si la ejecución de un script se realiza a través de una extensión o widget, e incluye varias funciones para gestionar el flujo de ejecución. Por ejemplo, con ‘get_text()’ puedes acceder al texto que recoge la extensión, con ‘get_image()’ a imágenes, etcétera.

Así que, con unas pocas lineas de código, pude crear una extensión para exfiltrar cualquier texto desde cualquier parte de un dispositivo iOS a través del módulo en Python.


Figura 7: Funcionamiento de la extensión en iPad

Estos han sido los añadidos que he conseguido jugando un poco con las herramientas de desarrollo que existen en iOS. Se puede observar que poco a poco esta plataforma va incluyendo aplicaciones potentes que permiten programar desde dispositivos móviles. De nuevo vuelvo a dejar el enlace al repositorio del proyecto, por si queréis pasar a echar un ojo o ampliar funcionalidades.

Un saludo.

Autor: Lucas Fernández

No hay comentarios:

Publicar un comentario