Projektni hardver: kako smo napravili sobu sa hakerskom potragom

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.

Već smo rekli hodati krozI kako je napravljen backend projekat. Vrijeme je da razgovaramo o hardveru i načinu na koji je sastavljen.


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.

Projektni hardver: kako smo napravili sobu sa hakerskom potragom
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:

  1. Nekoliko stolnih lampi, imaju uključeno/isključeno stanje i kontroliraju ih igrači
  2. Slova na zidu, mogu promijeniti boju na naredbu igrača
  3. Obožavaoci koji se okreću i otvaraju flipčart kada je server pod opterećenjem
  4. Laserska kontrola putem PWM-a
  5. Šreder koji je pojeo novac po rasporedu
  6. 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?

Projektni hardver: kako smo napravili sobu sa hakerskom potragom

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

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

A ovo je primjer funkcije s kojom je komanda stigla do Arudina

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

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.

Projektni hardver: kako smo napravili sobu sa hakerskom potragom
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č.

Projektni hardver: kako smo napravili sobu sa hakerskom potragom
Kućište sa dimnim bombama i kineskim vijencem

Projektni hardver: kako smo napravili sobu sa hakerskom potragom

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

Projektni hardver: kako smo napravili sobu sa hakerskom potragom

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.

Projektni hardver: kako smo napravili sobu sa hakerskom potragom
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.

Projektni hardver: kako smo napravili sobu sa hakerskom potragom
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.

Projektni hardver: kako smo napravili sobu sa hakerskom potragom
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:

  1. Pregrijavanje kamere zbog kontinuiranog rada
  2. 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.

Projektni hardver: kako smo napravili sobu sa hakerskom potragom
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.
Projektni hardver: kako smo napravili sobu sa hakerskom potragom
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.
  • daniemilk za kul video produkciju svih videa.
  • delphe za čvrstu ruku i volju da se radi do poslednjeg.
  • Pa Dodo Pizza Engineering za skoro uvek toplu picu.

A najveća zahvalnost ide igračima za sve emocije koje smo doživjeli dok ste dva dana jurišali u pohod bez sna, pa čak i odlaganja posla.

Ostali članci o potrazi za uništenjem servera

Projektni hardver: kako smo napravili sobu sa hakerskom potragom

izvor: www.habr.com

Dodajte komentar