Matériel du projet : comment nous avons construit une salle avec une quête de hacker

Matériel du projet : comment nous avons construit une salle avec une quête de hacker
Il y a quelques semaines, nous avons passé quête en ligne pour les pirates: ils ont construit une pièce qu'ils ont remplie d'appareils intelligents et ont lancé une diffusion sur YouTube à partir de celle-ci. Les joueurs pouvaient contrôler les appareils IoT depuis le site Web du jeu ; Le but était de retrouver une arme cachée dans la pièce (un puissant pointeur laser), de la pirater et de provoquer un court-circuit dans la pièce.

Pour ajouter à l'action, nous avons placé une déchiqueteuse dans la pièce, dans laquelle nous avons chargé 200 000 roubles : la déchiqueteuse mangeait une facture par heure. Après avoir gagné le jeu, vous pouvez arrêter le broyeur et prendre tout l'argent restant.

Nous l'avons déjà dit procédure pas à paset comment le backend a été créé projet. Il est temps de parler du matériel et de la façon dont il a été assemblé.


Il y a eu beaucoup de demandes pour montrer le moment du nettoyage d'une pièce - nous montrons comment nous la démontons

Architecture matérielle : contrôle de salle

Nous avons commencé à concevoir une solution matérielle alors que le scénario était déjà à peu près compris, que le backend était prêt et que nous avions une salle vide prête à installer l'équipement.

En nous souvenant de la vieille blague « Le S dans l'IoT signifie Sécurité » (« La lettre S dans l'abréviation IoT signifie Sécurité »), nous avons décidé que cette fois, les joueurs du scénario de jeu n'interagissent qu'avec le front-end et le back-end. du site, mais n'avez pas la possibilité d'accéder directement au fer.

Cela a été fait pour des raisons de sécurité et de spectacle de ce qui se passe à l'écran : avec un accès direct au matériel par les joueurs, il serait beaucoup plus difficile d'isoler des actions sûres et potentiellement dangereuses, par exemple le défilement rapide d'un broyeur ou le contrôle d'un ordinateur. pyrotechnie.

Avant de commencer la conception, nous avons formulé plusieurs principes de contrôle des appareils de jeu, qui sont devenus la base de la conception :

N'utilisez pas de solutions sans fil

L’ensemble de l’espace de jeu est dans un seul cadre dont chaque coin est accessible. Les connexions sans fil n’étaient pas vraiment nécessaires et elles deviendraient simplement un autre point de défaillance.

N'utilisez aucun appareil spécial pour la maison intelligente

Principalement pour des raisons de flexibilité de personnalisation. Il est clair que nous pouvons personnaliser de nombreuses versions en boîte de systèmes de maison intelligente avec une administration et des commandes prêtes à l'emploi pour notre tâche, mais les coûts de main-d'œuvre seraient comparables à la création de votre propre solution simple.

De plus, il fallait imaginer des dispositifs qui montreraient clairement que ce sont les joueurs qui changeaient son état : ils l'allumaient/l'éteignaient ou mettaient une lumière spécifique sur les lettres FALCON.

Nous avons collecté tous les éléments du matériel accessible au public et pouvant être acheté dans les magasins de pièces détachées radio classiques : entre la livraison de pizzas et de cola light, les coursiers Chip and Dip et Leroy venaient constamment sur le site.

Le choix de tout assembler nous-mêmes a simplifié le débogage, l'évolutivité a cependant nécessité une plus grande attention lors de l'installation.

Tous les relais et arudin ne doivent pas être visibles dans le cadre

Nous avons décidé de rassembler tous les éléments contrôlables au même endroit et de les cacher dans les coulisses afin de pouvoir surveiller leurs performances et, si nécessaire, de ramper soigneusement hors de vue de la caméra et de remplacer l'unité défaillante.

Matériel du projet : comment nous avons construit une salle avec une quête de hacker
Finalement, tout a été caché sous la table, et la caméra a été installée de manière à ce que rien ne soit visible sous la table. C'était notre "angle mort" pour que l'ingénieur puisse se faufiler

En conséquence, nous avons en fait obtenu un appareil intelligent : il a reçu l'état de chacune de ses parties du backend et l'a modifié avec la commande appropriée.

D'un point de vue implémentation matérielle, cet appareil contrôlait 6 éléments :

  1. Plusieurs lampes de table, elles ont un état marche/arrêt et sont contrôlées par les joueurs
  2. Lettres au mur, elles peuvent changer de couleur sur commande des joueurs
  3. Des ventilateurs qui font tourner et ouvrent le paperboard lorsque le serveur est sous charge
  4. Contrôle laser via PWM
  5. Shredder qui a mangé de l'argent à temps
  6. Une machine à fumée qui explosait avant chaque tir laser


Tester une machine à fumée avec un laser

Plus tard, une lampe de scène a été ajoutée, placée derrière le cadre et contrôlée exactement comme les lampes du point 1. La lampe de scène fonctionnait dans deux cas : elle éclairait le laser lorsque l'alimentation lui était appliquée, et elle éclairait le poids avant que le laser ne soit allumé. le laser a été lancé en mode combat.

Quel était cet appareil intelligent ?

Matériel du projet : comment nous avons construit une salle avec une quête de hacker

Tout au long du processus, Yura, notre responsable du matériel, a essayé de ne pas compliquer les choses et de trouver la solution la plus simple et minimaliste possible.

Il était supposé que le VPS exécuterait simplement un script qui recevrait le json avec l'état des appareils et l'enverrait à l'Arduino connecté via USB.

Connecté aux ports :

  • 16 relais réguliers (ce sont eux qui faisaient le bruit de cliquetis entendu dans la vidéo. Nous les avons principalement choisis à cause de ce son)
  • 4 relais statiques pour contrôler les canaux PWM, tels que les ventilateurs,
  • sortie PWM séparée pour laser
  • sortie qui génère un signal vers la bande LED

Voici un exemple de commande json arrivée au relais depuis le serveur

{"power":false,"speed":0,"period":null,"deviceIdentifier":"FAN"}

Et ceci est un exemple de fonction avec laquelle la commande est arrivée à Arudino

def callback(ch, method, properties, body):    
request = json.loads(body.decode("utf-8"))    
print(request, end="n")     
send_to_serial(body)

Pour suivre le moment où le laser brûle enfin la corde et où le poids vole sur l'aquarium, nous avons créé un petit bouton qui se déclenchait lorsque le poids tombait et donnait un signal au système.

Matériel du projet : comment nous avons construit une salle avec une quête de hacker
Bouton pour surveiller le mouvement du poids

A ce signal, des fumigènes fabriqués à partir de balles de ping-pong étaient censés s'allumer. Nous avons placé 4 fusées fumigènes directement dans le boîtier du serveur et les avons reliées avec un fil nichrome, censé chauffer et fonctionner comme un allumeur.

Matériel du projet : comment nous avons construit une salle avec une quête de hacker
Logement avec fumigènes et guirlande chinoise

Matériel du projet : comment nous avons construit une salle avec une quête de hacker

Arduino

Selon le plan initial, deux actions ont eu lieu sur l'Arduino.

Tout d’abord, lorsqu’une nouvelle requête était reçue, elle était analysée à l’aide de la bibliothèque ArduinoJson. Ensuite, chaque appareil géré a été comparé à ses deux propriétés :

  • état d'alimentation "on" ou "off" (état standard)
  • la période pendant laquelle l'appareil est allumé - le temps en microsecondes à partir du démarrage de la carte, quand il est temps de l'éteindre, c'est-à-dire de ramener l'état aux normes

La dernière fois, il a été défini lors de la réception du paramètre correspondant dans JSON, mais il n'a pas pu être transmis, la valeur a alors été définie sur 0 et aucune réinitialisation n'a eu lieu.

La deuxième action que l'Arduino effectuait à chaque cycle consistait à mettre à jour les états, c'est-à-dire à vérifier s'il était nécessaire d'allumer quelque chose ou s'il était temps d'éteindre un appareil.

Pointeur laser - le même Megatron 3000

Matériel du projet : comment nous avons construit une salle avec une quête de hacker

Il s'agit d'un module de découpe et de marquage laser à mise au point manuelle LSMVR450-3000MF 3000 mW 450 nm standard.

Lettres Faucon

Ils ont été fabriqués très simplement : nous avons simplement copié les lettres du logo, les avons découpées dans du carton, puis les avons recouvertes de ruban LED. Dans ce cas, j'ai dû souder les morceaux de scotch ensemble, 4 contacts sur chaque couture, mais le résultat en valait la peine. Notre backender Pacha a fait des miracles d'habileté, le faisant en moins de quelques heures.

Premiers tests du dispositif IoT et finition

Nous avons fait les premiers tests et en même temps de nouvelles tâches nous sont arrivées. Le fait est qu'au milieu du processus, un véritable producteur de films et caméraman de VGIK, Ilya Serov, a rejoint l'équipe - il a construit le cadre, ajouté un éclairage de cinéma supplémentaire et légèrement modifié le scénario du jeu pour rendre l'intrigue plus émotionnelle, et l'image plus dramatique et théâtrale.

Cela a considérablement augmenté la qualité, mais des éléments sont apparus qui devaient également être connectés au relais et prescrire un algorithme de fonctionnement.

Un autre problème était le laser : nous avons fait plusieurs expériences avec différents types de cordes et des lasers de différentes puissances. Pour le test, nous avons simplement accroché un poids verticalement à une corde.

Lors de l'exécution avec un jeton de test, la puissance régulée via le PWM était inférieure à 10 % et n'a pas endommagé la corde même avec une longue exposition.

Pour le mode combat, le laser a été défocalisé sur environ un point d'un diamètre de 10 mm et a brûlé en toute confiance une corde avec une charge à une distance d'environ un mètre.

Matériel du projet : comment nous avons construit une salle avec une quête de hacker
Le laser a donc parfaitement fonctionné lors des tests

Lorsque nous avons commencé à tout tester directement dans la pièce sur un poids suspendu, il s'est avéré que sécuriser le laser en toute sécurité n'était pas si simple. Puis, lorsque la corde brûle, elle fond, s’étire et sort de son foyer d’origine.

Matériel du projet : comment nous avons construit une salle avec une quête de hacker
Mais ça ne marchait plus comme ça : la corde s'est déplacée

Ilya a déplacé le laser jusqu'au bout de la pièce en face de la corde afin que le faisceau laser traverse toute la scène et soit magnifique dans le cadre, ce qui double la distance.

Après avoir mené plusieurs autres expériences consistant à brûler la corde déjà au combat, nous avons décidé de ne pas torturer le destin et de sécuriser la coupe de la corde à l'aide de fil nichrome. Il a détruit le fil 120 secondes après avoir allumé le laser en mode combat. Nous avons décidé de coder en dur cela, ainsi que la déconnexion du fil et l'allumage des fumigènes lorsque le contact de séparation est déclenché, directement dans le matériel du microcontrôleur.

Matériel du projet : comment nous avons construit une salle avec une quête de hacker
Le fil qui a fini par brûler la corde hors écran

Ainsi, une troisième tâche est apparue que l'Arduino a résolue : élaborer les séquences associées à l'exécution de ces commandes.

Nous avons également décidé de donner à l'Arduino la nécessité de compter l'argent sur le téléviseur et de faire fonctionner le broyeur. Initialement, il était supposé que le backend ferait cela et que le solde actuel serait visible sur le site Web, et sur le téléviseur, nous montrerions les commentaires de YouTube comme élément interactif supplémentaire, indiquant aux téléspectateurs que les événements dans la salle se déroulaient en réalité. temps.

Mais pendant le test, Ilya a regardé la scène et a suggéré d'afficher le solde du jeu sur le plus grand écran : combien d'argent il reste, combien a été mangé et le compte à rebours jusqu'au prochain démarrage du broyeur.

Nous avons lié Arduino à l'heure actuelle : toutes les heures complètes, le broyeur démarrait. L'image a été affichée sur le téléviseur à l'aide de Raspberry, qui, à ce moment-là, recevait déjà des requêtes du serveur et les envoyait à l'arduino pour exécution. Des images avec des indicateurs monétaires ont été dessinées en appelant l'utilitaire de console fim comme ceci

image = subprocess.Popen(["fim", "-q", "-r", "1920×1080", fim_str]), где fim_str

Et il a été formé en fonction de la quantité ou du temps requis.

Nous avons généré les images à l'avance : nous avons simplement pris une vidéo toute faite avec un minuteur et exporté 200 images.

C'est la mécanique qui a été programmée dans la croix. Au moment où le compte à rebours final a commencé, nous sommes tous allés sur le site, nous sommes armés d'extincteurs et nous nous sommes assis pour attendre l'incendie (qui ne battait son plein que dans la discorde)

Comment faire une diffusion qui fonctionne pendant une semaine : choisir une caméra

Pour la quête, nous avions besoin d'une diffusion continue sur YouTube pendant 7 jours - c'est exactement ce que nous avons fixé comme durée maximale du jeu. Il y avait deux choses qui pourraient nous arrêter :

  1. Surchauffe de la caméra due à un fonctionnement continu
  2. Panne Internet

La caméra devait fournir au moins une image Full HD pour que jouer et regarder la pièce soit confortable.

Au départ, nous nous sommes tournés vers les webcams produites pour les streamers. Nous réduisions notre budget, nous ne voulions donc pas acheter d’appareil photo, mais il s’est avéré qu’ils ne les louent pas. Au même moment, nous avons miraculeusement trouvé une caméra Xbox Kinect posée chez moi, l'avons installée dans ma chambre et avons lancé une diffusion test pendant une semaine.

L'appareil photo a bien fonctionné et n'a pas surchauffé, mais Ilya a presque immédiatement remarqué qu'il manquait de réglages, en particulier il était impossible de régler l'exposition.

Ilya a cherché à rapprocher le type de diffusion des normes de la production cinématographique et vidéo : transmettre une scène lumineuse changeant de manière dynamique avec des sources de lumière vives, un arrière-plan sombre et des objets dans le cadre. En même temps, je souhaitais préserver l'élaboration de l'image tant dans les hautes lumières que dans les ombres, avec un minimum de bruit numérique.

Ainsi, même si le Kinect s'est révélé fiable lors des tests et ne nécessitait pas de carte de capture vidéo (un autre point d'échec), nous avons décidé de l'abandonner. Après trois jours de test de différentes caméras, Ilya a choisi le Sony FDR-AX53 - un petit caméscope fiable, peu coûteux à louer, mais qui présente en même temps une fiabilité et des caractéristiques visuelles suffisantes.

Nous avons loué une caméra, l'avons allumée pendant une semaine avec une carte de capture vidéo et avons réalisé qu'avec elle, nous pouvions compter sur une diffusion continue tout au long de la quête.

Réaliser un film : mise en scène et éclairage

Travailler sur la lumière demandait une certaine grâce, il fallait construire une partition lumière avec un minimum de moyens :

1. Éclairage des objets lorsque les joueurs les trouvent (laser, poids), ainsi qu'une lumière constante sur le broyeur. Ici, nous avons utilisé dedolight 150 - des appareils d'éclairage à film fiables et compacts dotés de lampes halogènes basse tension, qui vous permettent de concentrer le faisceau sur un objet spécifique sans affecter l'arrière-plan et les autres objets.

2. Lampe de jeu pratique : lampe de table, lampadaire, étoile, guirlande. Toute la lumière pratique était harmonieusement répartie dans le cadre pour éclairer la zone de l'image, il y avait des lampes LED avec une température de couleur de 3200K à l'intérieur, la lampe du lampadaire était recouverte d'un filtre en feuille Rosco rouge pour créer un accent de couleur inhabituel.

Matériel du projet : comment nous avons construit une salle avec une quête de hacker
Je suis ingénieur chez ma mère ou le lancement c'est demain

Comment nous avons réservé Internet et l'électricité

Ils ont abordé la question de la tolérance aux pannes presque comme dans un centre de données : ils ont décidé de ne pas s'écarter des principes de base et ont réservé selon le schéma habituel N+1.

Si la diffusion sur YouTube s'arrête, cela signifie qu'il sera impossible de se reconnecter en utilisant le même lien et de continuer le streaming. C'était un moment critique et la pièce était située dans un bureau ordinaire.

Pour cela, nous avons utilisé un routeur basé sur OpenWRT et le package mwan3. Il testait automatiquement la disponibilité de la chaîne toutes les 5 secondes et, en cas de panne, passait au modem de secours avec Yota. En conséquence, le passage au canal de secours s’est produit en moins d’une minute.
Matériel du projet : comment nous avons construit une salle avec une quête de hacker
Il était également tout aussi important d’éliminer les pannes de courant, car même une surtension de courte durée entraînerait un redémarrage de tous les ordinateurs.

Par conséquent, nous avons pris une alimentation sans interruption ippon innova g2 3000, qui sauvegarderait tous les appareils de jeu : la consommation électrique totale de notre système était d'environ 300 watts. Cela durerait 75 minutes, ce qui est largement suffisant pour nos besoins.

Nous avons décidé de sacrifier un éclairage supplémentaire en cas de panne d'électricité dans la pièce - elle n'était pas connectée à une alimentation électrique sans interruption.

Remerciements

  • A toute l'équipe RUVDS, qui a inventé et mis en œuvre le jeu.
  • Par ailleurs, pour les administrateurs RUVDS, pour surveiller le travail des serveurs, la charge était acceptable et tout fonctionnait comme d'habitude.
  • Au meilleur patron ntsaplin pour le fait qu'en réponse à l'appel : « J'ai une idée : on va prendre un serveur, on met un aquarium dessus, et on accroche un poids dessus, boum, boum, tout est inondé d'eau, court-circuit, incendie ! » il dit toujours avec confiance « fais-le ! »
  • merci Éditions Tilda et séparément à Mikhail Karpov pour non seulement nous avoir rencontrés à mi-chemin et nous avoir permis de violer les conditions d'utilisation, mais aussi pour nous avoir donné un compte professionnel pendant un an lorsque nous avons parlé du projet.
  • Ilya Serov S_ILya pour avoir rejoint et devenir coproducteur du projet, prêt à ramper la moitié de la nuit, à coller des bandes LED, à chercher des solutions techniques et à tout faire pour qu'on obtienne un vrai film.
  • zhovner pour avoir toujours été prêt à sauver la situation lorsque les autres ont levé la main, du bortsch, du soutien moral et des conversations jusqu'au matin.
  • samat pour nous avoir mis en relation avec le meilleur pentester du pays, qui nous a conseillé et aidé dans nos tâches.
  • daniemilk pour la production vidéo sympa de toutes les vidéos.
  • Delphe pour une main ferme et une volonté de travailler jusqu'au bout.
  • Bien Dodo Pizza Ingénierie pour une pizza presque toujours chaude.

Et la plus grande gratitude va aux joueurs pour toutes les émotions que nous avons vécues pendant que vous avez pris d'assaut la quête pendant deux jours sans dormir et même sans reporter le travail.

Autres articles sur la quête pour détruire le serveur

Matériel du projet : comment nous avons construit une salle avec une quête de hacker

Source: habr.com

Ajouter un commentaire