Une faille iOS pour attaquer le code des restrictions en force brute

En travaillant sur une bidouille pour le blog, je suis tombé sur une faille dans iOS qui permet d’attaquer le code utilisé pour les restrictions en force brute, malgré les protections d’Apple. Explications.
Note : iOS 7 corrige le problème, la manipulation ne fonctionne plus.

Il y a quelques jours, je suis tombé sur un post expliquant comment attaquer en force brute le code EFI des Mac, en utilisant une carte Teensy 3.0 qui émule un clavier. J’ai trouvé l’idée intéressante, j’ai commandé une carte et j’ai voulu tester sur un appareil iOS.

SONY DSC

Une fois la carte reçue et après quelques ajustements (les claviers américains ne sont pas les mêmes que les claviers français), j’ai commencé à tester avec un iPad, en branchant le Teensy via le Camera Kit pour iPad (30 €). En effet, sur iPad (pas sur iPhone), il est possible de brancher un clavier filaire sur l’iPad.

J’ai d’abord testé sur le mot de passe de l’écran d’accueil, mais ça ne fonctionne pas réellement : après quelques essais, l’iPad est bloqué pendant 1 minute, puis 5 minutes, etc. Impossible de tester les 10 000 possibilités en force brute, donc.

Puis j’ai décidé de tester sur une autre section d’iOS : les restrictions, qui permettent par exemple de bloquer l’App Store, la caméra, etc.. Et là, j’ai trouvé une faille : quand on tape plusieurs fois un mauvais code, le clavier virtuel est bloqué pendant 1 minute, 5 minutes, 15 minutes puis 60 minutes après chaque mauvais essai. Mais si jamais on utilise un clavier physique, il est toujours possible de tenter un code. Ça fonctionne avec mon Teensy 3.0 qui émule un clavier USB mais aussi avec un clavier classique ou même un clavier Bluetooth.

Il est donc parfaitement possible de programmer une attaque par force brute pour désactiver les restrictions. Dans mon exemple, le système tape un code automatiquement toutes les 3 secondes, ce qui fait qu’il faut dans le pire des cas un peu plus de 8 heures pour trouver le code utilisé sur les restrictions. Attention, il faut entrer deux fois le code pour désactiver réellement les restrictions : une fois pour entrer dans le menu et une seconde fois pour désactiver réellement les restrictions.

La vidéo montre bien le problème : j’ai rentré un code simple (0015) et il suffit de laisser l’appareil tourner pour qu’il teste toutes les possibilités et trouve le code.

J’ai bien évidemment fait un rapport de bug chez Apple et je ne fournis pas le code utilisé tant que la faille n’est pas corrigée.