ProHoster > Blog > Uprava > Strojna oprema projekta: kako smo zgradili sobo s hekersko nalogo
Strojna oprema projekta: kako smo zgradili sobo s hekersko nalogo
Pred nekaj tedni smo preživeli spletno iskanje hekerjev: zgradili so sobo, ki so jo napolnili s pametnimi napravami in iz nje zagnali YouTube oddajo. Igralci so lahko upravljali naprave IoT s spletnega mesta igre; Cilj je bil najti v sobi skrito orožje (močan laserski kazalec), ga vdreti in povzročiti kratek stik v prostoru.
Za popestritev akcije smo v sobo postavili drobilnik, v katerega smo naložili 200 rubljev: drobilnik je pojedel en bankovec na uro. Po zmagi v igri lahko ustavite drobilnik in vzamete ves preostali denar.
Bilo je veliko prošenj, da bi prikazali trenutek čiščenja sobe - pokažemo, kako jo razstavimo
Arhitektura strojne opreme: Sobni nadzor
S snovanjem strojne rešitve smo se lotili, ko je bil scenarij že približno razumljen, backend pripravljen in smo imeli pripravljen prazen prostor za namestitev opreme.
Ob spominu na staro šalo »The S in IoT pomeni varnost« (»črka S v kratici IoT pomeni varnost«), smo se odločili, da tokrat igralci v scenariju igre komunicirajo samo s sprednjim in zadnjim delom mesta, vendar ne dobijo priložnosti, da pridejo neposredno do železa.
To je bilo storjeno zaradi varnosti in spektakla dogajanja na zaslonu: z neposrednim dostopom igralcev do strojne opreme bi bilo veliko težje izolirati varna in potencialno nevarna dejanja, na primer hitro drsenje drobilnika ali nadzor pirotehnika.
Pred začetkom zasnove smo oblikovali več principov za krmiljenje igralnih naprav, ki so postali osnova zasnove:
Ne uporabljajte brezžičnih rešitev
Celoten igralni prostor je v enem okvirju, katerega dosegljiv je vsak kotiček. Ni bilo prave potrebe po brezžičnih povezavah in bi preprosto postale še ena točka neuspeha.
Ne uporabljajte posebnih naprav za pametni dom
Predvsem zaradi fleksibilnosti prilagajanja. Jasno je, da lahko prilagodimo številne škatlaste različice sistemov pametnega doma z že pripravljenimi skrbniškimi in kontrolniki za našo nalogo, vendar bi bili stroški dela primerljivi z ustvarjanjem lastne preproste rešitve.
Poleg tega je bilo treba pripraviti naprave, ki bi jasno pokazale, da so bili igralci tisti, ki so spremenili njegovo stanje: ga vklopili/izklopili ali prižgali določeno lučko na črki FALCON.
Vse elemente smo zbrali iz javno dostopne strojne opreme, ki jo je mogoče kupiti v običajnih trgovinah z radijskimi deli: med dostavo pice in dietne kole so na spletno mesto nenehno prihajali kurirji Chip in Dip ter Leroy.
Odločitev, da vse sestavimo sami, je poenostavila odpravljanje napak, razširljivost pa je zahtevala večjo previdnost pri namestitvi.
Vsi releji in arudin ne smejo biti vidni v okvirju
Odločili smo se, da vse elemente, ki jih je mogoče nadzorovati, združimo na eno mesto in jih skrijemo v zakulisje, da lahko spremljamo njihovo delovanje in se po potrebi previdno splazimo iz vidnega polja kamere ter zamenjamo okvarjeno enoto.
Na koncu so vse skrili pod mizo, kamero pa namestili tako, da se pod mizo ni nič videlo. To je bila naša "slepa pega", da se je inženir lahko prikradel
Kot rezultat smo dejansko dobili eno pametno napravo: ta je iz zaledja prejela stanje vsakega svojega dela in ga z ustreznim ukazom spremenila.
Z vidika izvedbe strojne opreme je ta naprava nadzorovala 6 elementov:
Več namiznih svetilk, imajo vklopljeno/izklopljeno stanje in jih upravljajo igralci
Črke na steni, lahko spremenijo svojo barvo na ukaz igralcev
Ventilatorji, ki se vrtijo in odpirajo flipchart, ko je strežnik obremenjen
Lasersko krmiljen preko PWM
Shredder, ki je jedel denar po urniku
Dimni stroj, ki se je sprožil pred vsakim laserskim strelom
Testiranje dimne naprave z laserjem
Kasneje je bila dodana odrska luč, ki je stala za okvirjem in je bila krmiljena natanko tako kot svetilke iz točke 1. Odrska luč je delovala v dveh primerih: osvetlila je laser ob dovodu energije in osvetlila utež pred laser je bil izstreljen v bojnem načinu.
Kaj je bila ta pametna naprava?
Yura, naš strojničar, se je ves čas trudil, da ne bi kompliciral in prišel do čim preprostejše, minimalistične rešitve.
Predvidevalo se je, da bo VPS preprosto zagnal skript, ki prejme json s stanjem naprav in ga pošlje v Arduino, povezan prek USB-ja.
Povezan na vrata:
16 običajnih relejev (tisti so oddajali klikajoče zvoke, ki se slišijo v videu. Izbrali smo jih predvsem zaradi tega zvoka)
4 polprevodniški releji za krmiljenje kanalov PWM, kot so ventilatorji,
ločen PWM izhod za laser
izhod, ki generira signal za LED trak
Tukaj je primer ukaza json, ki je v rele prišel s strežnika
Da bi izsledili trenutek, ko laser končno prežge vrv in utež poleti na akvarij, smo naredili majhen gumb, ki se je sprožil, ko je utež padla in dal signal sistemu.
Gumb za spremljanje gibanja uteži
Ob tem znaku naj bi se zasvetile dimne bombe iz žogic za namizni tenis. Direktno v strežniško ohišje smo postavili 4 dimne rakete in jih povezali z nikrom navojem, ki naj bi se segreval in deloval kot vžigalnik.
Ohišje z dimnimi bombami in kitajsko girlando
Arduino
Po prvotnem načrtu sta na Arduinu potekali dve akciji.
Najprej, ko je bila prejeta nova zahteva, je bila zahteva razčlenjena s knjižnico ArduinoJson. Nato je bila vsaka upravljana naprava primerjana z dvema lastnostma:
stanje napajanja "vklopljeno" ali "izklopljeno" (standardno stanje)
obdobje, za katero je naprava vklopljena - čas v mikrosekundah od začetka plošče, ko je čas, da jo izklopite, to je, da stanje spravite v standard
Nazadnje je bil nastavljen ob prejemu ustreznega parametra v JSON, vendar ga ni bilo mogoče prenesti, nato pa je bila vrednost nastavljena na 0 in do ponastavitve ni prišlo.
Drugo dejanje, ki ga je Arduino izvajal v vsakem ciklu, je bilo posodabljanje stanj, torej preverjanje, ali je treba nekaj vklopiti ali je čas za izklop katere koli naprave.
Laserski kazalec - isti Megatron 3000
To je običajni modul za lasersko rezanje in označevanje LSMVR450-3000MF 3000 mW 450 nm z ročnim ostrenjem.
Pisma Sokol
Narejeni so bili zelo preprosto – črke smo enostavno prekopirali iz logotipa, jih izrezali iz kartona, nato pa prelepili z LED trakom. V tem primeru sem moral kose traku spajkati skupaj, 4 kontakte na vsakem šivu, a rezultat je bil vreden. Naš backender Pasha je pokazal čudeže spretnosti, saj je to naredil v manj kot nekaj urah.
Prvi testi iot naprave in dodelava
Naredili smo prve teste in hkrati so k nam priletele nove naloge. Dejstvo je, da se je sredi procesa ekipi pridružil pravi filmski producent in snemalec iz VGIK-a, Ilya Serov - zgradil je okvir, dodal dodatno osvetlitev kinematografa in nekoliko spremenil scenarij igre, da je bil zaplet bolj čustven, in slika bolj dramatična in teatralna.
S tem se je kakovost bistveno povečala, pojavili pa so se elementi, ki jih je bilo treba povezati tudi z relejem in predpisati algoritem delovanja.
Druga težava je bil laser: naredili smo več poskusov z različnimi vrstami vrvi in laserji različnih moči. Za preizkus smo preprosto navpično obesili utež na vrv.
Pri teku s testnim žetonom je bila moč, regulirana preko PWM, manjša od 10% in ni poškodovala vrvi niti pri dolgi izpostavljenosti.
Za bojni način je bil laser defokusiran na približno točko s premerom 10 mm in je samozavestno prežgal vrv z obremenitvijo z razdalje približno metra.
Tako je laser na testih deloval brezhibno
Ko smo začeli preizkušati vse kar v prostoru na viseči uteži, se je izkazalo, da varna pritrditev laserja ni tako enostavna. Potem, ko vrv gori, se stopi, raztegne in premakne iz prvotnega fokusa.
A ni šlo več tako: vrv se je premaknila
Ilya je premaknil laser na konec sobe nasproti vrvi, tako da je laserski žarek šel čez celoten oder in izgledal lepo v kadru, kar je podvojilo razdaljo.
Potem ko smo izvedli še nekaj poskusov s sežiganjem vrvi že v boju, smo se odločili, da ne bomo mučili usode in zavarovali rezanje vrvi z nikromovo žico. Uničil je nit 120 sekund po vklopu laserja v bojnem načinu. Odločili smo se, da to, kot tudi odklop žice in vžig dimnih bomb, ko se sproži ločilni kontakt, trdo kodiramo neposredno v strojno opremo mikrokrmilnika.
Nit, ki je na koncu pregorela vrv zunaj zaslona
Tako se je pojavila tretja naloga, ki jo je rešil Arduino - izdelati zaporedja, povezana z izvajanjem teh ukazov.
Prav tako smo se odločili, da Arduinu omogočimo štetje denarja na televiziji in zagon drobilnika. Sprva je bilo predvideno, da bo to naredilo zaledje in bo trenutno stanje vidno na spletni strani, na televiziji pa bomo kot dodaten interaktivni element prikazovali komentarje z YouTuba, ki bodo gledalcem sporočali, da se dogodki v sobi dogajajo v resnici. čas.
Toda med preizkusom je Ilya pogledal prizorišče in predlagal prikaz stanja igre na največjem zaslonu: koliko denarja je še ostalo, koliko je bilo pojedenega in odštevanje do naslednjega zagona drobilnika.
Arduino smo vezali na trenutni čas: vsako polno uro se je zagnal drobilnik. Slika se je na TV prikazovala s pomočjo rasberryja, ki je v tistem trenutku že prejemal zahteve s strežnika in jih pošiljal arduinu v izvedbo. Slike z denarnimi indikatorji so bile narisane s klicem pripomočka konzole fim nekaj takega
image = subprocess.Popen(["fim", "-q", "-r", "1920×1080", fim_str]), где fim_str
In je bil oblikovan glede na zahtevano količino ali čas.
Slike smo ustvarili vnaprej: preprosto smo posneli že pripravljen video s časovnikom in izvozili 200 slik.
To je mehanika, ki je bila vprogramirana v križ. Ko se je začelo končno odštevanje, smo vsi odšli na kraj, se oborožili z gasilnimi aparati in se usedli, da bi počakali na požar (ki je bil v polnem teku šele v razdoru)
Kako narediti oddajo, ki deluje en teden: izbira kamere
Za nalogo smo potrebovali neprekinjeno oddajanje na YouTubu 7 dni - točno toliko smo določili kot največje trajanje igre. Dve stvari sta nas lahko ustavili:
Pregrevanje kamere zaradi neprekinjenega delovanja
izpad interneta
Kamera je morala zagotavljati vsaj sliko Full HD, da je bilo igranje in gledanje v sobi udobno.
Sprva smo iskali spletne kamere, ki so izdelane za stremerje. Zmanjševali smo proračun, zato nismo želeli kupiti fotoaparata, a kot se je izkazalo, jih ne najemajo. V istem trenutku smo čudežno našli kamero Xbox Kinect, ki je ležala v moji hiši, jo namestili v mojo sobo in začeli testno oddajanje za en teden.
Kamera je delovala dobro in se ni pregrevala, vendar je Ilya skoraj takoj opazil, da nima nastavitev, zlasti ni bilo mogoče nastaviti osvetlitve.
Ilya je želel vrsto oddaje približati standardom filmske in video produkcije: prenesti dinamično spreminjajočo se svetlobno sceno s svetlimi viri svetlobe, zatemnjenim ozadjem in predmeti v kadru. Hkrati sem želel ohraniti elaboracijo slike tako v svetlih delih kot v sencah, z minimalnim digitalnim šumom.
Čeprav se je Kinect na testih izkazal za zanesljivega in ni zahteval kartice za zajem videa (še ena pomanjkljivost), smo se odločili, da ga opustimo. Po treh dneh preizkušanja različnih kamer je Ilya izbral Sony FDR-AX53 - majhno, zanesljivo videokamero, ki je poceni za najem, a ima hkrati dovolj zanesljive in vizualne lastnosti.
Najeli smo kamero, jo prižgali za en teden v povezavi s kartico za zajem videa in ugotovili, da z njo lahko računamo na neprekinjeno predvajanje skozi celotno iskanje.
Snemanje filma: postavitev scene in luči
Delo na osvetlitvi je zahtevalo določeno milost; morali smo ustvariti rezultat osvetlitve z minimalnimi sredstvi:
1. Osvetlitev predmetov, ko jih igralci najdejo (laser, utež), kot tudi stalna svetloba na drobilniku. Tu smo uporabili dedolight 150 - zanesljive in kompaktne filmske svetilke z nizkonapetostnimi halogenskimi žarnicami, ki vam omogočajo, da usmerite žarek na določen predmet, ne da bi pri tem vplivali na ozadje in druge predmete.
2. Praktična igralna luč - namizna svetilka, stoječa svetilka, zvezda, girlanda. Vsa praktična svetloba je bila harmonično razporejena v okvirju za osvetlitev območja slike, v notranjosti so bile LED sijalke z barvno temperaturo 3200 K, svetilka v talni svetilki je bila prekrita z rdečim filtrom iz folije Rosco, ki je ustvaril nenavaden barvni poudarek.
Sem inženir pri mami ali pa je izstrelitev jutri
Kako smo rezervirali internet in elektriko
K vprašanju tolerance napak so pristopili skoraj kot v podatkovnem centru: odločili so se, da ne bodo odstopali od osnovnih načel in rezervirali po običajni shemi N+1.
Če se predvajanje na YouTubu ustavi, to pomeni, da se ne bo mogoče znova povezati z isto povezavo in nadaljevati predvajanja. Bil je kritičen trenutek in soba je bila v redni pisarni.
Za to smo uporabili usmerjevalnik, ki temelji na OpenWRT, in paket mwan3. Samodejno je testiral razpoložljivost kanala vsakih 5 sekund in v primeru prekinitve preklopil na rezervni modem z Yoto. Posledično se je preklop na rezervni kanal zgodil v manj kot minuti.
Enako pomembno je bilo tudi odpraviti izpade električne energije, saj bi že kratkotrajni sunek električne energije povzročil ponovni zagon vseh računalnikov.
Zato smo vzeli brezprekinitveni napajalnik ippon innova g2 3000, ki bi podprl vse igralne naprave: skupna poraba energije našega sistema je bila okoli 300 vatov. Trajal bi 75 minut, kar je za naše pojme povsem dovolj.
Odločili smo se, da žrtvujemo dodatno razsvetljavo, če bi v sobi zmanjkalo elektrike - ni bila priključena na neprekinjeno napajanje.
Zahvala
Celotni ekipi RUVDS, ki je igro izumil in implementiral.
Ločeno, skrbnikom RUVDS, za spremljanje dela strežnikov je bila obremenitev sprejemljiva in vse je delovalo kot običajno.
Najboljšemu šefu ntsaplin za to, da je v odgovoru na klic: »Imam idejo: vzamemo strežnik, nanj postavimo akvarij in nad njim obesimo utež, bum, bum, vse je zalito z vodo, kratek stik, požar. !« vedno samozavestno reče "naredi to!"
Hvala Založba Tilda in ločeno Mihailu Karpovu, ker se ni le srečal na pol poti in nam dovolil kršiti pogoje uporabe, ampak nam je celo dal poslovni račun za eno leto, ko smo govorili o projektu.
Ilja Serov S_ILya da sem se pridružil in postal koproducent projekta, pripravljen pol noči laziti, lepiti LED trak, iskati tehnične rešitve in delati vse, da dobimo pravi film.
zhovner za vedno pripravljenost rešiti položaj, ko so drugi dvignili roke, boršč, moralna podpora in pogovori do jutra.
samat da nas je povezal z najboljšim pentesterjem v državi, ki nam je svetoval in pomagal pri nalogah.