ProHoster > Blog > uprava > Projekt hardver: kako smo izgradili sobu s hakerskom potragom
Projekt hardver: kako smo izgradili sobu s hakerskom potragom
Prije par tjedana proveli smo online potraga za hakerima: izgradili su sobu 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 sobi (snažni laserski pokazivač), hakirati ga i izazvati kratki spoj u sobi.
Da bismo pojačali akciju, u sobu smo postavili sjeckalicu u koju smo ubacili 200 000 rubalja: sjeckalica je pojela jednu novčanicu na sat. Nakon pobjede u igri, možete zaustaviti shredder i uzeti sav preostali novac.
Bilo je puno zahtjeva da prikažemo trenutak čišćenja sobe - pokažemo kako je rastavljamo
Hardverska arhitektura: Sobna kontrola
S projektiranjem hardverskog rješenja krenuli smo kada je scenarij već bio okvirno shvaćen, backend spreman, a imali smo praznu sobu spremnu za instalaciju opreme.
Sjećajući se starog vica "S u IoT označava sigurnost" ("Slovo S u skraćenici IoT označava sigurnost"), odlučili smo da ovaj put igrači u scenariju igre komuniciraju samo s front-endom i backendom mjesta, ali ne dobivaju priliku doći izravno do željeza.
To je učinjeno iz razloga sigurnosti i spektakla onoga što se događa na ekranu: s izravnim pristupom hardveru od strane igrača, bilo bi mnogo teže izolirati sigurne i potencijalno opasne radnje, na primjer, brzo pomicanje shreddera ili upravljanje pirotehnika.
Prije početka dizajna formulirali smo nekoliko principa za upravljanje uređajima za igranje, koji su postali temelj dizajna:
Ne koristite bežična rješenja
Cijeli prostor za igru je u jednom okviru, čiji se svaki kut može dosegnuti. Nije bilo stvarne potrebe za bežičnim vezama i one bi jednostavno postale još jedna točka neuspjeha.
Nemojte koristiti nikakve posebne pametne kućne uređaje
Uglavnom zbog fleksibilnosti prilagodbe. Jasno je da možemo prilagoditi mnoge verzije pametnih kućnih sustava u kutiji s gotovim administratorskim i kontrolama za naš zadatak, ali troškovi rada bili bi usporedivi sa stvaranjem vlastitog jednostavnog rješenja.
Osim toga, trebalo je osmisliti uređaje koji će jasno pokazati da su igrači ti koji su mijenjali njegovo stanje: palili ga/isključivali ili stavljali određeno svjetlo na slova FALCON.
Prikupili smo sve elemente iz javno dostupnog hardvera koji se može kupiti u običnim trgovinama radiodijelova: između dostave pizze i dijetalne cole, kuriri Chip i Dip i Leroy neprestano su dolazili na mjesto.
Odabir da sve sami sastavljamo pojednostavio je otklanjanje pogrešaka, ali je skalabilnost zahtijevala veću pažnju tijekom instalacije.
Svi releji i arudin ne bi trebali biti vidljivi u okviru
Odlučili smo sve upravljive elemente staviti na jedno mjesto i sakriti ih iza scene kako bismo mogli pratiti njihovu izvedbu i, ako je potrebno, pažljivo se skloniti iz vidokruga kamere i zamijeniti pokvarenu jedinicu.
Na kraju je sve sakriveno ispod stola, a kamera je postavljena tako da se ispod stola ništa ne vidi. Ovo je bila naša "slijepa točka" za inženjera da se prikrade
Kao rezultat toga zapravo smo dobili jedan pametni uređaj: on je primao stanje svakog svog dijela iz pozadine i mijenjao ga odgovarajućom naredbom.
Sa stajališta implementacije hardvera, ovaj uređaj kontrolira 6 elemenata:
Nekoliko stolnih lampi, imaju uključeno/isključeno stanje i njima upravljaju igrači
Slova na zidu, mogu promijeniti svoju boju na naredbu igrača
Ventilatori koji se okreću i otvaraju flipchart kada je poslužitelj pod opterećenjem
Laserom upravlja preko PWM
Shredder koji je pojeo novac prema rasporedu
Dimni stroj koji se uključivao prije svakog laserskog pucanja
Ispitivanje dimnog stroja laserom
Kasnije je dodano svjetlo pozornice koje je stajalo iza okvira i upravljalo se točno kao lampe iz točke 1. Svjetlo pozornice radilo je u dva slučaja: osvjetljavalo je laser kada je na njega priključeno napajanje i osvjetljavalo je uteg prije laser je lansiran u borbenom načinu rada.
Što je ovaj pametni uređaj?
Cijelim se putem Yura, naš hardveraš, trudio ne komplicirati stvari i smisliti što jednostavnije, minimalističkije rješenje.
Pretpostavljalo se da će VPS jednostavno pokrenuti skriptu koja prima json sa stanjem uređaja i šalje ga na Arduino spojen putem USB-a.
Spojen na priključke:
16 običnih releja (oni su proizvodili škljocanje koje se čuje u videu. Odabrali smo ih uglavnom zbog tog zvuka)
4 poluprovodnička releja za kontrolu PWM kanala, kao što su ventilatori,
odvojeni PWM izlaz za laser
izlaz koji generira signal za LED traku
Ovdje je primjer json naredbe koja je stigla na relej s poslužitelja
Kako bismo pratili trenutak kada laser konačno prožima uže i uteg leti na akvarij, napravili smo mali gumb koji se aktivirao kada je uteg pao i dao signal sustavu.
Tipka za praćenje kretanja utega
Na taj signal trebale su zasvijetliti dimne bombe napravljene od ping-pong loptica. Stavili smo 4 dimne baklje direktno u kućište servera i spojili ih nikromskom niti koja se trebala zagrijavati i raditi kao upaljač.
Kućište s dimnim bombama i kineskim vijencem
Arduino
Prema prvotnom planu, na Arduinu su se odvijale dvije akcije.
Prvo, kada je primljen novi zahtjev, zahtjev je raščlanjen pomoću biblioteke ArduinoJson. Zatim je svaki upravljani uređaj uspoređen sa svoja dva svojstva:
stanje napajanja "uključeno" ili "isključeno" (standardno stanje)
period na koji je uređaj uključen - vrijeme u mikrosekundama od početka rada ploče, kada je vrijeme da se ugasi, odnosno dovede stanje u standardno
Zadnji put je postavljeno prilikom primanja odgovarajućeg parametra u JSON-u, ali se nije moglo prenijeti, tada je vrijednost postavljena na 0 i nije došlo do resetiranja.
Druga radnja koju je Arduino izvodio u svakom ciklusu je ažuriranje stanja, odnosno provjera da li je potrebno nešto uključiti ili je vrijeme da se neki uređaj isključi.
Laserski pokazivač - isti Megatron 3000
Ovo je obični LSMVR450-3000MF 3000mW 450nm laserski modul za rezanje i označavanje s ručnim fokusom.
Slova Sokol
Napravljeni su vrlo jednostavno – jednostavno smo iskopirali slova s loga, izrezali ih iz kartona, a zatim oblijepili LED trakom. U ovom slučaju, morao sam zalemiti komade trake zajedno, 4 kontakta na svakom šavu, ali rezultat je bio vrijedan toga. Naš backender Pasha pokazao je čuda od vještine, učinivši to za manje od nekoliko sati.
Prva testiranja iot uređaja i dorada
Odradili smo prve testove i ujedno su nam stigli novi zadaci. Činjenica je da se usred procesa timu pridružio pravi filmski producent i snimatelj iz VGIK-a, Ilya Serov - napravio je okvir, dodao dodatno kino osvjetljenje i malo promijenio scenarij igre kako bi zaplet bio emotivniji, a slika dramatičnija i teatralnija.
Time je značajno povećana kvaliteta, ali su se pojavili elementi koje je također trebalo spojiti na relej i propisati algoritam rada.
Drugi problem bio je laser: napravili smo nekoliko eksperimenata s različitim vrstama užeta i laserima različitih snaga. Za test smo jednostavno okomito objesili uteg na uže.
Prilikom rada s testnim žetonom, snaga regulirana preko PWM-a bila je manja od 10% i nije oštetila uže čak ni uz dugu ekspoziciju.
Za borbeni način, laser je defokusiran na otprilike točku promjera 10 mm i samouvjereno je prožimao uže s opterećenjem s udaljenosti od oko jednog metra.
Dakle, laser je savršeno radio u testovima
Kad smo počeli testirati sve u sobi na visećem utegu, pokazalo se da sigurno učvršćivanje lasera nije tako jednostavno. Zatim, kada uže gori, ono se topi, rasteže i pomiče iz svog izvornog fokusa.
Ali više nije tako išlo: uže se pomaknulo
Ilya je pomaknuo laser na kraj sobe nasuprot užetu kako bi laserska zraka prošla preko cijele pozornice i lijepo izgledala u kadru, što je udvostručilo udaljenost.
Nakon što smo proveli još nekoliko eksperimenata sa spaljivanjem užeta već u borbi, odlučili smo ne mučiti sudbinu i osigurati rezanje užeta nikrom žicom. Uništio je nit 120 sekundi nakon uključivanja lasera u borbenom načinu rada. Odlučili smo to tvrdo kodirati, kao i odspajanje žice i paljenje dimnih bombi kada se aktivira kontakt za odvajanje, izravno u hardver mikrokontrolera.
Nit koja je na kraju progorjela 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 Arduinu dati potrebu da broji novac na TV-u i pokreće uništavač. U početku se pretpostavljalo da će to raditi backend i da će trenutni saldo biti vidljiv na web stranici, a na TV-u ćemo prikazati komentare s YouTubea kao dodatni interaktivni element, govoreći gledateljima da se događaji u sobi događaju u stvarnosti vrijeme.
Ali tijekom probnog rada, Ilya je pogledao scenu i predložio da se na najvećem ekranu prikaže ravnoteža igre: koliko je novca još ostalo, koliko je pojedeno i odbrojavanje do sljedećeg pokretanja sjeckalice.
Vezali smo Arduino za trenutno vrijeme: svaki puni sat pokretao se šreder. Slika se prikazivala na TV-u pomoću rasberry-ja koji je u tom trenutku već primao zahtjeve sa servera i slao ih arduinu na izvršenje. Slike s monetarnim pokazateljima nacrtane su pozivanjem uslužnog programa konzole fim nešto poput ovoga
image = subprocess.Popen(["fim", "-q", "-r", "1920×1080", fim_str]), где fim_str
I formirana je na temelju potrebne količine ili vremena.
Slike smo generirali unaprijed: jednostavno smo snimili gotov video s timerom i izvezli 200 slika.
Ovo je mehanika koja je programirana u križu. Dok je počelo konačno odbrojavanje, svi smo otišli na lice mjesta, naoružali se aparatima za gašenje požara i sjeli čekati vatru (koja je tek u razdoru bila u punom jeku)
Kako napraviti emisiju koja radi tjedan dana: odabir kamere
Za zadatak nam je bilo potrebno kontinuirano emitiranje na YouTubeu 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 neprekidnog rada
prekid interneta
Kamera je morala osigurati barem Full HD sliku kako bi igranje i gledanje u sobi bilo ugodno.
U početku smo gledali prema web kamerama koje su proizvedene za streamere. Rezali smo budžet, pa nismo htjeli kupiti fotoaparat, ali kako se pokazalo, ne iznajmljuju ga. Istog trenutka smo nekim čudom pronašli Xbox Kinect kameru kako leži u mojoj kući, instalirali je u mojoj sobi i pokrenuli testno emitiranje na tjedan dana.
Kamera je dobro radila i nije se pregrijavala, ali Ilya je gotovo odmah primijetio da joj nedostaju postavke, posebice nije bilo moguće postaviti ekspoziciju.
Ilya je nastojao približiti vrstu emitiranja standardima filmske i video produkcije: prenijeti dinamički promjenjivu svjetlosnu scenu s jakim izvorima svjetla, zatamnjenom pozadinom i objektima u kadru. U isto vrijeme, želio sam sačuvati razrađenost slike iu svijetlim dijelovima iu sjenama, uz minimalan digitalni šum.
Stoga, iako se Kinect pokazao pouzdanim u testovima i nije zahtijevao karticu za video snimanje (još jedna točka kvara), odlučili smo ga napustiti. Nakon tri dana testiranja različitih kamera, Ilya je odabrao Sony FDR-AX53 - mali, pouzdani kamkorder koji je jeftin za iznajmljivanje, ali istovremeno ima dovoljnu pouzdanost i vizualne karakteristike.
Iznajmili smo kameru, uključili je na tjedan dana u kombinaciji s video capture karticom i shvatili da s njom možemo računati na kontinuirano emitiranje tijekom cijele potrage.
Snimanje filma: postavljanje scene i rasvjete
Rad na rasvjeti zahtijevao je određenu gracioznost; morali smo napraviti rezultat rasvjete s minimalnim sredstvima:
1. Osvjetljenje predmeta kada ih igrači pronađu (laser, uteg), kao i stalno svjetlo na shredderu. Ovdje smo koristili dedolight 150 - pouzdane i kompaktne filmske rasvjetne uređaje s niskonaponskim halogenim žaruljama, koje vam omogućuju fokusiranje snopa na određeni objekt bez utjecaja na pozadinu i druge objekte.
2. Praktično svjetlo za igru - stolna lampa, podna lampa, zvijezda, girlanda. Sva praktična svjetlost bila je skladno raspoređena u okviru kako bi osvijetlila područje slike, unutra su bile LED svjetiljke s temperaturom boje od 3200 K, svjetiljka u podnoj svjetiljci bila je prekrivena crvenim Rosco folijskim filtrom kako bi se stvorio neobičan naglasak u boji.
Ja sam inženjer kod mame ili je lansiranje sutra
Kako smo rezervirali internet i struju
Problemu tolerancije na pogreške pristupili su gotovo kao u podatkovnom centru: odlučili su ne odstupati od osnovnih načela i rezervirali prema uobičajenoj shemi N+1.
Ako emitiranje na YouTubeu prestane, to znači da se neće biti moguće ponovno spojiti pomoću iste veze i nastaviti stream. Bio je to kritičan trenutak, a soba se nalazila u običnom uredu.
Za ovo smo koristili usmjerivač temeljen na OpenWRT-u i paket mwan3. Automatski je testirao dostupnost kanala svakih 5 sekundi i, u slučaju prekida, prebacivao se na rezervni modem s Yotom. Kao rezultat toga, prebacivanje na rezervni kanal dogodilo se za manje od minute.
Također je bilo jednako važno eliminirati nestanak struje, jer bi čak i kratkotrajni udar struje uzrokovao ponovno pokretanje svih računala.
Stoga smo uzeli neprekinuto napajanje ippon innova g2 3000, koje bi pomoglo svim igraćim uređajima: ukupna potrošnja energije našeg sustava bila je oko 300 W. Trajalo bi 75 minuta, sasvim dovoljno za naše prilike.
Odlučili smo žrtvovati dodatnu rasvjetu u slučaju da nestane struje u sobi - nije bila spojena na neprekidni izvor napajanja.
Blagodarnosti
Cijeloj ekipi RUVDS, koji je izmislio i implementirao igru.
Zasebno, administratorima RUVDS-a, za praćenje rada poslužitelja, opterećenje je bilo prihvatljivo i sve je radilo kao i obično.
Najboljem šefu ntsaplin za činjenicu da je kao odgovor na poziv, “Imam ideju: uzet ćemo server, staviti akvarij na njega, i objesiti uteg iznad njega, bum, bang, sve je poplavljeno vodom, kratki spoj, požar !” uvijek samouvjereno kaže "uradi to!"
Hvala Naklada Tilda a posebno Mikhailu Karpovu jer nije samo izašao na pola puta i dopustio nam da prekršimo Uvjete korištenja, nego nam je čak dao poslovni račun na godinu dana kada smo razgovarali o projektu.
Ilja Serov S_ILya što sam se pridružio i postao koproducent projekta, spreman puzati pola noći, lijepiti LED trake, tražiti tehnička rješenja i činiti sve da dobijemo pravi film.
zhovner za uvijek spreman spasiti situaciju kad drugi dignu ruke, boršu, moralnu podršku i razgovore do jutra.
samat što nas je povezao s najboljim pentesterom u zemlji, koji nas je savjetovao i pomagao oko zadataka.