Sei sulla pagina 1di 70

ANÁLISIS DINÁMICO DE

APLICACIONES EN
iOS Y watchOS
RootedCON:~$ whoami
Arán Lora @4r4nL

Senior Security Analyst en

Miembro de
Objetivos

Como poder manipular


proceso “on-the-fly” en
iOS y watchOS sin JB
1.
La teoría
un poco de base nunca viene mal…
IPA FILE FORMAT
− Fichero ZIP o LZFSE
− Contiene la APP para iOS y watchOS (.app)
− Instalable mediante USB y Over-The-Air
− App Store -> Cifrados (FairPlay)
− Firmado por Apple
− Se ejecutan en SandBox
ANATOMÍA
iTunesArtWork iTunesMetadata.plist App.ipa

Payload

Binario Recursos Watch

App.app

embedded Requerido
Info.plist _CodeSignature
.mobileprovision

Opcional
ANATOMÍA
iTunesArtWork iTunesMetadata.plist App.ipa

Payload
Icono de la app Metadatos de la
paraBinario
la App Store
Recursos
app paraWatch
la App App.app
e iTunes Store e embedded
iTunes
Info.plist _CodeSignature Requerido
.mobileprovision

Opcional
ANATOMÍA
iTunesArtWork iTunesMetadata.plist App.ipa

Payload

Binario Recursos Watch

Aplicación App.app

embedded Requerido
Info.plist _CodeSignature
.mobileprovision

Opcional
ANATOMÍA
iTunesArtWork iTunesMetadata.plist App.ipa

Payload

Binario Binario
Recursos de la app
Watch

App.app

Configuración de la app
embedded Requerido
Info.plist _CodeSignature
.mobileprovision

Opcional
* Info.plist Keys and Values:
https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Introduction/Introduction.html
ANATOMÍA
Diferentes
iTunesArtWork
tipos de ficheros:
iTunesMetadata.plist App.ipa

- Imágenes (PNG,JPG,..) - Librerías (Frameworks, dylib)


Payload
- Strings - UI (nib, storyboardc)
- Assets.car Binario Recursos
- plist
Watch

App.app
-… -…
embedded Requerido
Info.plist _CodeSignature
.mobileprovision

Opcional
ANATOMÍA
iTunesArtWork iTunesMetadata.plist App.ipa
ID desarrollador
UUID Dispositivos
Payload
ID App
Binario Recursos Entitlements
Watch

App.app

embedded
Firma de todos los ficheros
Info.plist _CodeSignature
.mobileprovision
Requerido

Opcional
ANATOMÍA
iTunesArtWork iTunesMetadata.plist App.ipa

Carpeta que contiene


la app del Watch Payload

Binario Recursos Watch

App.app

embedded Requerido
Info.plist _CodeSignature
.mobileprovision

Opcional
ANATOMÍA
Watch
iTunesArtWork iTunesMetadata.plist App.ipa
Binario
Recursos Info.plist PlugIns
WatchKit
App WatchKit App.app

embedded
Payload
Base.lproj _CodeSignature
.mobileprovision
Binario Recursos

App.app

embedded Requerido
Info.plist _CodeSignature
.mobileprovision

Opcional
ANATOMÍA
Watch
iTunesArtWork iTunesMetadata.plist App.ipa
Binario
Recursos Info.plist PlugIns
WatchKit
App WatchKit App.app

embedded
Payload
Base.lproj _CodeSignature
.mobileprovision
Binario Recursos

App.app

Info.plist Igual_CodeSignature
que antes embedded Requerido
.mobileprovision
El binario solo carga la UI Opcional
ANATOMÍA
Watch
iTunesArtWork iTunesMetadata.plist App.ipa
Binario
Recursos Info.plist PlugIns
WatchKit
App WatchKit App.app

embedded
Payload
Base.lproj _CodeSignature
.mobileprovision
Binario Recursos

App.app

embedded
Info.plistUI de la app (storyboardc)
_CodeSignature
.mobileprovision
Requerido

Opcional
ANATOMÍA
Watch
iTunesArtWork iTunesMetadata.plist App.ipa
Base.lproj
Binario Recursos
Interface.storyboardc Info.plist PlugIns
Interface.plist
App WatchKit App.app

Interface-notification.plist embedded
Payload
_CodeSignature
.mobileprovision
Binario Recursos

App.app

embedded Requerido
Info.plist _CodeSignature
.mobileprovision

Opcional
ANATOMÍA
Watch
iTunesArtWork iTunesMetadata.plist App.ipa
Base.lproj
Binario Recursos
Interface.storyboardc Info.plist PlugIns
Interface.plist
App WatchKit App.app

Interface-notification.plist embedded
Payload
_CodeSignature
.mobileprovision
Binario Recursos

App.app

Fichero compilado
Info.plist de la UI
_CodeSignature
embedded
.mobileprovision
Requerido

Opcional
ANATOMÍA
Watch
iTunesArtWork iTunesMetadata.plist App.ipa
Base.lproj
Binario Recursos
Interface.storyboardc Info.plist PlugIns
Interface.plist
App WatchKit App.app

Interface-notification.plist embedded
Payload
_CodeSignature
.mobileprovision
Binario Recursos

App.app

Info.plist Configuración de las vistas


_CodeSignature
embedded Requerido
.mobileprovision
Permiten ver las acciones
Opcional
ANATOMÍA
Watch
iTunesArtWork iTunesMetadata.plist App.ipa
Binario
Recursos Info.plist PlugIns
WatchKit
App WatchKit App.app

embedded
Payload
Base.lproj _CodeSignature
.mobileprovision
Binario Recursos

App.app

embedded Requerido
Info.plist _CodeSignature
.mobileprovision

Opcional
ANATOMÍA
Watch
iTunesArtWork iTunesMetadata.plist App.ipa
Binario Recursos Info.plist PlugIns
App WatchKit App.app

embedded
Payload
Base.lproj _CodeSignature
.mobileprovision
Binario Recursos

App.app

embedded Requerido
Info.plist
Contiene WatchKit Extension.mobileprovision
_CodeSignature

Opcional
ANATOMÍA
Watch
iTunesArtWork iTunesMetadata.plist App.ipa
Binario Recursos Info.plist
App WatchKit App.app
Binario

PlugIns Payload
WatchKit Recursos Info.plist
Extension embedded
Base.lproj _CodeSignature
.mobileprovision
Binario Recursos
embedded
_CodeSignature App WatchKit
.mobileprovision App.app
Extension.appex
embedded Requerido
Info.plist _CodeSignature
.mobileprovision

Opcional
ANATOMÍA
Watch
iTunesArtWork iTunesMetadata.plist App.ipa
Binario Recursos Info.plist
App WatchKit App.app
Binario

PlugIns Payload
WatchKit Recursos Info.plist
Extension embedded
Base.lproj _CodeSignature
.mobileprovision
Binario Recursos
embedded
_CodeSignature App WatchKit
.mobileprovision App.app
Extension.appex
embedded Requerido
Info.plist _CodeSignature
.mobileprovision

Igual que en los .app Opcional


ANATOMÍA
Watch
iTunesArtWork iTunesMetadata.plist App.ipa
Binario Recursos Info.plist
App WatchKit App.app
Binario

PlugIns Payload
WatchKit Recursos Info.plist
Extension embedded
Base.lproj _CodeSignature
.mobileprovision
Binario Recursos
embedded
_CodeSignature App WatchKit
.mobileprovision App.app
Extension.appex
embedded Requerido
Info.plist _CodeSignature
.mobileprovision

Contiene toda la lógica de la app del Watch Opcional


ANATOMÍA
iTunesArtWork iTunesMetadata.plist App.ipa

WatchKit App

Payload
WatchKit
Extension
Binario Recursos Watch

embedded Requerido
Info.plist _CodeSignature
.mobileprovision
App.app
Opcional
al final es….

como una
matrioska
SANDBOX
APP SANDBOX

App.app

Data

Keychains

APP SANDBOX

APP SANDBOX
SANDBOX
APP SANDBOX

App.app Contenido del IPA


Data Datos de la app
Keychains Contenedor de claves

APP SANDBOX

APP SANDBOX
SANDBOX
WatchKit App iOS APP

App.app

WatchKit
Extension Data

Keychains

watchOS iOS

The Watch App Architecture:


https://developer.apple.com/library/archive/documentation/General/Conceptual/WatchKitProgrammingGuide/DesigningaWatchKitApp.html
WATCH
- Versión reducida de iOS

- Librerías de sistema especificas

- Arquitectura arm_v7k y arm64_32_v8


Watch
¿COMO ENTRAR?

Jailbreak Inyectar y firmar


¿COMO ENTRAR?
− Mayor versatilidad y facilidad
− Muchas herramientas disponibles
− No disponible en últimas versiones

Jailbreak
¿COMO ENTRAR?
− Jailbreak en watchOS 4.1
− Posibilidad de downgrade con iBUS Tool

Watch
¿COMO ENTRAR?

Watch
https://www.mfcbox.com
¿COMO ENTRAR?
− Jailbreak en watchOS 4.1
− Posibilidad de downgrade con iBUS Tool
− No hay Cydia, ni Frida, ni cycript,….
¡NI NÁ!
Watch − Comunidad muy limitada
¿COMO ENTRAR?
…entonces ¿Jailbreak para qué?

por ahora, solo es útil para


dumpear, desarrollar e investigar
Watch
¿COMO ENTRAR?

Jailbreak Inyectar y firmar


¿COMO ENTRAR?
Frida
Frida es un set de herramientas de
instrumentación dinámica creada por Ole
André (@oleavr).
Inyecta en un proceso un motor JavaScript
Inyectar y firmar y nos permite interactuar con él, hookear,
tracear,… (entre otras cosas)
¿COMO ENTRAR?
− Nos da acceso directo al proceso
− Se puede hacer lo mismo que con JB
− Válido para cualquier versión de iOS
− Proceso inicial más complejo
Inyectar y firmar − ¡Requiere del IPA sin cifrar!
¿COMO ENTRAR?
¿Y con watchOS?

Watch
¿COMO ENTRAR?
¿Y con watchOS?

También se puede
Watch
¿COMO ENTRAR?
¿Y con watchOS?

También se puede
Watch pero, por ahora, Frida no
¿COMO ENTRAR?
Hooks a la vieja usanza

inyectando nuestra
custom dylib
Watch
2.
Cooking recipe
ya era hora….
LISTA DE LA COMPRA
− IPA sin cifrar
− MacOS (VM, Hackintosh) con Xcode
− Cuenta de Apple (gratuita)
− Dylib (Frida y custom para watchOS)
− Insert_dylib
− Fastlane sign (próximamente applesign)
− ios-deploy
− Paciencia
PASOS A SEGUIR
1. Generar certificado de desarrollador
2. Generar proyecto de prueba
3. Obtener los embedded.mobileprovision
4. Obtener y Firmar las librerías
5. Inyectar, Firmar e Instalar
Generar certificado
1
2

4
Generar certificado
1

3 4
2
Generar certificado
1

3
2
Generar proyecto
1

3
Generar proyecto
1
2

3
Generar proyecto
4
2
1 3
Generar proyecto
1
2
3
Generar proyecto
1 4

3
Generar proyecto
4
1

3
Obtener emp

1
4
2

3
Obtener emp

1 2 3
Dylibs

watchOS
iOS
Dylibs
Frida passionfruit
https://github.com/chaitin/passionfruit
https://frida.re/
objection
https://github.com/sensepost/objection

Flex brida
https://github.com/Flipboard/FLEX https://github.com/federicodotta/Brida

* https://github.com/dweinstein/awesome-frida
iOS HttpServerDebug
https://github.com/rob2468/HttpServerDebug
FLEX

Editor de UI

Visor Red

Objetos

Ficheros
HttpServerDebug

Visor de ficherso y sqlite

Visor de elementos UI

* Sí, interfaz en chino


Dylibs
1 - Crear Proyecto Watch Framework

2 - John Coates’s autohook


https://gist.github.com/JohnCoates/c0d77f130d033b206367db480f7c18ae

3 - Sazonar al gusto

4 - Compilar para watchOS


watchOS
AUTOHOOK
Dylibs
1 - Crear Proyecto Watch Framework

2 - John Coates’s autohook


https://gist.github.com/JohnCoates/c0d77f130d033b206367db480f7c18ae

3 - Sazonar al gusto

4 - Compilar para watchOS


watchOS
Dylibs
Si la dylib no está firmada:

1. Ver ID identidad firmante:


security find-identity -v -p codesigning

2. Firmar:
codesign -f -s Hash_identidad FridaGadget.dylib
iOS watchOS
Inyectar
1. Descomprimir IPA
2. Crear (si no existe) la carpeta Frameworks
3. Copiar dylib o framework
4. Inyectar en el binario con insert_dylib
5. Firmar con Fastlane sign
6. Instalar con ios-deploy

iOS watchOS
Inyectar
Peculiaridades de Frida en modo Gadget (dylib):
- Inyectar:
insert_dylib "@executable_path/Frameworks/FridaGadget.dylib"
Payload/MyApp.app/MyApp –inplace

- Ejecutar en modo debug:


ios-deploy --bundle Payload/*.app -m -L

iOS - Justo después ejecutar frida:


frida -U “gadget”
DEMO
¡¡Gracias!!
@ajpallares
¿Preguntas?
@4r4nL

Potrebbero piacerti anche