Piratage EC : votre ordinateur portable est équipé d’un microcontrôleur

Récemment, je suis tombé sur un article sympa de [DHowett], sur la reprogrammation du contrôleur intégré (EC) d’un ordinateur portable Framework. Il nous montre comment réutiliser la LED de verrouillage des majuscules, en lui faisant indiquer à la place l’état de la couche de touches F1-F12 – également connu sous le nom de « verrouillage Fn », AKA, « Votre touche F1 fonctionne-t-elle actuellement comme F1, ou régule-t-elle le volume ». Il nous explique comment ajouter du code personnalisé au micrologiciel EC de votre ordinateur portable et l’intégrer correctement dans les différentes routines exécutées par EC.

L’EC que le Framework utilise est une puce MEC1521 de Microchip, et plus tôt cette année, ils ont ouvert le firmware pour cela. Maintenant, il existe un référentiel de code de microcontrôleur que vous pouvez compiler vous-même et flasher la carte mère de votre ordinateur portable Framework avec. Dans une section de commentaires de HackerNews, un représentant de Framework a émis l’hypothèse que vous pourriez ajouter des GPIO à une carte mère Framework via le piratage du micrologiciel EC.

Attendez… Code du microcontrôleur ? GPIO ? Cela nous amène à la question : qu’est-ce que la CE, vraiment ? Pour commencer, ce n’est qu’un microcontrôleur. Vous pouvez trouver un EC dans chaque ordinateur x86, y compris les ordinateurs portables, gérant les fonctions de niveau inférieur de votre ordinateur telles que la gestion de l’alimentation, le clavier, le pavé tactile, la batterie et bien d’autres choses. Au pays d’Apple, vous les connaissez peut-être sous le nom de SMC, mais leur fonction est la même.

Pourquoi n’avons-nous pas reprogrammé nos CE pendant tout ce temps ? C’est une question justifiée, aussi, et je vais tout vous dire à ce sujet.

Quel est le travail de l’EC ?

L’EC contrôle tout un tas d’appareils dans votre ordinateur portable. Pas les périphériques connectés à USB, LVDS/eDP ou PCIe, car ceux-ci relèveraient de la compétence du chipset. Au lieu de cela, il s’agit d’appareils tels que des interrupteurs d’alimentation, la puce du chargeur et divers moniteurs de courant, car ceux-ci doivent fonctionner correctement même lorsque le chipset et le processeur sont éteints. Mais bien sûr, ce n’est pas seulement la gestion de l’alimentation – il y a beaucoup de choses dans un ordinateur portable pour lesquelles vous avez besoin de GPIO.

section du schéma EEE PC 701, montrant les connexions EC, et même certaines fonctions inutilisées comme les connexions de boutons supplémentaires
L’EC d’un EEE PC 701. Celui-ci a même quelques signaux supplémentaires pour les boutons multimédias qui ont été laissés de côté dans le matériel !

Généralement, tout ce que vous contrôleriez avec un digitalWrite ou surveiller à l’aide d’un digitalRead, mesurer via un ADC ou parler à l’aide d’I2C – ce sont des choses gérées par l’EC. Ainsi, l’EC lit l’état de la batterie et les tensions du chargeur, pilote les ventilateurs avec PWM et prend des mesures de température à partir de divers capteurs. Le clavier de l’ordinateur portable est une matrice de touches, et l’EC analyse cette matrice et traite les pressions sur les touches, transmettant les événements clés au chipset que votre système d’exploitation lit ensuite. Que votre pavé tactile soit PS/2 ou I2C, l’EC le gère et l’expose également au système d’exploitation.

Le bouton d’alimentation de votre ordinateur portable est directement connecté à l’EC. Par conséquent, votre EC est la première chose à allumer ; et si votre ordinateur portable cassé ne réagit pas au bouton d’alimentation, cela signifie que l’EC ne peut pas faire son travail de gestion de l’alimentation pour une raison quelconque. En fait, si vous consultez les schémas réduits récemment publiés de l’ordinateur portable Framework, vous verrez que l’EC possède son propre rail d’alimentation séparé provenant directement de la batterie.

Comment parle-t-il même au chipset? Depuis environ deux décennies, les EC utilisent le bus LPC – un bus large de quatre bits ressemblant superficiellement à qSPI. En dehors des EC, il n’a été vraiment utilisé par les TPM que ces derniers temps. LPC utilise des fréquences de 25 MHz à 100 MHz. Ainsi, si vous voulez mettre un analyseur logique sur vos signaux LPC et capturer certains paquets, votre LA bon marché typique de 25 Msps ne suffira pas, mais une carte FPGA standard ou une LA beaucoup plus rapide fera des merveilles, et il y a un papier assez cool utilisant la manipulation LPC et un FPGA pour extraire les clés des TPM.

LPC a environ deux décennies et est un successeur direct du bus ISA – en fait, dans certains schémas d’ordinateurs portables de 2003, vous trouverez l’EC connecté via ISA à la place, mais tout est LPC au-delà. Cependant, les EC récents parlent plutôt d’eSPI, une interface de type qSPI destinée à remplacer LPC, et le Framework EC parle également d’eSPI.

Bien sûr, il y a un firmware impliqué

Chaque EC a un micrologiciel et chaque ordinateur portable (et ordinateur de bureau et serveur !) a un EC. Le micrologiciel EC est presque toujours à source fermée. En tant que tel, le micrologiciel EC est l’un des blobs binaires que nous avons tendance à manquer lorsque nous parlons de composants propriétaires à l’intérieur de nos ordinateurs. Souvent, le micrologiciel EC est stocké sur la même puce flash SPI que le BIOS – d’autres fois, il y a un flash externe ou sur puce séparé, auquel cas vous avez généralement un chargeur de démarrage UART sur lequel vous pouvez reflasher votre EC. Tout cela dépend du fabricant spécifique et du modèle d’EC que vous avez.

Souvent, votre EC est construit sur quelque chose comme l’architecture ARM ou 8051, d’autres fois c’est quelque chose de plus obscur comme CompactRISC. La chose commune est – tout au plus, vous obtiendrez un blob binaire en ce qui concerne le micrologiciel de votre EC. À un moment donné, lorsque Google s’est lancé dans le secteur des ordinateurs portables, un groupe d’ingénieurs a probablement dit « assez » et a ouvert son code EC – ce sur quoi Framework s’est appuyé en ce qui concerne son propre micrologiciel EC. L’année dernière, System76 a également ouvert son code EC. Malheureusement, la situation reste désastreuse pour les autres fabricants d’ordinateurs portables.

Votre EC pourrait-il être détourné ? Peu probable – il est généralement plus difficile de modifier et de mettre à jour le micrologiciel EC que de faire de même avec les images du BIOS. Maintenant, pourriez-vous vous-même modifier le comportement de votre CE ? C’est au moins techniquement possible, et je dirais que vous auriez toujours dû pouvoir le faire.

Alors, qu’en est-il du piratage ?

Bien sûr, avec chaque sous-système d’un ordinateur portable, vous trouverez un sous-groupe de passionnés de Thinkpad qui ont déjà creusé profondément et l’ont utilisé pour réaliser des choses amusantes et utiles. L’EC est l’un de ces aspects, et ils ont certainement quelque chose à offrir – la reprogrammation des dispositions du clavier et la suppression des verrous de batterie, principalement. Avec les dispositions de clavier, ils ont réussi à faire fonctionner des claviers plus anciens (et apparemment plus supérieurs) avec des ordinateurs portables plus récents, avec un didacticiel expliquant à quel point vous devez spécifiquement isoler certaines broches et un moyen très pratique de flasher les modifications.

La partie batterie est cependant plus vitale – vous pouvez le plus souvent vivre avec un clavier de qualité inférieure, même sur des ThinkPads supposément stellaires. Le problème est le contrôle de la batterie « authentique » dans l’EC, qui ne vous permet pas de charger (ou même de fonctionner à partir de) la batterie si elle ne passe pas. Il ne s’agit pas seulement de limiter les options de batterie tierces, au cas où cela ressemblerait à cela – de telles vérifications interdisent également l’utilisation de batteries Lenovo qui étaient simplement destinées à un autre type de Thinkpad, mais qui sont par ailleurs parfaitement adaptées mécaniquement, électriquement et électroniquement.

Il y a une vidéo sur la façon dont le piratage ThinkPad EC s’est déroulé, et je vous recommande de vérifier celle-ci pour voir ce qui se passe. Maintenant, Lenovo ne semblait pas aimer que les gens échangent des claviers et permettent l’utilisation de batteries tierces pour lesquelles Lenovo lui-même a cessé de vendre des homologues « authentiques ». Ainsi, à un moment donné, ils ont décidé de fermer l’un des moyens les plus confortables pour la mise à jour du micrologiciel EC et de publier une mise à jour du BIOS citant des «améliorations de la sécurité». Le CVE pertinent indique ceci :

Une vulnérabilité a été signalée dans diverses versions du BIOS d’anciens systèmes ThinkPad qui pourraient permettre à un utilisateur disposant de privilèges administratifs ou d’un accès physique de mettre à jour le contrôleur intégré avec un micrologiciel non signé.

Si vous me demandez, cette description est dingue. Cette phrase signifie essentiellement « le propriétaire de l’ordinateur portable peut flasher le micrologiciel EC non approuvé par Lenovo ». Je me demande ce qui a conduit à cela et quelle pourrait être la justification possible, mais au final, quelle qu’en soit la raison, c’est une distraction par rapport à ce que je crois. Autrement dit, la mise à jour du micrologiciel EC sur son propre ordinateur portable devrait être possible, et Lenovo a fermé un moyen convivial de le faire.

De plus, tous les fabricants ne respectent sans doute pas votre droit à la réparation en matière de CE. À titre d’exemple, depuis près d’une décennie maintenant, Dell expédie ses ordinateurs portables avec des EC dotés d’un micrologiciel crypté, des clés fusionnées à l’intérieur de l’EC. Cela a été un problème particulier pour la réparation d’ordinateurs portables Dell, car EC meurt de temps en temps. Bien que vous puissiez acheter un EC vierge et le redistribuer à la place de celui mort de Dell, il n’aura pas les clés de déchiffrement que Dell flashe dans l’EC à l’usine et n’exécutera donc pas le micrologiciel chiffré de Dell. Les modifications ne sont pas sur la table ici – il n’est même pas possible de trouver un remplacement approprié pour l’EC lorsque votre ordinateur portable est cassé, même si les puces elles-mêmes sont abondantes.

Que pouvez-vous faire maintenant?

Il y a maintenant trois fabricants qui ont des micrologiciels open source pour les EC : Google, System76 et Framework. Que pourriez-vous faire avec ce firmware, cependant? Comme pour tout domaine de piratage sous-utilisé, il faudra du temps pour réaliser son plein potentiel. Le remappage des touches n’est pas la seule chose – vous pouvez implémenter une limite de charge de la batterie de 80% pour la longévité des cellules si le fabricant de votre ordinateur portable ne vous en a pas fourni, ajouter des couches supplémentaires à votre clavier d’ordinateur portable sans avoir besoin de la prise en charge du système d’exploitation, peut-être ajuster votre ventilateur courbes. Ou, en effet, vous pouvez ajouter des GPIO à l’intérieur de votre ordinateur portable, pour tous les capteurs ou boutons que votre cœur désire.

Vous pouvez également corriger les bogues, qui surgissent de temps en temps dans les EC, et peuvent être assez ennuyeux à gérer – imaginez que les touches du clavier se bloquent de temps en temps, apparemment au hasard, et c’est exactement ce qui se passe lorsque vous avez un bogue EC. Corrections de bogues ou améliorations, comme pour tout firmware actuellement fermé, nous ne verrons pas une multitude de hacks sympas à partir de demain, mais il y a certainement des choses sympas à l’horizon en ce qui concerne le piratage EC.