hacktricks/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md

8.7 KiB
Raw Blame History

iOS Pentesting without Jailbreak

{{#include ../../banners/hacktricks-training.md}}

Idée principale

Les applications signées avec l'entitlement get_task_allow permettent aux applications tierces d'exécuter une fonction appelée task_for_pid() avec l'ID de processus de l'application initiale comme argument afin d'obtenir le port de tâche sur celui-ci (pouvoir le contrôler et accéder à sa mémoire).

Cependant, ce n'est pas aussi simple que de simplement récupérer l'IPA, de le re-signer avec l'entitlement, et de le flasher à nouveau sur votre appareil. Cela est dû à la protection FairPlay. Lorsque la signature de l'application change, la clé DRM (Digital Rights Management) est invalidée et l'application ne fonctionnera pas.

Avec un ancien appareil jailbreaké, il est possible d'installer l'IPA, de le déchiffrer en utilisant votre outil préféré (comme Iridium ou frida-ios-dump), et de le récupérer de l'appareil. Cependant, si possible, il est recommandé de demander simplement au client l'IPA déchiffré.

Obtenir l'IPA déchiffré

Obtenez-le d'Apple

  1. Installez l'application à tester sur l'iPhone
  2. Installez et lancez Apple Configurator sur votre macos
  3. Ouvrez Terminal sur votre Mac, et cd à /Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps. L'IPA apparaîtra dans ce dossier plus tard.
  4. Vous devriez voir votre appareil iOS. Double-cliquez dessus, puis cliquez sur Ajouter + → Apps dans la barre de menu en haut.
  5. Après avoir cliqué sur Ajouter, Configurator téléchargera l'IPA depuis Apple et tentera de le pousser vers votre appareil. Si vous avez suivi ma recommandation précédente et installé l'IPA, une invite vous demandant de réinstaller l'application apparaîtra.
  6. L'IPA devrait être téléchargé dans /Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps d'où vous pouvez le récupérer.

Vérifiez https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed pour plus d'informations détaillées sur ce processus.

Déchiffrer l'application

Pour déchiffrer l'IPA, nous allons l'installer. Cependant, si vous avez un ancien iPhone jailbreaké, il est possible que sa version ne soit pas prise en charge par l'application, car généralement les applications ne prennent en charge que les dernières versions.

Donc, pour l'installer, dézippez simplement l'IPA :

unzip redacted.ipa -d unzipped

Vérifiez le Info.plist pour la version minimale prise en charge et si votre appareil est plus ancien que cela, changez la valeur pour qu'elle soit prise en charge.

Rezippez l'IPA :

cd unzipped
zip -r ../no-min-version.ipa *

Ensuite, installez l'IPA par exemple avec :

ideviceinstaller -i no-min-version.ipa -w

Notez que vous pourriez avoir besoin de AppSync Unified tweak de Cydia pour éviter toute erreur invalid signature.

Une fois installé, vous pouvez utiliser Iridium tweak de Cydia afin d'obtenir l'IPA décrypté.

Patch des droits et re-signature

Pour re-signer l'application avec le droit get-task-allow, plusieurs outils sont disponibles comme app-signer, codesign et iResign. app-signer a une interface très conviviale qui permet de re-signer très facilement un fichier IPA en indiquant l'IPA à re-signer, de le mettre get-task-allow et le certificat et le profil de provisionnement à utiliser.

Concernant le certificat et les profils de signature, Apple propose des profils de signature de développeur gratuits pour tous les comptes via Xcode. Il suffit de créer une application et d'en configurer une. Ensuite, configurez l'iPhone pour faire confiance aux applications de développeur en naviguant vers SettingsPrivacy & Security, et cliquez sur Developer Mode.

Avec l'IPA re-signé, il est temps de l'installer sur l'appareil pour le pentester :

ideviceinstaller -i resigned.ipa -w

Activer le mode développeur (iOS 16+)

Depuis iOS 16, Apple a introduit le mode développeur : tout binaire qui porte get_task_allow ou est signé avec un certificat de développement refusera de se lancer tant que le mode développeur n'est pas activé sur l'appareil. Vous ne pourrez également pas attacher Frida/LLDB à moins que ce drapeau ne soit activé.

  1. Installez ou poussez n'importe quel IPA signé par un développeur sur le téléphone.
  2. Accédez à Réglages → Confidentialité et sécurité → Mode développeur et activez-le.
  3. L'appareil redémarrera ; après avoir entré le code d'accès, vous serez invité à activer le mode développeur.

Le mode développeur reste actif jusqu'à ce que vous le désactiviez ou que vous réinitialisiez le téléphone, donc cette étape n'a besoin d'être effectuée qu'une seule fois par appareil. La documentation d'Apple explique les implications en matière de sécurité.

Options modernes de sideloading

Il existe maintenant plusieurs façons matures de sideloader et de maintenir les IPAs re-signés à jour sans jailbreak :

Outil Exigences Forces Limitations
AltStore 2 / SideStore Compagnon macOS/Windows/Linux qui re-signe l'IPA tous les 7 jours avec un profil de développement gratuit Rechargement automatique via Wi-Fi, fonctionne jusqu'à iOS 17 Besoin d'un ordinateur sur le même réseau, limite de 3 applications imposée par Apple
TrollStore 1/2 Appareil sous iOS 14 15.4.1 vulnérable au bug CoreTrust Signature permanente (pas de limite de 7 jours) ; aucun ordinateur requis une fois installé Non pris en charge sur iOS 15.5+ (bug corrigé)

Pour des pentests de routine sur les versions iOS actuelles, Alt/Side-Store sont généralement le choix le plus pratique.

Hooking / instrumentation dynamique

Vous pouvez hooker votre application exactement comme sur un appareil jailbreaké une fois qu'elle est signée avec get_task_allow et que le mode développeur est activé :

# Spawn & attach with objection
objection -g "com.example.target" explore

# Or plain Frida
frida -U -f com.example.target -l my_script.js --no-pause

Les récentes versions de Frida (>=16) gèrent automatiquement l'authentification des pointeurs et d'autres atténuations d'iOS 17, donc la plupart des scripts existants fonctionnent immédiatement.

Analyse dynamique automatisée avec MobSF (sans jailbreak)

MobSF peut instrumenter un IPA signé par un développeur sur un appareil réel en utilisant la même technique (get_task_allow) et fournit une interface web avec un navigateur de système de fichiers, capture de trafic et console Frida【】. Le moyen le plus rapide est de faire fonctionner MobSF dans Docker et ensuite de connecter votre iPhone via USB :

docker pull opensecurity/mobile-security-framework-mobsf:latest
docker run -p 8000:8000 --privileged \
-v /var/run/usbmuxd:/var/run/usbmuxd \
opensecurity/mobile-security-framework-mobsf:latest
# Browse to http://127.0.0.1:8000 and upload your resigned IPA

MobSF déploiera automatiquement le binaire, activera un serveur Frida à l'intérieur du sandbox de l'application et générera un rapport interactif.

iOS 17 & avertissements sur le mode verrouillage

  • Mode verrouillage (Réglages → Confidentialité & Sécurité) bloque le chargeur dynamique de charger des bibliothèques dynamiques non signées ou signées de manière externe. Lors de tests sur des appareils qui pourraient avoir ce mode activé, assurez-vous qu'il est désactivé ou vos sessions Frida/objection se termineront immédiatement.
  • L'authentification par pointeur (PAC) est appliquée à l'échelle du système sur les appareils A12+. Frida ≥16 gère de manière transparente le stripping PAC — il suffit de garder à jour à la fois frida-server et la chaîne d'outils Python/CLI lorsque qu'une nouvelle version majeure d'iOS est publiée.

Références

{{#include ../../banners/hacktricks-training.md}}