Projektiraud: kuidas me häkkeriülesannetega ruumi ehitasime

Projektiraud: kuidas me häkkeriülesannetega ruumi ehitasime
Paar nädalat tagasi veetsime võrguotsing häkkerite jaoks: nad ehitasid ruumi, mille täitsid nutiseadmetega ja käivitasid sellest YouTube'i ülekande. Mängijad said juhtida asjade interneti seadmeid mängu veebisaidilt; Eesmärgiks oli leida tuppa peidetud relv (võimas laserpointer), seda häkkida ja tekitada ruumis lühis.

Aktsiooni lisamiseks paigutasime tuppa purustaja, millesse laadisime 200 000 rubla: purustaja sõi ühe arve tunnis. Pärast mängu võitmist võid purustaja peatada ja kogu ülejäänud raha võtta.

Oleme juba öelnud läbikäik ning kuidas taustaprogramm tehti projekt. On aeg rääkida riistvarast ja selle kokkupanemisest.


Palju oli soove näidata ruumi koristamise hetke - näitame, kuidas me selle lahti võtame

Riistvara arhitektuur: ruumi juhtimine

Riistvaralahenduse projekteerimisega alustasime siis, kui stsenaarium oli juba laias laastus arusaadav, taustaprogramm valmis ja meil oli seadmete paigaldamiseks valmis tühi ruum.

Meenutades vana nalja "The S in IoT tähistab turvalisust" ("S-täht IoT lühendis tähistab turvalisust") otsustasime, et seekord suhtlevad mängustsenaariumi mängijad ainult esi- ja tagaosaga. saidilt, kuid ei saa võimalust otse triikraua juurde pääseda.

Seda tehti ohutuse ja ekraanil toimuva vaatemängulisuse huvides: mängijate otsese juurdepääsu korral riistvarale oleks palju keerulisem eraldada ohutuid ja potentsiaalselt ohtlikke toiminguid, näiteks purustaja kiiret kerimist või juhtimist. pürotehnika.

Enne disaini alustamist sõnastasime mänguseadmete juhtimiseks mitu põhimõtet, millest sai disaini aluseks:

Ärge kasutage traadita lahendusi

Kogu mänguruum on ühes kaadris, mille igasse nurka pääseb. Traadita ühenduste järele polnud tegelikku vajadust ja need muutusid lihtsalt järjekordseks tõrkepunktiks.

Ärge kasutage spetsiaalseid nutikodu seadmeid

Peamiselt kohandamise paindlikkuse huvides. Selge on see, et saame oma ülesande jaoks kohandada paljusid nutikodu süsteemide karbis olevaid versioone koos valmis administraatori ja juhtelementidega, kuid tööjõukulu oleks võrreldav oma lihtsa lahenduse loomisega.

Lisaks oli vaja välja mõelda seadmed, mis näitaksid selgelt, et mängijad muutsid selle olekut: lülitasid selle sisse/välja või panid tähtedele FALCON konkreetse valgusti.

Kogusime kokku kõik elemendid avalikult kättesaadavast riistvarast, mida saab osta tavalistest raadioosade poodidest: pitsa ja dieetkoola tarnimise vahel tulid kohapeale pidevalt kullerid Chip and Dip ja Leroy.

Valik kõik ise kokku panna lihtsustas silumist, skaleeritavus nõudis aga paigaldamisel suuremat hoolt.

Kõik releed ja arudiinid ei tohiks kaadris näha olla

Otsustasime tuua kõik juhitavad elemendid ühte kohta ja peita need kulisside taha, et saaksime jälgida nende jõudlust ning vajadusel hoolikalt kaamera nähtavusalast välja roomata ning rikkis seadet välja vahetada.

Projektiraud: kuidas me häkkeriülesannetega ruumi ehitasime
Lõpuks peideti kõik laua alla ja kaamera paigaldati nii, et laua all ei paistnud midagi. See oli meie "pime nurk", mille insener pidi üles hiilima

Selle tulemusena saime tegelikult ühe nutiseadme: see sai iga oma osa oleku taustaprogrammist ja muutis seda vastava käsuga.

Riistvara rakendamise seisukohast kontrollis see seade 6 elementi:

  1. Mitu laualampi, neil on sees/väljas olek ja neid juhivad mängijad
  2. Tähed seinal, nad saavad mängijate käsul oma värvi muuta
  3. Fännid, mis pöörlevad ja avavad pabertahvel, kui server on koormatud
  4. Laserjuhtimine PWM-i kaudu
  5. Purustaja, kes sõi graafikujärgselt raha
  6. Suitsumasin, mis läks enne iga laserlaskmist lahti


Suitsumasina katsetamine laseriga

Hiljem lisati lavavalgusti, mis seisis raami taga ja mida juhiti täpselt nagu lampe punktist 1. Lavavalgusti töötas kahel juhul: valgustas laserit, kui sellele toide pandi, ja valgustas raskust enne Laser käivitati lahingurežiimis.

Mis see nutiseade oli?

Projektiraud: kuidas me häkkeriülesannetega ruumi ehitasime

Meie riistvaramees Yura püüdis kogu tee asju mitte keeruliseks ajada ja leida võimalikult lihtsa ja minimalistliku lahenduse.

Eeldati, et VPS käivitab lihtsalt skripti, mis võtab jsoni vastu seadmete olekuga ja saadab selle USB kaudu ühendatud Arduinosse.

Ühendatud portidega:

  • 16 tavalist releed (need tegid seda klõpsutavat häält, mis videos kuulda oli. Peamiselt valisime need just selle heli pärast)
  • 4 pooljuhtreleed PWM-kanalite, näiteks ventilaatorite, juhtimiseks,
  • eraldi PWM väljund laserile
  • väljund, mis genereerib signaali LED-ribale

Siin on näide jsoni käsust, mis saabus serverist releele

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

Ja see on näide funktsioonist, millega käsk jõudis Arudinosse

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

Et jälgida hetke, mil laser lõpuks nöörist läbi põleb ja raskus akvaariumile lendab, tegime väikese nupu, mis käivitus raskuse langemisel ja andis süsteemile signaali.

Projektiraud: kuidas me häkkeriülesannetega ruumi ehitasime
Nupp raskuse liikumise jälgimiseks

Selle signaali peale pidid süttima lauatennisepallidest valmistatud suitsupommid. Panime 4 suitsuraketti otse serveri korpusesse ja ühendasime need nikroomniidiga, mis pidi kuumenema ja töötama nagu süütaja.

Projektiraud: kuidas me häkkeriülesannetega ruumi ehitasime
Korpus suitsupommide ja Hiina vanikuga

Projektiraud: kuidas me häkkeriülesannetega ruumi ehitasime

Arduino

Algse plaani kohaselt toimus Arduinol kaks aktsiooni.

Esiteks, kui saadeti uus taotlus, sõeluti taotlus ArduinoJsoni teegi abil. Seejärel võrreldi iga hallatavat seadet selle kahe omadusega.

  • toiteolek "sees" või "väljas" (standardolek)
  • periood, milleks seade on sisse lülitatud - aeg mikrosekundites tahvli algusest, mil on aeg see välja lülitada, st viia olek standardile

Viimati määrati see JSON-is vastava parameetri vastuvõtmisel, kuid seda ei saanud edastada, siis määrati väärtuseks 0 ja lähtestamist ei toimunud.

Teine toiming, mida Arduino iga tsükli jooksul sooritas, oli olekute värskendamine, st kontrollimine, kas midagi on vaja sisse lülitada või on aeg mõni seade välja lülitada.

Laserpointer - seesama Megatron 3000

Projektiraud: kuidas me häkkeriülesannetega ruumi ehitasime

See on tavaline LSMVR450-3000MF 3000mW 450nm käsitsi teravustamise laserlõikamise ja märgistamise moodul.

Kirjad Falcon

Need olid tehtud väga lihtsalt - lihtsalt kopeerisime logolt tähed, lõikasime papist välja ja katsime siis LED-teibiga. Sel juhul pidin teibi tükid kokku jootma, igal õmblusel 4 kontakti, kuid tulemus oli seda väärt. Meie tagamees Pasha näitas oskuste imesid, tehes seda vähem kui mõne tunniga.

Iot seadme esimesed katsetused ja viimistlus

Tegime ära esimesed katsed ja samal ajal saabusid meile uued ülesanded. Fakt on see, et protsessi keskel liitus meeskonnaga tõeline filmiprodutsent ja operaator VGIK-ist Ilja Serov - ta ehitas kaadri, lisas kinole täiendava valgustuse ja muutis veidi mängu stsenaariumi, et süžee oleks emotsionaalsem. pilt dramaatilisem ja teatraalsem.

See tõstis oluliselt kvaliteeti, kuid ilmusid elemendid, mis vajasid samuti releega ühendamist ja ette nähtud tööalgoritmi.

Teine probleem oli laser: tegime mitu katset erinevat tüüpi köite ja erineva võimsusega laseritega. Katse jaoks riputasime raskuse lihtsalt vertikaalselt köie külge.

Testmärgiga joostes oli PWM-i kaudu reguleeritud võimsus alla 10% ega kahjustanud köit isegi pikal kokkupuutel.

Lahingurežiimi jaoks defokuseeriti laser umbes 10 mm läbimõõduga punktini ja see põles enesekindlalt umbes meetri kauguselt koormaga läbi trossi.

Projektiraud: kuidas me häkkeriülesannetega ruumi ehitasime
Nii et laser töötas testides ideaalselt

Kui hakkasime toas kõike otse rippraskuse peal katsetama, selgus, et laserit polegi nii lihtne kindlalt kinnitada. Seejärel, kui köis põleb, siis see sulab, venib ja liigub oma algsest fookusest välja.

Projektiraud: kuidas me häkkeriülesannetega ruumi ehitasime
Kuid see ei töötanud enam nii: köis nihkus

Ilja nihutas laseri köie vastas oleva ruumi otsa, et laserkiir läheks üle kogu lava ja näeks kaadris ilus välja, mis kahekordistas vahemaa.

Pärast veel mitmeid katseid köie põletamisega juba lahingus, otsustasime saatust mitte piinata ja kindlustasime köie läbilõikamise nikroomtraadiga. See hävitas niidi 120 sekundit pärast laseri lahingurežiimis sisselülitamist. Otsustasime selle, samuti juhtme lahtiühendamise ja suitsupommide süütamise eralduskontakti käivitamisel kõvasti kodeerida otse mikrokontrolleri riistvarasse.

Projektiraud: kuidas me häkkeriülesannetega ruumi ehitasime
Lõng, mis lõpuks ekraanilt läbi trossi põles

Nii ilmnes kolmas ülesanne, mille Arduino lahendas – töötada välja nende käskude täitmisega seotud jadad.

Samuti otsustasime anda Arduinole vajaduse teleris raha lugeda ja purustajat käivitada. Esialgu eeldati, et seda teeb taustaprogramm ja jooksev saldo on kodulehel näha ning teleris näitame täiendava interaktiivse elemendina YouTube'i kommentaare, mis annavad vaatajatele teada, et ruumis toimuvad sündmused päriselt. aega.

Kuid proovisõidu ajal vaatas Ilja stseeni ja soovitas näidata suurimal ekraanil mängu saldo: kui palju raha on veel alles, kui palju on söödud ja loendus järgmise purustaja käivitamiseni.

Arduino sidusime praeguse ajaga: igal täistunnil pandi purustaja käima. Pilt kuvati teleris rasberry abil, mis sel hetkel juba serverilt päringuid vastu võttis ja arduinosse täitmiseks saatis. Rahaliste näitajatega pildid joonistati nii, et konsooli utiliiti fim nimetati midagi sellist

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

Ja see moodustati vajaliku koguse või aja järgi.

Tegime pildid ette: tegime lihtsalt taimeriga valmis video ja eksportisime 200 pilti.

See on mehaanika, mis oli risti sisse programmeeritud. Selleks ajaks, kui viimane loendus algas, läksime kõik kohapeale, relvastasime end tulekustutitega ja istusime tuld ootama (mis oli lahkhelis alles täies hoos)

Kuidas teha ülekanne, mis töötab nädalas: kaamera valimine

Ülesande jaoks vajasime YouTube'is pidevat ülekannet 7 päeva jooksul – täpselt nii määrasime mängu maksimaalseks kestuseks. Kaks asja võisid meid peatada:

  1. Kaamera ülekuumenemine pideva töö tõttu
  2. Interneti katkestus

Kaamera pidi pakkuma vähemalt Full HD pilti, et toas mängimine ja vaatamine oleks mugav.

Esialgu vaatasime veebikaamerate poole, mida toodetakse striimijate jaoks. Me kärpisime oma eelarvet, nii et me ei tahtnud kaamerat osta, kuid nagu selgus, nad ei rendi neid. Samal hetkel leidsime imekombel minu kodust lebava Xbox Kinecti kaamera, paigaldasime selle minu tuppa ja alustasime nädalast testsaadet.

Kaamera töötas hästi ja ei kuumene üle, kuid Ilja märkas peaaegu kohe, et sellel puuduvad sätted, eriti säritust oli võimatu seadistada.

Ilja püüdis lähendada ülekande tüüpi filmi- ja videotootmise standarditele: edastada dünaamiliselt muutuvat valgusstseeni eredate valgusallikate, tumeda tausta ja kaadris olevate objektidega. Samas tahtsin säilitada pildi viimistletust nii eredas kui varjus, minimaalse digitaalse müraga.

Seetõttu, kuigi Kinect osutus testides usaldusväärseks ega vajanud videohõivekaarti (veel üks tõrkepunkt), otsustasime sellest loobuda. Pärast kolmepäevast erinevate kaamerate testimist valis Ilja Sony FDR-AX53 – väikese ja töökindla videokaamera, mille rentimine on odav, kuid millel on samal ajal piisav töökindlus ja visuaalsed omadused.

Rentisime kaamera, lülitasime selle nädalaks sisse koos videosalvestuskaardiga ja mõistsime, et sellega saame loota pidevale ülekandele kogu otsingu vältel.

Filmi tegemine: lava lavastamine ja valgustus

Valgustuse kallal töötamine nõudis teatud graatsilisust; tuli koostada valgustusskoor minimaalsete vahenditega:

1. Esemete valgustamine, kui mängijad need leiavad (laser, kaal), samuti purustaja pidev valgus. Siin kasutasime dedolight 150 – töökindlaid ja kompaktseid madalpinge halogeenlampidega kilevalgustusseadmeid, mis võimaldavad fokuseerida kiiret konkreetsele objektile ilma tausta ja muid objekte mõjutamata.

2. Praktiline mänguvalgusti - laualamp, põrandalamp, täht, vanik. Kogu praktiline valgus oli pildiala valgustamiseks kaadris harmooniliselt jaotatud, sees olid LED-lambid värvitemperatuuriga 3200K, põrandalambi lamp oli kaetud punase Rosco fooliumfiltriga, et tekitada ebatavaline värviaktsent.

Projektiraud: kuidas me häkkeriülesannetega ruumi ehitasime
Olen oma ema juures insener või lansseerimine toimub homme

Kuidas me interneti ja elektri broneerisime

Nad lähenesid tõrketaluvuse küsimusele peaaegu nagu andmekeskuses: otsustasid põhiprintsiipidest mitte kõrvale kalduda ja reserveeriti tavapärase N+1 skeemi järgi.

Kui ülekanne YouTube'is peatub, tähendab see, et sama lingi abil ei saa uuesti ühendust luua ja voogu jätkata. See oli kriitiline hetk ja ruum asus tavalises kontoris.

Selleks kasutasime OpenWRT-põhist ruuterit ja mwan3 paketti. See testis automaatselt iga 5 sekundi järel kanali saadavust ja lülitus pausi korral Yotaga varumodemile. Selle tulemusena toimus varukanalile ümberlülitumine vähem kui minutiga.
Projektiraud: kuidas me häkkeriülesannetega ruumi ehitasime
Sama oluline oli ka elektrikatkestuste likvideerimine, sest isegi lühiajaline voolutõus põhjustaks kõigi arvutite taaskäivitamise.

Seetõttu võtsime ippon innova g2 3000 katkematu toiteallika, mis varundaks kõiki mänguseadmeid: meie süsteemi koguenergiatarve oli umbes 300 vatti. See kestaks 75 minutit, meie eesmärkide jaoks täiesti piisav.

Otsustasime ohverdada lisavalgustuse juhuks, kui toas elekter ära peaks minema - see polnud ühendatud katkematu vooluga.

Tänusõnad

  • Kogu meeskonnale RUVDS, kes mängu välja mõtles ja ellu viis.
  • Eraldi RUVDS-i administraatoritele serverite töö jälgimiseks oli koormus vastuvõetav ja kõik toimis nagu tavaliselt.
  • Parimale ülemusele ntsaplin selle eest, et vastuseks kõnele: “Mul on idee: võtame serveri, paneme akvaariumi ja riputame selle kohale raskuse, buum, põmm, kõik on veega üle ujutatud, lühis, tulekahju !” ta ütleb alati enesekindlalt "tee seda!"
  • Tänan Kirjastus Tilda ja eraldi Mihhail Karpovile selle eest, et ta mitte ainult ei saanud poolel teel kokku ja lubas meil kasutustingimusi rikkuda, vaid andis meile isegi aastaks ärikonto, kui projektist rääkisime.
  • Ilja Serov S_ILya liitumise ja projekti kaasprodutsendiks saamise eest, valmis pool ööd roomama, LED-riba liimima, tehnilisi lahendusi otsima ja tegema kõik selleks, et saaksime tõelise filmi.
  • zhovner selle eest, et olete alati valmis päästma olukorda, kui teised käed viskasid, borši, moraalset tuge ja vestlusi hommikuni.
  • samat selle eest, et ühendasite meid vabariigi parima pentesteriga, kes meid nõustas ja ülesannetega aitas.
  • daniemilk kõigi videote lahedaks videotootmiseks.
  • delphe kindla käe ja viimse töötahte eest.
  • Noh Dodo pitsatehnika peaaegu alati sooja pitsa jaoks.

Ja suurim tänu kuulub mängijatele kõigi nende emotsioonide eest, mida kogesime sel ajal, kui te kaks päeva ilma magamata ja isegi tööd edasi lükates otsingule tormasid.

Muud artiklid serveri hävitamise püüdluste kohta

Projektiraud: kuidas me häkkeriülesannetega ruumi ehitasime

Allikas: www.habr.com

Lisa kommentaar