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.

Povedali smo že sprehodin kako je bilo narejeno zaledje projekt. Čas je za pogovor o strojni opremi in o tem, kako je bila sestavljena.


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.

Strojna oprema projekta: kako smo zgradili sobo s hekersko nalogo
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:

  1. Več namiznih svetilk, imajo vklopljeno/izklopljeno stanje in jih upravljajo igralci
  2. Črke na steni, lahko spremenijo svojo barvo na ukaz igralcev
  3. Ventilatorji, ki se vrtijo in odpirajo flipchart, ko je strežnik obremenjen
  4. Lasersko krmiljen preko PWM
  5. Shredder, ki je jedel denar po urniku
  6. 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?

Strojna oprema projekta: kako smo zgradili sobo s hekersko nalogo

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

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

In to je primer funkcije, s katero je ukaz prišel do Arudina

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

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.

Strojna oprema projekta: kako smo zgradili sobo s hekersko nalogo
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.

Strojna oprema projekta: kako smo zgradili sobo s hekersko nalogo
Ohišje z dimnimi bombami in kitajsko girlando

Strojna oprema projekta: kako smo zgradili sobo s hekersko nalogo

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

Strojna oprema projekta: kako smo zgradili sobo s hekersko nalogo

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.

Strojna oprema projekta: kako smo zgradili sobo s hekersko nalogo
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.

Strojna oprema projekta: kako smo zgradili sobo s hekersko nalogo
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.

Strojna oprema projekta: kako smo zgradili sobo s hekersko nalogo
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:

  1. Pregrevanje kamere zaradi neprekinjenega delovanja
  2. 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.

Strojna oprema projekta: kako smo zgradili sobo s hekersko nalogo
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.
Strojna oprema projekta: kako smo zgradili sobo s hekersko nalogo
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.
  • daniemilk za kul video produkcijo vseh videov.
  • delphe za trdno roko in pripravljenost delati do zadnjega.
  • No Dodo Pizza Engineering za skoraj vedno toplo pico.

In največja hvaležnost gre igralcem za vsa čustva, ki smo jih doživeli, ko ste dva dni brez spanja in celo odlašanja z delom jurišali na iskanje.

Drugi članki o prizadevanju za uničenje strežnika

Strojna oprema projekta: kako smo zgradili sobo s hekersko nalogo

Vir: www.habr.com

Dodaj komentar