Menú principal

martes, 16 de octubre de 2012

FinSpy para iOS: Troyanos del gobierno en iPhone & iPad

La historia de FinFisher saltó a la primera plana de las noticias cuando fue descubierto que este troyano gubernamental para espiar a personas había sido adquirido por el gobierno de Egipto. Bastante tiempo después se descubrió mucha más información de los vídeos de  marketing del producto, entre ellas un vídeo en el que se veía como durante varios años había utilizado el bug de Evilgrade que había estado sin solucionar en Apple Update, algo reportado por Francisco Amato hacía tiempo.

Por último a finales de agosto de este año se hizo público que el módulo FinSpy Mobile, ya tenía troyanos para Windows Mobile, BlackBerry, Android y el sistema iOS de iPhone, iPad o iPod Touch, llevando el espionaje de la herramienta a los terminales móviles.


Figura 1: Vídeo promocional de FinSpy Mobile

Tras hacerse con una muestra de este malware, que parece que fue filtrado, se pudo ver cómo estaban desarrollando este módulo para saltarse una de las cosas más complejas hoy en día, la validación de code-signing de Apple, que sin embargo se saltan de una manera bastante curiosa: desplegando un provisioning profile de aplicación firmado.

Según el análisis publicado en CitizenLab.org de la pieza de malware a la que se tuvo acceso, esta mostraba que había sido desarrollada para Arm7 y que había sido construida con el SDK de iOS 5.1 en un Mac OS X Lion 10.7.3, y que era funcional en iPhone 4, 4S, iPad 1, 2, 3, iPod touch 3, 4 con iOS 4.0 o superior. El troyano se desplegaba en un bundle llamado “install_manager.app” cuyos contenidos eran:
99621a7301bfd00d98c222a89900aeef ./data
1f73ebf8be52aa14d4d4546fb3242728 ./_CodeSignature/CodeResources
9273880e5baa5ac810f312f8bd29bd3f ./embedded.mobileprovision
2cbe06c89dc5a43ea0e0600ed496803e ./install_manager
23b7d7d024abb0f558420e098800bf27 ./PkgInfo
11e4821d845f369b610c31592f4316d9 ./Info.plist
ce7f5b3d4bfc7b4b0da6a06dccc515f2 ./en.lproj/InfoPlist.strings
3fa32da3b25862ba16af040be3451922 ./ResourceRules.plist
Tras analizar el contenido de los ficheros, en el binario Mach-0 de ‘install_manager’ aparecía el más que significativo texto de “FinSpy", que aparecía en muchas más referencias.

Figura 2: Texto FinSpyV2 en el binario de la app

Por supuesto, para poder desplegar una aplicación en un dispositivo iOS sin jailbreak es necesario que el provisioning profile vaya firmado digitalmente por un certificado de Apple Developer, que en esta muestra pertenecía a Martin Muench, Director General de Gamma International y la cabeza visible del portafolio de productos de FinFisher, el famoso troyano gubernamental.

Figura 3: Texto con información del Certificado de Martin Muench

Para poder instalar la aplicación además lleva un povisioning profile para distribuir el troyano, en este caso llamado testapp, firmado con un certificado de desarrollador llamado “iPhone Distribution: Martin Muench”, y con los certificados de Apple Root CA, Apple Worldwide Developer Relations Certification Authority y el ya citado iPhone Distribution: Martin Muench. Lógicamente, este sistema permite que la aplicación esté provisionada para funcionar sólo en algunos dispositivos, y en este caso la lista de UDIDs para la que estaba preparado este malware era:
31b4f49bc9007f98b55df555b107cba841219a21,
73b94de27cb5841ff387078c175238d6abac44b2,
0b47179108f7ad5462ed386bc59520da8bfcea86,
320184fb96154522e6a7bd86dcd0c7a9805ce7c0,
11432945ee0b84c7b72e293cbe9acef48f900628,
5a3df0593f1b39b61e3c180f34b9682429f21b4f,
b5bfa7db6a0781827241901d6b67b9d4e5d5dce8
Con este sistema es posible instalar una aplicación en un sistema iOS sin jailbreak utilizando los mecanismos de distribución privada de Apple, es decir, se hace a medida una aplicación para una serie de dispositivos y se autoriza a los UDIDs. Por supuesto, es necesario engañar al usuario para que la instale, utilizando trucos de ingeniería social. Este sistema llama a tomar cuidado de tu UDID para que no se pueda preparar un provisioning profile de un malware para tu dispositivo, algo por lo que generó tanto revuelo el fichero de UDIDs y datos de dueños - supuestamente - sustraído al FBI, algo que no se ha podido demostrar que fuera así o que no fuera así.

Una vez instalada la aplicación de FinSpy, la muestra a la que se tuvo acceso se ocultaba utilizando las opciones de Spring Board y escribía en la aplicación logind.app en /System/Library/CoreServices.  El proceso ‘logind’ existe en OSX pero no está normalmente en iOS, y se instala en /System/Library/LaunchDaemons/com.apple.logind.plist.

Figura 4: Instalación del daemon logind com LaunchDaemon en iOS

Con este truco se consigue la persistencia al reinicio, y cuando se ejecuta la primera vez elimina la herramienta install_manager.app para quitar cualquier rastro visible de ella. En reinicio se arranca con el ID 47.

Figura 5: Logind con el ID 47 en el terminal de análisis

Una vez en ejecución, para sacar los datos del terminal iOS, primero se descarga una nueva aplicación, llamada SyncData.app, que también está firmada con un provisioning profile para poder instalarse en el terminal, y que tiene funcionalidades para:
- Registro de llamadas de voz.
- Extracción de contactos en el dispositivo.
- Acceso a la posición de localización del terminal.
- Acceso a mensajes SMS.
- Acceso a datos en el terminal.
Para ello, envía datos, y la información del terminal - incluyendo los números IMEI y el identificador IMSI - a un número de teléfono remoto codificando los datos en Base64.

Figura 6: Envio de mensajes en Base64 con los datos robados

Por último, el análisis descubrió que el daemon logind se conecta a un panel de control remoto y que la información de este parece estar ofuscada y codificada en Base64 en un fichero llamado SyncData/84C.dat, pero que no pudo ser extraída. Además, el bundle hace referencia a una tercera aplicación - además de install-manager.app y SyncData.app - llamada Trampoline.app, pero que no se examinó en su momento.

Con todo esto, queda claro que la emisión de los certificados de desarrollador Apple pueden ser utilizados para la distribución de aplicaciones de malware maliciosas en ataques dirigidos, y es posible que alguien esté utilizando este truco para troyanizar dispositivos iOS hoy en día ya que si se engaña al usuario para instalar una aplicación con un provisioning profile a medida, éste queda a disposición del atacante. 

No hay comentarios:

Publicar un comentario en la entrada

Artículos relacionados

Otras historias relacionadas

Entradas populares