Projektový hardware: jak jsme postavili místnost s questem hackerů

Projektový hardware: jak jsme postavili místnost s questem hackerů
Před pár týdny jsme strávili online pátrání po hackerech: postavili místnost, kterou zaplnili chytrými zařízeními a spustili z ní vysílání na YouTube. Hráči mohli ovládat IoT zařízení z herního webu; Cílem bylo najít zbraň ukrytou v místnosti (výkonné laserové ukazovátko), hacknout ji a způsobit zkrat v místnosti.

Aby toho nebylo málo, umístili jsme do místnosti skartovačku, do které jsme naložili 200 000 rublů: skartovačka snědla jednu bankovku za hodinu. Po vítězství ve hře můžete zastavit skartovačku a vzít si všechny zbývající peníze.

Už jsme to řekli průchoda jak byl backend vytvořen projekt. Je čas promluvit si o hardwaru a způsobu jeho sestavení.


Bylo mnoho žádostí o zobrazení okamžiku úklidu místnosti - ukazujeme, jak to rozebíráme

Hardware Architecture: Room Control

Začali jsme navrhovat hardwarové řešení, když už byl scénář zhruba pochopen, backend byl připraven a měli jsme prázdnou místnost připravenou k instalaci zařízení.

Vzpomněli jsme si na starý vtip „S in IoT znamená Security“ („Písmeno S ve zkratce IoT znamená Security“), rozhodli jsme se, že tentokrát hráči v herním scénáři interagují pouze s front-endem a back-endem. stránky, ale nezískáte příležitost dostat se přímo k žehličce.

Bylo to provedeno z důvodu bezpečnosti a podívané na to, co se děje na obrazovce: s přímým přístupem hráčů k hardwaru by bylo mnohem obtížnější izolovat bezpečné a potenciálně nebezpečné akce, například rychlé rolování skartovače nebo ovládání pyrotechnika.

Před zahájením návrhu jsme formulovali několik principů ovládání herních zařízení, které se staly základem návrhu:

Nepoužívejte bezdrátová řešení

Celý hrací prostor je v jednom rámu, do kterého se dostanete do každého rohu. Bezdrátové připojení nebylo ve skutečnosti potřeba a jednoduše by se stalo dalším bodem selhání.

Nepoužívejte žádná speciální zařízení pro chytrou domácnost

Především z důvodu flexibility přizpůsobení. Je jasné, že dokážeme přizpůsobit mnoho krabicových verzí systémů pro chytrou domácnost s hotovým adminem a ovládacími prvky pro náš úkol, ale mzdové náklady by byly srovnatelné s vytvořením vlastního jednoduchého řešení.

Navíc bylo potřeba vymyslet zařízení, která by jasně ukazovala, že to byli hráči, kdo změnil její stav: zapnuli/vypnuli nebo na písmena FALCON rozsvítili konkrétní světlo.

Shromáždili jsme všechny prvky z veřejně dostupného hardwaru, který lze koupit v běžných obchodech s rádiovými součástkami: mezi rozvozem pizzy a dietní coly na stránky neustále přicházeli kurýři Chip a Dip a Leroy.

Volba sestavit si vše sami zjednodušila ladění, škálovatelnost však vyžadovala větší opatrnost při instalaci.

Všechna relé a arudin by neměly být v rámu vidět

Rozhodli jsme se všechny ovladatelné prvky přenést na jedno místo a schovat je do zákulisí, abychom mohli sledovat jejich výkon a v případě potřeby se opatrně odplazit z dohledu kamery a vyměnit vadnou jednotku.

Projektový hardware: jak jsme postavili místnost s questem hackerů
Nakonec se vše schovalo pod stůl a kamera byla nainstalována tak, aby pod stolem nebylo nic vidět. Toto bylo naše „slepé místo“, aby se inženýr připlížil

Ve výsledku jsme vlastně dostali jedno chytré zařízení: přijímalo stav každé své části z backendu a měnilo ho příslušným příkazem.

Z hlediska hardwarové implementace toto zařízení ovládalo 6 prvků:

  1. Několik stolních lamp, mají stav zapnuto/vypnuto a ovládají je hráči
  2. Písmena na zdi, mohou změnit barvu na příkaz hráčů
  3. Ventilátory, které se otáčejí a otevírají flipchart, když je server pod zatížením
  4. Laserové ovládání pomocí PWM
  5. Shredder, který jedl peníze podle plánu
  6. Dýmovnice, která se spustila před každým výstřelem laseru


Testování dýmovnice s laserem

Později bylo přidáno jevištní světlo, které stálo za rámem a ovládalo se úplně stejně jako lampy z bodu 1. Jevištní světlo fungovalo ve dvou případech: osvětlovalo laser, když na něj bylo přivedeno napájení, a osvětlovalo závaží před laser byl spuštěn v bojovém režimu.

Co to bylo za chytré zařízení?

Projektový hardware: jak jsme postavili místnost s questem hackerů

Celou cestu se Yura, náš hardwarový chlapík, snažil nic nekomplikovat a vymýšlet co nejjednodušší, minimalistické řešení.

Předpokládalo se, že VPS jednoduše spustí skript, který přijme json se stavem zařízení a odešle jej do Arduina připojeného přes USB.

Připojeno k portům:

  • 16 běžných relé (to byla ta, která vydávala cvakání, které bylo slyšet ve videu. Vybrali jsme je hlavně kvůli tomuto zvuku)
  • 4 polovodičová relé pro ovládání kanálů PWM, jako jsou ventilátory,
  • samostatný PWM výstup pro laser
  • výstup, který generuje signál na LED pásek

Zde je příklad příkazu json, který přišel do relé ze serveru

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

A to je příklad funkce, se kterou se příkaz dostal do Arudina

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

Abychom mohli sledovat okamžik, kdy laser konečně propálí lano a závaží letí na akvárium, vyrobili jsme malé tlačítko, které se spustilo, když závaží spadlo, a dalo signál do systému.

Projektový hardware: jak jsme postavili místnost s questem hackerů
Tlačítko pro sledování pohybu závaží

Na tento signál se měly rozsvítit dýmovnice vyrobené z pingpongových míčků. Přímo do skříně serveru jsme vložili 4 kouřové světlice a propojili je nichromovým závitem, který měl hřát a fungovat jako zapalovač.

Projektový hardware: jak jsme postavili místnost s questem hackerů
Pouzdro s dýmovnicemi a čínskou girlandou

Projektový hardware: jak jsme postavili místnost s questem hackerů

Arduino

Podle původního plánu proběhly na Arduinu dvě akce.

Nejprve, když byl přijat nový požadavek, byl požadavek analyzován pomocí knihovny ArduinoJson. Dále bylo každé spravované zařízení porovnáno s jeho dvěma vlastnostmi:

  • stav napájení "on" nebo "off" (standardní stav)
  • doba, po kterou je zařízení zapnuto - doba v mikrosekundách od spuštění desky, kdy je čas ji vypnout, to znamená uvést stav do standardního stavu

Naposledy byl nastaven při příjmu odpovídajícího parametru v JSON, ale nemohl být přenesen, poté byla hodnota nastavena na 0 a nedošlo k žádnému resetu.

Druhou akcí, kterou Arduino provádělo každý cyklus, byla aktualizace stavů, tedy kontrola, zda je potřeba něco zapnout nebo zda je čas vypnout nějaké zařízení.

Laserové ukazovátko - stejný Megatron 3000

Projektový hardware: jak jsme postavili místnost s questem hackerů

Jedná se o běžný LSMVR450-3000MF 3000mW 450nm ruční laserový řezací a značkovací modul.

Dopisy Falcon

Byly vyrobeny velmi jednoduše - písmena z loga jsme jednoduše okopírovali, vystřihli z kartonu a následně přelepili LED páskou. V tomto případě jsem musel kousky pásky připájet k sobě, 4 kontakty na každém švu, ale výsledek stál za to. Náš backender Pasha ukázal zázraky dovedností a dokázal to za méně než několik hodin.

První testy iot zařízení a dokončení

Udělali jsme první testy a zároveň k nám dorazily nové úkoly. Faktem je, že uprostřed procesu se k týmu připojil skutečný filmový producent a kameraman z VGIK, Ilya Serov - postavil rám, přidal další osvětlení kina a mírně změnil herní scénář, aby byl děj emotivnější, a obraz dramatičtější a divadelnější.

To výrazně zvýšilo kvalitu, ale objevily se prvky, které bylo také potřeba připojit k relé a předepsaný operační algoritmus.

Dalším problémem byl laser: dělali jsme několik experimentů s různými typy lan a lasery různých výkonů. Na zkoušku jsme jednoduše zavěsili závaží svisle na lano.

Při běhu s testovacím žetonem byl výkon regulovaný přes PWM menší než 10% a nepoškodil lano ani při dlouhé expozici.

Pro bojový režim byl laser rozostřen přibližně na místo o průměru 10 mm a s jistotou propálil lano se zátěží ze vzdálenosti asi metr.

Projektový hardware: jak jsme postavili místnost s questem hackerů
Laser tedy fungoval v testech perfektně

Když jsme začali vše testovat přímo v místnosti na zavěšeném závaží, ukázalo se, že bezpečné zajištění laseru nebylo tak snadné. Když pak lano shoří, roztaví se, natáhne a vyjede ze svého původního ohniska.

Projektový hardware: jak jsme postavili místnost s questem hackerů
Ale už to tak nefungovalo: lano se posunulo

Ilja přesunul laser na konec místnosti naproti lanu, aby laserový paprsek procházel přes celé jeviště a vypadal krásně v rámu, čímž se vzdálenost zdvojnásobila.

Poté, co jsme provedli několik dalších experimentů se spalováním lana již v bitvě, rozhodli jsme se, že nebudeme mučit osud a zajistíme přeříznutí lana pomocí nichromového drátu. Zničilo vlákno 120 sekund po zapnutí laseru v bojovém režimu. Toto jsme se rozhodli natvrdo zakódovat, stejně jako odpojení vodiče a zapálení dýmovnic při sepnutí separačního kontaktu, přímo do hardwaru mikrokontroléru.

Projektový hardware: jak jsme postavili místnost s questem hackerů
Nit, která se nakonec propálila skrz lano mimo obrazovku

Objevil se tedy třetí úkol, který Arduino vyřešilo – vypracovat sekvence spojené s prováděním těchto příkazů.

Také jsme se rozhodli dát Arduinu nutnost počítat peníze na televizi a spustit skartovačku. Zpočátku se předpokládalo, že to udělá backend a aktuální zůstatek bude viditelný na webu a na televizi budeme zobrazovat komentáře z YouTube jako další interaktivní prvek, který divákům řekne, že události v místnosti se odehrávají ve skutečnosti. čas.

Ale během zkušebního provozu se Ilja podíval na scénu a navrhl ukázat rovnováhu hry na největší obrazovce: kolik peněz ještě zbývá, kolik se snědlo a odpočítávání do dalšího spuštění skartovačky.

Svázali jsme Arduino s aktuálním časem: každou celou hodinu byl spuštěn skartovač. Obraz byl zobrazen na televizi pomocí rasberry, která v tu chvíli již přijímala požadavky ze serveru a posílala je do arduina k provedení. Obrázky s peněžními ukazateli byly nakresleny tak, že se konzolová utilita nazvala nějak takto

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

A to bylo tvořeno na základě požadovaného množství nebo času.

Obrázky jsme vygenerovali předem: jednoduše jsme pořídili hotové video s časovačem a exportovali 200 obrázků.

Toto je mechanika, která byla naprogramována do kříže. Než začalo závěrečné odpočítávání, všichni jsme šli na místo, vyzbrojili se hasicími přístroji a posadili se, abychom čekali na oheň (který byl v plném proudu pouze v nesouladu)

Jak udělat vysílání, které bude fungovat týden: výběr kamery

Pro quest jsme potřebovali nepřetržité vysílání na YouTube po dobu 7 dní – přesně to jsme nastavili jako maximální dobu trvání hry. Byly dvě věci, které nás mohly zastavit:

  1. Přehřívání kamery v důsledku nepřetržitého provozu
  2. Výpadek internetu

Kamera musela poskytovat alespoň Full HD obraz, aby bylo hraní a sledování v místnosti pohodlné.

Zpočátku jsme se zaměřili na webové kamery, které jsou vyráběny pro streamery. Snižovali jsme rozpočet, takže jsme nechtěli kupovat fotoaparát, ale jak se ukázalo, nepůjčují je. Ve stejnou chvíli jsme zázračně našli kameru Xbox Kinect ležící u mě doma, nainstalovali ji do mého pokoje a na týden spustili testovací vysílání.

Fotoaparát fungoval dobře a nepřehříval se, ale Ilya si téměř okamžitě všiml, že nemá nastavení, zejména nelze nastavit expozici.

Ilya se snažil přiblížit typ vysílání standardům filmové a video produkce: zprostředkovat dynamicky se měnící světelnou scénu s jasnými světelnými zdroji, ztmaveným pozadím a objekty v záběru. Zároveň jsem chtěl zachovat propracování obrazu jak ve světlech, tak ve stínech, s minimálním digitálním šumem.

Proto, přestože se Kinect v testech ukázal jako spolehlivý a nevyžadoval kartu pro snímání videa (další bod selhání), rozhodli jsme se od něj upustit. Po třech dnech testování různých fotoaparátů si Ilya vybral Sony FDR-AX53 - malou, spolehlivou videokameru, která je levná na pronájem, ale zároveň má dostatečnou spolehlivost a vizuální vlastnosti.

Půjčili jsme si kameru, zapnuli ji na týden ve spojení s kartou pro zachycení videa a uvědomili jsme si, že s ní můžeme počítat s nepřetržitým vysíláním po celou dobu výpravy.

Natáčení filmu: inscenace jeviště a osvětlení

Práce na osvětlení vyžadovala určitou graciéznost, potřebovali jsme vytvořit světelné skóre s minimálními prostředky:

1. Osvětlení předmětů, když je hráči najdou (laser, závaží), stejně jako stálé světlo na skartovačce. Zde jsme použili dedolight 150 - spolehlivá a kompaktní filmová osvětlovací zařízení s nízkonapěťovými halogenovými žárovkami, které umožňují zaostřit paprsek na konkrétní objekt bez ovlivnění pozadí a dalších objektů.

2. Praktické hrací světlo - stolní lampa, stojací lampa, hvězda, girlanda. Veškeré praktické světlo bylo v rámu harmonicky rozmístěno pro osvětlení obrazové plochy, uvnitř byly LED lampy s barevnou teplotou 3200K, lampa ve stojací lampě byla pokryta červeným fóliovým filtrem Rosco pro vytvoření neobvyklého barevného akcentu.

Projektový hardware: jak jsme postavili místnost s questem hackerů
Jsem inženýr u své mámy nebo je start zítra

Jak jsme si rezervovali internet a elektřinu

K problematice odolnosti proti chybám přistoupili téměř jako v datovém centru: rozhodli se neodchýlit se od základních principů a vyhradili se podle obvyklého schématu N+1.

Pokud se vysílání na YouTube zastaví, znamená to, že se nebude možné znovu připojit pomocí stejného odkazu a pokračovat ve streamu. Byl to kritický okamžik a místnost se nacházela v běžné kanceláři.

K tomu jsme použili router založený na OpenWRT a balíček mwan3. Automaticky každých 5 sekund testoval dostupnost kanálu a v případě přerušení přepnul na záložní modem s Yotou. V důsledku toho došlo k přepnutí na záložní kanál za méně než minutu.
Projektový hardware: jak jsme postavili místnost s questem hackerů
Stejně důležité bylo také eliminovat výpadky proudu, protože i krátkodobý výpadek proudu by způsobil restart všech počítačů.

Vzali jsme proto nepřerušitelný zdroj ippon innova g2 3000, který by zálohoval všechna herní zařízení: celková spotřeba našeho systému se pohybovala kolem 300 Wattů. Trvalo by to 75 minut, což je pro naše účely docela dost.

Rozhodli jsme se obětovat dodatečné osvětlení pro případ, že by v místnosti vypadla elektřina – nebyla napojena na nepřerušitelný zdroj energie.

Poděkování

  • Celému týmu RUVDS, který hru vymyslel a zrealizoval.
  • Samostatně správcům RUVDS pro sledování práce serverů byla zátěž přijatelná a vše fungovalo jako obvykle.
  • Nejlepšímu šéfovi ntsaplin za to, že v reakci na výzvu: „Mám nápad: vezmeme server, postavíme na něj akvárium a pověsíme nad něj závaží, bum, prásk, všechno je zaplaveno vodou, zkrat, oheň !“ vždy sebevědomě říká "udělej to!"
  • Díky Nakladatelství Tilda a zvlášť Michailu Karpovovi za to, že se nejen sešel na půli cesty a umožnil nám porušovat Podmínky použití, ale dokonce nám dal na rok obchodní účet, když jsme o projektu mluvili.
  • Ilja Serov S_ILya za to, že jsme se přidali a stali se koproducentem projektu, připraveni prolézt půl noci, lepit LED pásek, hledat technická řešení a dělat vše pro to, abychom dostali skutečný film.
  • zhovner za to, že byl vždy připraven zachránit situaci, když ostatní rozhodili rukama, borščem, morální podporou a rozhovory až do rána.
  • samat za spojení s nejlepším pentesterem v zemi, který nám radil a pomáhal s úkoly.
  • danimilk za skvělou video produkci všech videí.
  • delphe za pevnou ruku a ochotu pracovat až do konce.
  • Dobře Dodo Pizza Engineering pro téměř vždy teplou pizzu.

A největší vděk patří hráčům za všechny ty emoce, které jsme zažili, když jste dva dny bez spánku a dokonce odkládali práci na pátrání.

Další články o snaze zničit server

Projektový hardware: jak jsme postavili místnost s questem hackerů

Zdroj: www.habr.com

Přidat komentář