Projektni hardver: kako smo napravili sobu sa hakerskom potragom
Pre par nedelja smo proveli online potraga za hakerima: izgradili su prostoriju, koju su napunili pametnim uređajima i iz nje pokrenuli YouTube prijenos. Igrači su mogli kontrolirati IoT uređaje s web stranice igre; Cilj je bio pronaći oružje skriveno u prostoriji (snažni laserski pokazivač), hakirati ga i izazvati kratki spoj u prostoriji.
Da bismo upotpunili akciju, u prostoriju smo postavili drobilicu u koju smo ubacili 200 rubalja: šreder je pojeo jednu novčanicu na sat. Nakon pobjede u igri, možete zaustaviti sjeckalicu i uzeti sav preostali novac.
Bilo je puno zahtjeva da se pokaže trenutak čišćenja sobe – pokazujemo kako je rastavljamo
Arhitektura hardvera: kontrola prostorije
Počeli smo s dizajniranjem hardverskog rješenja kada je scenario već bio grubo shvaćen, backend je bio spreman, a imali smo praznu sobu spremnu za instalaciju opreme.
Prisjećajući se starog vica „S u IoT-u označava sigurnost” („Slovo S u skraćenici IoT-a označava sigurnost”), odlučili smo da ovaj put igrači u scenariju igre komuniciraju samo s front-endom i back-endom sajta, ali ne dobijate priliku da dođete direktno do pegle.
To je učinjeno iz razloga sigurnosti i spektakla onoga što se dešavalo na ekranu: uz direktan pristup hardveru od strane igrača, bilo bi mnogo teže izolovati sigurne i potencijalno opasne radnje, na primjer, brzo pomicanje shredera ili upravljanje pirotehnika.
Prije početka dizajna, formulirali smo nekoliko principa za upravljanje uređajima za igre, koji su postali osnova dizajna:
Nemojte koristiti bežična rješenja
Cijeli prostor za igru je u jednom kadru, do kojeg se može doći do svakog kuta. Nije bilo stvarne potrebe za bežičnim vezama i one bi jednostavno postale još jedna tačka kvara.
Nemojte koristiti nikakve posebne pametne kućne uređaje
Uglavnom zbog fleksibilnosti prilagođavanja. Jasno je da možemo prilagoditi mnoge upakirane verzije pametnih kućnih sistema sa gotovim administratorom i kontrolama za naš zadatak, ali troškovi rada bi bili uporedivi sa kreiranjem vašeg vlastitog jednostavnog rješenja.
Osim toga, bilo je potrebno osmisliti uređaje koji bi jasno pokazivali da su igrači promijenili njegovo stanje: uključili/isključili ga ili stavili posebno svjetlo na slova FALCON.
Sakupili smo sve elemente iz javno dostupnog hardvera koji se može kupiti u redovnim radnjama radio dijelova: između dostave pice i dijetalne kole, kuriri Chip and Dip i Leroy su stalno dolazili na stranicu.
Izbor da sve sami sastavimo, pojednostavio je otklanjanje grešaka, skalabilnost, međutim, zahtevao je veću pažnju tokom instalacije.
Svi releji i arudin ne bi trebali biti vidljivi u okviru
Odlučili smo da sve upravljive elemente dovedemo na jedno mjesto i sakrijemo ih iza kulisa kako bismo mogli pratiti njihov učinak i, ako je potrebno, pažljivo izaći iz vidljivosti kamere i zamijeniti pokvarenu jedinicu.
Na kraju je sve bilo sakriveno ispod stola, a kamera je postavljena tako da se ništa nije vidjelo ispod stola. Ovo je bila naša „slepa tačka“ da se inženjer ukrade
Kao rezultat toga, zapravo smo dobili jedan pametni uređaj: on je od pozadine primio stanje svakog svog dijela i promijenio ga odgovarajućom komandom.
Sa stanovišta hardverske implementacije, ovaj uređaj je kontrolisao 6 elemenata:
Nekoliko stolnih lampi, imaju uključeno/isključeno stanje i kontroliraju ih igrači
Slova na zidu, mogu promijeniti boju na naredbu igrača
Obožavaoci koji se okreću i otvaraju flipčart kada je server pod opterećenjem
Laserska kontrola putem PWM-a
Šreder koji je pojeo novac po rasporedu
Dimna mašina koja se gasila prije svakog laserskog pucanja
Testiranje mašine za dim laserom
Kasnije je dodato i scensko svjetlo koje je stajalo iza okvira i upravljalo se baš kao i lampe iz tačke 1. Svjetlo bine je radilo u dva slučaja: osvjetljavalo je laser kada je na njega primijenjeno napajanje i osvjetljavalo je težinu prije laser je lansiran u borbenom režimu.
Šta je bio ovaj pametni uređaj?
Cijelim putem, Yura, naš hardverski tip, trudio se da ne komplikuje stvari i da smisli najjednostavnije, minimalističko moguće rješenje.
Pretpostavljalo se da će VPS jednostavno pokrenuti skriptu koja prima json sa stanjem uređaja i šalje ga na Arduino povezan preko USB-a.
Povezano na portove:
16 običnih releja (oni su pravili škljocaj koji se čuo na snimku. Uglavnom smo ih izabrali zbog ovog zvuka)
4 solid state releja za kontrolu PWM kanala, kao što su ventilatori,
odvojeni PWM izlaz za laser
izlaz koji generiše signal na LED traku
Evo primjera json komande koja je stigla releju sa servera
Da bismo pratili trenutak kada laser konačno progori konopac i teg odleti na akvarijum, napravili smo malo dugme koje se aktiviralo kada je težina pala i dala signal sistemu.
Dugme za praćenje kretanja težine
Na ovaj signal trebalo je da zapale dimne bombe napravljene od ping-pong loptica. Stavili smo 4 dimne baklje direktno u kućište servera i spojili ih nihrom navojem, koji je trebao da se zagreva i radi kao upaljač.
Kućište sa dimnim bombama i kineskim vijencem
Arduino
Prema prvobitnom planu, dvije akcije su se odvijale na Arduinu.
Prvo, kada je primljen novi zahtjev, zahtjev je analiziran pomoću ArduinoJson biblioteke. Zatim je svaki upravljani uređaj upoređen sa svoja dva svojstva:
stanje napajanja "uključeno" ili "isključeno" (standardno stanje)
period za koji je uređaj uključen - vrijeme u mikrosekundama od početka ploče, kada je vrijeme da se isključi, odnosno dovede stanje na standardno
Posljednji put je postavljena prilikom prijema odgovarajućeg parametra u JSON-u, ali se nije mogao prenijeti, tada je vrijednost postavljena na 0 i nije došlo do resetovanja.
Druga radnja koju je Arduino izvodio u svakom ciklusu bila je ažuriranje stanja, odnosno provjera da li postoji potreba da se nešto uključi ili je vrijeme da se neki uređaj isključi.
Laserski pokazivač - isti Megatron 3000
Ovo je običan LSMVR450-3000MF 3000mW 450nm modul za lasersko rezanje i označavanje ručnog fokusa.
Letters Falcon
Napravljene su vrlo jednostavno - jednostavno smo kopirali slova sa logotipa, izrezali ih iz kartona, a zatim ih obložili LED trakom. U ovom slučaju, morao sam zalemiti komade trake, po 4 kontakta na svakom šavu, ali rezultat je bio vrijedan toga. Naš bekender Paša pokazao je čuda umijeća, uradivši to za manje od nekoliko sati.
Prvi testovi iot uređaja i završna obrada
Uradili smo prve testove, a ujedno su nam stizali i novi zadaci. Činjenica je da se usred procesa timu pridružio pravi filmski producent i snimatelj iz VGIK-a Ilja Serov - napravio je okvir, dodao dodatno kino osvjetljenje i malo promijenio scenarij igre kako bi radnja bila emotivnija, a slika je dramatičnija i teatralnija.
To je značajno povećalo kvalitet, ali su se pojavili elementi koje je takođe potrebno priključiti na relej i propisati algoritam rada.
Drugi problem je bio laser: uradili smo nekoliko eksperimenata sa različitim vrstama užeta i laserima različite snage. Za test smo jednostavno okačili uteg okomito na uže.
Prilikom trčanja s probnim tokenom, snaga regulirana preko PWM-a bila je manja od 10% i nije oštetila uže čak ni uz dugu ekspoziciju.
Za borbeni režim, laser je defokusiran na približno tačku prečnika 10 mm i pouzdano je prožimao konopac teretom sa udaljenosti od oko metar.
Dakle, laser je savršeno radio na testovima
Kada smo počeli da testiramo sve u prostoriji na visećoj težini, pokazalo se da bezbedno pričvršćivanje lasera nije bilo tako lako. Zatim, kada uže izgori, ono se topi, rasteže i pomiče iz svog prvobitnog fokusa.
Ali to više nije funkcioniralo tako: konopac se pomaknuo
Ilja je pomaknuo laser na kraj prostorije nasuprot užeta kako bi laserski snop prošao kroz cijelu pozornicu i izgledao lijepo u kadru, što je udvostručilo udaljenost.
Nakon još nekoliko eksperimenata sa spaljivanjem užeta već u borbi, odlučili smo da ne mučimo sudbinu i osiguramo rezanje užeta pomoću nihromske žice. Uništio je nit 120 sekundi nakon uključivanja lasera u borbenom režimu. Odlučili smo da ovo, kao i isključenje žice i paljenje dimnih bombi kada se aktivira kontakt za razdvajanje, hardkodujemo direktno u hardver mikrokontrolera.
Konac koji je na kraju izgorio kroz uže izvan ekrana
Tako se pojavio treći zadatak koji je Arduino riješio - razraditi sekvence povezane s izvršavanjem ovih naredbi.
Također smo odlučili dati Arduinu potrebu da broji novac na TV-u i pokreće drobilicu. Prvobitno se pretpostavljalo da će to uraditi backend i da će trenutni bilans biti vidljiv na web stranici, a na TV-u ćemo prikazati komentare sa YouTube-a kao dodatni interaktivni element koji gledaocima govori da se događaji u prostoriji dešavaju stvarno vrijeme.
Ali tokom probnog rada, Ilja je pogledao scenu i predložio da se na najvećem ekranu prikaže stanje igre: koliko je novca još ostalo, koliko je pojedeno i odbrojavanje do sljedećeg pokretanja drobilice.
Vezali smo Arduino za trenutno vrijeme: svakog punog sata shredder se pokretao. Slika je prikazana na TV-u koristeći rasberry, koji je u tom trenutku već primao zahtjeve od servera i slao ih arduinu na izvršenje. Slike sa monetarnim pokazateljima su nacrtane tako što smo nazvali uslužni program konzole otprilike ovako
image = subprocess.Popen(["fim", "-q", "-r", "1920×1080", fim_str]), где fim_str
I formiran je na osnovu potrebnog iznosa ili vremena.
Slike smo generisali unapred: jednostavno smo snimili gotov video sa tajmerom i izvezli 200 slika.
Ovo je mehanika koja je programirana u krst. Kada je počelo konačno odbrojavanje, svi smo otišli na lice mjesta, naoružali se aparatima za gašenje požara i sjeli da čekamo požar (koji je bio u punom jeku samo u neslogi)
Kako napraviti emisiju koja radi nedelju dana: odabir kamere
Za potragu nam je bio potreban kontinuirani prijenos na YouTube-u 7 dana - to je upravo ono što smo postavili kao maksimalno trajanje igre. Postojale su dvije stvari koje su nas mogle zaustaviti:
Pregrijavanje kamere zbog kontinuiranog rada
Ispad interneta
Kamera je morala da obezbedi barem Full HD sliku kako bi igranje i gledanje u prostoriji bilo ugodno.
U početku smo gledali na web kamere koje se proizvode za streamere. Smanjili smo budžet, pa nismo hteli da kupimo kameru, ali, kako se ispostavilo, ne iznajmljuju je. Istog trenutka, nekim čudom pronašli smo Xbox Kinect kameru kako leži u mojoj kući, postavili je u moju sobu i započeli probno emitovanje na nedelju dana.
Kamera je radila dobro i nije se pregrijavala, ali Ilya je skoro odmah primijetio da joj nedostaju podešavanja, posebno da je nemoguće podesiti ekspoziciju.
Ilya je nastojao približiti vrstu emitiranja standardima filmske i video produkcije: prenijeti dinamično promjenjivu svjetlosnu scenu sa jarkim izvorima svjetlosti, zatamnjenom pozadinom i objektima u kadru. Istovremeno, želeo sam da sačuvam razradu slike i u svetlima i u senkama, uz minimalan digitalni šum.
Stoga, iako se Kinect pokazao pouzdanim na testovima i nije mu bila potrebna kartica za video snimanje (još jedan nedostatak), odlučili smo ga napustiti. Nakon tri dana testiranja različitih kamera, Ilya je odabrao Sony FDR-AX53 - mali, pouzdan kamkorder koji je jeftin za iznajmljivanje, ali u isto vrijeme ima dovoljnu pouzdanost i vizualne karakteristike.
Iznajmili smo kameru, uključili je na nedelju dana zajedno sa karticom za video snimanje i shvatili da sa njom možemo računati na kontinuirano emitovanje tokom čitave misije.
Snimanje filma: postavljanje bine i rasvjeta
Rad na rasvjeti zahtijevao je određenu gracioznost; morali smo napraviti svjetlosnu partituru s minimalnim sredstvima:
1. Osvetljenje objekata kada ih igrači pronađu (laser, težina), kao i konstantno svetlo na drobilici. Ovdje smo koristili dedolight 150 - pouzdane i kompaktne filmske rasvjetne uređaje s niskonaponskim halogenim svjetiljkama, koje vam omogućavaju fokusiranje zraka na određeni objekt bez utjecaja na pozadinu i druge objekte.
2. Praktično svjetlo za igru - stolna lampa, podna lampa, zvijezda, vijenac. Sva praktična svjetlost je bila skladno raspoređena u okviru kako bi osvijetlila područje slike, unutra su bile LED lampe s temperaturom boje od 3200K, lampa u podnoj lampi je bila prekrivena crvenim Rosco folijskim filterom kako bi se stvorio neobičan akcenat u boji.
Ja sam inženjer kod svoje mame ili je lansiranje sutra
Kako smo rezervisali internet i struju
Problemu tolerancije grešaka pristupili su gotovo kao u data centru: odlučili su da ne odstupaju od osnovnih principa i rezervisali su se prema uobičajenoj šemi N+1.
Ako se emitovanje na YouTube-u zaustavi, to znači da će se biti nemoguće ponovo povezati koristeći isti link i nastaviti prijenos. Bio je to kritičan trenutak, a prostorija se nalazila u običnoj kancelariji.
Za ovo smo koristili ruter baziran na OpenWRT-u i mwan3 paket. Automatski je testirao dostupnost kanala svakih 5 sekundi i, u slučaju prekida, prebacio se na rezervni modem sa Yotom. Kao rezultat toga, prebacivanje na rezervni kanal dogodilo se za manje od minute.
Također je bilo jednako važno eliminirati nestanke struje, jer bi čak i kratkotrajni udar napona uzrokovao ponovno pokretanje svih računara.
Stoga smo uzeli ippon innova g2 3000 neprekidno napajanje, koje bi podržalo sve uređaje za igranje: ukupna potrošnja energije našeg sistema bila je oko 300 W. Trajalo bi 75 minuta, sasvim dovoljno za naše potrebe.
Odlučili smo žrtvovati dodatno osvjetljenje u slučaju da nestane struje u prostoriji – nije bila priključena na neprekidno napajanje.
Zahvalnice
Za cijelu ekipu RUVDS, koji je izmislio i implementirao igru.
Odvojeno, administratorima RUVDS-a, za praćenje rada servera, opterećenje je bilo prihvatljivo i sve je funkcionisalo kao i obično.
Za najboljeg šefa ntsaplin za činjenicu da kao odgovor na poziv, „imam ideju: uzećemo server, staviti akvarijum na njega i okačiti teg iznad njega, bum, prasak, sve je preplavljeno vodom, kratki spoj, vatra !” on uvek samouvereno kaže "uradi to!"
Spasibo Tilda Publishing i posebno Mikhailu Karpovu zato što se ne samo sastao na pola puta i što nam je dozvolio da prekršimo Uslove korišćenja, već nam je čak dao poslovni račun za godinu dana kada smo razgovarali o projektu.
Ilya Serov S_ILya da se pridružim i postanem koproducent projekta, spreman da puzi pola noći, lepi led traku, traži tehnička rešenja i uradi sve da dobijemo pravi film.
zhovner jer su uvijek bili spremni spasiti situaciju kada su drugi digli ruke, boršč, moralna podrška i razgovori do jutra.
samat što nas je povezao sa najboljim pentesterom u državi, koji nas je savjetovao i pomagao u zadacima.