Kako je nastalo zaledje hekerske igre o uničenju strežnika

Kako je nastalo zaledje hekerske igre o uničenju strežnika
Še naprej vam povemo, kako je bilo urejeno naše lasersko iskanje z uničenjem strežnika. Začetek v prejšnjem članek o reševanju naloge.

Skupno je imelo zaledje igre 6 arhitekturnih enot, ki jih bomo analizirali v tem članku:

  1. Zaledje entitet igre, ki je bilo odgovorno za mehanizme igre
  2. Vodilo za izmenjavo podatkov o zaledju in spletnem mestu na VPS
  3. Prevajalnik iz zalednih zahtev (elementi igre) v Arduino in strojno opremo na mestu
  4. Arduino, ki je bil odgovoren za krmiljenje relejev, je prejemal ukaze od prevajalca in opravljal dejansko delo
  5. Dejanske naprave: ventilator, girlande, talne svetilke itd.
  6. Frontend - samo spletno mesto Falcon, s katerega igralci upravljajo naprave

Pojdimo skozi vsakega od njih.

Zaledje entitet igre

Zaledje je bilo implementirano kot aplikacija za spomladanski zagon: imelo je več krmilnikov počitka, končno točko spletne vtičnice in storitve z logiko igre.

Krmilniki so bili le trije:

  • Megatron. Trenutna stran Megatron je bila poslana prek zahtev GET: pred in po vklopu. Laser je sprožil prek zahteve POST.
  • Preslikava strani s tildo, tako da se strežejo po imenu strani. Tilde proizvaja strani za izvoz ne z izvirnimi imeni, ampak z notranjim ID-jem in informacijami o skladnosti.
  • Krmilnik captcha za strežbo captcha strežnika s psevdo visoko obremenitvijo.

Končna točka Websocket je bila uporabljena za nadzor pripomočkov: svetilk, girland in črk. Izbrano je bilo tako, da vsem igralcem sinhrono prikazuje trenutno stanje naprave: ali je vklopljena ali izklopljena, aktivna ali ne, kakšna barva črke je trenutno osvetljena na steni. Da bi nekoliko otežili nalogo vklopa laserja, smo girlandi in laserju dodali avtorizacijo z isto prijavo in geslom admin/admin.

Igralci so ga lahko preizkusili tako, da so vklopili girlando in isto ponovili z laserjem.

Izbrali smo tako trivialen par prijava in geslo, da ne bi mučili igralcev z nepotrebno izbiro.

Da bi naredili nalogo nekoliko bolj zanimivo, so bili ID-ji objektov iz mongodb uporabljeni kot identifikatorji naprav v sobi.

ObjectId vsebuje časovni žig: dve naključni vrednosti, od katerih je ena vzeta na podlagi identifikatorja naprave, druga pa na podlagi pid-a procesa, ki ga generira, in vrednosti števca. Želel sem narediti identifikatorje generirane v rednih intervalih in z različnimi pid procesi, vendar s skupnim števcem, da bi bil izbor identifikatorja laserske naprave bolj zanimiv. Vendar so na koncu vsi začeli z identifikatorji, ki so se razlikovali le v protivrednosti. Zaradi tega je korak morda preveč preprost in ne zahteva analize strukture objectId.

Prevajalnik iz zalednih zahtev

Python skript, ki je delal na časovnikih in jih prevedel iz igralnih abstrakcij v fizični model. Na primer, "vklopi talno svetilko" → "vklopi rele N2."

Skript se je povezal s čakalno vrsto RabbitMQ in prenesel zahteve iz čakalne vrste na Arduino. Izvajal je tudi logiko vzporednega preklopa svetlobe: skupaj z nekaterimi napravami se je na njih prižgala luč, na primer, ko je bil Megatron na začetku napajan, je bil osvetljen z odrsko lučjo. Oblikovanje svetlobe za kinematografijo celotne scene je posebna zgodba o odličnem delu našega projektnega koproducenta in produkcijskega oblikovalca Ilje Serova, o kateri bomo povedali v ločeni objavi.

Prevajalec je bil odgovoren tudi za logiko zagona uničevalnika s časovnikom in prenos slike na TV: časovnik za zagon uničevalnika, kričeča kapibara, reklama na koncu igre.

Kako je bila strukturirana logika za ustvarjanje žetona Megatron

Testni strel

Vsakih 25 sekund je bil ustvarjen nov žeton, ki ga je bilo mogoče uporabiti za vklop laserja za 10 sekund pri moči 10/255. Povezava do github s kodo Megatron.

Laser se je nato ohlajal 1 minuto – v tem času je bil nedosegljiv in ni sprejemal novih zahtev za posnetke.

Ta moč ni bila dovolj, da bi prežgal vrv, vendar je lahko vsak igralec sprožil Megatrona in videl laserski žarek v akciji.

Za ustvarjanje žetona je bil uporabljen algoritem zgoščevanja MD5. In shema je uspela MD5 iz MD5 + števec + skrivnost za bojni žeton in brez skrivnosti za testni žeton.

MD5 je referenca na komercialni projekt, ki ga je naredil Pavel, naš backender. Samo nekaj let nazaj je ta projekt uporabljal MD5 in ko je arhitektu projekta povedal, da je to zastarel algoritem šifriranja, so začeli uporabljati MD5 iz MD5. Ker smo se odločili narediti čim bolj noob projekt, se je spomnil vsega in se odločil narediti majhno referenco.

Bojni strel

Megatronov bojni način je 100% laserska moč pri 3 vatih. To je dovolj za 2 minuti, da prežge vrv, ki je držala težo, da razbije akvarij in poplavi strežnik z vodo.

Na Githubu projekta smo pustili nekaj namigov: in sicer kodo za generiranje žetonov, iz katere je razbrati, da so testni in bojni žetoni ustvarjeni na podlagi istega indikatorja števca. Pri bojnem žetonu je poleg protivrednosti uporabljena tudi sol, ki je skoraj v celoti ostala v zgodovini spreminjanja tega bistva, z izjemo zadnjih dveh znakov.

Ob poznavanju teh podatkov je bilo mogoče razvrstiti zadnja 2 simbola soli in dejansko ugotoviti, da so bile zanjo uporabljene številke iz Losta, pretvorjene v šestnajstiški sistem.

Nato so morali igralci ujeti vrednost števca (z analizo testnega žetona) in ustvariti bojni žeton z uporabo naslednje vrednosti števca in soli, izbrane v prejšnjem koraku.

Števec se je preprosto povečal z vsakim poskusnim strelom in vsakih 25 sekund. O tem nismo nikjer pisali, šlo naj bi za manjše igralsko presenečenje.

Storitev interakcije Captcha

V svetu iger je bila to ista captcha, ki jo je bilo treba naložiti, da se je vklopil ventilator in odprla tabla z namigom. Poleg kamere je bil prenosni računalnik z nadzorom obremenitve.

Kako je nastalo zaledje hekerske igre o uničenju strežnika

Orodja Izračunal sem, kaj naj prikažem v spremljanju kot trenutno obremenitev: temperaturo in ventilator procesorja. Metrike so bile prenesene v podatkovno bazo časovne baze in narisane s strani grafane.

Če je bilo v zadnjih 5 sekundah več kot 50 zahtev za prikaz captcha, se je obremenitev povečala za fiksno + naključno število korakov. Izračun je bil, da je 100-odstotno obremenitev mogoče doseči v dveh minutah.

Pravzaprav je bilo v storitvi več logike, kot je bilo prikazano v zadnji igri: monitor smo postavili tako, da je bilo vidno samo vrtenje ventilatorja procesorja.

Na začetku iskanja so želeli pustiti Grafan dostopen s spletne strani Falcon. Vseboval pa je tudi meritve springboot iz poročila zaledne aplikacije, ki jih nismo imeli časa počistiti, zato smo se odločili, da blokiramo dostop do njih. In prav je tako – že na začetku iskanja so nekateri igralci ugibali, da je aplikacija napisana v ogrodju springboot in so celo izbrskali imena nekaterih storitev.

Gostovanje in podatkovno vodilo

Orodje za prenos informacij iz ozadja na spletno mesto, VPS strežnik, na katerem je deloval RabbitMQ.

Zaledje in podatkovno vodilo sta ostala vključena naš VPS. Njegova moč je bila primerljiva z računalnikom, ki ste ga videli na zaslonu: 2-jedrni VPS z dvema gigabajtoma RAM-a. Tarifa je bila zaračunana za vire, saj je bila največja obremenitev načrtovana le za nekaj dni - to počnejo naše stranke, ki nameravajo naložiti VPS za kratek čas. Potem se je izkazalo, da je bila obremenitev večja, kot smo pričakovali, in bi bila fiksna tarifa bolj donosna. Če opravljate nalogo, izberite linijske tarife turbo.

Za zaščito strežnika pred DDoSa smo uporabili Cloudflare.

Velja povedati, da je VPS vse častno zdržal.

Arduino, ki je bil odgovoren za krmiljenje relejev, je prejemal ukaze od prevajalca in opravljal dejansko delo

To je bolj tema naslednjega članka o strojnem delu projekta: zaledje je preprosto poslalo zahteve za vklop določenega releja. Tako se je zgodilo, da je zaledje poznalo skoraj vse entitete in njegove zahteve so izgledale kot »vklopi to entiteto«. To smo naredili za zgodnje testiranje strani (nismo še sestavili vseh Arduina in relejev), na koncu smo vse pustili tako.

Frontend

Hitro smo ustvarili stran na tildi, trajalo je en delovni dan in prihranili 30 tisočakov v našem proračunu.

Sprva smo razmišljali o tem, da bi spletno mesto preprosto izvozili in dodali logiko, ki nam je manjkala, vendar smo naleteli na pogoje uporabe, ki so nam to prepovedovali.

Nismo bili pripravljeni kršiti licence, zato sta obstajali dve možnosti: da vse izvedemo sami ali da kontaktiramo neposredno Tildo, se pogovorimo o projektu in prosimo za dovoljenje za spremembo kode.

Izbrali smo drugo možnost in ne samo, da so nam šli na pol poti, ampak so nam celo podarili eno leto brezplačnega poslovnega računa, za kar smo jim zelo hvaležni. Zelo nerodno jim je bilo pokazati zasnovo Sokolove spletne strani.

Kot rezultat smo dodali logiko js na frontend za pošiljanje zahtev osnovnim napravam in nekoliko spremenili stile gumbov za vklop in izklop elementov igre.

Oblikovanje spletnih strani

Zgodovina iskanj, ki je vredna ločenega poglavja.

Želeli smo ustvariti ne samo staromodno spletno mesto, ampak popolnoma odvratno, ki krši vsa osnovna pravila oblikovanja. Hkrati je bilo pomembno ohraniti verodostojnost: ni smelo zlomiti zgodbe ORL, dokazati pretencioznosti avtorja, igralci pa bi morali verjeti, da bi takšno spletno mesto lahko obstajalo in celo prineslo stranke. In prinesel ga je! Medtem ko je igra potekala, so nas dvakrat kontaktirali za izdelavo spletnih strani.

Sprva sem dizajn delal sam, poskušal sem vključiti več gifov in sijočih elementov. Toda moj mož oblikovalec, s katerim sem bil 10 let, se je ozrl čez ramo in ga zavrnil kot "predober". Če želite kršiti pravila oblikovanja, jih morate poznati.

Kako je nastalo zaledje hekerske igre o uničenju strežnika

Obstaja več barvnih kombinacij, ki vzbudijo dolgotrajen občutek gnusa: zelena in rdeča enakega bogastva, siva in roza, modra in rjava. Na koncu smo se odločili za kombinacijo rdeče in zelene kot osnovne barve, dodali gife z mačko in izbrali 3-4 fotografije samega Sokolova iz stock fotografije. Imel sem le nekaj zahtev: moški srednjih let, oblečen v neprimerno obleko za nekaj številk preveliko in v pozi za "profesionalno studijsko fotografiranje". Za test so ga pokazali prijateljem in vprašali "kako vam je všeč?"

Med razvojem dizajna se je moral mož vsake pol ure uleči, helikopter je začel leteti. Pasha je poskušal odpreti razvijalsko konzolo za večji del zaslona, ​​medtem ko je dokončal sprednji del - da bi zaščitil svoje oči.

Dejanske naprave

Ventilatorji in luči so bili nameščeni preko polprevodniških relejev, da se ne bi takoj vklopili na polno - da bi moč naraščala vzporedno z nadzorom.

Toda o tem bomo govorili v naslednji objavi, o strojnem delu igre in dejanski konstrukciji spletnega mesta.

Ostani na vezi!

Drugi članki o prizadevanju za uničenje strežnika

Kako je nastalo zaledje hekerske igre o uničenju strežnika

Vir: www.habr.com

Dodaj komentar