 c'est du meublage je pense. Donc voilà, notre taux suivant, ça parle du bouton Dash d'Amazon. Qui parmi vous, c'est ce que c'est déjà ? Donc à peu près tout le monde qui on a un, qui on a utilisé pour faire des achats. Donc pour tous ceux qui n'ont jamais vu un bouton Dash d'Amazon, regardez j'en ai acheté un, c'est le moment, ça ressemble à ça. C'est un tout petit truc, on peut cliquer dessus, on peut commander des trucs avec et on peut avoir des trucs cool, genre des trucs qui font sens, des trucs d'avoues pour le chien, du shampoing, des trucs du genre, mais aussi des trucs rigolos ou des trucs dont on a besoin souvent, mais des trucs marrants comme de la Play-Doh, le truc pour les enfants. J'ai aucune idée de qui peut avoir un besoin régulier de Play-Doh, enfin ça va ou ça sera quoi ? Vous enfants mangent beaucoup, vous en avez toujours besoin. Enfin bon, c'est quelque chose que vous apprendrez peut-être pas pourquoi on a besoin de ça, mais on va apprendre comment le bricoler, comment l'utiliser pour différentes choses. Certains d'entre vous pourraient dire, ok j'ai déjà entendu parler de toutes les choses de ce style, parce que oui, la première version, il y a déjà eu une analyse de ce style sur la première version, mais il y a une nouvelle version, comme souvent avec les trucs de la IoT, ils essaient de renforcer la sécurité, c'est ce que le... enfin, on va parler d'hommes, du matériel, du software et aussi de la gueule de la communication client-server. Donc Hoon, ça fait le talk là-dessus, il acte du hardware depuis pas mal de temps, du coup on va lui donner un bon round d'applaudissements et apprendre des choses. Merci, c'est cool de vous voir, donc regardons un peu plus en détail le bouton Amazon Dash, donc c'est de manière totalement basique un bouton connecté au Wi-Fi, donc c'est disponible aux US depuis 2014 je pense, et en Allemagne depuis août 2016, il y a eu deux révisions du matériel et dans cette présentation je vais parler de la dernière révision, c'est-à-dire la révision 2. La vieille révision a déjà été bricolée dans tous les sens, donc ce bouton peut être utilisé pour commander ou commander à nouveau des provisions de la nourriture pour les animaux, des produits de nettoyage, c'est disponible seulement pour certains produits, vous ne pouvez pas le configurer comme vous voulez, ça coûte 5€ et vous recevez une ristourne sur vos premiers achats. Donc il y avait un bouton personnalisable qu'on pouvait obtenir aux Etats-Unis pour 20 dollars, vous pouvez toujours mettre votre propre code sur le bouton et utiliser les Amazon Web Services, donc qu'est-ce qui est intéressant, il a du Wi-Fi, ça doit être quelque chose comme un ordinateur, donc c'est un truc comme l'internet de merde, l'internet des objets soit disant, comment est-ce que ça marche, qu'est-ce qu'il en est de la sécurité, est-ce qu'il y a un risque de le mettre sur nos réseaux, est-ce que ça peut être abusé par exemple pour des attaques d'EDOS et la question pour les bricoleurs c'est est-ce qu'on peut le reprogrammer pour nos propres dessins, donc ça utilise, enfin c'est plus puissant que le SP-82-66 pour un prix à peu près comparable, et le point important c'est si on peut pas faire de lancer de code dessus, on le possède pas. Il y a déjà eu des recherches sur l'an, c'est un bouton qui a été fait, vous pouvez récupérer les transparents ici, et je me référerai à ces deux liens plus tard dans la présentation, et ça ça a déjà été fait, la façon simple de réutiliser ce bouton c'est d'utiliser l'application smartphone et configurer le dash normalement, mais on ferme l'application au moment où on choisit un produit et ça empêche le dash de commander quoi que ce soit, donc la sélection du produit est stockée côté serveur alors que la configuration wifi est stockée en local et donc donc le dash pense qu'il est configuré et le serveur répond que non, donc vous recevez rien, mais ça fait beaucoup de choses pour se connecter, donc ça connecte sur le wifi, ça fait une requête d'HCP, des requêtes ARP, DNS, et on peut surveiller ça pour trouver quand le bouton est activé, et le moyen le plus simple c'est de regarder les logs du DHCP. Ok, qui a déjà fait ça, deux trois personnes, on ira beaucoup plus loin que ça, donc d'abord on va regarder le matériel, donc qu'est-ce qu'il y a dans ce bouton dash, le protocole de communication et bon le chiffrement, ensuite on va regarder le firmware, là c'était la version la plus simple quand j'ai regardé le 26 décembre, la version 19410, et on va lancer notre propre code sur le bouton sans dessouder quoi que ce soit, donc j'ai pas fait d'analyse de l'application Amazon pour smartphone, c'est beaucoup trop haut niveau à mon goût, voilà. Donc en ce qui concerne le matériel, c'est donc dans une houtte thermocélée en plastique, donc on peut pas dévisser, on doit faire autrement le couper, etc. Après le tentative, c'était avec un couteau, j'ai fait le tour du saut, ça a pas très bien fonctionné, j'ai enlevé certains smd au passage, et ma tentative la plus récente qui a fonctionné, c'était d'utiliser une dremelle depuis le haut, parce que je savais à ce moment là à quel endroit était les choses, donc on voit les points de test et le microcontroller, donc il y a un certain espace entre le pcb et le plastique, le pcb fait quatre couches et beaucoup de smd en 0201, donc on peut les voir là, tout ça c'est vraiment tout petit, et vous pouvez voir ici les contacts du microcontroller, ici vous ne pouvez pas parce qu'il y a un truc noir dessus, je ne sais pas pourquoi ils font ça, mais on peut l'enlever en faisant gaffe, ça peut être amoli avec l'acétonne, ça rend les choses plus simples, et bon le microcontroller est assez puissant en fait, c'est un cortex m4 avec un fpu, on peut le faire monter à 120 MHz, il y a 512 kHz de flash et 160 kHz de RAM, l'inconvénient c'est le packaging, c'est difficile de souder des trucs là dessus, et bon il y a le machin noir autour, ensuite il y a le cirque intégré qui gère le wifi, c'est un Atmel Atwin C1500B, ça est du 2,4 GHz qui peut monter à 72 Mbps, qui gère le WP A1 et 2 etc avec une pili P intégrée qui fait du DHCP, c'est un peu comme quand on ouvre un socket en unix, c'est le type wifi qui se occupe de toute la couchipée, on ouvre un socket directement depuis le contrôleur, et puis on peut communiquer en utilisant cette socket, ça gère donc le SSS et le TLR en natif, et plein de choses, et bien sûr bon il faut un régulateur de tension, parce qu'il y a une seule batterie 3A 1V5, un peu moins, et du coup il faut faire de la bourse conversion pour la montée à 3V5 avec le régulateur de tension qui est plutôt bon, ils auraient pu utiliser un truc moins cher, enfin il y a aussi du BTLE et vous pouvez voir ici le type Bluetooth Solo Energy, je ne sais pas s'ils l'utilisent déjà, peut-être sur la version iOS de l'application mais je ne l'ai pas analysé dans tous les cas, il y a une flash série de 4 MB et un micro, vous pouvez voir ici quand on enlève le paquet, c'était un accident, et on a une idée d'electro luminescente, on ne peut pas trop voir là, mais bon il y a trois LED, une rouge, une verte et une bleue, et l'horloge c'est un oscillateur de 32 kHz qui la donne, le petit truc ici, et ça génère en interne des fréquences supérieures, il y a aussi des composants discrets par ici, utilisé pour le circuit d'alimentation, donc si on met tout ça ensemble ça a à peu près cette tête, c'est un peu plus simple que la réalité, mais on a le connecteur Bluetooth connecté à un USA, le Wi-Fi est connecté sur le bus SPI, la flash SPI sur un autre, un truc intéressant c'est de voir qu'il y a un URT en plus qui sert au debug, la régulation de tension est commencé à s'opérer quand on presse le bouton, et quelque chose qui est assez intéressant c'est qu'il n'y a pas d'autres sources pour allumer le système, pas de RTC, la batterie ne peut jamais s'allumer par elle-même, il faut appuyer sur le bouton, et une fois qu'il se rendort on ne peut pas le réveiller sans qu'on presse le bouton, donc on a une bascule externe pour soutenir le power enable, et à l'extinction elle est relâchée, l'AMCU peut mesurer l'attention de la batterie en utilisant un convertisseur analog digital, et il y a un signal désactiva pour connecter la DCL à la batterie, par rapport à la consommation électrique, il y a un petrof qui a déjà fait beaucoup de mesures, on peut voir que le Wi-Fi ça consomme beaucoup à peu près à 0,4W, sans le Wi-Fi, la MCU on descend à 80mW, et avec PowerSafe on pourrait potentiellement descendre à 50mW, la batterie à intégrer contient à peu près un demi-water, donc c'est 75 minutes Wi-Fi, ou 10 heures si on considère une consommation de 50mW, donc à la base, vous pourriez faire un micro espion, écouter le microphone et envoyer ça en Wi-Fi, ça restera limité avec une batterie Alors les interfaces de debug, vous avez déjà vu ces points de test ici, l'ancien bouton avait une interface OneWire, et on pouvait facilement récupérer la mémoire avec ça, celui-là il a des points de test ici, pour du SingleWire, mais le SingleWire est désactivé et la console série, elle est réduite à seulement quelques commandes, ici vous pouvez voir que vous pouvez voir les interfaces de debugging par le dessous avec un connecteur, où on peut monter un connecteur, vous pouvez trouver ce connecteur sur le site Web Petroff, et le pinout est compatible avec celui de l'ancien bouton, donc voilà les quelques commandes série qu'on peut utiliser, on peut voir dans le manuel il y a beaucoup plus d'autres commandes et l'utilise en usine pour faire quelques tests et de la calibration, ça c'est le manuel que vous avez si vous ouvrez l'allusion série et que vous connectez, et donc vous pouvez notamment mesurer l'état de la partie, alors Immortal, ça commande en fait la mise en ordre tension et automatique, et une fois que vous voulez le faire s'éteindre, vous relancez la commande Mortal qui lui permet de s'éteindre à nouveau. Donc ensuite vous avez quelques autres modes, la configuration, la connexion wifi, etc. Du point de vue des protocoles de communication et de la cryptographie, la communication fonctionne comme ça, vous avez un samg-55, c'est le micro de contrôleur, ensuite on a la puce wifi, ça c'est le atwing, et donc cette puce contrôle tout le tls, et ces deux communiquent en texte brut via le bus SPI, et ensuite le bouton utilise HTTPS pour se connecter au serveur d'Amazon, donc ici on peut envoyer des données en texte brut, et il y a une fréquence d'horloge à 40 MHz, c'est plutôt rapide. Une des premières choses que j'ai faites, c'était d'analyser les communications, parce que je savais pas s'ils utilisent ztls installé dans la puce wifi ou dans le micro contrôleur, ils l'utilisaient dans le micro contrôleur dans la dernière révision, donc j'ai mis un fga entre les deux pour espionner la communication, j'ai coupé le bus comme ça, je pouvais faire du man in the middle, et donc j'ai fait ça avant de savoir comment ça fonctionnait, en fait ça aurait pu éviter, donc c'est facile d'enlever le micro contrôleur, et donc j'ai fait des vias manuels, donc que j'ai relié à une petite carte que j'ai à le même relié au micro contrôleur, j'ai utilisé quelques diodes RGB, j'ai la console série, le debug via un single wire, le bouton, une alimentation en 3,3 volts, et on peut voir pas mal de fils aussi ici sur les connexions pour le bluetooth et le wi-fi, donc voilà ce que ça donne avec la carte fga dessus, donc ça c'est comment j'ai analysé la communication, et maintenant je vais la présenter, donc la communication wifi est utilisée par l'application android, le système de configuration par wifi est utilisé par la version android de l'applié, pour passer en mode de configuration, il faut garder le bouton enfoncé quelques secondes, jusqu'à la lumière fond au bleu, ensuite le bouton passe en mode point d'accès, on peut se connecter à un réseau qui s'appelle amazon configure me, ça sert aussi du DHCP pour filer une IP au client, et c'est un simple server http qui tourne directement sur le samsung 55, qui tourne pas sur le contrôleur wifi en tant que tel, avec une petite page web avec des informations basiques, le numéro de série, la version du firmware, et le pourcentage restant de la batterie, ils font toujours ça, c'est pas super intéressant, l'application par contre elle fait des trucs plus intéressants, ça shop les informations sur le device en faisant un get de la racine, mais ça définit un content type d'application jazon, et du coup ça revoit plus d'informations, ça renvoie un liste de tous les réseaux wifi qui sont accessibles, ensuite l'app génère une clé privée en clé elliptique de difielman et la poste sur pubkey, ensuite elle la relie en faisant un get à la même adresse, pardon elle obtient la clé publique de la dash en faisant un get à la même adresse, elle upload la configuration cofique dans slash local, c'est pas super intéressant et du coup c'est du plaintexte, elle envoie un token de sécurité chiffré sur slash s token et la configuration réseau chiffré sur slash network, une fois que c'est fait la configuration est terminée, la configuration du bouton est achevée, le bouton se connecte en wifi sans registre chez les servers d'amazon et maintenant quelque chose d'intéressant c'est qu'il reçoit un secret customer, une clé secrète spécifique qui est stockée dans la flash et qui ensuite utilisée pour passer les commandes, donc il y a plusieurs clés secrètes, il y a le secret de périphérique, c'est 20 caractères en chiffre et caractère majuscule qui est écrit dans la flash lors de la production, c'est fixé, ça ne change pas sur le périphérique, on a le secret customer qui est obtenu à la phase de configuration depuis le serveur d'Amazon et c'est généré de manière aléatoire par le serveur à mon avis, on en trouve un nouveau si on fait une nouvelle configuration, ces deux valeurs sont stockées dans la flash interne du micro contrôleur et ça sert pour faire du Hmax sur les requêtes, donc le Diffie Allman, les clés elliptiques utilisent la courbe Prime 256v1 et l'utilisent pour créer du matériel de chiffrement temporaire symétrique, on a eu à ce global contre mode, ils utilisent du chat 256 pour générer cette clé et les données pour le mode AES sont encodées en TLV, on a 3 tags, le 0 ciphertext, ensuite on a un vecteur d'initialisation et enfin le texte, donc ça fait 16 octaires, ensuite le clair texte est encodé en jason, ce qui est assez bizarre, mais apparemment ils aiment bien les puzzles, ils utilisent du TLV pour les données chiffrées et quand on les déchivre on obtient du jason, donc voilà un exemple de données, on peut voir la clé publique et le local en fait c'est juste le pays, le token est renvoyé par le serveur, c'est un truc que l'application Amazon obtient des serveurs d'Amazon quand on la lance et qu'on commence la configuration d'un nouveau bouton, ça relive votre bouton à votre compte Amazon, le token fait 38 et bon ensuite le réseau est encodé comme ça par priorité etc, quelque chose d'intéressant c'est que le serveur HTTP a aussi un fichier qui n'est pas utilisé par l'app c'est slash flash et apparemment ça permet d'accéder à la flash, je n'ai pas analysé ça en détail mais il doit falloir s'authentifier apparemment on ne peut pas abuser de ça sans comprendre comment la crypto fonctionne, donc à la fin de l'enregistrement chez Amazon, le dernier truc qu'il fait une fois qu'il était configuré, ça fait un post sur cette URL, sur le serveur d'Amazon et ça transmet le numéro de série qu'on peut voir ici et un compteur de transaction 38, on peut aussi voir le token de l'application ensuite on utilise le compteur de transaction quand on fait les requêtes, ça empêche les attaques par rejeux ensuite ils font une hmec en utilisant la clé secrète du périphérique parce qu'on n'a pas encore de clé custom et la réponse à ce message contient la clé de customisation c'est comme ça que se fait la registration, il y a aussi des timestamps donc on utilise le système de date l'époque unique donc une fois qu'on a configuré le bouton et qu'on appuie sur le bouton pour commander un truc, ça fait deux requêtes post sur cette gateway chez Amazon et ça utilise le content type binary rio, la requête B c'est la commande et la requête D c'est des infos de debug, ils font de la télémétrie sur la fréquence des pressages des boutons et si il a été apparié avec du bluetooth et des choses comme ça il me semble que j'ai un exemple un peu plus tard c'est pas très intéressant non plus mais il y a un truc intéressant c'est que le serveur peut exiger une mise à jour du firmware du bouton et dans ce cas là une requête post sur le point F est faite et ça télécharge le nouveau firmware, le post pour la commande à cette gueule donc on a toujours le numéro de série, le compteur de transaction, l'HMAC et on la génère donc en utilisant le secret customization, ça renvoie donc un code de statut HTTP naturellement qui permet de déterminer si la commande a fonctionné ou pas donc si ça a clignot en verre c'est que ça a marché et sur une réponse 200 si ça a clignot en rouge en clignotant c'est l'erreur 412 le produit n'a pas été sélectionné donc on a le timestamp du serveur dans le coeur de la requête et un flag pour dire s'il faut exiger une mise à jour du firmware avant d'avoir toutes les clés secrètes j'utilisais le FGA pour m'amuser à faire changer ce flag pour recevoir des mises à jour mais le serveur me disait non vous n'avez pas de il n'y a pas de nouveau firmware donc j'étais un peu déçu bon les conclusions en matière de sécurité pendant la phase de configuration en mode access point on peut faire du menu de middle on peut simuler un bouton dash il n'a pas besoin de s'authentifier auprès de l'application donc on peut faire du menu de middle et de level twin se dire qu'un attaquant peut obtenir les coordonnées wifi et le token dash du système de commande donc si on configure ce machin et qu'un jour votre voisin a un dash button le configure on peut chopper son mode passe wifi bon par contre il faut la laisser tourner un moment et le risque n'est pas très haut parce que cette configuration se fait en peu de temps donc la configuration avec le serveur utilise de l'https et je crois qu'il vérifie le certificat du serveur selon selon internet les requêtes du client donc le client ne fait pas de sécurité il n'y a pas de certificat ils utilisent juste la h-max avec le compteur et la clé et la clé secrète mais ça évite les attaques par au jeu et la commande sans connaître la clé secrète donc c'est assez solide je pense mais mais la chose la plus intéressante en matière de cq c'est que le bouton est vraiment actif uniquement après un appui physique sur la clé sur le bouton et il n'est connecté que quelques secondes et si jamais il est bricolé la durée de vie de la batterie limite la durée pendant laquelle on peut en abuser il n'y a pas de port dans laquelle s'introduire donc on ne peut pas faire grand chose depuis l'extérieur donc maintenant on va regarder le firmoire alors lancé un bouton utilisé une puce broadcom et un système d'exploitation en réel avec une pile netx pour liper donc le nouveau bouton à un système d'exploitation personalisé on peut rien trouver sur internet à propos donc voilà la sortie du port série je suis pas sûr qu'il donne qui donne ces informations normalement j'ai j'ai activé le mode développeur et la journalisation pour avoir cette information donc il y a plusieurs tâches la tâche principale c'est la tâche action il y a le bouton avocado qui semble être le nom de code du projet il y a une tâche spéciale pour l'adiod rgb un gestionnaire de commande et un gestionnaire de réseau si vous voulez récupérer le firmoire on pourrait essayer le debug single wire au début mais ça peut pas être utilisé parce qu'il y a un bit de sécurité qui empêche l'accès via le debug single wire et on peut pas on peut pas accéder non plus à la boutre rom et le seul moyen d'accéder selon la détachie du microcontroller c'est avec un effacement complet de la flash et ça ça peut être fait en utilisant la pâte d'effacement du microcontreur mais ça ça nécessite de dé souder le microcontreur pour accéder et en plus ça efface la flash donc ça permet pas de récupérer le firmoire j'ai regardé la flash externe je l'ai dé souder vous pouvez l'avoir ici je l'ai je l'ai souder sur un petit morceau de pcb et je l'ai branché à une reste berry pie et j'ai récupéré son contenu en utilisant un outil appelé flash rom qui est plutôt bien et j'ai j'ai tout récupéré donc là vous pouvez trouver au moins une partie du firmoire dans cette flash le problème avec ça c'est que le microcontreur ne peut pas utiliser utiliser le firmoire directement depuis la flash ce firmoire doit être copié d'abord vers le micro contrôleur et donc ça veut dire que le firmoire doit aussi être présent dans la flash interne du microcontreur il y a probablement un double et donc ça on peut l'éditer et le modifier avec un éditeur exad decimal donc si vous regardez ce qui se passe avec la flash spi vous voyez qu'il utilise il contient le firmoire spi le firmoire et aussi du stockage dynamique avec la journalisation donc vous pouvez voir le stockage dynamique et qui contient pas mal de choses en texte donc vous pouvez voir voir ce qui se passe et le début de la flash contient une liste de blocs statiques et vous voyez que la structure est assez simple c'est le nom du bloc à la fin il y a la version du bloc il y a un offset dans la flash et la longueur du bloc donc ça peut être récupéré facilement j'ai écrit la structure et récupérer récupérer la list à partir de ça le samg-55 ça doit être le firmoire pour le microcontreur il a 67 kilobits donc ça correspond pas mal il y a un éditeur additionnel et la charge de ce éditeur et le wifi a aussi un microcontreur intégré qui a beaucoup de flash ici donc le firmoire compte à peu près 400 kilobytes donc j'ai récupéré le bloc samg-55 et je l'ai analysé donc si vous voulez analyser un bout de firmoire pour un microcontreur irm cortex m3 ou m4 m0 aussi vous savez que la rame statique commence à cette position et la flash interne à cette autre position donc la table des vecteurs d'interruption c'est la table où se trouvent les off-tête des routines de gestion d'interruption on a aussi le point d'entrée du risette donc on s'attendrait à trouver la table des vecteurs quelque part dans le sein du firmoire c'est ça qu'on cherche le pointeur de pile doit pointer quelque part dans la rame à la fin de la rame quelque part quelque part vers la fin et les gestionnaires d'interruption devraient pointer quelque part dans la flash donc si on regarde de plus près voilà le éditeur additionnel qu'on a donc ça n'a pas l'air de faire grand sens de s'en servir comme table de vecteur parce que au début c'est une adresse de flash après c'est une adresse en valide non c'est comme ça que je me suis dit que ça devait être la longueur du firmoire il y a plein de zéro et à cet endroit on peut trouver le pointeur de la pile et ensuite elle adresse des handlers d'interruption donc mes pré suppositions c'était que ce serait des structures de 0x200 bytes et que ça devait être à l'adresse suivante mais ça s'est révélé faux parce que si on se trompe dans les offsets on peut voir ça dans le désassembleur les références font plus sens donc j'ai réessayé donc j'ai strippé le header et non j'ai je n'ai plus strippé ce firmoire et là ça tombait juste donc j'ai un firmoire partiel en tout cas mais voilà le problème c'est qu'il commençait à l'adresse 40 000 en flash donc il doit y avoir un bout de l'odeur un peu avant 40 000 tout pile et je ne l'avais pas et j'ai trouvé après qu'en plus du bout de l'aider il y a aussi le stockage de la configuration dont l'adresse mac le numéro de série de l'appareil la clé secrète du périphérique et la configuration utilisateur c'est là où toute la liste des wifi est stockée donc ça c'est avant le le firmoire que j'ai trouvé dans dans la flash externe donc j'essaie de faire un truc ce serait cool si on pouvait exécuter le firmoire dump sur un autre samg sans le bout de l'odeur donc je l'ai écrit dans un micro contrôleur vide compatible j'ai dupliqué la table du pliquet à la table des vecteurs au début de la flash donc j'ai modifié les offset enlevés 0 200 j'ai j'ai défini le lockbit pour démarrer depuis la flash et ça fonctionne donc j'ai une sortie de debug à ce stade et tout marche bien et j'ai fait donc je pouvais faire du debugging single wire donc je me suis connecté avec un debugger avec open ocd et soudain je trouve une jolie console développeur sur lui harte donc j'ai un peu analysé ça en fait il regarde juste l'état du de la pin de security lock et si c'est pas défini bas on sait qu'on doit être en mode développeur néanmoins il ya un petit problème encore parce que j'ai pas été capable d'utiliser ce nouveau bouton ça passait plus chez amazon parce qu'il n'y avait pas la clé secrète donc il fallait je trouve un moyen de domper la flash interne d'un micro contrôleur verrouillé et je voulais le domp du bout de l'odeur donc dans tous les cas j'ai cherché de l'exécution de code ça voulait dire aussi exploiter le firmoire d'une façon ou d'une autre donc si vous avez un désassemblage du firmoire et un accès au debug ça peut pas être beaucoup plus confortable pour essayer de faire des exploits vous pouvez regarder les registres faire des traces et ça mais ça rend les choses beaucoup plus faciles donc la chose la plus simple c'était de mettre une ligne très longue sur l'interface série il y avait bien une vérification de la longueur sur l'interface série c'est limité à 256 octets donc ça c'était surprenant donc j'ai essayé de j'ai essayé d'autres options quand on peut exploiter des des protocoles de bas niveau comme dhcp ça mais ça ça attaquerait la plus wifi et pas et pas le micro contrôleur sur le micro contrôleur il ya un serveur http qui tourne et il a il a un parceur tlv jason et il y a aussi quelque chose d'avant une configuration audio ça s'est utilisé par l'ancien bouton parce que si on utilisait une appli ios je sais pas si c'est toujours utilisé avec le nouveau bouton ou ça aussi ça a été réutilisé changé en bluetooth mais le code est toujours là et il supporte toujours le conflit le protocole de configuration audio donc ça ça a été analysé par jay greco avant de se plonger là dedans j'ai je l'ai contacté parce que j'avais pas de donner d'exemple donc je lui ai demandé si pouvait m'envoyer un filet et l'enregistrement de façon à ce que je pouvais avoir des informations de connexion valide et il m'a envoyé un échantillon et quelques quelques mises à jour sur son blog donc c'est pas c'est pas ask mais en fait fsk avec quatre porteurs et ça ressemblait à la sk à cause du filtre passe-bas donc maintenant j'avais des données d'exemple donc j'ai analysé ces données d'exemple donc ça c'est la charge du protocole audio il y a un préambule la longueur du paquet sur un octet et le paquet le paquet total doit être plus petit que 128 octets il y a un crc il y a l'identificateur du serveur donc il y a un mot de passe et le rayum c'est en fait le pays si on regarde un peu plus en détail à la fonction qui traite cette charge on peut voir que à part ce test de longueur de 128 il n'y a pas d'autre test de longueur et donc tous ces buffers en fait ils sont copiés directement sur la pile et donc ils sont triviaux en fait à utiliser des tournées j'ai utilisé le royaume parce que je pensais que c'était la fin ce qu'il y avait à la fin de la pile donc maintenant on peut regarder comment se comporte la pile on peut voir le buffer de rayum et d'autres 10 octets supplémentaires qui sont disponibles pour notre charge utile et aussi un peu d'espace dans les tampons pour le sidi et pour le mot de passe mais il faut qu'on s'assure qu'on dépasse pas les 127 caractères totaux de charge utile donc le problème c'est qu'après cet espace additionnel il y a des valeurs sur la pile et si on les écrasent on exécute un point d'heure d'exception il y a des valeurs de longueur pour même copier à cet endroit là et si on écrit des zéro les mêmes copies font plus rien et il y aura plus d'exception qui sera invoqué mais il y a un autre truc il nous fallait désactiver la gestion des interruptions vu qu'on est sur un système temps réel il y a beaucoup de trucs dans tous les sens qui se passent avec les IRQ et une fois qu'on a défoncé la pile tout ça ça fonctionnera plus très bien si on essaie de faire du changement de tâche bon ensuite il faut il faut gérer le watchdog il y a un watchdog et ça éteint le bouton au bout d'un moment c'est ce truc avec les commandes immortales immortales donc une fois qu'on a trouvé le compteur de programme sur la pile on peut faire des choses intéressantes on peut lancer on peut y stocker une charge utile sur la pile donc j'écris cette payload donc ça c'est l'inscription l'instruction pour des activités d'interruption ces deux instructions juste après le programme compteur et quelques registres parce que normalement sur le plateforme marme quand on fait un chargement c'est relatif au programme compteur et donc ça ça prend 2 plus 4 octets pour chaque chargement et avec cette méthode on peut gagner un peu d'espace de deux octets par par registre bon on a besoin des valeurs immédiates pour le watchdog et bon on met tout ça sur la pile sur la pile en le pop ça nous fait garder quelques gagner quelques octets en plus et maintenant on peut dumper la flash donc le pointeur source donc le point sur le début de la de la flash je l'ai mis dans le registre 1 le registre 2 c'est la base de la fonction uart write et vu que j'avais analysé le firmware du dash button j'avais trouvé donc où était cette fonction uart write donc écrit sur l'uart en bytes de la partie de l'adresse voilà ça prend l'adresse de base de l'uart le point source et le nombre de octets qui doivent être écrits dans l'huart donc envoyer sur le pensier ensuite il faut répondre au watchdog parce que sinon il va éteindre la machine donc j'ai utilisé la destination j'ai mis comme destination le registre du watchdog et j'ai mis tout ça dans le registre 4 et 5 donc la charge utilisé assez compact je fais ça par par tranches de 4 kilos et après 4 kilos je rallume enfin je retrigeur le watchdog on vérifie les longueurs pour voir si on est arrivé à la fin de la flash et une fois qu'on arrive à la fin de la flash on le laisse s'éteindre on boucle le s'enfin c'est une instruction qu'on peut pas avoir sur les slides je laisse juste le watchdog se trigger et éteindre mettre en veille prolongé donc j'ai fait une vidéo de démo donc là j'ai mon bouton dash qui est ouvert avec le câble série connecté on peut pas vraiment très bien voir mais ça c'est c'est un écouteur un écouteur de casque et j'ai fait un petit script en piton donc je peux donner des instructions assembleur et ça me génère de l'audio qui me contient cette charge utile un exploit qui marche donc là vous avez la sortie série du bouton dash je l'ai empacté dans un filtre pour enlever les trucs style clés secrètes donc j'entre dans le mode de config j'invoque mon script qui génère le fichier audio et le joue dans le casque donc voilà on essaye ça c'est une sortie normale du bouton dash on est en mode de config là ça lance mon script et bam c'est en train de dumper toute la flash donc ça prend un petit moment parce que c'est un demi méga et donc voilà l'audio c'est ça ne dure pas très longtemps il n'y a pas besoin de grand chose elle est répétée plusieurs fois donc un de ses paquets au moins sera reçu correctement le parler en interne broadcast bien donc il y a quelqu'un qui a fait une vidéo youtube qui peut fonctionner qui peut être utilisé pour ça donc jusque là ça marchait la question c'est bon comment faire amazon va probablement sortir une mise à jour du film réun jour qui patchera et il ne peuvent pas mettre à jour les boutons actuels sauf si ils peuvent joindre le serveur d'amazon si vous voulez exploiter votre bouton ouais et que vous voulez les reprogrammer vous devriez le désinscrire du logiciel comme ça si vous appuyez sur le bouton il ne peut pas obtenir de mise à jour accidentellement du firmware bon maintenant comme on fait pour enlever le mode de la bite de sécurité sans effacer parce que je peux pas utiliser l'exploit pour faire ça c'est pas faisable ça pourrait peut-être être possible de faire un effacement complet en logiciel j'ai pas essayé mais à part ça il faudrait un un un l'odeur multi multi-étage pour réécrire la flash avec un custom un firmware bizarre donc vous pouvez trouver des outils des utilitaires un système des annotations du désassemblage du firmware sur github il y a aussi un lien sur la page farplane si jamais et je sais pas si je vais continuer à travailler là dessus donc si vous voulez continuer contactez moi et je vous aiderai avec plaisir vous pouvez me contacter voilà sur freinode sur le deck et voilà ceci contre le manteau que pour le moment donc on va passer aux questions donc mes procédures que d'habitude si vous avez des questions merci d'aller au microphone on en a 8 ici donc ça devrait pas être très loin première question bon merci d'abord très bon travail c'est assez impressionnant d'obtenir de l'exploitation de code dessus la seule question que j'ai c'est comment vous avez fait pour souder ces 6 petits fils genre sur la flash spi bon j'ai fait ça les uns là après l'autre en général je mets mon on doit par dessus ceux que j'ai déjà souder et j'essaie de juste toucher avec la pointe un instant celui qui suit sans retoucher les précédents et les faire lâcher et les autres je les laisse appuyer avec un truc c'est la la et toute la magie des câbles de quel diamètre du câble magnétique du 0.1 millimètre ok on a une autre question d'internet oui merci alors d'abord merci pour la présentation qu'est ce que qu'est ce que vous avez utilisé comme des assembleurs à la microphone numéro 4 super cool juste une question ça combien de temps l'ingénier inverse au total pour obtenir à ses résultats des jours des semaines des mois ça c'est une bonne question j'ai pas j'ai pas vraiment fait attention autant que j'ai passé à ça parce que avec des gens certaines personnes ont acheté un ticket de cinéma et ont eu 90 et 10 minutes où ils sont amusés moi j'ai acheté un bouton pour 5 dollars et je me suis amusé pendant plusieurs semaines en fait c'était pas si difficile parce qu'il y avait pas mal de choses de résurgence dans le code et on pouvait voir facilement les noms des fonctions et simplement faire le tri assez facilement là au question donc au début il y avait un timestamp si j'ai bien vu info sur quatre quatre octaires ils ont pas entendu parler du bug de l'an 2038 ouais alors j'ai aucune idée ce qui va se passer à ce moment là peut-être qu'il y aurait il y aura une mise à jour du firmware à ce moment là alors il y a aussi les certifications qui sont qui sont enregistrées dans les dans le dans le contrôleur wifi il faut qu'il les mettent à jour de temps en temps donc ça peut être mis à jour aussi je pense j'ai trouvé ça assez bizarre de la part microphone numéro 4 bon travail j'ai essayé de récupérer le firmware avec une attaque de type power line mais j'ai pas réussi mais est ce que vous avez une idée à quoi sert la connexion uart vers le bluetooth j'ai pensé que peut-être qu'il utilisait dans la version us de l'appli mais j'ai pas d'appareil us donc je peux pas confirmer ou infirmer mais c'est sûr qu'il parle au bluetooth un petit peu et qui vérifie bien qu'il est là donc une fois que j'ai déconnecté le firmware s'initialiser plus mais j'ai pas regardé ça de plus près donc la version android de l'appli n'utilise pas du tout le bta le ok on a une autre question d'internet est ce que vous pensez que c'est possible d'installer un système d'exploitation comme linux sur le bouton non la différence entre un micro contrôleur et un cpu généraliste c'est la gestion mémoire la mému le mému n'en n'a pas enfin le micro contrôleur n'a pas de mému en gros on pourrait essayer micro linux ou us linux mais je pense pas que 160 kilo octet de ram soit suffisant pour pour un linux donc il ya beaucoup de tout petit système d'exploitation temps réel qui sont open source qu'on pourrait utiliser mais pas linux ok merci beaucoup merci beaucoup sous votre applaudissement