Multi-Amorçage iOS

Avertissement: Certaines étapes présentées dans ce tutoriel interviennent sur des composantes de bas-niveau qui contiennent parfois de l'information critique permettant le bon fonctionnement de l'appareil. Une simple erreur peut «bricker» définitivement l'appareil, donc le rendre totalement inutilisable.
Aussi, attendre le prochain «Jailbreak» avant d'essayer sur les appareils pouvant accueillir la dernière mise à jour d'iOS.
Suivre ce tutoriel à vos propres risques.

En général, le multi-amorçage (multi-boot en anglais) consiste à faire cohabiter plusiseurs systèmes d'exploitation sur une seule machine.
Sur les ordinateurs de bureau, portables, serveurs et autres conventionnels, un multi-amorçage peut se faire par l'exécution d'un chargeur d'amorçage tel que GRUB (Linux), BCD (Windows) ainsi qu'iBoot (Mac OS). Un tel chargeur d'amorçage permet à l'utilisateur de choisir sur laquelle partition démarrer le système, c'est-à dire que le noyau (kernel) du système se trouvant sur la partition choisie sera démarrée.
Un chargeur d'amorçage peut être installé sur le secteur d'amorçage du disque (exemple Linux, /dev/sda) ou bien sur une partition (exemple Linux, /dev/sda1). Dans ces cas, celui-ci est enregistré sur le disque.
Un chargeur d'amorçage peut aussi être sur un support externe tel qu'un CD-ROM, une clé USB et permet de démarrer sous les différentes partitions présentes sur le disque dur si celles-ci sont amorçables et contiennent un système valide.
Très utile pour récupérer lorsque le chargeur d'amorçage enregistré sur le disque est corrompu.


Sur un appareil iOS d'Apple, le principe de base du multi-amorçage est très similaire à celui des ordinateurs conventionnels.
Cependant, l'implantation est exponentiellement plus difficile parce qu'Apple équipe leurs appareils mobiles d'un mécanisme de sécurité très puissant basé sur le concept du SecureBoot (démarrage sécuritaire).
Voir : Fonctionnement général de la chaîne du démarrage d'un appareil iOS

En résumé, le SecureBoot empêche l'exécution du code non approuvé par Apple dès le début du démarrage grâce à un système de certificats numérique implanté dans le système sur puce ainsi que dans tous les étapes subséquentes du démarrage.
Puisque les appareils iOS empêchent l'exécution du code non-approuvé par Apple, l'installation du chargeur d'amorçage qui permetterait le démarrage sous différentes partitions n'est pas possible sans l'exploitation d'une faille au niveau des chargeurs d'amorçage d'iOS.
Prenons comme exemple OpeniBoot, qui est une implémentation libre d'iBoot. Celui-ci est surtout utilisé pour faire un dual-boot iOS et Android, mais ce concept pourrait s'appliquer pour faire du multi-boot entre différentes versions d'iOS.
Limera1n est un exemple d'une de ces failles, c'est la plus récente et celle-ci exploite le mode DFU de la puce A4.
Si l'on utilise une de ces failles, il sera alors possible d'exécuter un chargeur d'amorçage qui permetterait de démarrer le système sous une autre partition que celle de base, soit /dev/disk0s1s1.
Le problème c'est que Limera1n est une faille présente dans le mode DFU de l'appareil, ce qui signifie que celle-ci est non-persistante (sa magie n'opère plus lors d'un redémarrage de l'appareil). Il faut donc réinjecter l'exploit, puis manuellement le chargeur d'amorçage par le protocole USB à chaque démarrage.
L'intérêt est plus ou moins présent. Il existe aussi une faille nommée Pwn24K Segment Overflow qui est jumelée avec Limera1n pour achever l'exécution du code non-signé sur la chaîne de démarrage «flashé», soit celle enregistrée dans la NOR ou bien la section «firmware» de la NAND (mémoire de stockage de l'appareil).
C'est une faille persistante, donc le chargeur d'amorçage pourrait s'exécuter automatiquement au démarrage de l'appareil et l'on pourrait choisir sur quel partition démarrer le système. C'est déja beaucoup plus intéressant qu'avec l'utilisation de Limera1n seul, mais Pwn24k est limité seulement à quelques appareils tels que l'iPhone 3Gs Old BootROM.
Il nous faut alors une méthode qui nous permet d'exécuter du code non-approuvé par Apple dans les bas niveaux du démarrage et qui est persistente.
Il y a environ 2 ans (avril 2014), Winocm a fait une démonstration d'un triple amorçage sur un iPad de seconde ou de troisième génération. Quelques jours plus tard, elle rend public kloader, soit l'outil qui lui a permis de le réaliser.
En résumé, kloader permet d'exécuter du code de bas niveau à partir du système courant.

Voir : Les KexecUtils de Winocm pour iOS

Kloader est exécuté sur le système iOS installé de base, puis ce système est écrasé par le code exécuté par kloader.
Ce code que l'on fera exécuter par kloader est le chargeur d'amorçage de premier niveau (iBSS, LLB) d'une autre instance d'iOS.



Matériel et logiciels requis pour implémenter le multi-amorçage iOS :
- Un appareil iOS exécutant une version d'iOS dont le jailbreak est possible. Le patch Task_for_pid() doit être appliqué sur le kernel (les jailbreaks dits «userland» tels que Pangu et Taig appliquent ce patch) pour que kloader fonctionne.
- Un ordinateur exécutant Windows ou bien Linux
- Un ordinateur exécutant Mac OS X 10.6.x ou plus récent.
- Un éditeur hexadécimal (HxD est bien)
- NotePad++ (éditeur de texte avec des fonctionnalités avancés)
- Xpwntool (utilisé pour la décryption des conteneurs IMG3). Utiliser la version mise à jour par Xerub utilisée dans le rétrograde Odysseus, car les anciennes versions de cet outil causent un problème en rapport avec les vérifications de permissions du kernel par iBoot.
- idevicerestore (alternative à iTunes pour exécuter des opérations de restauration sur les appareils iOS)




Dans le but de simplifier le processus d'implantation du multi-amorçage iOS, divisons les étapes en deux grandes parties.
Partie A : L'amorçage, soit les étapes liées à l'utilisation des chargeurs d'amorçage d'iOS ainsi que de la séquence de démarrage, dont les étapes subséquentes à l'exécution de kloader
Partie B : «Userland», soit les étapes subséquentes au démarrage du noyau (kernel)
Je recommandes fortement l'utilisation d'un appareil A4 tel que l'iPhone 4 (N90AP) pour les premiers essais de multi-amorçage parce que ceux-ci ne reçoivent plus de mise à jour qui pourraient empêcher le jailbreak, donc l'exécution de kloader.
S'il y a mauvaise manipulation tel qu'une erreur dans la création des partitions, il sera toujours possible de restaurer l'appareil à une version dont le jailbreak est possible.
Dans le cas contraire, vous devrez attendre le jailbreak de la dernière version avant de poursuivre les essais.
Aussi, pour les appareils A4, l'exploit Limera1n peut parfois aider à récupérer en cas d'une erreur.
En effet, il peut être parfois utile d'exécuter un Ramdisk SSH pour exécuter quelques commandes de dépannage si l'appareil reste coincé dans un «Bootloop».
L'ordre de mise en oeuvre des deux grandes parties varie selon le type de multi-amorçage que l'on veut achever sur l'appareil. Si l'on désire faire un multi-amorçage «Tethered», il faut faire les étapes de la partie «Userland» en premier et ensuite celles de l'amorçage selon les réglages (partition de démarrage, kernel correspondant au système installé sur celle-ci, etc.) de la partie «Userland»
Dans le cas d'un multi-amorçage «Untethered», ce sera le contraire. Il faudra en effet commencer par implémenter l'amorçage, puis ensuite faire les étapes de la partie «Userland» selon les réglages définis dans les éléments de la chaîne d'amorçage.
Prendre note que ceci s'applique uniquement à cette procédure. Il existe plusieurs façons différentes de faire du multi-amorçage sous iOS.

Partie Amorçage «Untethered» (A)

Partie «Userland» (B)


Copyright © 2020 — Pierre-Marc Bonneau

Conditions d'utilisation