Kuidas loodi serveri hävitamise häkkerimängu taustaprogramm

Kuidas loodi serveri hävitamise häkkerimängu taustaprogramm
Räägime teile jätkuvalt, kuidas meie laserülesanne serveri hävitamisega korraldati. Alusta eelmisest artikkel ülesande lahendamise kohta.

Kokku oli mängu taustal 6 arhitektuuriüksust, mida analüüsime selles artiklis:

  1. Mängumehhanismide eest vastutavate mänguüksuste taustaprogramm
  2. Taustarakendus ja saidi andmevahetussiin VPS-is
  3. Tõlkija taustapäringutest (mänguelemendid) Arduinosse ja riistvarasse kohapeal
  4. Releede juhtimise eest vastutav Arduino sai tõlkijalt käsud ja tegi tegeliku töö ära
  5. Tegelikud seadmed: ventilaator, vanikud, põrandalambid jne.
  6. Frontend – Falconi veebisait ise, millelt mängijad seadmeid juhtisid

Vaatame igaüks neist läbi.

Mänguüksuste tagakülg

Taustaprogramm rakendati kevadkäivitusrakendusena: sellel oli mitu puhkekontrollerit, veebipesa lõpp-punkt ja mänguloogikaga teenused.

Kontrollereid oli ainult kolm:

  • Megatron. Praegune Megatroni leht saadeti GET-päringute kaudu: enne ja pärast toite sisselülitamist. Laser tulistas läbi POST-i päringu.
  • Tildelehtede kaardistamine nii, et neid esitataks lehe nime järgi. Tilde toodab eksportimiseks lehti mitte originaalnimedega, vaid sisemise ID ja vastavusinfoga.
  • Captcha kontroller pseudo-suure koormusega serveri captcha teenindamiseks.

Websocketi lõpp-punkti kasutati vidinate juhtimiseks: lambid, vanik ja tähed. Valiti sünkroonselt kõikidele mängijatele seadme hetkeseisu kuvamine: kas see on sees või väljas, aktiivne või mitte, mis värvi täht hetkel seinal põleb. Selleks, et laseri sisselülitamise ülesannet veidi keerulisemaks teha, lisasime gurlendile ja laserile autoriseerimise sama sisselogimise ja parooliga admin/admin.

Mängijad said seda katsetada, lülitades sisse vaniku ja korrata sama laseriga.

Valisime sellise triviaalse sisselogimis-parooli paari, et mängijaid mitte tarbetu valikuga piinata.

Et ülesanne oleks veidi huvitavam, kasutati ruumis seadme identifikaatoritena mongodb-st pärinevaid objekti ID-sid.

ObjectId sisaldab ajatemplit: kahte juhuslikku väärtust, millest üks võetakse seadme identifikaatori ja teine ​​seda genereeriva protsessi pid ja loenduri väärtuse põhjal. Tahtsin teha regulaarsete intervallidega ja erinevate pid protsessidega genereeritud identifikaatorid, kuid ühise loenduriga, et laserseadme identifikaatori valik oleks huvitavam. Kuid lõpuks alustasid kõik identifikaatoritega, mis erinesid ainult loenduri väärtuse poolest. See võib olla muutnud sammu liiga lihtsaks ega vaja objektId struktuuri analüüsi.

Tõlkija taustaprogrammi taotlustest

Pythoni skript, kes töötas taimerite kallal ja tõlkis need mängude abstraktsioonidest füüsiliseks mudeliks. Näiteks "lülitage põrandalamp sisse" → "lülitage sisse relee N2".

Skript ühendus RabbitMQ järjekorraga ja edastas päringud järjekorrast Arduinosse. See rakendas ka paralleelse valguse lülitamise loogikat: koos mõne seadmega lülitati nende peal põlema valgus, näiteks kui Megatronile algselt toide anti, valgustati see lavavalgusega. Kogu stseeni filmikunsti valguskujundus on omaette lugu meie projekti kaasprodutsendi ja lavastuse kujundaja Ilja Serovi suurepärasest tööst ning sellest räägime eraldi postituses.

Tõlkija vastutas ka taimeriga purustaja käivitamise ja pildi telerisse edastamise loogika eest: purustaja käivitamise taimer, karjuv kapübara, reklaam mängu lõpus.

Kuidas oli üles ehitatud Megatroni märgi genereerimise loogika

Proovivõte

Iga 25 sekundi järel genereeriti uus märk ja seda sai kasutada laseri 10 sekundiks sisselülitamiseks võimsusel 10/255. Link aadressile github Megatroni koodiga.

Seejärel jahtus laser 1 minutiks – selle aja jooksul ei olnud see saadaval ega võtnud uusi võttetaotlusi vastu.

Sellest võimsusest ei piisanud trossi läbipõlemiseks, kuid iga mängija võis Megatroni tulistada ja laserkiirt tegevuses näha.

Märgi genereerimiseks kasutati MD5 räsimisalgoritmi. Ja skeem läks korda MD5 MD5-st + loendur + saladus võitlusmärgi jaoks ja ilma saladuseta testmärgi jaoks.

MD5 on viide kommertsprojektile, mille meie taustamees Pavel tegi. Vaid paar aastat tagasi kasutas see projekt MD5-d ja kui ta ütles projekti arhitektile, et see on aegunud krüpteerimisalgoritm, hakkasid nad kasutama MD5-st MD5-st. Kuna otsustasime teha võimalikult noobse projekti, siis tal jäi kõik meelde ja ta otsustas teha väikese viite.

Võitluslask

Megatroni lahingurežiim on 100% laservõimsus 3 vatti juures. Sellest piisab 2 minutist, et põletada läbi raskust hoidnud nöör, lõhkuda akvaarium ja üle ujutada server veega.

Jätsime projekti Githubile paar vihjet: nimelt märgi genereerimise kood, millest võis aru saada, et test- ja võitlusmärgid genereeritakse sama loenduri indikaatori alusel. Võitlusmärgi puhul kasutatakse lisaks vastuväärtusele ka soola, mis on selle olemuse muutmise ajalukku peaaegu täielikult jäetud, kui kaks viimast tegelast välja arvata.

Neid andmeid teades oli võimalik sorteerida soola 2 viimast sümbolit ja tegelikult teada saada, et selle jaoks kasutati kuueteistkümnendsüsteemi teisendatud Losti numbreid.

Seejärel pidid mängijad püüdma loenduri väärtuse (analüüsides testimärki) ja genereerima võitlusmärgi, kasutades järgmist loenduri väärtust ja eelmises etapis valitud soola.

Loendur lihtsalt suurenes iga proovivõttega ja iga 25 sekundi järel. Me ei kirjutanud sellest kuskil, see pidi olema väike mänguüllatus.

Captcha interaktsiooniteenus

Mängumaailmas oli see sama captcha, mis tuli laadida, et ventilaator sisse lülitada ja vihjega pabertahvel avada. Kaamera kõrval oli koormuse jälgimisega sülearvuti.

Kuidas loodi serveri hävitamise häkkerimängu taustaprogramm

Teenus Arvutasin välja, mida seires praeguse koormusena kuvada: temperatuuri ja CPU ventilaatorit. Mõõdikud viidi üle ajabaasi andmebaasi ja joonistas grafana.

Kui viimase 5 sekundi jooksul oli captcha kuvamiseks rohkem kui 50 taotlust, siis koormus suurenes fikseeritud + juhuslike sammude arvu võrra. Arvestus oli, et 100% koormuse saab saavutada kahe minutiga.

Tegelikult oli teenuses rohkem loogikat, kui lõppmängus näidati: paigutasime monitori nii, et näha oli vaid CPU Fan pöörlemine.

Ülesande alguses tahtsid nad jätta Grafani Falconi veebisaidilt juurdepääsetavaks. Kuid see sisaldas ka taustarakenduse aruandest pärit springboot-mõõdikuid, mida meil polnud aega puhastada, mistõttu otsustasime juurdepääsu sellele blokeerida. Ja õigustatult - isegi ülesande alguses arvasid mõned mängijad, et rakendus on kirjutatud springboot-raamistikus, ja kaevasid isegi mõne teenuse nimed välja.

Hosting ja andmesiin

Tööriist teabe edastamiseks taustaprogrammist saidile, VPS-serverisse, millel RabbitMQ töötas.

Taustaprogramm ja andmesiin jäeti sisse lülitatud meie VPS. Selle võimsus oli võrreldav arvutiga, mida ekraanil nägite: 2-tuumaline VPS kahe gigabaidise muutmäluga. Tariif võeti ressursside eest, kuna tippkoormus oli planeeritud vaid mõneks päevaks – seda teevad meie kliendid, kes plaanivad VPS-i laadida lühiajaliselt. Siis selgus, et koormus oli suurem, kui ootasime, ja fikseeritud tariif oleks tulusam. Kui teete otsingut, valige rea tariifid turbo.

Serveri kaitsmiseks DDoSa eest kasutasime Cloudflare'i.

Tasub öelda, et VPS pidas kõigele aukalt vastu.

Releede juhtimise eest vastutav Arduino sai tõlkijalt käsud ja tegi tegeliku töö ära

See on pigem järgmise artikli teema, mis käsitleb projekti riistvaralist osa: taustaprogramm saatis lihtsalt päringuid konkreetse relee sisselülitamiseks. Juhtus nii, et taustaprogramm teadis peaaegu kõiki üksusi ja selle päringud nägid välja nagu "lülitage see üksus sisse". Tegime seda saidi varajaseks testimiseks (meil polnud veel kogu Arduino ja releed kokku pannud), lõpuks jätsime kõik nii.

Esiots

Tegime saidi kiiresti tildel, selleks kulus üks tööpäev ja säästsime eelarvest 30 tuhat.

Algselt mõtlesime saidi lihtsalt eksportida ja puuduva loogika lisada, kuid sattusime kasutustingimustesse, mis keelasid meil seda teha.

Me ei olnud valmis litsentsi rikkuma, seega oli kaks võimalust: kas kõik ise ellu viia või võtta otse Tildaga ühendust, rääkida projektist ja küsida luba koodi muutmiseks.

Valisime teise variandi ja nad ei tulnud meile mitte ainult poolel teel vastu, vaid andsid meile isegi aastaks tasuta ärikonto, mille eest oleme neile väga tänulikud. Väga ebamugav oli neile Sokoli veebilehe kujundust näidata.

Selle tulemusel kinnitasime kasutajaliidese js-loogika elementaarsetesse seadmetesse päringute saatmiseks ning muutsime veidi mänguelementide sisse- ja väljalülitamise nuppude stiile.

Veebilehe disain

Otsingute ajalugu, mis on väärt eraldi peatükki.

Tahtsime luua mitte ainult vanamoodsa saidi, vaid täiesti vastiku saidi, mis rikub kõiki disaini põhireegleid. Samal ajal oli oluline säilitada usutavus: see ei pidanud rikkuma kõrva-nina-kurgu-kurgulugu, demonstreerima autori pretensioonikust ning mängijad pidid uskuma, et selline sait võib eksisteerida ja isegi kliente tuua. Ja ta tõi selle! Mängu ajal võeti meiega kaks korda ühendust, et luua veebisaite.

Alguses tegin kujunduse ise, püüdes kaasata rohkem gifisid ja säravaid elemente. Kuid mu 10-aastane disainerist abikaasa vaatas üle õla ja eitas seda kui "liiga head". Disainireeglite rikkumiseks peate neid teadma.

Kuidas loodi serveri hävitamise häkkerimängu taustaprogramm

On mitmeid värvikombinatsioone, mis tekitavad püsivat vastikust: roheline ja punane võrdse rikkalikkusega, hall ja roosa, sinine pluss pruun. Lõpuks leppisime põhivärvideks punase ja rohelise kombinatsiooniga, lisasime kassiga gifid ja valisime välja 3-4 fotot Sokolovist endast. Mul olid vaid mõned nõuded: keskealine mees, paar numbrit liiga suur ja halvasti istuv ülikond seljas ja "professionaalse stuudiopildistamise" poos. Testi jaoks näitasid nad seda sõpradele ja küsisid "kuidas see teile meeldib?"

Disaini väljatöötamise käigus pidi mu abikaasa iga poole tunni tagant pikali minema, kopter hakkas lendama. Pasha üritas esiosa lõpetamise ajal arendajakonsooli suuremale osale ekraanist avada – et oma silmi kaitsta.

Tegelikud seadmed

Ventilaatorid ja tuled olid monteeritud läbi pooljuhtreleede, et need kohe täisvõimsusel sisse ei lülituks – et võimsus kasvaks paralleelselt jälgimisega.

Kuid me räägime sellest järgmises postituses, mängu riistvaraosas ja saidi tegelikust ehitamisest.

Hoia!

Muud artiklid serveri hävitamise püüdluste kohta

Kuidas loodi serveri hävitamise häkkerimängu taustaprogramm

Allikas: www.habr.com

Lisa kommentaar