Projekt hardver: hogyan építettünk egy szobát egy hacker küldetéssel

Projekt hardver: hogyan építettünk egy szobát egy hacker küldetéssel
Pár héttel ezelőtt töltöttünk online keresés a hackerek számára: építettek egy szobát, amit megtöltöttek okoseszközökkel és YouTube adást indítottak belőle. A játékosok a játék webhelyéről irányíthatják az IoT-eszközöket; A cél az volt, hogy megtaláljanak egy, a szobában elrejtett fegyvert (erős lézermutató), feltörjék és rövidzárlatot okozzanak a szobában.

Az akcióhoz még egy iratmegsemmisítőt helyeztünk el a helyiségben, amibe 200 000 rubelt raktunk: az aprítógép óránként egy számlát evett. A játék megnyerése után leállíthatod az iratmegsemmisítőt, és elviheted az összes maradék pénzt.

Már elmondtuk végigjátszásÉs hogyan készült a backend projekt. Itt az ideje, hogy beszéljünk a hardverről és az összeszerelés módjáról.


Rengeteg kérés érkezett, hogy mutassuk meg a szobatisztítás pillanatát – megmutatjuk, hogyan szedjük szét

Hardver architektúra: Szobavezérlés

A hardveres megoldás tervezését akkor kezdtük el, amikor már nagyjából megértettük a forgatókönyvet, elkészült a háttérrendszer, és volt egy üres helyiségünk a berendezés telepítésére.

Emlékezve a régi viccre „Az S az IoT-ben a biztonságot jelenti” („Az S betű az IoT rövidítésében a biztonságot jelenti”) úgy döntöttünk, hogy a játék forgatókönyvében szereplő játékosok ezúttal csak a front-end és a back-end játékkal lépnek kapcsolatba. az oldalról, de nem kap lehetőséget arra, hogy közvetlenül a vasaláshoz jusson.

Ezt a biztonság és a képernyőn történtek látványossága miatt tették: ha a játékosok közvetlenül hozzáférnek a hardverhez, sokkal nehezebb lenne elkülöníteni a biztonságos és potenciálisan veszélyes műveleteket, például az aprítógép gyors görgetését vagy vezérlését. pirotechnika.

A tervezés megkezdése előtt több alapelvet is megfogalmaztunk a játékeszközök vezérlésére, amelyek a tervezés alapját képezték:

Ne használjon vezeték nélküli megoldásokat

A teljes játéktér egy keretben van, melynek minden sarka elérhető. Nem volt igazán szükség vezeték nélküli kapcsolatokra, és egyszerűen csak egy újabb hibapont lesz.

Ne használjon semmilyen speciális intelligens otthoni eszközt

Főleg a testreszabási rugalmasság kedvéért. Nyilvánvaló, hogy az okosotthon rendszerek számos dobozos változatát testre szabhatjuk kész adminisztrátorral és vezérlőkkel a feladatunkhoz, de a munkaerőköltség összemérhető egy saját egyszerű megoldás létrehozásával.

Ezen kívül olyan eszközöket kellett kitalálni, amelyek egyértelműen mutatják, hogy a játékosok változtatták az állapotát: be-/kikapcsolták, vagy konkrét lámpát raktak a FALCON betűkre.

A nyilvánosan elérhető hardverekből összegyűjtöttük az összes olyan elemet, amely a hagyományos rádióalkatrész-üzletekben megvásárolható: a pizza és a diétás kóla szállítása között folyamatosan érkeztek a helyszínre Chip and Dip és Leroy futárok.

Az a választás, hogy mindent magunk szerelünk össze, leegyszerűsítette a hibakeresést, a méretezhetőséget, azonban nagyobb odafigyelést igényelt a telepítés során.

Az összes relé és arudin ne legyen látható a keretben

Úgy döntöttünk, hogy az összes vezérelhető elemet egy helyre hozzuk, és a színfalak mögé rejtjük, hogy nyomon tudjuk követni a teljesítményüket, és szükség esetén óvatosan kimászva a kamera látóköréből, és kicseréljük a meghibásodott egységet.

Projekt hardver: hogyan építettünk egy szobát egy hacker küldetéssel
Végül mindent az asztal alá rejtettek, a kamerát pedig úgy szerelték be, hogy az asztal alatt semmi se látszódjon. Ez volt a „vakfotunk”, hogy a mérnök felkúszott

Ennek eredményeként tulajdonképpen egy okoseszközt kaptunk: az egyes részeinek állapotát megkapta a háttérrendszertől, és a megfelelő paranccsal megváltoztatta.

Hardveres megvalósítási szempontból ez az eszköz 6 elemet vezérelt:

  1. Több asztali lámpa, be/ki állapotúak és a játékosok vezérlik
  2. Betűk a falon, a játékosok parancsára megváltoztathatják a színüket
  3. Rajongók, akik pörögnek és kinyitják a flipchartot, amikor a szerver terhelés alatt áll
  4. Lézeres vezérlés PWM-en keresztül
  5. Iratmegsemmisítő, aki menetrend szerint evett pénzt
  6. Egy füstgép, amely minden lézerlövés előtt kialudt


Füstgép tesztelése lézerrel

Később hozzáadtak egy színpadi lámpát, ami a keret mögött állt, és pontosan úgy volt vezérelve, mint az 1. pontból származó lámpák. A színpadi lámpa két esetben működött: megvilágította a lézert, amikor rákapcsolták az áramot, és megvilágította a súlyt, mielőtt a lézert harci módban indították el.

Mi volt ez az okoseszköz?

Projekt hardver: hogyan építettünk egy szobát egy hacker küldetéssel

Yura, a hardveres srácunk végig igyekezett nem bonyolítani a dolgokat, és a lehető legegyszerűbb, minimalista megoldást találta ki.

Azt feltételezték, hogy a VPS egyszerűen futtat egy szkriptet, amely megkapja a json-t az eszközök állapotával, és elküldi az USB-n keresztül csatlakoztatott Arduino-nak.

Csatlakozva a portokhoz:

  • 16 normál relé (ők adták azt a csattanó hangot, ami a videóban is hallható. Elsősorban ezért a hang miatt választottuk őket)
  • 4 félvezető relé a PWM csatornák, például ventilátorok vezérléséhez,
  • külön PWM kimenet a lézerhez
  • kimenet, amely jelet generál a LED-szalaghoz

Íme egy példa egy json parancsra, amely a kiszolgálóról érkezett a közvetítőhöz

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

És ez egy példa egy függvényre, amellyel a parancs Arudinohoz jutott

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

Hogy nyomon kövessük azt a pillanatot, amikor a lézer végre átég a kötélen, és a súly az akváriumba repül, készítettünk egy kis gombot, amely a súly leesésekor aktiválódott és jelet adott a rendszernek.

Projekt hardver: hogyan építettünk egy szobát egy hacker küldetéssel
Gomb a súly mozgásának figyelésére

Erre a jelzésre a ping-pong labdákból készült füstbombáknak kellett volna kigyulladniuk. Közvetlenül a szerverházba tettünk 4 füstfáklyát és nikróm menettel összekötöttük, aminek úgy kellett felmelegednie és gyújtóként működnie.

Projekt hardver: hogyan építettünk egy szobát egy hacker küldetéssel
Ház füstbombákkal és kínai füzérrel

Projekt hardver: hogyan építettünk egy szobát egy hacker küldetéssel

Arduino

Az eredeti terv szerint két akció történt az Arduinón.

Először is, amikor új kérés érkezett, a kérést az ArduinoJson könyvtár segítségével elemezte. Ezután minden felügyelt eszközt összehasonlítottunk két tulajdonságával:

  • táp állapot "be" vagy "ki" (normál állapot)
  • az az időtartam, ameddig az eszköz be van kapcsolva - az idő mikroszekundumban a tábla kezdetétől számítva, amikor ideje kikapcsolni, vagyis az állapotot szabványosra állítani

Legutóbb a megfelelő paraméter fogadásakor volt beállítva JSON-ban, de nem lehetett továbbítani, akkor az értéket 0-ra állítottuk, és nem történt visszaállítás.

A második művelet, amelyet az Arduino minden ciklusban végrehajtott, az állapotfrissítés volt, vagyis annak ellenőrzése, hogy kell-e valamit bekapcsolni, vagy ideje lenne kikapcsolni bármely eszközt.

Lézermutató - ugyanaz a Megatron 3000

Projekt hardver: hogyan építettünk egy szobát egy hacker küldetéssel

Ez egy hagyományos LSMVR450-3000MF 3000mW 450nm kézi fókuszú lézervágó és jelölő modul.

Letters Falcon

Nagyon egyszerűen készültek - egyszerűen lemásoltuk a logó betűit, kivágtuk kartonból, majd letakartuk LED szalaggal. Ebben az esetben össze kellett forrasztanom a szalagdarabokat, minden varraton 4 érintkezőt, de az eredmény megérte. A hátvédünk pasa ügyességi csodákat mutatott be, alig néhány óra alatt.

Az iot eszköz első tesztjei és befejezése

Megcsináltuk az első teszteket és ezzel egy időben újabb feladatok is érkeztek hozzánk. A helyzet az, hogy a folyamat közepén egy igazi filmproducer és operatőr a VGIK-től, Ilya Serov csatlakozott a csapathoz - megépítette a keretet, további mozivilágítást adott hozzá, és kissé megváltoztatta a játék forgatókönyvét, hogy érzelmesebb legyen a cselekmény, és a kép drámaibb és teátrálisabb.

Ez jelentősen javította a minőséget, de megjelentek olyan elemek, amelyeket szintén a reléhez kellett kötni és az előírt működési algoritmust.

A másik probléma a lézer volt: számos kísérletet végeztünk különböző típusú kötélekkel és különböző teljesítményű lézerekkel. A teszthez egyszerűen felakasztottunk egy súlyt függőlegesen egy kötélre.

Tesztjelzővel való futásnál a PWM-en keresztül szabályozott teljesítmény 10% alatti volt, és hosszú expozíció mellett sem károsította a kötelet.

Harci módban a lézert körülbelül 10 mm átmérőjű pontra defókuszáltuk, és körülbelül egy méteres távolságból magabiztosan égett át egy kötélen.

Projekt hardver: hogyan építettünk egy szobát egy hacker küldetéssel
Tehát a lézer tökéletesen működött a teszteken

Amikor elkezdtünk mindent tesztelni a szobában egy felfüggesztett súlyon, kiderült, hogy a lézer biztonságos rögzítése nem is olyan egyszerű. Aztán amikor a kötél ég, megolvad, megnyúlik és kimozdul eredeti fókuszából.

Projekt hardver: hogyan építettünk egy szobát egy hacker küldetéssel
De ez már nem így működött: a kötél elmozdult

Ilja a lézert a kötéllel szemközti terem végébe mozgatta, hogy a lézersugár áthaladjon az egész színpadon, és gyönyörűen nézzen ki a keretben, ami megduplázta a távolságot.

Miután több kísérletet is elvégeztünk a kötél égetésével már a csatában, úgy döntöttünk, hogy nem kínozzuk a sorsot, és nikrómhuzallal biztosítjuk a kötél elvágását. 120 másodperccel azután, hogy a lézert harci módban bekapcsolta, elpusztította a fonalat. Úgy döntöttünk, hogy ezt, valamint a vezeték leválasztását és a füstbombák gyújtását az elválasztó érintkező kioldásakor közvetlenül a mikrokontroller hardverébe kódoljuk.

Projekt hardver: hogyan építettünk egy szobát egy hacker küldetéssel
A szál, amely végül átégett a kötelen a képernyőn kívül

Így megjelent egy harmadik feladat is, amelyet az Arduino megoldott - hogy kidolgozza a parancsok végrehajtásához kapcsolódó szekvenciákat.

Azt is elhatároztuk, hogy az Arduino-nak szüksége lesz arra, hogy pénzt számoljon a TV-n, és működtesse az iratmegsemmisítőt. Kezdetben azt feltételezték, hogy ezt a backend fogja megtenni, és az aktuális egyenleg látható lesz a weboldalon, a TV-n pedig további interaktív elemként megjelenítjük a YouTube-ról érkező kommenteket, amelyek azt mondják a nézőknek, hogy a teremben zajló események a valóságban zajlanak. idő.

Ám a próbaüzem során Ilja megnézte a jelenetet, és azt javasolta, hogy a játékegyenleget mutassák a legnagyobb képernyőn: mennyi pénz maradt még, mennyit evett meg, és a visszaszámlálás az aprítógép következő indításához.

Az Arduinót az aktuális időhöz kötöttük: minden teljes órán elindult az aprítógép. A kép a TV-n Rasberry segítségével jelent meg, amely abban a pillanatban már kapott kéréseket a szervertől, és elküldte azokat az arduinónak végrehajtásra. A monetáris mutatókkal ellátott képeket a fim konzol segédprogramnak valami ilyesminek nevezve rajzoltuk

image = subprocess.Popen(["fim", "-q", "-r", "1920×1080", fim_str]), где fim_str

És a szükséges mennyiség vagy idő alapján alakult.

A képeket előre legeneráltuk: egyszerűen készítettünk egy kész videót időzítővel és exportáltunk 200 képet.

Ez az a mechanika, amelyet a keresztbe programoztak. Mire az utolsó visszaszámlálás elkezdődött, mindannyian a helyszínre mentünk, felfegyverkeztünk tűzoltó készülékekkel és leültünk várni a tüzet (ami még csak javában volt a viszályban)

Hogyan készítsünk egy hétig működő adást: kameraválasztás

A küldetéshez 7 napig folyamatos közvetítésre volt szükségünk a YouTube-on – pontosan ezt állítottuk be a játék maximális időtartamának. Két dolog akadályozhatott meg minket:

  1. A kamera túlmelegedése folyamatos működés miatt
  2. Internet kimaradás

A kamerának legalább Full HD képet kellett biztosítania, hogy kényelmes legyen a játék és a szoba nézése.

Kezdetben a streamerekhez készült webkamerák felé néztünk. Csökkentettük a költségvetésünket, így nem akartunk fényképezőgépet venni, de mint kiderült, nem bérelnek. Ugyanabban a pillanatban csodával határos módon találtunk a házamban egy Xbox Kinect kamerát, felszereltük a szobámba, és elindítottunk egy hétig tartó tesztadást.

A fényképezőgép jól működött, és nem melegedett túl, de Ilya szinte azonnal észrevette, hogy hiányoznak a beállítások, különösen az expozíciót nem lehet beállítani.

Ilja arra törekedett, hogy a közvetítés típusát közelebb hozza a film- és videógyártás színvonalához: dinamikusan változó fényjelenetet közvetítsen erős fényforrásokkal, elsötétített háttérrel és a keretben lévő tárgyakkal. Ugyanakkor szerettem volna megőrizni a kép kidolgozottságát fény- és árnyékban is, minimális digitális zaj mellett.

Ezért, bár a Kinect megbízhatónak bizonyult a teszteken, és nem igényelt videorögzítő kártyát (egy másik hibapont), úgy döntöttünk, hogy elhagyjuk. Három napos különféle kamerák tesztelése után Ilya a Sony FDR-AX53-at választotta - egy kicsi, megbízható kamerát, amelyet olcsón bérelhet, ugyanakkor kellő megbízhatósággal és vizuális jellemzőkkel rendelkezik.

Béreltünk egy kamerát, egy hétre bekapcsoltuk a videórögzítő kártyával együtt, és rájöttünk, hogy ezzel a küldetés teljes ideje alatt folyamatos adásra számíthatunk.

Filmkészítés: színpad és világítás

A világításon való munka bizonyos kecsességet igényelt, minimális eszközökkel kellett világítási partitúrát készítenünk:

1. Tárgyak megvilágítása, amikor a játékosok megtalálják őket (lézer, súly), valamint állandó fény az iratmegsemmisítőn. Itt a dedolight 150-et használtuk - megbízható és kompakt filmes világítóeszközök alacsony feszültségű halogén lámpákkal, amelyek lehetővé teszik a fénysugár egy adott tárgyra történő fókuszálását anélkül, hogy a háttér és más tárgyak befolyásolnák.

2. Praktikus játékfény - asztali lámpa, állólámpa, csillag, füzér. A keretben minden praktikus fény harmonikusan eloszlott, hogy megvilágítsa a képterületet, belül 3200K színhőmérsékletű LED lámpák voltak, az állólámpában lévő lámpát piros Rosco fóliaszűrő borította, hogy szokatlan színárnyalatot keltsen.

Projekt hardver: hogyan építettünk egy szobát egy hacker küldetéssel
Mérnök vagyok az anyámnál, vagy holnap lesz a bemutató

Hogyan foglaltuk le az internetet és az áramot

Szinte úgy közelítették meg a hibatűrés kérdését, mint egy adatközpontban: úgy döntöttek, nem térnek el az alapelvektől, és a megszokott N+1 séma szerint foglaltak.

Ha a YouTube-on leáll a közvetítés, ez azt jelenti, hogy nem lehet újracsatlakozni ugyanazon a linken és folytatni a streamet. Kritikus pillanat volt, és a szoba egy rendes irodában volt.

Ehhez egy OpenWRT-alapú útválasztót és az mwan3 csomagot használtuk. 5 másodpercenként automatikusan tesztelte a csatorna elérhetőségét, és szünet esetén a Yotával átváltott a tartalék modemre. Ennek eredményeként a tartalék csatornára való váltás kevesebb mint egy perc alatt megtörtént.
Projekt hardver: hogyan építettünk egy szobát egy hacker küldetéssel
Ugyanilyen fontos volt az áramkimaradások kiküszöbölése is, mert még egy rövid távú áramkimaradás is az összes számítógép újraindítását okozza.

Ezért vettünk egy ippon innova g2 3000 szünetmentes tápegységet, amely az összes játékeszközt menti: rendszerünk teljes fogyasztása 300 Watt körül alakult. 75 percig tartana, a mi céljainknak elég.

Úgy döntöttünk, hogy feláldozzuk a kiegészítő világítást arra az esetre, ha a helyiségben kialszik az áram – nem volt csatlakoztatva szünetmentes tápegységhez.

Köszönetnyilvánítás

  • Az egész csapatnak RUVDS, aki kitalálta és megvalósította a játékot.
  • Külön-külön a RUVDS rendszergazdáknak, a szerverek munkájának figyelésére a terhelés elfogadható volt, és minden a megszokott módon működött.
  • A legjobb főnöknek ntsaplin amiért a felhívásra: „Van egy ötletem: veszünk egy szervert, rakunk rá egy akváriumot, és akasztunk fölé egy súlyt, bumm, bumm, mindent elönt a víz, rövidzárlat, tűz !” mindig magabiztosan mondja: „Csináld!”
  • Köszönöm Tilda Kiadó és külön Mikhail Karpovnak, amiért nemcsak félúton találkozott, és megengedte, hogy megszegjük a használati feltételeket, de még egy évre üzleti fiókot is adott nekünk, amikor a projektről beszéltünk.
  • Ilja Szerov S_ILya a projekthez való csatlakozásért és társproducerré válásért, készen arra, hogy fél éjszakát mászkáljunk, LED szalagot ragasztunk, műszaki megoldásokat keresünk és mindent megteszünk, hogy igazi filmet kapjunk.
  • zhovner mert mindig készen álltak arra, hogy megmentsék azt a helyzetet, amikor mások feldobják a kezüket, borscsot, erkölcsi támogatást és reggelig beszélgetéseket.
  • samat amiért összeköt minket az ország legjobb pentesterével, aki tanácsot adott és segített a feladatokban.
  • daniemilk az összes videó menő videókészítéséhez.
  • delphe a határozott kézért és a végsőkig való munkakészségért.
  • jól Dodo Pizza Engineering szinte mindig meleg pizzához.

És a legnagyobb hála a játékosoknak illeti mindazokat az érzelmeket, amelyeket átéltünk, miközben két napig rohamoztátok a küldetést alvás és még a munka halogatása nélkül is.

További cikkek a szerver megsemmisítésének küldetéséről

Projekt hardver: hogyan építettünk egy szobát egy hacker küldetéssel

Forrás: will.com

Hozzászólás