Neutron, notre moteur d’IA, a obtenu un score de 96,75 % sur le benchmark CyberGym de l’UC Berkeley. En savoir plus

Sécurité

Sécurité

Tests de sécurité applicative sur iOS sans jailbreak depuis Linux

Comment effectuer des vérifications de sécurité d'un fichier d'application iOS sur un iPhone sans jailbreak, depuis une machine Linux.

Vue d'ensemble

Les tests de sécurité des applications iOS ne nécessitent pas d'iPhone ni d'iPad jailbreaké. Cet article est un document évolutif qui présente comment évaluer différents aspects d'une application mobile sur un téléphone sans jailbreak.


NOTE

Cela suppose de disposer d'un IPA non chiffré.


Compte développeur Apple

Pour les besoins des tests de sécurité, un simple compte développeur Apple gratuit suffit. Pour vous inscrire, consultez le lien sur les prérequis.

Pour un particulier, il suffit d'un identifiant Apple et d'activer l'authentification à deux facteurs.

Le compte développeur Apple payant offre des fonctionnalités destinées aux créateurs d'applications et à la distribution des applications.

La méthode simple : installation avec Cydia Impactor

Le moyen le plus simple d'installer une application IPA sur un appareil iOS est d'utiliser Cydia Impactor. Cydia Impactor est un outil gratuit mais non open source.

Tout d'abord, assurez-vous de réinitialiser le certificat du compte développeur Apple, vérifiez que votre appareil iOS ou iPad est détecté, puis sélectionnez l'installation du paquet pour installer votre application.

Bien que Cydia soit très simple à utiliser, l'installation échouera si l'application n'est pas en mode debug, ou échouera à l'exécution parce que l'entitlement n'a pas été correctement modifié

La méthode à contrôle total : ideviceinstaller et patch manuel

Cette méthode est manuelle : elle consiste à modifier les entitlements de l'IPA, puis à utiliser ideviceinstaller pour installer l'application modifiée.

Modifier l'IPA pour activer le mode debug

Le premier problème que vous pouvez rencontrer est la tentative d'installer une application dont le mode debug n'est pas activé. iOS se plaindra d'une signature invalide.

Pour activer le mode debug, extrayez d'abord les entitlements de l'IPA :

Cela peut se faire avec jtool :

unzip app.ipa
./jtool.ELF64 -arch arm64 --ent Payload/myOstorlabApp.app/myOstorlabApp > /tmp.ent.xml

Les entitlements générés ressembleront à ceci :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>application-identifier</key>
    <string>4ZX4Z3MVHG.com.appleseedinc.MyProject</string>
    <key>com.apple.developer.team-identifier</key>
    <string>4ZX4Z3MVHG</string>
    <key>get-task-allow</key>
    <true/>
    <key>keychain-access-groups</key>
    <array>
        <string>4ZX4Z3MVHG.com.appleseedinc.MyProject</string>
    </array>
</dict>
</plist>

Les applications en mode debug ont la clé get-task-allow définie à <true/>. Si ce n'est pas le cas, modifiez les entitlements et patchez votre binaire avec les entitlements nouvellement créés.

Pour cela, sous Linux, utilisez la version dérivée suivante de isign, qui prend en charge des entitlements alternatifs. isign ne fonctionne qu'avec Python2 :

from isign import isign
isign.resign("file.ipa", output_path="/tmp/new_ipa.ipa", alternate_entitlements_path="/tmp/ent.xml")

Si vous obtenez une erreur OpenSSL, essayez de réinstaller pyOpenSSL :

sudo python2 -m pip install pyOpenSSL

En cas d'erreur, pour voir les logs d'isign, utilisez le code suivant

import logging
import sys

root = logging.getLogger()
root.setLevel(logging.DEBUG)

handler = logging.StreamHandler(sys.stdout)
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
root.addHandler(handler)

isign peut échouer lors d'une vérification de construct ; cette vérification est incorrecte, il suffit de la commenter et de réessayer.

Installation avec ideviceinstaller

Pour ideviceinstaller, nous devons d'abord provisionner un certificat de développeur ; pour cela, utilisez les outils du dépôt suivant :

 ./genProvisioningProfileFree.sh <AppleID> <Password> <Device UUID>

L'UUID de votre appareil peut être récupéré avec lsusb.

Une fois le compte développeur provisionné, inspectez le fichier généré dans votre dossier personnel, .isign/isign.mobileProvision, et cherchez la valeur de <TeamIdentifier>, qui doit ressembler à 4ZX4Z3MVHG. Utilisez cette valeur pour modifier le fichier d'entitlements en remplaçant toutes les occurrences de l'ancien identifiant d'équipe par votre valeur.

Signez l'application avec les entitlements modifiés :

from isign import isign
isign.resign("file.ipa", output_path="/tmp/new_ipa.ipa", alternate_entitlements_path="/tmp/ent.xml")

Enfin, utilisez ideviceinstaller pour installer l'IPA nouvellement généré.

ideviceinstaller -i /tmp/new_ipa.ipa

Actions diverses

Voici une liste d'actions utiles à effectuer lors d'une évaluation :

Récupérer le Developer Disk Image

Plusieurs outils imobiledevice nécessitent de monter un Developer Disk Image. Pour télécharger l'image disque correspondant à la version de votre OS, consultez ce dépôt.

Pour monter l'image disque, utilisez ideviceimagemounter :

ideviceimagemounter -t Developer DeveloperDiskImage.dmg DeveloperDiskImage.dmg.signature

Pour vérifier que le disque est correctement monté :

ideviceimagemounter -l                                                                                                                                                                                     2 ↵
ImageSignature[1]: 
 0: OIrMZfwD5TcdgVaizBMAaImjwDXsrldgRDbsiSWbtafuf1t0BSJR9tDycyYPG3E+wmUY8fmP0l0S3UkMkQpJksFOx2fn0h1lAuhAiP9bJBjZ6PvbetHE/A2XJNVu78obBZl9dAzgpIEHPSvu6HJM7mdZrdFjA7GG7QJOnCL4Vnc=

Accéder aux logs de l'appareil

Pour accéder au journal de l'appareil iOS, utilisez idevicesyslog après avoir monté le Developer Disk Image.

Prendre une capture d'écran

Pour prendre une capture d'écran, utilisez idevicescreenshot après avoir monté le Developer Disk Image.

Attacher le débogueur LLDB

Le débogueur LLDB sous Linux ne prend pas en charge remote-ios comme cible.

Tags :

ios