Ce post a pour but de vous permettre d’ouvrir une connexion UART vers un iPhone au demarrage de celui-ci. C’est très utile si vous êtes intéressé par le système iOS et que vous analysez les Bootloaders. Et bien sur très utile pour les jailbreaks ;)
Le lightning en bref
Le port lightning a été devoilé lors de la sortie de l’iPhone 5 en 2012. Ce port a donc pour but de remplacer les connecteurs 30 broches des anciens appareils (iPhone 4S et moins). Avec le port 30 broches (il y en a 8 pour le lightning) il était assez facile de construire un cable home made pour faire du kernel debugging, reverse engineering, etc…
La photo ci-dessus est un podbreakout utilisé lors de différents trainings d’exploitation iOS organisés par Stefan Esser.
Il y a maintenant 2 ans, celui-ci a annoncé que le connecteur lightning d’Apple avait été “hacké”.
En effet un français a publié sur son blog son exploit sur ce fameux connecteur propriétaire. L’histoire est interessante et la retroingenierie (aka Reverse Engineering ou juste RE) hardware qu’il a effectué est très technique.
Quelques mois plus tard il a mis ce cable en production pour le vendre au prix de 150€. Ce type de cable étant très recherché (la plupart sont volés dans les using de Foxcon en Chine). Voici à quoi le sien ressemble.
De plus l’Italien Luca Todesco (aka @qwertyoruiopz) a tweeté le sien qui lui a été offert par la team Pangu
Bref aujourd’hui si vous voulez en acheter un, il a des clones qui sont fonctionnels sur VIPProgrammer. Ces cables sont pas chers mais ils mettent un peu de temps à être livré en France.
Ces cables fonctionnent pour tous les appareils avec un port lightning (32 et 64 bits).
Pré-requis
Je compte pas expliquer à quoi ça sert. On va dire que ce post vise ceux qui veulent se lancer dans la sécurité iOS tout en ayant un background dans l’IT.
Donc il vous faudra :
- Un cable DCSD
- Un iBidule avec un port lightning (iPhone 5 ou plus).
- Un logiciel permettant d’avoir la sortie UART (PuTTY sur Windows et screen macOS/Linux).
Je vais expliquer pour Windows puis Linux. Pour macOS c’est la même chose que Linux, le nom du device USB sera juste un peu different. Si vous avez déjà ouvert une connexion série sur un Raspberry Pi ou tout autre materiel embarqué ça diffère pas trop.
Windows
Tout d’abord veuillez brancher votre cable. Puis vous ouvrez le Gestionnaire de peripheriques. Si tout se passe bien le cable devrait être reconnu en tant que port COM
. Si ce n’est pas le cas c’est qu’il vous manque un driver. Cliquez ici pour régler ce problème.
Ensuite, à l’aide du logiciel PuTTY nous allons ouvrir une connexion série. Pour cela cliquez sur l’executable que vous avez téléchargé. Le type de connexion par défaut est SSH, nous on veut une connexion série. Cliquez sur Serial
, il vous faudra rentrer deux informations :
- Serial line : le port sur lequel est branché le cable DCSD (COM 6 pour mon cas)
- Speed : le baudrate (le débit en bits/secondes) qui est de 115200.
Vous pouvez cliquer sur Open ce qui vous ouvrira une nouvelle fenêtre toute noire comme ci-dessous.
Puis pour avoir la sortie il suffit de redemarrer votre appareil et…
Voici la sortie de l’iBoot au demarrage !
Linux & macOS
Pour Linux la méthode est bien différente. Après avoir branché le cable sur le port USB de votre machine, vous tapez le commande suivante : dmesg | tail -n 10
.
La commande dmesg permet d’analyser le tampon circulaire du noyau Linux (dans notre cas), mais cette commande aussi presente sur macOS. La méthode est exactement la même pour obtenir le device sur les deux systemes d’exploitations, mais le nom du péripherique sera différent dans les deux cas.
Voici l’output de la commande précédente :
Regardez maintenant la dernière ligne, le noyau Linux a détecté à quel port est rattaché notre cable : ttyUSB0
.
Vous avez maintenant tout en main pour obtenir la sortie. Vous pouvez utiliser deux outils différents : screen
ou minicom
.
Pour screen : sudo screen -L /dev/ttyUSB0 115200
Pour minicom : sudo minicom -D /dev/ttyUSB0 -b 115200
Pour ma part j’ai une préférence pour minicom, vous, à vous de voir. Voici la sortie ci-dessous
Peu importe l’OS, vous aurez la même sortie. J’ai aussi fais une demo en vidéo.
Les possibilités de ce cable
Bon maintenant c’est bien on demarre l’iPhone et après ? rien. Si vous souhaitez aller plus loin il vous faudra un appareil jailbreak.
On prendra exemple sur les travaux du jeune Luca Todesco et serialsh
pour debugger un untether ou bien Alex Hude membre de FriedAppleTeam, qui à l’heure ou j’écris ce post travaille sur un jailbreak untethered 9.3.x.
D’après certains tweets il semble qu’on puisse avoir un kernel log avec son untether grâce à la sortie /dev/uart.debug-console
pour les cables DCSD. Le code est dispo sur Github en tant que gist
Dans un prochain post j’expliquerai comment utiliser serialsh, et avoir une sortie du noyau grâce au cable DCSD :).
EDIT : Video sur Serialsh pour l’instant c’est juste une démo.
En esperant que ce post ai été utile. Et oui il y a beaucoup d’images
Si vous avez besoin d’infos contactez-moi sur twitter: @matteyeux
Github : https://github.com/matteyeux