Fuite du HomePod : tout comprendre sur la plus grosse bourde d'Apple depuis des années !
Par Didier Pulicani - Publié le
firmwaredu HomePod -cette enceinte connectée prévue pour le mois de décembre dans les pays anglophones- a fuité sur la toile et pas un jour ne passe sans qu'il ne révèle ses petits secrets.
Mais qu'est-ce qui a fuité exactement ? Pourquoi le firmware contient-il des références à d'autres produits, comme l'Apple TV, l'Apple Watch ou même le prochain iPhone ? Pour tenter de comprendre ce qui se passe, nous vous proposons aujourd'hui une petite FAQ avec le développeur Pierre Blazquez, qui a suivi l'affaire de près. Si vous avez des questions, n'hésitez pas à nous les poser dans les réactions !
Qu'est-ce qu'il y a dans le HomePod ?
D’un point de vue technique, le HomePod est un appareil basé sur le matériel de l’iPhone 6 et qui fonctionne avec une variante d’iOS appelée audioOS.
En quoi audioOS est-il différent des autres OS d’Apple ?
En soit, pas grand chose. C’est un système basé sur la fondation commune à tous les OS : Core OS. Cela regroupe le noyau, nommé XNU (pour XNU is Not Unix), ainsi que quelques extensions. Apple fournit même un OS open-source qui repose sur ces fondations : Darwin. Darwin est au coeur de macOS, iOS, watchOS, tvOS et maintenant audioOS. Les sources de ces fondations sont consultables sur : https://opensource.apple.com.
Qu’est-ce qui a "fuité" exactement ?
Ce qui est sorti un peu (beaucoup) trop tôt de chez Apple est une mise à jour OTA (à distance). En effet, depuis iOS 5, Apple permet aux appareils iOS de se mettre à jour eux-mêmes. Ils ne téléchargent que la « différence » entre la version sur laquelle ils fonctionnent et la version de destination. Cela permet d’économiser de la bande passante, de la place sur les serveurs et sur les appareils, et enfin de se passer d’ordinateur (le fameux et grand
PC-freelancé par Scott Forstall lors de la présentation d’iOS 5 à une foule en délire, exténuée de devoir passer par iTunes pour tout et n’importe quoi). C’est ce même mécanisme qui est à la manoeuvre pour tvOS et watchOS. D’ailleurs, l’Apple Watch ne peut être mise à jour que par ce biais (sauf dans les centres de réparation Apple où ils disposent d’un boitier spécial pour s’interfacer avec le port diagnostic de la montre, qui n’est rien d’autre qu’une variante du port Lightning de votre iPhone/iPad préféré). Ce n’est donc pas le système tel que téléchargé par iTunes qui s’est retrouvé dans la nature, mais un paquet OTA.
Comment une « simple » mise à jour peut donc révéler tant de choses ?
Tout simplement car depuis iOS 9, Apple met à disposition en OTA non seulement les
différencesentre deux systèmes, mais aussi le système au complet. Cela avait fait grand bruit à l’époque dans le milieu. En effet, depuis le tout premier iPhone, Apple avait pour habitude de chiffrer tous les composants du système. Chargeurs de démarrage, noyaux, application, tout y passait. Y compris le logo de la Pomme au démarrage. Diverses techniques ont vu le jour pour déchiffrer ces données, requérant des failles de bas niveau dans l’appareil afin d’obtenir les clés de déchiffrement. Le dernier à posséder une telle faille est l’iPhone 4 (trouvée par Georges Hotz, aka Geohot).
Depuis l’A5 avec l’iPad 2, l’iPhone 4s ainsi que leurs successeurs, la surface d’attaque s’est réduite à un niveau purement logiciel et non plus matériel. En effet, une faille aussi bas niveau permet de complètement débrider et exploiter l’appareil (installer Android sur un iPhone 3G fut une expérience intéressante par exemple). Depuis iOS 10, Apple ne chiffre plus le chargeur de démarrage des appareils 32 bits ainsi que le noyau (32 bits et 64 bits), ce qui fait que ces techniques sont quasi-désuètes aujourd’hui.
Comment cette mise à jour OTA a-t-elle été découverte ?
Faisons un point sur le fonctionnement des mises à jour OTA. Apple poste sur ses serveurs un catalogue des mises à jours OTA disponibles. Ce catalogue indique quel paquet télécharger pour quelle version de base et pour quelle destination, en fonction de l’appareil bien entendu.
Périodiquement, l’appareil va consulter ce catalogue et regarder si pour son modèle, un nouveau paquet est disponible. Pour toujours avoir ce catalogue à l’oeil, un développeur a créé une application, un site web ainsi qu’un bot Twitter afin de le scruter périodiquement et d’automatiquement créer un tweet quand un nouveau système sort. Dans le cas présent, cette application a détecté un nouvel appareil, l’AudioAccessory1,1 équipé d’un système inconnu, iOS 11.0.2.
Le site est consultable ici : https://www.ipsw.me
Le bot Twitter est là : https://twitter.com/iOSReleases
De quoi est constitué un paquet OTA ?
Un paquet OTA est une archive ZIP qui contient un manifeste, les chargeurs de démarrage, un noyau, les programmes nécessaires pour effectuer la mise à jour et enfin et surtout une archive avec à l’intérieur tout ce qu’il va falloir patcher. Ce qui nous intéresse ici, dans le cas de HomePod, c’est l’archive, qui contient audioOS au complet (rappelez-vous, c’est une mise à jour OTA « complète »). Une fois cette archive extraite, audioOS s’est retrouvé dans le plus simple appareil devant les yeux aiguisés des amateurs de bidouilles.
Pourquoi audioOS a-t-il gâché la surprise des nouveaux appareils à venir ?
Revenons un peu en arrière. audioOS est une variante d’iOS, ce qui veut dire qu’ils sont très similaires, à tel point qu’ils partagent les mêmes frameworks publics et ceux privés qu’Apple se garde sous le coude (ceux derrière l’écran d’accueil d’iOS par exemple), les mêmes applications (sauf celles qui ont besoin d’un écran, logique), et ainsi de suite. Un framework est une librairie de code compilée et prête à l’emploi :pourquoi réinventer la roue quand on peut appeler du code déjà existant ?)
Pour macOS, même topo, les développeurs ont à leur disposition des frameworks publics et privés. Certains sont mêmes venus d’iOS quand d’autres sont allés vers iOS (beaucoup de développeurs appellent d’ailleurs de tous leurs voeux qu’Apple apporte UIKit, le framework qui permet de créer des applications iOS, sur macOS).
Sur iOS, et ce depuis iPhoneOS 3.1 (ça date), tous les frameworks sont rassemblés dans un gros cache appelé dyld[ shared cache (pour résumer, un cache partagé). Ce cache est situé dans /System/Library/Caches/com.apple.dyld/dyld_shared_cache_armXX (v6 pour les iPhone, iPhone 3G, v7 pour iPhone 3Gs jusque iPhone 5c, 64 pour l’iPhone 5s et supérieurs). (] dyld est le nom du programme chargé de « coller » les frameworks à l’exécutable principal. Quand une app va se lancer, dyld va aller chercher dans le cache tout ce qu’il faut pour que l’app démarre.)
Comme nous l’avons vu, la version d’audioOS qui fut relâchée un peu vite est basée sur iOS 11. Et comme les choses sont bien faites, audioOS 11 partage beaucoup de code avec iOS 11. Y compris les frameworks. Qui se retrouvent donc dans le dyld shared cache.
Pourquoi on n’a pas trouvé ces frameworks dans les versions bêtas d’iOS 11, alors ?
Parce qu’Apple fait bien le ménage... en général. Les versions bêtas d’iOS 11 sont épurées de tout ce qui touche de près ou de loin à des appareils qui ne sont pas encore disponibles. Quand Apple compile une build[ d’une bêta d’iOS, les éléments sensibles sont automatiquement expurgés. ( Une build est un assemblage de tout ce qui forme un logiciel pour donner le produit fini. Cet assemblage est estampillé d’un numéro. Par exemple, la dernière bêta d’iOS 11 est iOS 11.0 build 15A5327g.) Là, quand les ingénieurs d’Apple ont assemblé cette build d’audioOS, aucun nettoyage ne s’est fait car cette version n’aurait jamais du se retrouver dans la nature, en tout cas aussi tôt dans le cycle de développement du HomePod.
Comment fait-on pour analyser un produit fini ?
Il y a plusieurs solutions de retro-engineering (ou ingénierie inverse, l’art de partir du résultat final pour comprendre son départ). L’une des premières et des plus simples est l’analyse des chaines de caractère (du texte). Aucune connaissance particulière n’est requise. Quand vous installez Xcode, un utilitaire CLI] nommé
stringsest également installé. Cet utilitaire va extraire toutes les chaines de caractère d’un fichier binaire. Il suffit de lire le résultat pour faire de bonnes trouvailles (la reconnaissance faciale
Pearl IDa été identifiée par cette technique). ([ CLI veut dire Command Line Interface, ou Interface en Ligne de Commandes. Il s’agit donc d’un programme à exécuter dans le terminal.)
Par exemple, dans Terminal sur votre Mac avec Xcode, tapez
]code[strings /System/Library/PrivateFrameworks/FinderKit.framework/FinderKit]/code[
...et admirez le résultat :).
Il y a également des techniques plus élaborées qui permettent de déterminer le code d’origine d’un fichier binaire. Cela s’appelle la décompilation (à ne pas confondre avec le désassemblage qui consiste à donner le code en langage assembleur, plus proche du langage machine utilisé par les processeurs). Il faut bien sûr avoir de solides connaissances pour comprendre le résultat et l’enchaînement des instructions ainsi obtenues. Un excellent utilitaire pour ça est
Hopper, un logiciel payant développé en France. Il fonctionne sur macOS et Linux. Il produit de très bons résultats et est très proche des standards d’Apple quant à son utilisation. C’est grâce à Hopper qu’ont été découvertes les fonctionnalités GSM de la prochaine Apple Watch par exemple.
Quel crédit accorder à ces découvertes ?
Habituellement, quand Apple
partageintentionnellement une information, elle passe par ses
portes-paroles officieux, ces bloggeurs/rédacteurs/journalistes qui sont dans ses petits papiers. Les fuites en provenance de Chine sont le fait de personnes désirant arrondir leur fin de mois en revendant sur le marché noir asiatique des pièces détachées venant des chaînes de production.
Ici, sauf si Apple nous a vraiment menés en bâteau depuis tout ce temps, nous parlons vraiment d’une bourde qui n’a rien d’intentionnelle. Niveau crédit, c’est donc assez élevé.
Mais pourquoi quelqu’un a-t-il cliqué sur le gros bouton rouge pour sortir cette mise à jour OTA dans la nature ?
Il ne fait aucun doute que des versions préliminaires du HomePod sont déjà utilisées en dehors du campus de Cupertino. Les ingénieurs ont probablement voulu sortir une mise à jour pour adresser des problèmes rencontrés lors de tests
dans la natureavant la sortie officielle en décembre, mais ils ne s’attendaient pas à ce qu’il soit intercepté de la sorte.
Une autre théorie serait que les ingénieurs aient été distraits dans leurs tâches par un poney qui passait dans les labos de R&D, mais naturellement personne ne se risque à confirmer cette information ^^.