Projekthårdvara: hur vi byggde ett rum med ett hackeruppdrag

Projekthårdvara: hur vi byggde ett rum med ett hackeruppdrag
För ett par veckor sedan spenderade vi onlineuppdrag för hackare: de byggde ett rum, som de fyllde med smarta enheter och lanserade en YouTube-sändning från det. Spelare kunde styra IoT-enheter från spelwebbplatsen; Målet var att hitta ett vapen gömt i rummet (en kraftfull laserpekare), hacka det och orsaka en kortslutning i rummet.

För att lägga till åtgärden placerade vi en dokumentförstörare i rummet, i vilken vi laddade 200 000 rubel: dokumentförstöraren åt en sedel per timme. Efter att ha vunnit spelet kan du stoppa dokumentförstöraren och ta alla återstående pengar.

Vi har redan berättat genomgångOch hur backend gjordes projekt. Det är dags att prata om hårdvaran och hur den monterades.


Det var många förfrågningar om att visa ögonblicket för att städa ett rum - vi visar hur vi tar isär det

Hårdvaruarkitektur: Rumskontroll

Vi började designa en hårdvarulösning när scenariot redan var grovt förstått, backend var redo och vi hade ett tomt rum redo att installera utrustningen.

Genom att komma ihåg det gamla skämtet "Set i IoT står för säkerhet" ("Bokstaven S i IoT-förkortningen står för säkerhet"), bestämde vi oss för att den här gången interagerar spelarna i spelscenariot endast med front-end och back-end av platsen, men får inte möjlighet att komma direkt till järnet.

Detta gjordes av säkerhetsskäl och spektakel av vad som hände på skärmen: med direkt tillgång till hårdvaran av spelare skulle det vara mycket svårare att isolera säkra och potentiellt farliga handlingar, till exempel snabb rullning av en dokumentförstörare eller kontroll pyroteknik.

Innan vi började designen formulerade vi flera principer för att styra spelenheter, som blev grunden för designen:

Använd inte trådlösa lösningar

Hela spelutrymmet är i en ram, vars hörn kan nås. Det fanns inget verkligt behov av trådlösa anslutningar och de skulle helt enkelt bli ytterligare en misslyckande.

Använd inga speciella smarta hemenheter

Främst för anpassningsflexibilitetens skull. Det är klart att vi kan anpassa många boxade versioner av smarta hemsystem med färdig admin och kontroller för vår uppgift, men arbetskostnaderna skulle vara jämförbara med att skapa din egen enkla lösning.

Dessutom var det nödvändigt att komma med enheter som tydligt skulle visa att det var spelarna som ändrade dess tillstånd: de slog på/stänger av det eller satte ett specifikt ljus på bokstäverna FALCON.

Vi samlade alla element från allmänt tillgänglig hårdvara som kan köpas i vanliga radiobutiker: mellan leverans av pizza och dietcola kom kurirerna Chip and Dip och Leroy ständigt till sajten.

Valet att montera allt själva förenklade felsökningen, skalbarheten krävde dock större försiktighet under installationen.

Alla reläer och arudin ska inte synas i ramen

Vi bestämde oss för att samla alla kontrollerbara element på ett ställe och gömma dem bakom kulisserna för att kunna övervaka deras prestanda och vid behov försiktigt krypa utom synhåll från kameran och byta ut den misslyckade enheten.

Projekthårdvara: hur vi byggde ett rum med ett hackeruppdrag
Till slut gömdes allt under bordet, och kameran installerades så att ingenting syntes under bordet. Detta var vår "blinda fläck" för ingenjören att krypa fram

Som ett resultat fick vi faktiskt en smart enhet: den fick tillståndet för var och en av dess delar från backend och ändrade den med lämpligt kommando.

Ur en hårdvaruimplementeringssynpunkt kontrollerade den här enheten 6 element:

  1. Flera bordslampor, de har ett on/off-läge och styrs av spelare
  2. Bokstäver på väggen, de kan ändra färg på spelarnas kommando
  3. Fläktar som snurrar och öppnar blädderblocket när servern är under belastning
  4. Laserstyrd via PWM
  5. Shredder som åt pengar enligt schemat
  6. En rökmaskin som gick av före varje laserskott


Testar en rökmaskin med laser

Senare tillkom ett scenljus, som stod bakom ramen och styrdes precis som lamporna från punkt 1. Scenljuset fungerade i två fall: det lyste upp lasern när ström sattes på den, och det lyste upp vikten innan laser lanserades i stridsläge.

Vad var denna smarta enhet?

Projekthårdvara: hur vi byggde ett rum med ett hackeruppdrag

Hela vägen försökte Yura, vår hårdvarukille, att inte komplicera saker och ting och komma på den enklaste, minimalistiska lösningen som möjligt.

Det antogs att VPS helt enkelt skulle köra ett skript som tar emot json med enheternas tillstånd och skickar det till Arduino ansluten via USB.

Ansluten till portarna:

  • 16 vanliga reläer (det var de som gjorde det klickljud som hördes i videon. Vi valde dem främst på grund av detta ljud)
  • 4 halvledarreläer för styrning av PWM-kanaler, såsom fläktar,
  • separat PWM-utgång för laser
  • utgång som genererar en signal till LED-remsan

Här är ett exempel på ett json-kommando som kom till reläet från servern

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

Och detta är ett exempel på en funktion med vilken kommandot kom till Arudino

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

För att spåra ögonblicket när lasern äntligen brinner genom repet och vikten flyger in på akvariet, gjorde vi en liten knapp som triggades när vikten föll och gav en signal till systemet.

Projekthårdvara: hur vi byggde ett rum med ett hackeruppdrag
Knapp för övervakning av viktens rörelse

Vid denna signal var det meningen att rökbomber gjorda av pingisbollar skulle tändas. Vi satte in 4 st brandfacks direkt i serverlådan och kopplade ihop dem med en nikromgänga, som skulle värmas upp och fungera som en tändare.

Projekthårdvara: hur vi byggde ett rum med ett hackeruppdrag
Hus med rökbomber och kinesisk girlang

Projekthårdvara: hur vi byggde ett rum med ett hackeruppdrag

Arduino

Enligt den ursprungliga planen ägde två aktioner rum på Arduino.

Först, när en ny förfrågan togs emot, analyserades begäran med hjälp av ArduinoJson-biblioteket. Därefter jämfördes varje hanterad enhet med dess två egenskaper:

  • strömtillstånd "på" eller "av" (standardläge)
  • den period som enheten är påslagen - tiden i mikrosekunder från början av brädet, när det är dags att stänga av det, det vill säga föra tillståndet till standard

Den senaste tiden sattes vid mottagning av motsvarande parameter i JSON, men den kunde inte överföras, då sattes värdet till 0 och ingen återställning skedde.

Den andra åtgärden som Arduino utförde varje cykel var att uppdatera tillstånd, det vill säga att kontrollera om det fanns ett behov av att slå på något eller om det var dags att stänga av någon enhet.

Laserpekare - samma Megatron 3000

Projekthårdvara: hur vi byggde ett rum med ett hackeruppdrag

Detta är en vanlig LSMVR450-3000MF 3000mW 450nm manuell laserskärnings- och märkningsmodul.

Bokstäver Falcon

De gjordes väldigt enkelt - vi kopierade helt enkelt bokstäverna från logotypen, skar ut dem i kartong och täckte dem sedan med LED-tejp. I det här fallet var jag tvungen att löda ihop tejpbitarna, 4 kontakter på varje söm, men resultatet var värt det. Vår backender Pasha visade mirakel av skicklighet och gjorde det på mindre än några timmar.

Första tester av iot-enheten och efterbehandling

Vi gjorde de första testerna och samtidigt kom nya uppgifter till oss. Faktum är att i mitten av processen anslöt sig en riktig filmproducent och kameraman från VGIK, Ilya Serov, till laget - han byggde ramen, lade till ytterligare filmisk belysning och ändrade spelmanuset något för att göra handlingen mer känslomässig och bilden mer dramatisk och teatralisk.

Detta ökade kvaliteten avsevärt, men det dök upp element som också behövde kopplas till reläet och den föreskrivna operationsalgoritmen.

Ett annat problem var lasern: vi gjorde flera experiment med olika typer av rep och lasrar med olika krafter. För testet hängde vi helt enkelt en vikt vertikalt på ett rep.

När man körde med en testtoken var effekten som reglerades genom PWM mindre än 10 % och skadade inte repet även vid lång exponering.

För stridsläge var lasern defokuserad till ungefär en punkt med en diameter på 10 mm och den brann säkert genom ett rep med en belastning från ett avstånd av cirka en meter.

Projekthårdvara: hur vi byggde ett rum med ett hackeruppdrag
Så lasern fungerade perfekt i tester

När vi började testa allt direkt i rummet på en hängande vikt visade det sig att det inte var så lätt att säkra lasern säkert. Sedan, när repet brinner, smälter det, sträcker sig och rör sig ur sitt ursprungliga fokus.

Projekthårdvara: hur vi byggde ett rum med ett hackeruppdrag
Men det fungerade inte längre så: repet skiftade

Ilya flyttade lasern till slutet av rummet mittemot repet så att laserstrålen skulle gå över hela scenen och se vacker ut i ramen, vilket fördubblade avståndet.

Efter att ha genomfört flera experiment med att bränna repet redan i strid, bestämde vi oss för att inte tortera ödet och säkra skärningen av repet med nikromtråd. Den förstörde tråden 120 sekunder efter att ha slagit på lasern i stridsläge. Vi bestämde oss för att hårdkoda detta, såväl som bortkopplingen av ledningen och tändningen av rökbomber när separationskontakten utlöses, direkt in i mikrokontrollerns hårdvara.

Projekthårdvara: hur vi byggde ett rum med ett hackeruppdrag
Tråden som så småningom brann genom repet utanför skärmen

Således dök en tredje uppgift upp som Arduino löste - att räkna ut sekvenserna som är associerade med exekveringen av dessa kommandon.

Vi beslutade också att ge Arduino behovet av att räkna pengar på TV:n och köra dokumentförstöraren. Till en början antogs det att backend skulle göra detta och det aktuella saldot skulle vara synligt på webbplatsen, och på TV:n skulle vi visa kommentarer från YouTube som ett ytterligare interaktivt element, och berätta för tittarna att händelserna i rummet ägde rum på riktigt tid.

Men under testkörningen tittade Ilya på scenen och föreslog att man skulle visa spelbalansen på den största skärmen: hur mycket pengar som finns kvar, hur mycket som har ätits och nedräkningen till nästa start av dokumentförstöraren.

Vi knöt Arduino till den aktuella tiden: varje hel timme startades dokumentförstöraren. Bilden visades på TV:n med rasberry, som i det ögonblicket redan tog emot förfrågningar från servern och skickade dem till arduino för körning. Bilder med monetära indikatorer ritades genom att kalla konsolverktyget fim ungefär så här

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

Och det bildades baserat på den erforderliga mängden eller tiden.

Vi genererade bilderna i förväg: vi tog helt enkelt en färdig video med en timer och exporterade 200 bilder.

Detta är mekaniken som programmerades in i korset. När den sista nedräkningen började gick vi alla till platsen, beväpnade oss med brandsläckare och satte oss ner för att vänta på branden (som bara var i full gång i oenigheten)

Hur man gör en sändning som fungerar i en vecka: att välja en kamera

För uppdraget behövde vi en kontinuerlig sändning på YouTube i 7 dagar - det är precis vad vi satte som den maximala varaktigheten för spelet. Det fanns två saker som kunde stoppa oss:

  1. Överhettning av kameran på grund av kontinuerlig drift
  2. Internetavbrott

Kameran var tvungen att ge minst en Full HD-bild för att göra det bekvämt att spela och titta på rummet.

Inledningsvis tittade vi på webbkameror som är producerade för streamers. Vi skar ner i vår budget, så vi ville inte köpa en kamera, men det visade sig att de inte hyr dem. I samma ögonblick hittade vi mirakulöst en Xbox Kinect-kamera liggande i mitt hus, installerade den i mitt rum och startade en testsändning under en vecka.

Kameran fungerade bra och överhettades inte, men Ilya märkte nästan direkt att den saknade inställningar, i synnerhet var det omöjligt att ställa in exponeringen.

Ilya försökte föra typen av sändning närmare standarderna för film- och videoproduktion: att förmedla en dynamiskt föränderlig ljusscen med ljusa ljuskällor, en mörkare bakgrund och objekt i ramen. Samtidigt ville jag bevara bildens utarbetande både i högdagrar och skuggor, med minimalt digitalt brus.

Därför, även om Kinect visade sig vara tillförlitlig i tester och inte krävde ett videoinspelningskort (en annan punkt av misslyckande), bestämde vi oss för att överge det. Efter tre dagars test av olika kameror valde Ilya Sony FDR-AX53 - en liten, pålitlig videokamera som är billig att hyra, men som samtidigt har tillräcklig tillförlitlighet och visuella egenskaper.

Vi hyrde en kamera, slog på den i en vecka tillsammans med ett videoinspelningskort och insåg att med den kunde vi räkna med kontinuerlig sändning under hela uppdraget.

Att göra en film: iscensätta scenen och ljussättning

Att arbeta med belysningen krävde en viss grace; vi behövde bygga ett ljusresultat med minimala medel:

1. Belysning av föremål när spelare hittar dem (laser, vikt), samt konstant ljus på dokumentförstöraren. Här använde vi dedolight 150 - pålitliga och kompakta filmbelysningsenheter med lågspänningshalogenlampor, som gör att du kan fokusera strålen på ett specifikt objekt utan att påverka bakgrunden och andra objekt.

2. Praktiskt lekljus - bordslampa, golvlampa, stjärna, girlang. Allt praktiskt ljus fördelades harmoniskt i ramen för att belysa bildytan, det fanns LED-lampor med en färgtemperatur på 3200K inuti, lampan i golvlampan täcktes med ett rött Rosco-foliefilter för att skapa en ovanlig färgaccent.

Projekthårdvara: hur vi byggde ett rum med ett hackeruppdrag
Jag är ingenjör hos min mamma eller lanseringen är imorgon

Hur vi reserverade internet och el

De närmade sig frågan om feltolerans nästan som i ett datacenter: de bestämde sig för att inte avvika från de grundläggande principerna och reserverade sig enligt det vanliga N+1-schemat.

Om sändningen på YouTube slutar, betyder det att det blir omöjligt att återansluta med samma länk och fortsätta streamen. Det var ett kritiskt ögonblick, och rummet låg på ett vanligt kontor.

För detta använde vi en OpenWRT-baserad router och mwan3-paketet. Den testade automatiskt kanalens tillgänglighet var 5:e sekund och, i händelse av en paus, bytte den till backup-modemet med Yota. Som ett resultat skedde bytet till backupkanalen på mindre än en minut.
Projekthårdvara: hur vi byggde ett rum med ett hackeruppdrag
Det var också lika viktigt att eliminera strömavbrott, eftersom även en kortvarig strömhöjning skulle orsaka en omstart av alla datorer.

Därför tog vi en ippon innova g2 3000 avbrottsfri strömförsörjning, som skulle säkerhetskopiera alla spelenheter: den totala strömförbrukningen för vårt system var cirka 300 watt. Det skulle pågå i 75 minuter, tillräckligt för våra syften.

Vi bestämde oss för att offra ytterligare belysning ifall elen i rummet skulle slockna - den var inte ansluten till en avbrottsfri strömkälla.

Kvitteringar

  • Till hela laget RUVDS, som uppfann och implementerade spelet.
  • Separat, för RUVDS-administratörerna, för övervakning av servrarnas arbete, var belastningen acceptabel och allt fungerade som vanligt.
  • Till den bästa chefen ntsaplin för det faktum att som svar på samtalet, "Jag har en idé: vi tar en server, lägger ett akvarium på den och hänger en vikt ovanför den, bom, pang, allt är översvämmat med vatten, kortslutning, brand !" han säger alltid självsäkert "gör det!"
  • Tack Tilda förlag och separat till Mikhail Karpov för att han inte bara träffades halvvägs och tillåtit oss att bryta mot användarvillkoren, utan även gav oss ett företagskonto i ett år när vi pratade om projektet.
  • Ilja Serov S_ILya för att vara med och bli medproducent till projektet, redo att krypa halva natten, limma LED-remsor, leta efter tekniska lösningar och göra allt för att vi ska få en riktig film.
  • zhovner för att alltid vara redo att rädda situationen när andra kastade upp händerna, borsjtj, moraliskt stöd och samtal till morgonen.
  • samat för att ha kopplat oss till landets bästa pentester, som gav oss råd och hjälpte oss med uppgifter.
  • daniemilk för den coola videoproduktionen av alla videor.
  • delphe för en fast hand och vilja att arbeta in i det sista.
  • bra Dodo Pizza Engineering för nästan alltid varm pizza.

Och den största tacksamheten går till spelarna för alla känslor som vi upplevde när ni stormade jakten i två dagar utan sömn och till och med att skjuta upp jobbet.

Andra artiklar om strävan att förstöra servern

Projekthårdvara: hur vi byggde ett rum med ett hackeruppdrag

Källa: will.com

Lägg en kommentar