Projectijzer: hoe we een kamer hebben gebouwd met een hacker-zoektocht

Projectijzer: hoe we een kamer hebben gebouwd met een hacker-zoektocht
Een paar weken geleden hebben we doorgebracht online zoektocht naar hackers: ze bouwden een kamer, die ze vulden met slimme apparaten en lanceerden van daaruit een YouTube-uitzending. Spelers konden IoT-apparaten bedienen vanaf de gamewebsite; Het doel was om een ​​wapen te vinden dat verborgen was in de kamer (een krachtige laserpointer), dit te hacken en kortsluiting in de kamer te veroorzaken.

Om de actie nog groter te maken, plaatsten we een versnipperaar in de kamer, waarin we 200 roebel laadden: de versnipperaar at één rekening per uur. Nadat je het spel hebt gewonnen, kun je de versnipperaar stoppen en al het resterende geld pakken.

Wij hebben het al verteld walkthroughEn hoe de backend is gemaakt project. Het is tijd om te praten over de hardware en hoe deze is gemonteerd.


Er waren veel verzoeken om het moment van het schoonmaken van een kamer te laten zien - we laten zien hoe we deze uit elkaar halen

Hardware-architectuur: ruimtecontrole

We zijn begonnen met het ontwerpen van een hardwareoplossing toen het scenario al globaal bekend was, de backend klaar was en we een lege ruimte hadden om de apparatuur te installeren.

Herinnerend aan de oude grap “De S in IoT staat voor Security” (“De letter S in de IoT-afkorting staat voor Security”), hebben we besloten dat de spelers in het spelscenario deze keer alleen interactie hebben met de front-end en back-end van de site, maar krijg niet de kans om rechtstreeks bij het strijkijzer te komen.

Dit werd gedaan om veiligheidsredenen en om te laten zien wat er op het scherm gebeurde: met directe toegang tot de hardware voor spelers zou het veel moeilijker zijn om veilige en potentieel gevaarlijke acties te isoleren, bijvoorbeeld het snel scrollen van een shredder of het besturen van pyrotechniek.

Voordat we met het ontwerp begonnen, formuleerden we verschillende principes voor het besturen van spelapparaten, die de basis vormden voor het ontwerp:

Gebruik geen draadloze oplossingen

De gehele speelruimte zit in één frame, waarvan elke hoek bereikbaar is. Er was geen echte behoefte aan draadloze verbindingen en deze zouden eenvoudigweg een nieuw punt van mislukking worden.

Gebruik geen speciale smarthome-apparaten

Vooral omwille van de aanpassingsflexibiliteit. Het is duidelijk dat we veel boxversies van smart home-systemen kunnen aanpassen met kant-en-klare beheerders en bedieningselementen voor onze taak, maar de arbeidskosten zouden vergelijkbaar zijn met het creëren van uw eigen eenvoudige oplossing.

Bovendien was het nodig om apparaten te bedenken die duidelijk zouden laten zien dat het de spelers waren die de status veranderden: ze zetten het aan/uit of plaatsten een specifiek licht op de letters FALCON.

We hebben alle elementen verzameld van openbaar verkrijgbare hardware die in reguliere radio-onderdelenwinkels kan worden gekocht: tussen het bezorgen van pizza en cola light kwamen koeriers Chip and Dip en Leroy voortdurend naar de site.

De keuze om alles zelf in elkaar te zetten vereenvoudigde het debuggen, de schaalbaarheid vergde echter meer zorg tijdens de installatie.

Alle relais en arudin mogen niet zichtbaar zijn in het frame

We besloten om alle bestuurbare elementen op één plek te brengen en ze achter de schermen te verbergen om hun prestaties te kunnen volgen en, indien nodig, voorzichtig uit het zicht van de camera te kruipen en de defecte eenheid te vervangen.

Projectijzer: hoe we een kamer hebben gebouwd met een hacker-zoektocht
Uiteindelijk werd alles onder de tafel verborgen en werd de camera zo geïnstalleerd dat er onder de tafel niets zichtbaar was. Dit was onze ‘blinde vlek’ waar de ingenieur naar toe kon kruipen

Het resultaat was dat we feitelijk één slim apparaat kregen: het ontving de status van elk onderdeel van de backend en veranderde deze met het juiste commando.

Vanuit het oogpunt van hardware-implementatie bestuurde dit apparaat 6 elementen:

  1. Verschillende tafellampen, deze hebben een aan/uit-status en worden bestuurd door spelers
  2. Letters op de muur, ze kunnen op bevel van de spelers van kleur veranderen
  3. Fans die draaien en de flip-over openen wanneer de server belast wordt
  4. Lasergestuurd via PWM
  5. Shredder die op tijd geld at
  6. Een rookmachine die vóór elk laserschot afging


Een rookmachine testen met een laser

Later werd er een podiumlicht aan toegevoegd, dat achter het frame stond en precies zo werd aangestuurd als de lampen uit punt 1. Het podiumlicht werkte in twee gevallen: het verlichtte de laser als er stroom op werd gezet, en het verlichtte het gewicht vóór de laser werd gelanceerd in gevechtsmodus.

Wat was dit slimme apparaat?

Projectijzer: hoe we een kamer hebben gebouwd met een hacker-zoektocht

Yura, onze hardwareman, probeerde de hele tijd de zaken niet ingewikkeld te maken en met de eenvoudigst mogelijke, minimalistische oplossing te komen.

Er werd aangenomen dat de VPS simpelweg een script zou draaien dat json ontvangt met de status van de apparaten en dit naar de via USB aangesloten Arduino stuurt.

Aangesloten op de poorten:

  • 16 reguliere relais (zij waren degenen die het klikkende geluid maakten dat in de video te horen was. We hebben ze vooral gekozen vanwege dit geluid)
  • 4 solid state relais voor het aansturen van PWM-kanalen, zoals ventilatoren,
  • aparte PWM-uitgang voor laser
  • uitgang die een signaal naar de LED-strip genereert

Hier is een voorbeeld van een json-opdracht die vanaf de server naar het relais is gekomen

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

En dit is een voorbeeld van een functie waarmee het commando bij Arudino terechtkwam

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

Om het moment te volgen waarop de laser uiteindelijk door het touw brandt en het gewicht op het aquarium vliegt, hebben we een klein knopje gemaakt dat werd geactiveerd toen het gewicht viel en een signaal aan het systeem gaf.

Projectijzer: hoe we een kamer hebben gebouwd met een hacker-zoektocht
Knop voor het monitoren van de beweging van het gewicht

Bij dit signaal moesten rookbommen gemaakt van pingpongballen oplichten. We hebben 4 rookfakkels rechtstreeks in de serverkast geplaatst en met elkaar verbonden met een nichroomdraad, die moest opwarmen en als een ontsteker zou werken.

Projectijzer: hoe we een kamer hebben gebouwd met een hacker-zoektocht
Behuizing met rookbommen en Chinese slinger

Projectijzer: hoe we een kamer hebben gebouwd met een hacker-zoektocht

Arduino

Volgens het oorspronkelijke plan vonden er twee acties plaats op de Arduino.

Toen er een nieuw verzoek werd ontvangen, werd het verzoek eerst geparseerd met behulp van de ArduinoJson-bibliotheek. Vervolgens werd elk beheerd apparaat vergeleken met zijn twee eigenschappen:

  • energiestatus "aan" of "uit" (standaardstatus)
  • de periode waarvoor het apparaat is ingeschakeld - de tijd in microseconden vanaf het begin van het bord, wanneer het tijd is om het uit te schakelen, dat wil zeggen om de staat op standaard te brengen

De laatste keer dat deze werd ingesteld bij ontvangst van de overeenkomstige parameter in JSON, maar deze niet kon worden verzonden, werd de waarde ingesteld op 0 en vond er geen reset plaats.

De tweede actie die de Arduino elke cyclus uitvoerde, was het bijwerken van de status, dat wil zeggen controleren of het nodig was iets in te schakelen of dat het tijd was om een ​​apparaat uit te schakelen.

Laseraanwijzer - dezelfde Megatron 3000

Projectijzer: hoe we een kamer hebben gebouwd met een hacker-zoektocht

Dit is een reguliere LSMVR450-3000MF 3000mW 450nm lasersnij- en markeermodule met handmatige focus.

Brieven Valk

Ze zijn heel eenvoudig gemaakt: we hebben eenvoudigweg de letters van het logo gekopieerd, uit karton geknipt en vervolgens met LED-tape bedekt. In dit geval moest ik de stukjes tape aan elkaar solderen, 4 contacten op elke naad, maar het resultaat was het waard. Onze backender Pasha toonde wonderen van vaardigheid en deed het in minder dan een paar uur.

Eerste tests van het iot-apparaat en afwerking

We deden de eerste tests en tegelijkertijd kwamen er nieuwe taken op ons af. Feit is dat halverwege het proces een echte filmproducent en cameraman van VGIK, Ilya Serov, zich bij het team voegde - hij bouwde het frame, voegde extra bioscoopverlichting toe en veranderde het spelscript enigszins om de plot emotioneler te maken, en het beeld dramatischer en theatraalder.

Dit verhoogde de kwaliteit aanzienlijk, maar er kwamen elementen naar voren die ook moesten worden aangesloten op het relais en het voorgeschreven bedieningsalgoritme.

Een ander probleem was de laser: we deden verschillende experimenten met verschillende soorten touw en lasers met verschillende vermogens. Voor de test hebben we eenvoudigweg een gewicht verticaal aan een touw gehangen.

Bij het uitvoeren van een testtoken was het via de PWM geregelde vermogen minder dan 10% en beschadigde het touw niet, zelfs niet bij langdurige blootstelling.

Voor de gevechtsmodus werd de laser onscherp gemaakt tot ongeveer een plek met een diameter van 10 mm en brandde hij zelfverzekerd met een last door een touw vanaf een afstand van ongeveer een meter.

Projectijzer: hoe we een kamer hebben gebouwd met een hacker-zoektocht
De laser werkte dus perfect in tests

Toen we alles in de kamer aan een hangend gewicht gingen testen, bleek dat het veilig vastzetten van de laser nog niet zo eenvoudig was. Wanneer het touw vervolgens brandt, smelt het, rekt het uit en beweegt het uit zijn oorspronkelijke focus.

Projectijzer: hoe we een kamer hebben gebouwd met een hacker-zoektocht
Maar zo werkte het niet meer: ​​het touw verschoof

Ilya verplaatste de laser naar het uiteinde van de kamer tegenover het touw, zodat de laserstraal het hele podium zou bestrijken en er mooi uit zou zien in het frame, waardoor de afstand verdubbelde.

Nadat we nog een aantal experimenten hadden uitgevoerd met het verbranden van het touw dat al in de strijd was, besloten we het lot niet te martelen en het doorsnijden van het touw te beveiligen met behulp van nichroomdraad. Het vernietigde de draad 120 seconden nadat de laser in gevechtsmodus was aangezet. We hebben besloten om dit, evenals het loskoppelen van de draad en het ontsteken van rookbommen wanneer het scheidingscontact wordt geactiveerd, rechtstreeks in de hardware van de microcontroller te hardcoderen.

Projectijzer: hoe we een kamer hebben gebouwd met een hacker-zoektocht
De draad die uiteindelijk buiten beeld door het touw brandde

Zo verscheen er een derde taak die de Arduino oploste: het uitwerken van de reeksen die verband houden met de uitvoering van deze commando's.

We hebben ook besloten om de Arduino de noodzaak te geven om geld op de tv te tellen en de versnipperaar te laten draaien. Aanvankelijk werd aangenomen dat de backend dit zou doen en dat het huidige saldo zichtbaar zou zijn op de website, en dat we op de tv commentaar van YouTube zouden laten zien als een extra interactief element, waardoor de kijkers zouden worden verteld dat de gebeurtenissen in de kamer in het echt plaatsvonden. tijd.

Maar tijdens de testrun keek Ilya naar de scène en stelde voor om het spelsaldo op het grootste scherm te laten zien: hoeveel geld er nog over is, hoeveel er is gegeten en het aftellen naar de volgende start van de shredder.

We hebben Arduino aan de huidige tijd gekoppeld: elk vol uur werd de shredder gestart. De foto werd op de tv weergegeven met behulp van rasberry, die op dat moment al verzoeken van de server ontving en deze ter uitvoering naar de Arduino stuurde. Afbeeldingen met monetaire indicatoren werden getekend door het console-hulpprogramma zoiets als dit te noemen

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

En het werd gevormd op basis van de vereiste hoeveelheid of tijd.

We hebben de foto's vooraf gegenereerd: we hebben eenvoudigweg een kant-en-klare video met timer gemaakt en 200 foto's geëxporteerd.

Dit zijn de mechanismen die in het kruis zijn geprogrammeerd. Tegen de tijd dat het laatste aftellen begon, gingen we allemaal naar de locatie, bewapenden ons met brandblussers en gingen zitten wachten op de brand (die pas in volle gang was tijdens de onenigheid).

Hoe je een uitzending maakt die een week lang werkt: een camera kiezen

Voor de zoektocht hadden we zeven dagen lang een continue uitzending op YouTube nodig - dat is precies wat we hebben ingesteld als de maximale duur van het spel. Er waren twee dingen die ons konden tegenhouden:

  1. Oververhitting van de camera door continu gebruik
  2. Internetstoring

De camera moest minimaal Full HD beeld leveren om het spelen en kijken in de kamer comfortabel te maken.

In eerste instantie keken we naar webcams die voor streamers worden geproduceerd. We waren aan het bezuinigen, dus we wilden geen camera kopen, maar het bleek dat ze deze niet verhuren. Op datzelfde moment vonden we op wonderbaarlijke wijze een Xbox Kinect-camera in mijn huis, installeerden deze in mijn kamer en startten een week lang een testuitzending.

De camera werkte prima en raakte niet oververhit, maar Ilya merkte vrijwel onmiddellijk dat er geen instellingen waren, met name het was onmogelijk om de belichting in te stellen.

Ilya probeerde het type uitzending dichter bij de normen van film- en videoproductie te brengen: een dynamisch veranderende lichtscène overbrengen met heldere lichtbronnen, een donkere achtergrond en objecten in het frame. Tegelijkertijd wilde ik de uitwerking van het beeld behouden, zowel in de hooglichten als in de schaduwen, met minimale digitale ruis.

Hoewel de Kinect in tests betrouwbaar bleek te zijn en geen video-opnamekaart nodig had (nog een punt van falen), besloten we er daarom mee te stoppen. Na drie dagen verschillende camera's te hebben getest, koos Ilya voor de Sony FDR-AX53: een kleine, betrouwbare camcorder die goedkoop te huur is, maar tegelijkertijd voldoende betrouwbaarheid en visuele kenmerken heeft.

We huurden een camera, zetten hem een ​​week aan in combinatie met een video-opnamekaart en beseften dat we daarmee konden rekenen op continue uitzendingen gedurende de hele zoektocht.

Een film maken: het podium en de verlichting in scène zetten

Het werken aan de verlichting vereiste een zekere gratie; we moesten met minimale middelen een lichtscore opbouwen:

1. Verlichting van objecten wanneer spelers ze vinden (laser, gewicht), evenals constant licht op de versnipperaar. Hier hebben we dedolight 150 gebruikt: betrouwbare en compacte filmverlichtingsapparaten met laagspanningshalogeenlampen, waarmee je de straal op een specifiek object kunt richten zonder de achtergrond en andere objecten te beïnvloeden.

2. Praktisch speellampje - tafellamp, vloerlamp, ster, slinger. Al het praktische licht werd harmonieus in het frame verdeeld om het beeldvlak te verlichten, binnenin zaten LED-lampen met een kleurtemperatuur van 3200K, de lamp in de vloerlamp was bedekt met een rood Rosco-foliefilter om een ​​bijzonder kleuraccent te creëren.

Projectijzer: hoe we een kamer hebben gebouwd met een hacker-zoektocht
Ik ben ingenieur bij mijn moeder, anders is de lancering morgen

Hoe we internet en elektriciteit hebben gereserveerd

Ze benaderden de kwestie van fouttolerantie bijna zoals in een datacenter: ze besloten niet af te wijken van de basisprincipes en gereserveerd volgens het gebruikelijke N+1-schema.

Als de uitzending op YouTube stopt, betekent dit dat het onmogelijk is om via dezelfde link opnieuw verbinding te maken en de stream voort te zetten. Het was een kritiek moment en de kamer bevond zich in een gewoon kantoor.

Hiervoor hebben we een op OpenWRT gebaseerde router en het mwan3-pakket gebruikt. Het testte automatisch elke 5 seconden de beschikbaarheid van het kanaal en schakelde in geval van een pauze over naar het back-upmodem met Yota. Als gevolg hiervan vond het overschakelen naar het back-upkanaal in minder dan een minuut plaats.
Projectijzer: hoe we een kamer hebben gebouwd met een hacker-zoektocht
Het was ook net zo belangrijk om stroomstoringen te elimineren, omdat zelfs een kortstondige stroompiek een herstart van alle computers zou veroorzaken.

Daarom hebben we een ippon innova g2 3000 ononderbroken voeding genomen, die een back-up zou maken van alle gaming-apparaten: het totale stroomverbruik van ons systeem was ongeveer 300 Watt. Het zou 75 minuten duren, ruim voldoende voor onze doeleinden.

We besloten om extra verlichting op te offeren voor het geval de elektriciteit in de kamer uitviel - deze was niet aangesloten op een ononderbroken stroomvoorziening.

Dankbetuigingen

  • Aan het hele team RUVDS, die het spel heeft uitgevonden en geïmplementeerd.
  • Afzonderlijk, voor de RUVDS-beheerders, voor het monitoren van het werk van de servers, was de belasting acceptabel en werkte alles zoals gewoonlijk.
  • Aan de beste baas ntsaplin voor het feit dat als reactie op de oproep: “Ik heb een idee: we nemen een server, zetten er een aquarium op en hangen er een gewicht boven, boem, boem, alles wordt overspoeld met water, kortsluiting, brand !” hij zegt altijd vol vertrouwen “doe het!”
  • Dank Tilda Uitgeverij en afzonderlijk aan Michail Karpov, omdat hij ons niet alleen halverwege ontmoette en ons toestond de gebruiksvoorwaarden te schenden, maar ons zelfs een zakelijk account voor een jaar gaf toen we over het project spraken.
  • Ilja Serov S_ILya voor het meedoen en coproducent worden van het project, klaar om de halve nacht door te kruipen, LED-strips te lijmen, technische oplossingen te zoeken en er alles aan te doen zodat we een echte film krijgen.
  • Zjovner omdat hij altijd klaar stond om de situatie te redden als anderen hun handen in de lucht staken, borsjt, morele steun en gesprekken tot de ochtend.
  • samen voor het verbinden van ons met de beste pentester van het land, die ons adviseerde en hielp met taken.
  • daniemelk voor de coole videoproductie van alle video's.
  • delphe voor een vaste hand en de bereidheid om tot het laatst door te werken.
  • goed Dodo Pizza-techniek voor bijna altijd warme pizza.

En de grootste dankbaarheid gaat uit naar de spelers voor alle emoties die we hebben ervaren terwijl jullie de zoektocht twee dagen lang zonder slaap bestormden en zelfs werk uitstelden.

Andere artikelen over de zoektocht om de server te vernietigen

Projectijzer: hoe we een kamer hebben gebouwd met een hacker-zoektocht

Bron: www.habr.com

Voeg een reactie