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.

Već smo rekli prolazakI kako je backend napravljen projekt. Vrijeme je da razgovaramo o hardveru i kako je sastavljen.


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.

Projekt hardver: kako smo izgradili sobu s hakerskom potragom
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:

  1. Nekoliko stolnih lampi, imaju uključeno/isključeno stanje i njima upravljaju igrači
  2. Slova na zidu, mogu promijeniti svoju boju na naredbu igrača
  3. Ventilatori koji se okreću i otvaraju flipchart kada je poslužitelj pod opterećenjem
  4. Laserom upravlja preko PWM
  5. Shredder koji je pojeo novac prema rasporedu
  6. 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?

Projekt hardver: kako smo izgradili sobu s hakerskom potragom

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

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

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

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

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.

Projekt hardver: kako smo izgradili sobu s hakerskom potragom
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č.

Projekt hardver: kako smo izgradili sobu s hakerskom potragom
Kućište s dimnim bombama i kineskim vijencem

Projekt hardver: kako smo izgradili sobu s hakerskom potragom

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

Projekt hardver: kako smo izgradili sobu s hakerskom potragom

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.

Projekt hardver: kako smo izgradili sobu s hakerskom potragom
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.

Projekt hardver: kako smo izgradili sobu s hakerskom potragom
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.

Projekt hardver: kako smo izgradili sobu s hakerskom potragom
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:

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

Projekt hardver: kako smo izgradili sobu s hakerskom potragom
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.
Projekt hardver: kako smo izgradili sobu s hakerskom potragom
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.
  • daniemilk za cool video produkciju svih videa.
  • delphe za čvrstu ruku i spremnost na rad do posljednjeg.
  • dobro Dodo Pizza Engineering za gotovo uvijek toplu pizzu.

A najveća zahvalnost ide igračima za sve emocije koje smo doživjeli dok ste dva dana bez sna i čak odgađanja posla jurišali na potragu.

Ostali članci o misiji uništavanja poslužitelja

Projekt hardver: kako smo izgradili sobu s hakerskom potragom

Izvor: www.habr.com

Dodajte komentar