Projekthardware: Wie wir mit einer Hacker-Quest einen Raum gebaut haben

Projekthardware: Wie wir mit einer Hacker-Quest einen Raum gebaut haben
Vor ein paar Wochen haben wir verbracht Online-Suche nach Hackern: Sie bauten einen Raum, füllten ihn mit intelligenten Geräten und starteten von dort aus eine YouTube-Übertragung. Spieler könnten IoT-Geräte über die Website des Spiels steuern; Ziel war es, eine im Raum versteckte Waffe (einen leistungsstarken Laserpointer) zu finden, sie zu hacken und einen Kurzschluss im Raum zu verursachen.

Um die Aktion noch zu steigern, stellten wir einen Aktenvernichter in den Raum, in den wir 200 Rubel luden: Der Aktenvernichter aß einen Geldschein pro Stunde. Nachdem Sie das Spiel gewonnen haben, können Sie den Aktenvernichter anhalten und das gesamte verbleibende Geld an sich nehmen.

Wir haben es bereits erzählt Komplettlösung, und auch wie das Backend erstellt wurde Projekt. Es ist Zeit, über die Hardware und deren Zusammenbau zu sprechen.


Es gab viele Anfragen, den Moment der Zimmerreinigung zu zeigen – wir zeigen, wie wir es auseinandernehmen

Hardware-Architektur: Raumsteuerung

Wir begannen mit dem Entwurf einer Hardwarelösung, als das Szenario bereits grob verstanden war, das Backend fertig war und wir einen leeren Raum für die Installation der Ausrüstung hatten.

In Erinnerung an den alten Witz „Das S in IoT steht für Sicherheit“ („Der Buchstabe S in der IoT-Abkürzung steht für Sicherheit“) haben wir beschlossen, dass die Spieler im Spielszenario dieses Mal nur mit dem Front-End und Back-End interagieren des Geländes, erhalten jedoch nicht die Möglichkeit, direkt an das Eisen zu gelangen.

Dies geschah aus Gründen der Sicherheit und der Darstellung des Geschehens auf dem Bildschirm: Mit direktem Zugriff der Spieler auf die Hardware wäre es viel schwieriger, sichere und potenziell gefährliche Aktionen zu isolieren, beispielsweise das schnelle Scrollen eines Aktenvernichters oder die Steuerung Pyrotechnik.

Bevor wir mit dem Design begannen, formulierten wir mehrere Prinzipien zur Steuerung von Spielgeräten, die die Grundlage des Designs bildeten:

Verwenden Sie keine drahtlosen Lösungen

Die gesamte Spielfläche befindet sich in einem Rahmen, von dem jede Ecke erreicht werden kann. Es bestand kein wirklicher Bedarf an drahtlosen Verbindungen und sie würden einfach zu einer weiteren Fehlerquelle werden.

Benutzen Sie keine speziellen Smart-Home-Geräte

Hauptsächlich aus Gründen der Flexibilität bei der Anpassung. Es ist klar, dass wir viele Boxversionen von Smart-Home-Systemen mit vorgefertigten Verwaltungs- und Steuerelementen für unsere Aufgabe anpassen können, aber die Arbeitskosten wären vergleichbar mit der Erstellung einer eigenen einfachen Lösung.

Darüber hinaus war es notwendig, Geräte zu entwickeln, die deutlich zeigen, dass es die Spieler waren, die den Zustand änderten: Sie schalteten es ein/aus oder richteten ein bestimmtes Licht auf die Buchstaben FALCON.

Wir haben alle Elemente von öffentlich zugänglicher Hardware gesammelt, die in regulären Radioteileläden gekauft werden kann: Zwischen der Lieferung von Pizza und Diät-Cola kamen ständig die Kuriere Chip and Dip und Leroy vor Ort.

Die Entscheidung, alles selbst zusammenzubauen, vereinfachte das Debuggen, die Skalierbarkeit erforderte jedoch eine größere Sorgfalt bei der Installation.

Alle Relais und Arudin sollten im Rahmen nicht sichtbar sein

Wir haben uns entschieden, alle steuerbaren Elemente an einem Ort zusammenzubringen und sie hinter den Kulissen zu verstecken, um ihre Leistung überwachen und bei Bedarf vorsichtig aus dem Sichtfeld der Kamera kriechen und die ausgefallene Einheit ersetzen zu können.

Projekthardware: Wie wir mit einer Hacker-Quest einen Raum gebaut haben
Am Ende wurde alles unter dem Tisch versteckt und die Kamera so installiert, dass unter dem Tisch nichts zu sehen war. Dies war unser „toter Winkel“, an den sich der Ingenieur heranschleichen konnte

Als Ergebnis haben wir tatsächlich ein intelligentes Gerät erhalten: Es hat den Status jedes seiner Teile vom Backend erhalten und ihn mit dem entsprechenden Befehl geändert.

Aus Sicht der Hardware-Implementierung kontrollierte dieses Gerät sechs Elemente:

  1. Mehrere Tischlampen, sie haben einen Ein-/Aus-Zustand und werden von Spielern gesteuert
  2. Buchstaben an der Wand, sie können auf Befehl der Spieler ihre Farbe ändern
  3. Ventilatoren, die sich drehen und das Flipchart öffnen, wenn der Server unter Last steht
  4. Lasergesteuert über PWM
  5. Shredder, der pünktlich Geld gefressen hat
  6. Eine Nebelmaschine, die vor jedem Laserschuss losging


Testen einer Nebelmaschine mit einem Laser

Später kam ein Bühnenlicht hinzu, das hinter dem Rahmen stand und genau wie die Lampen aus Punkt 1 gesteuert wurde. Das Bühnenlicht funktionierte in zwei Fällen: Es beleuchtete den Laser, wenn Strom an ihn angelegt wurde, und es beleuchtete das Gewicht davor Der Laser wurde im Kampfmodus gestartet.

Was war das für ein intelligentes Gerät?

Projekthardware: Wie wir mit einer Hacker-Quest einen Raum gebaut haben

Yura, unser Hardware-Mitarbeiter, hat die ganze Zeit versucht, die Dinge nicht zu komplizieren und die einfachste, minimalistischste Lösung zu finden, die möglich ist.

Es wurde angenommen, dass der VPS einfach ein Skript ausführen würde, das JSON mit dem Status der Geräte empfängt und ihn an den über USB angeschlossenen Arduino sendet.

Verbunden mit den Ports:

  • 16 normale Relais (sie waren diejenigen, die das Klickgeräusch erzeugten, das im Video zu hören war. Wir haben sie hauptsächlich wegen dieses Geräusches ausgewählt)
  • 4 Halbleiterrelais zur Steuerung von PWM-Kanälen, wie z. B. Lüfter,
  • Separater PWM-Ausgang für Laser
  • Ausgang, der ein Signal an den LED-Streifen erzeugt

Hier ist ein Beispiel für einen JSON-Befehl, der vom Server zum Relay kam

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

Und dies ist ein Beispiel für eine Funktion, mit der der Befehl an Arudino gelangt ist

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

Um den Moment zu verfolgen, in dem der Laser schließlich das Seil durchbrennt und das Gewicht auf das Aquarium fliegt, haben wir einen kleinen Knopf gebaut, der beim Herunterfallen des Gewichts ausgelöst wurde und ein Signal an das System gab.

Projekthardware: Wie wir mit einer Hacker-Quest einen Raum gebaut haben
Taste zur Überwachung der Gewichtsbewegung

Auf dieses Signal hin sollten Rauchbomben aus Tischtennisbällen aufleuchten. Wir haben 4 Rauchfackeln direkt in das Servergehäuse gesteckt und mit einem Nichrome-Faden verbunden, der sich erhitzen und wie ein Zünder funktionieren sollte.

Projekthardware: Wie wir mit einer Hacker-Quest einen Raum gebaut haben
Gehäuse mit Rauchbomben und chinesischer Girlande

Projekthardware: Wie wir mit einer Hacker-Quest einen Raum gebaut haben

Arduino

Nach dem ursprünglichen Plan fanden zwei Aktionen auf dem Arduino statt.

Wenn eine neue Anfrage einging, wurde sie zunächst mithilfe der ArduinoJson-Bibliothek analysiert. Als nächstes wurde jedes verwaltete Gerät mit seinen beiden Eigenschaften verglichen:

  • Energiezustand „ein“ oder „aus“ (Standardzustand)
  • der Zeitraum, für den das Gerät eingeschaltet ist – die Zeit in Mikrosekunden ab dem Start der Platine, wenn es Zeit ist, es auszuschalten, also den Zustand auf den Standard zu bringen

Als er das letzte Mal beim Empfang des entsprechenden Parameters in JSON gesetzt wurde, dieser aber nicht übertragen werden konnte, wurde der Wert auf 0 gesetzt und es erfolgte kein Reset.

Die zweite Aktion, die der Arduino in jedem Zyklus durchführte, war die Aktualisierung der Zustände, also die Überprüfung, ob etwas eingeschaltet werden musste oder ob es Zeit war, ein Gerät auszuschalten.

Laserpointer - der gleiche Megatron 3000

Projekthardware: Wie wir mit einer Hacker-Quest einen Raum gebaut haben

Dies ist ein normales LSMVR450-3000MF 3000 mW 450 nm Laserschneid- und Markierungsmodul mit manuellem Fokus.

Buchstaben Falke

Sie wurden ganz einfach hergestellt: Wir kopierten einfach die Buchstaben des Logos, schnitten sie aus Pappe und beklebten sie dann mit LED-Band. In diesem Fall musste ich die Klebebandstücke zusammenlöten, 4 Kontakte an jeder Naht, aber das Ergebnis war es wert. Unser Backender Pasha zeigte Wunder an Können und schaffte es in weniger als ein paar Stunden.

Erste Tests des IoT-Geräts und Fertigstellung

Wir haben die ersten Tests gemacht und gleichzeitig kamen neue Aufgaben auf uns zu. Tatsache ist, dass mitten im Prozess ein echter Filmproduzent und Kameramann von VGIK, Ilya Serov, dem Team beitrat – er baute den Rahmen, fügte zusätzliche Kinobeleuchtung hinzu und änderte das Drehbuch des Spiels leicht, um die Handlung emotionaler zu gestalten, und das Bild dramatischer und theatralischer.

Dies steigerte die Qualität erheblich, es traten jedoch Elemente auf, die ebenfalls an das Relais angeschlossen und der Betriebsalgorithmus vorgeschrieben werden mussten.

Ein weiteres Problem war der Laser: Wir haben mehrere Experimente mit verschiedenen Seiltypen und Lasern unterschiedlicher Leistung durchgeführt. Für den Test haben wir einfach ein Gewicht senkrecht an ein Seil gehängt.

Beim Betrieb mit einem Test-Token betrug die über die PWM geregelte Leistung weniger als 10 % und beschädigte das Seil auch bei längerer Belastung nicht.

Für den Kampfmodus wurde der Laser auf ungefähr einen Punkt mit einem Durchmesser von 10 mm defokussiert und brannte aus einer Entfernung von etwa einem Meter souverän durch ein Seil mit einer Last.

Projekthardware: Wie wir mit einer Hacker-Quest einen Raum gebaut haben
In Tests funktionierte der Laser also einwandfrei

Als wir begannen, alles direkt im Raum an einem schwebenden Gewicht zu testen, stellte sich heraus, dass die sichere Befestigung des Lasers nicht so einfach war. Wenn das Seil dann brennt, schmilzt es, dehnt sich und bewegt sich aus seinem ursprünglichen Fokus.

Projekthardware: Wie wir mit einer Hacker-Quest einen Raum gebaut haben
Doch so funktionierte es nicht mehr: Das Seil verrutschte

Ilya bewegte den Laser an das Ende des Raums gegenüber dem Seil, sodass der Laserstrahl über die gesamte Bühne ging und im Rahmen wunderschön aussah, wodurch sich der Abstand verdoppelte.

Nachdem wir bereits im Kampf mehrere weitere Experimente mit dem Verbrennen des Seils durchgeführt hatten, beschlossen wir, das Schicksal nicht zu quälen und das Durchtrennen des Seils mit Nichromdraht sicherzustellen. Es zerstörte den Faden 120 Sekunden nach dem Einschalten des Lasers im Kampfmodus. Wir haben uns entschieden, dies sowie die Trennung des Kabels und das Zünden von Rauchbomben beim Auslösen des Trennkontakts direkt in die Hardware des Mikrocontrollers fest zu programmieren.

Projekthardware: Wie wir mit einer Hacker-Quest einen Raum gebaut haben
Der Faden, der sich schließlich außerhalb des Bildschirms durch das Seil brannte

Somit erschien eine dritte Aufgabe, die der Arduino löste – die Sequenzen zu erarbeiten, die mit der Ausführung dieser Befehle verbunden sind.

Wir haben uns auch dafür entschieden, dem Arduino die Möglichkeit zu geben, auf dem Fernseher Geld zu zählen und den Aktenvernichter zu betreiben. Zunächst wurde davon ausgegangen, dass das Backend dies übernimmt und der aktuelle Kontostand auf der Website sichtbar ist und wir auf dem Fernseher Kommentare von YouTube als zusätzliches interaktives Element einblenden und den Zuschauern mitteilen, dass die Ereignisse im Raum real stattfinden Zeit.

Aber während des Testlaufs schaute sich Ilya die Szene an und schlug vor, den Spielstand auf dem größten Bildschirm anzuzeigen: wie viel Geld noch übrig ist, wie viel gegessen wurde und der Countdown bis zum nächsten Start des Shredders.

Wir haben Arduino an die aktuelle Zeit gebunden: Zu jeder vollen Stunde wurde der Aktenvernichter gestartet. Das Bild wurde mit Rasberry auf dem Fernseher angezeigt, der zu diesem Zeitpunkt bereits Anfragen vom Server empfing und diese zur Ausführung an das Arduino schickte. Bilder mit Geldindikatoren wurden gezeichnet, indem das Konsolen-Dienstprogramm FIM in etwa so aufgerufen wurde

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

Und es wurde basierend auf der erforderlichen Menge oder Zeit gebildet.

Die Bilder haben wir im Vorfeld generiert: Wir haben einfach ein fertiges Video mit Timer aufgenommen und 200 Bilder exportiert.

Das ist die Mechanik, die in das Kreuz einprogrammiert wurde. Als der letzte Countdown begann, gingen wir alle zur Baustelle, bewaffneten uns mit Feuerlöschern und setzten uns hin, um auf das Feuer zu warten (das im Discord erst in vollem Gange war).

So erstellen Sie eine Sendung, die eine Woche lang funktioniert: Wählen Sie eine Kamera

Für die Quest benötigten wir eine kontinuierliche Übertragung auf YouTube über 7 Tage – genau das haben wir als maximale Dauer des Spiels festgelegt. Es gab zwei Dinge, die uns aufhalten könnten:

  1. Überhitzung der Kamera durch Dauerbetrieb
  2. Internetausfall

Um das Spielen und Beobachten des Raumes angenehm zu gestalten, musste die Kamera mindestens ein Full-HD-Bild liefern.

Zunächst haben wir uns nach Webcams umgesehen, die für Streamer hergestellt werden. Da wir unser Budget kürzten, wollten wir keine Kamera kaufen, aber wie sich herausstellte, vermieten sie diese nicht. Im selben Moment fanden wir auf wundersame Weise eine Xbox Kinect-Kamera in meinem Haus, installierten sie in meinem Zimmer und starteten eine Woche lang eine Testübertragung.

Die Kamera funktionierte einwandfrei und überhitzte nicht, aber Ilya bemerkte fast sofort, dass es an Einstellungen mangelte, insbesondere war es unmöglich, die Belichtung einzustellen.

Ilya wollte die Art der Übertragung den Standards der Film- und Videoproduktion näher bringen: eine dynamisch wechselnde Lichtszene mit hellen Lichtquellen, abgedunkeltem Hintergrund und Objekten im Bild vermitteln. Gleichzeitig wollte ich die Ausarbeitung des Bildes sowohl in den Lichtern als auch in den Schatten bei minimalem digitalem Rauschen bewahren.

Obwohl sich Kinect in Tests als zuverlässig erwies und keine Videoaufnahmekarte benötigte (ein weiterer Fehlerpunkt), entschieden wir uns daher, darauf zu verzichten. Nachdem er drei Tage lang verschiedene Kameras getestet hatte, entschied sich Ilya für den Sony FDR-AX53 – einen kleinen, zuverlässigen Camcorder, der günstig zu mieten ist, aber gleichzeitig über ausreichende Zuverlässigkeit und visuelle Eigenschaften verfügt.

Wir mieteten eine Kamera, schalteten sie in Verbindung mit einer Videoaufnahmekarte eine Woche lang ein und stellten fest, dass wir damit während der gesamten Mission auf eine kontinuierliche Übertragung zählen konnten.

Einen Film machen: Bühne inszenieren und beleuchten

Die Arbeit an der Beleuchtung erforderte eine gewisse Anmut; wir mussten mit minimalen Mitteln eine Lichtmusik erstellen:

1. Beleuchtung von Objekten, wenn Spieler sie finden (Laser, Gewicht), sowie konstantes Licht auf dem Aktenvernichter. Hier haben wir Dedolight 150 verwendet – zuverlässige und kompakte Filmbeleuchtungsgeräte mit Niedervolt-Halogenlampen, die es ermöglichen, den Strahl auf ein bestimmtes Objekt zu fokussieren, ohne den Hintergrund und andere Objekte zu beeinträchtigen.

2. Praktisches Spiellicht - Tischlampe, Stehlampe, Stern, Girlande. Das gesamte praktische Licht wurde harmonisch im Rahmen verteilt, um den Bildbereich zu beleuchten. Im Inneren befanden sich LED-Lampen mit einer Farbtemperatur von 3200 K. Die Lampe in der Stehleuchte wurde mit einem roten Rosco-Folienfilter abgedeckt, um einen ungewöhnlichen Farbakzent zu erzeugen.

Projekthardware: Wie wir mit einer Hacker-Quest einen Raum gebaut haben
Ich bin Ingenieur bei meiner Mutter oder der Start ist morgen

Wie wir Internet und Strom reserviert haben

Sie gingen das Thema Fehlertoleranz fast wie in einem Rechenzentrum an: Sie beschlossen, nicht von den Grundprinzipien abzuweichen und reservierten nach dem üblichen N+1-Schema.

Wenn die Übertragung auf YouTube unterbrochen wird, bedeutet dies, dass eine erneute Verbindung über denselben Link und die Fortsetzung des Streams nicht mehr möglich ist. Es war ein kritischer Moment und der Raum befand sich in einem normalen Büro.

Hierzu haben wir einen OpenWRT-basierten Router und das mwan3-Paket verwendet. Es testete automatisch alle 5 Sekunden die Verfügbarkeit des Kanals und schaltete im Falle einer Unterbrechung auf das Backup-Modem mit Yota um. Dadurch erfolgte die Umschaltung auf den Backup-Kanal in weniger als einer Minute.
Projekthardware: Wie wir mit einer Hacker-Quest einen Raum gebaut haben
Ebenso wichtig war es, Stromausfälle zu vermeiden, da selbst ein kurzfristiger Stromstoß einen Neustart aller Computer verursachen würde.

Deshalb haben wir uns für eine unterbrechungsfreie Stromversorgung vom Typ Ippon Innova G2 3000 entschieden, die alle Gaming-Geräte mit Strom versorgen würde: Der Gesamtstromverbrauch unseres Systems lag bei rund 300 Watt. Es würde 75 Minuten dauern, was für unsere Zwecke völlig ausreichend wäre.

Wir beschlossen, auf zusätzliche Beleuchtung zu verzichten, falls der Strom im Raum ausfallen sollte, da dieser nicht an eine unterbrechungsfreie Stromversorgung angeschlossen war.

Danksagung

  • An das ganze Team RUVDS, der das Spiel erfunden und umgesetzt hat.
  • Unabhängig davon war die Auslastung für die RUVDS-Administratoren zur Überwachung der Arbeit der Server akzeptabel und alles funktionierte wie gewohnt.
  • An den besten Chef ntsaplin dafür, dass als Antwort auf den Anruf: „Ich habe eine Idee: Wir nehmen einen Server, stellen ein Aquarium darauf und hängen ein Gewicht darüber, Bumm, Knall, alles wird mit Wasser überflutet, Kurzschluss, Feuer.“ !“ Er sagt immer selbstbewusst: „Mach es!“
  • Danke Tilda Publishing und gesondert an Michail Karpow, der uns nicht nur auf halbem Weg begegnet ist und uns erlaubt hat, gegen die Nutzungsbedingungen zu verstoßen, sondern uns sogar ein Geschäftskonto für ein Jahr gegeben hat, als wir über das Projekt gesprochen haben.
  • Ilja Serow S_ILya dafür, dass ich beigetreten bin und Co-Produzent des Projekts geworden bin, bereit bin, die halbe Nacht durchzukriechen, LED-Streifen zu kleben, nach technischen Lösungen zu suchen und alles zu tun, damit wir einen richtigen Film bekommen.
  • zhovner Dafür, dass du immer bereit warst, die Situation zu retten, wenn andere ihre Hände hochwarfen, Borschtsch, moralische Unterstützung und Gespräche bis zum Morgen.
  • Samat dafür, dass Sie uns mit dem besten Pentester des Landes verbunden haben, der uns beraten und uns bei Aufgaben geholfen hat.
  • daniemilk für die coole Videoproduktion aller Videos.
  • delphe für eine feste Hand und die Bereitschaft, bis zuletzt zu arbeiten.
  • Nun Dodo Pizza Engineering für fast immer warme Pizza.

Und der größte Dank gilt den Spielern für all die Emotionen, die wir erlebt haben, als Sie das Abenteuer zwei Tage lang ohne Schlaf und sogar ohne Aufschieben der Arbeit gestürmt haben.

Weitere Artikel über die Suche nach der Zerstörung des Servers

Projekthardware: Wie wir mit einer Hacker-Quest einen Raum gebaut haben

Source: habr.com

Kommentar hinzufügen