Bonjour, Habr!
La dernière fois, nous avons parlé du badge du badge de la conférence internationale sur la cybersécurité OFFZONE 2019 et de ce qu'il contient. Aujourd'hui, nous allons partager des histoires en coulisses: comment ils sont venus à sa création et ce qu'il nous en a coûté pour inventer et produire une série de 2000 appareils. Chronologie des événements, pièges du développement, des achats, de l'installation et autres joies du monde de l'électronique sous la coupe. C'est parti!
Chaque conférence pratique sur la cybersécurité comporte des badges interactifs. Dans notre cas, le badge devrait au moins servir de portefeuille pour la devise interne de l'événement - OFFCOIN.
L'année dernière, une carte Java a fait face à cette tâche, à laquelle nous avons foiré quelques tâches, un jeu de chars et un sokoban. La même carte semblait être le développement logique du badge 2019, seulement maintenant avec NFC: ici, il y a continuité, évolution et une mer d'idées de tâches. Et pour elle, il y a toutes les réalisations - c'est important si vous recherchez des vulnérabilités dans le premier quart de travail, et dans le second, vous organiserez une conférence.
Nous nous préparions lentement à la production lorsque la nouvelle est venue du laboratoire d'analyse matérielle: des collègues présenteront à OFFZONE leur
aperçu des attaques sur les systèmes embarqués . Les discussions de travail ont rempli les photos des tableaux préparés, les types de canaux latéraux ont été discutés dans les couloirs, le thème du matériel n'a même pas capturé nos économistes. Et nous avons réalisé que pour OFFZONE 2019, nous devons déposer notre propre appareil.
Donc, nous avions 80 jours avant la conférence, l'objectif était de 2000 appareils et 2 développeurs électroniques. Voici à quoi ressemblait cette épopée à travers les yeux d'un des développeurs.
80 jours
La première chose que nous avons commencée a été le brainstorming avec des collègues et la génération de concepts de badges. Parmi les idées, il y avait une seule carte avec un interprète de certains éléments de base à bord, une carte de visite avec un écran E-ink, quelque chose du monde des appareils IoT basés sur ESP32 ou un module similaire, et une carte mère de base préparée à l'avance pour un équipement supplémentaire avec des modules supplémentaires.
79 à 65 jours
Nous marchons, buvons du café, digérons les pensées. Pesez le pour et le contre. Nous lisons des tweeters et voyons
ce que font les autres .
64-60 jours
Nous avons eu une autre session de brainstorming.
L'idée du payeur unique a été rejetée. Il s'est avéré trop cher en raison de l'abondance des composants et de l'installation: il y aurait plus de 30 boutons seuls.Et pour ne surprendre personne avec un tel appareil -
le Supercon Badge et les objets similaires sont immédiatement rappelés.
Une carte de visite avec un affichage E-ink a également été rejetée: ils n'ont pas pu trouver d'application intéressante et ont décidé comment attacher des tâches potentielles à un badge. Et l'ESP32 avait l'air quelque peu frivole - nous aurions pensé que nous étions de nouveaux arduinistes! (Bien que je revienne au thème Arduino.). Il y avait l'idée d'une carte mère avec la capacité de la sous-équiper avec des modules pour résoudre les tâches.
Quelques jours ont poli l'idée. En conséquence, nous avons choisi la forme d'une disquette de 3,5 pouces, décidé des principales fonctionnalités et kits de carrosserie. En tant que dernier, nous avons pris le commutateur DIP avec 8 commutateurs, un écran OLED, un récepteur IR, un émetteur-récepteur RFID 13,56 MHz et un récepteur et émetteur 433 MHz séparés. Le microcontrôleur STM32F1, comme sur la célèbre carte
Blue Pill , a été affecté à la gestion de ce zoo hétéroclite.
Dans le même temps, l'idée est venue de créer une plateforme Craft.Zone sur OFFZONE, où chacun peut venir sentir les colophanes et équiper personnellement ses badges de composants électroniques. La zone de soudure - c'est un autre mouvement de chevalier! Premièrement, cela est intéressant et inhabituel pour une conférence de l'industrie, deuxièmement, cela passionnera même les débutants, et troisièmement, nous accélérerons ainsi l'installation du dernier lot d'appareils. Toutes les parties gagnent!
En conséquence, au cours des premières semaines, nous avons approuvé le concept, les fonctionnalités de base et la base des composants du futur appareil. Ensuite, le plaisir commence.
59-50 jours
Nous avons réussi à faire un circuit, à diluer, à produire et à monter manuellement la première version de la plaque à badges. À ce stade, le choix d'une source d'alimentation s'est avéré être le plus douloureux.
De toute évidence, le badge doit être un appareil autonome. Pour garantir cette autonomie, une batterie lithium-polymère de 0,5 A * h et le système de contrôle de charge correspondant sur un simple contrôleur comme TP4096 ont été demandés. Mais avez-vous essayé d'acheter quelques milliers de batteries à Moscou sans commande préalable, et même auprès d'un fabricant de confiance? Nous avons essayé - nous n'avons pas réussi. Nous n'avons pas osé passer commande auprès de la Chine: la batterie est trop responsable et risque d'incendie, et nos invités ont dû la porter autour du cou. C'est alors que nous sommes revenus aux bonnes vieilles batteries. La consommation estimée, a mené une série d'expériences simples et a opté pour une configuration de quatre piles AAA. Ils ont donné 16 à 20 heures de fonctionnement de l'appareil, selon l'activité d'utilisation.
Ils se creusent la tête pour écrire le firmware. Dans d'autres circonstances, nous écririons des logiciels en utilisant Eclipse (arm-none-eabi-gcc), Keil, IAR et d'autres IDE humains et peu développés. Cependant, notre équipe de bénévoles en développement était composée pour l'essentiel de juricomptables et de pentesters. Il était déraisonnable d'espérer que pendant leur temps libre, ils maîtriseraient rapidement l'écriture de firmware pour les systèmes embarqués.
J'ai promis que sans les arduins ne feraient pas? Je n'ai pas menti! Pour simplifier le processus de développement logiciel, nous avons utilisé l'IDE Arduino. Heureusement, il existe un bon projet
STM32Duino , qui implémente le chargeur de démarrage Arduino pour notre pierre cible STM32F1, et l'IDE Arduino le prend en charge. Dans ce dernier, il y a une grande partie des bibliothèques dont nous avons besoin pour travailler avec des modules et d'autres joies concernant la programmation de haut niveau. Bien sûr, tout n'est pas si fluide avec les bibliothèques, mais vous pouvez vivre. Pour adapter la plupart d'entre eux à STM32, il suffit de réécrire les fonctions dépendantes de la plateforme - et c'est tout. Mais éditer un code de bibliothèque, c'est presque comme insérer des guillemets!
Un fait intéressant. Pour implémenter la fonctionnalité de badge, nous avons utilisé les bibliothèques suivantes:
- Adafruit_SSD1306 pour écran OLED,
- MFRC522 pour RFID,
- RCSwitch pour radio 433 MHz,
- irmp-master pour émetteur infrarouge.
Et maintenant, la première version de la carte est prête. Il est sorti vert, sans les trous fraisés nécessaires et n'a pratiquement pas fonctionné.
Un fait intéressant. Les prototypes de la carte ont été commandés chez Resonite dans le cadre du programme spécial «Nous en avons vraiment besoin hier», les composants ont été achetés dans des magasins de détail à Moscou et l'installation a été effectuée par nos propres moyens.
La plupart des problèmes de la première version auraient pu être évités si nous avions préalablement assemblé la partie principale du circuit sur une planche à pain. Nous remarquerions certainement que le récepteur et l'émetteur nécessitent des valeurs différentes de la tension d'entrée: 5 V pour le récepteur et 3-12 V pour l'émetteur (dans la version d'essai, les deux modules étaient alimentés à partir de 3 V). Ne passerait pas et dormir USB. Une lecture attentive des schémas des circuits des cartes Blue Pill a permis de comprendre que l'USB ne fonctionnerait pas tant que la ligne USB_P n'aurait pas été tirée par une résistance de 1,5 à 10 kΩ vers une alimentation 5 V.
Un fait intéressant. En essayant de réanimer l'USB et en poussant un oscilloscope dans une carte, j'ai été surpris de trouver: bien que la tension soit de 5 V, les lignes de données D + et D- elles-mêmes sont tirées jusqu'à 3,3 V. C'est le tour!
En raison des délais serrés, nous avons dû faire des compromis et travailler sur le principe «faire sept fois», mais «faire-tester-corriger». Mais il ne convient qu'aux amateurs de stress - nous ne recommandons pas de répéter à la maison.
Astuce. Ne négligez pas la mise en page et lisez attentivement les fiches techniques!
49 à 40 jours
Nous avons résolu des problèmes et produit un lot de badges v2.0. Il est toujours vert, mais il fonctionne presque. Voilà ce que signifie une main!

Si vous regardez le badge photo, vous verrez deux courbes de code-barres sur la face avant (oui, nous connaissons l'existence de codes QR, mais nous avons décidé que nous voulons un code-barres à tube chaud). Il s'agissait d'une tentative infructueuse de mettre un lien vers le site sur le badge avec des informations sur la conférence et le mode d'emploi. Le code-barres n'est pas entré dans la version finale: nous n'avons pas pu décider comment le positionner pour qu'il apparaisse de manière concise sur la carte. Dans une version plus petite, il n'était pas lu par l'application sur le mobile, mais dans la taille actuelle, il semblait trop monstrueux.
Un fait intéressant. Le bon code à barres sur la photo fonctionne et contient un œuf de Pâques. Les personnes intéressées peuvent essayer de le compter.
Dans la deuxième version du badge, nous avons corrigé l'USB, ajusté la connexion des modules, créé correctement les zones de fraisage. Les composants supplémentaires et la plupart des cavaliers de débogage ont également été supprimés, mais pas tous.
Un fait intéressant. J'ai dû laisser des cavaliers de 0 Ohm pour l'affichage, car les écrans OLED I2C avec une diagonale de 0,96 pouces ont deux brochages qui diffèrent par l'emplacement des contacts d'alimentation et de masse. Nous ne pouvions pas dire à l'avance quelle version de cet écran nous parviendrait et nous devions prévoir les deux options.
Faites attention à l'emplacement des contacts d'alimentation et de masse.Au même stade, nous avons commencé à acheter la majeure partie des composants. L'insigne ne nécessitait que les STM32F1, WS2812B et autres biens de consommation populaires - nous ne nous attendions pas à leur pénurie et nous n'étions donc pas pressés. Mais il s'est avéré que tout décide de l'échelle. L'achat de 10 contrôleurs en stock à Moscou est facile, 100 n'est pas non plus une question. Mais avec 1000 ou plus de difficultés commencent. Nous n'avons pas pu trouver un seul vendeur dans la capitale qui livrerait 2000 MK STM32F1 pour un temps raisonnable et de l'argent adéquat. J'ai dû commander à Ekaterinbourg!
Les mêmes difficultés sont apparues avec l'achat de 8 000 LED WS2812B. Ce dernier nous a volé d'un entrepôt européen et s'est attardé aux douanes, ce qui était une bonne chose pour nos nerfs.
La seule chose qui a obtenu un peu de sang était des composants SMD passifs comme des résistances et des condensateurs de taille 0603. Ils étaient en vrac dans les entrepôts de Moscou.
Un fait intéressant. Des modules supplémentaires ont été commandés pour 200 pièces de chaque type. Ils venaient de Chine - il n'y avait pas de quantité plus proche.
Pour l'avenir, je dirai que tous les composants ont été obtenus en 3-4 semaines. Mais c'est de la chance, nous ne prendrons plus de risques.
Astuce. Si vous devez acheter des composants pour 100, 500 appareils ou plus, ne remettez pas la tâche à plus tard. Avec une telle série, prenez un mois ou plus pour acheter, surtout si nous parlons de microcircuits.
39-30 jours
Party v3.0. Le badge est déjà noir et entièrement fonctionnel! Il n'y a qu'une nuance ma-a-a-écarlate. D'une manière ou d'une autre, une erreur s'est produite dans l'emplacement des contacts d'alimentation et de données sur l'émetteur 433 MHz de la première version du badge.
À cause de cette erreur, notre collègue, qui a écrit la tâche à la radio, est presque devenu gris. Sur sa maquette arduino, la transmission a fonctionné en toute confiance sur 30 mètres, mais sur l'insigne - enfin, à un demi-mètre de la planche. Quelques jours, jusqu'à ce qu'ils trouvent un bug dans le câblage, un collègue a été tourmenté et n'a pas compris ce qui se passait. Fedor, pardonne-nous! Bien que ce soit un mystère, pourquoi l'appareil avec des broches mixtes a-t-il fonctionné?!
Nous avons donc trouvé un bug, corrigé deux pistes sur la carte, pour plus de commodité, nous avons changé le connecteur miniUSB en microUSB, nous nous sommes croisés, avons commandé la version finale 3.1 pour 2000 pièces.
29-15 jours
Nous allons, nous inquiétons de la fourniture de composants de partout dans le monde. En cours de route, les gars terminent leurs tâches.
Un fait intéressant. Pendant le développement du jeu Flappy Quote, l'un des collègues a réussi à nourrir le bot pour qu'il passe environ une demi-heure.
14 jours
Les cartes sont venues, les composants sont venus, nous donnons en installation! Nous avons travaillé avec le «M-board», qui a monté les 2000 appareils en une semaine.
Astuce. Si vous avez 100 appareils ou plus, oubliez l'installation manuelle et préparez-vous pour la chaîne de montage automatique. Gardez cela à l'esprit lors de la conception d'un PCB. (Consultez le fabricant de votre choix - ils peuvent vous en dire beaucoup. Il y a des recommandations générales sur le site Web de Resonita .)
Astuce. Le fabricant de PCB peut souvent se charger de préparer la carte pour une installation automatique. Dans notre cas, l'usine a regroupé plusieurs panneaux en un seul blanc, créé les champs techniques nécessaires et appliqué des points de référence sur les panneaux, et a également laissé toute la documentation technique nécessaire pour préparer la chaîne de montage dans la troisième organisation.

10 jours
Nous testons 12 planches de l'installation, vérifions, expirons: tout fonctionne comme il se doit.

9 à 5 jours
Nous terminons activement les tâches, tout au long de notre préparation au dépassement final du bon sens. Après tout, tous les 2000 appareils que nous devrons flasher manuellement. Pour simplifier la mission de combat, ils ont écrit un script python en utilisant la version console de l'utilitaire STM32 ST-LINK et ont préparé deux douzaines de ST-Link v2 bon marché.

Astuce. Les planches pourraient être flashées au stade final de l'assemblage à l'usine et sans les efforts héroïques du personnel de BI.ZONE. Nous n'avons pas utilisé cette opportunité simplement parce que la version finale du logiciel n'était pas prête à la fin de l'assemblage.
96 heures avant la conférence
Nous prenons les planches de l'installation, éteignons les téléphones portables, nous enfermons dans le bureau et remplissons les 2000 appareils le soir.
Un fait intéressant. Sur les 2 000 appareils, 2 seulement montraient des signes de vie. Le pourcentage de rejets à la sortie de l'installation est de 0,1.

Il y a de la joie sur nos visages, mais les pensées sont loin. Quel sera le badge l'année prochaine? Allons-nous prouver l'idée avec E-ink ou proposer quelque chose de complètement nouveau? Revenons au concept des cartes en plastique ou allons-nous nous inspirer des Jeux olympiques de Tokyo et faire laver les badges en papier origami? Si vous avez de nouvelles idées, veuillez commenter: il est possible qu'un article du projet proposé un an plus tard soit pendu par des experts en cybersécurité du monde entier!
Au lieu d'une conclusion
OFFZONE 2019 a eu lieu il y a un mois, mais on nous pose toujours les questions «puis-je obtenir un badge d'une manière ou d'une autre». Oui tu peux! 100 badges seront
remis à ceux qui seront les premiers à écrire à
info@offzone.moscow . Nous expédions en Russie et dans la CEI. L'événement durera deux semaines à compter de la date de publication de l'article et se terminera exactement le 2 août à 13h37, heure de Moscou.