Hogyan jött létre egy szerver megsemmisítéséről szóló hackerjáték háttere

Hogyan jött létre egy szerver megsemmisítéséről szóló hackerjáték háttere
Továbbra is elmondjuk, hogyan zajlott le a szerver megsemmisítésével járó lézeres küldetésünk. Kezdje az előzővel cikk a küldetés megoldásáról.

Összességében a játék hátterében 6 építészeti egység volt, amelyeket ebben a cikkben elemezünk:

  1. A játékmechanizmusokért felelős játék entitások háttere
  2. Háttér- és helyadatcsere busz VPS-en
  3. Fordító háttérkérésekről (játékelemekről) Arduino-ra és hardverre a helyszínen
  4. Az Arduino, amely a relék vezérléséért volt felelős, parancsokat kapott a fordítótól, és elvégezte a tényleges munkát
  5. Aktuális eszközök: ventilátor, girlandok, állólámpák stb.
  6. Frontend – maga a Falcon weboldal, ahonnan a játékosok vezérelték az eszközöket

Nézzük végig mindegyiket.

A játék entitásainak háttere

A backend rugós rendszerindító alkalmazásként valósult meg: több pihenővezérlővel, websocket végponttal és játéklogikával rendelkező szolgáltatásokkal rendelkezett.

Csak három vezérlő volt:

  • Megatron. Az aktuális Megatron oldalt GET kéréseken keresztül küldték: a tápellátás bekapcsolása előtt és után. A lézer a POST kérésén keresztül sütött ki.
  • Tilde oldalak hozzárendelése úgy, hogy az oldalnév szerint jelenjenek meg. A Tilde nem eredeti névvel, hanem belső azonosítóval és megfelelőségi információval készít exportra szánt oldalakat.
  • Captcha vezérlő pszeudo-nagy terhelésű kiszolgáló captcha kiszolgálására.

A Websocket végpontot a kütyük vezérlésére használták: lámpák, füzér és betűk. Úgy döntöttek, hogy minden játékosnak szinkronban jelenítse meg a készülék aktuális állapotát: be van-e kapcsolva, aktív vagy sem, milyen színű betű világít éppen a falon. Annak érdekében, hogy a lézer bekapcsolását kicsit megnehezítsük, a füzéret és a lézert ugyanazzal a bejelentkezési névvel és jelszóval adtuk hozzá admin/admin jogosultsághoz.

A játékosok kipróbálhatták a füzér bekapcsolásával, és megismételhették ugyanezt a lézerrel.

Azért választottunk egy ilyen triviális bejelentkezés-jelszó párost, hogy ne gyötörjük a játékosokat felesleges válogatással.

A feladat egy kicsit érdekesebbé tétele érdekében a mongodb objektumazonosítóit használták eszközazonosítóként a szobában.

Az ObjectId egy időbélyeget tartalmaz: két véletlenszerű értéket, amelyek közül az egyik az eszközazonosító alapján, a másik pedig az azt előállító folyamat pid-je és a számláló értéke alapján történik. A rendszeres időközönként és különböző pid folyamatokkal, de közös számlálóval generált azonosítókat szerettem volna elkészíteni, hogy érdekesebb legyen a lézeres eszközazonosító kiválasztása. Azonban végül mindenki olyan azonosítókkal indult, amelyek csak a számláló értékében tértek el egymástól. Ez túl egyszerűvé tehette a lépést, és nem igényelte az objectId szerkezet elemzését.

Fordító háttérkérésekből

Python szkript, aki időzítőkön dolgozott, és azokat a játék absztrakcióiból fizikai modellre fordította. Például: „kapcsolja be az állólámpát” → „kapcsolja be az N2 relét”.

A szkript csatlakozott a RabbitMQ-sorhoz, és kéréseket továbbított a sorból az Arduino-ba. Megvalósította a párhuzamos fénykapcsolás logikáját is: egyes eszközökkel együtt felkapcsolták a rajtuk lévő lámpát, például amikor a Megatront kezdetben árammal látták el, színpadfénnyel világították meg. A teljes jelenet operatőri fénytervezése egy külön történet a projektünk társproducerének és produkciós tervezőjének, Ilya Serovnak a nagyszerű munkájáról, erről külön bejegyzésben fogunk mesélni.

A fordító volt a felelős az iratmegsemmisítő időzítővel történő elindításának logikájáért és a kép TV-re történő továbbításáért is: az iratmegsemmisítő indításának időzítője, egy sikoltozó kapibara, egy reklám a játék végén.

Hogyan épült fel a Megatron token létrehozásának logikája

Próba lövés

25 másodpercenként egy új token generálódott, amellyel 10 másodpercre bekapcsolható volt a lézer 10/255 teljesítmény mellett. Link ehhez github Megatron kóddal.

A lézer ezután 1 percig lehűlt – ezalatt nem volt elérhető, és nem fogadott el újabb felvételi kéréseket.

Ez az erő nem volt elég ahhoz, hogy átégesse a kötelet, de bármelyik játékos kilőhette Megatront, és láthatta a lézersugarat működés közben.

Az MD5 hash algoritmust használták a token előállításához. És a terv bevált MD5 az MD5-től + számláló + titkos harci jelzőért és titok nélkül tesztjelzőért.

Az MD5 egy olyan kereskedelmi projektre utal, amelyet Pavel, a backenderünk készített. Alig néhány éve ez a projekt MD5-öt használt, és amikor azt mondta a projekt építészének, hogy ez egy elavult titkosítási algoritmus, elkezdték az MD5-öt használni az MD5-ről. Mivel úgy döntöttünk, hogy a lehető legnoobosabb projektet készítjük, mindenre emlékezett, és úgy döntött, hogy tesz egy kis utalást.

Harci lövés

A Megatron harci módja 100%-os lézerteljesítmény 3 watton. Ez 2 percre elegendő ahhoz, hogy átégjen a súlyt tartó kötélen, eltörje az akváriumot és elárassza vízzel a szervert.

Hagytunk néhány tippet a projekt Githubjára: nevezetesen a token generáló kódot, amiből megérthető, hogy a teszt és a harci tokenek ugyanazon ellenjelző alapján generálódnak. Harcjelző esetén a számlálóérték mellett egy sót is használnak, ami az utolsó két karakter kivételével szinte teljesen benne maradt a lényeg megváltoztatásának történetében.

Ezen adatok ismeretében sikerült válogatni a só utolsó 2 szimbóluma között, és megtudni, hogy a Lost hexadecimális rendszerre átszámított számait használták ehhez.

Ezután a játékosoknak el kellett kapniuk a számláló értéket (a tesztjelző elemzésével), és a következő számlálóérték és az előző lépésben kiválasztott só felhasználásával harcjelzőt kellett generálniuk.

A számláló egyszerűen nőtt minden próbalövésnél és 25 másodpercenként. Erről nem írtunk sehol, állítólag egy kis játék meglepetés volt.

Captcha interakciós szolgáltatás

A játékok világában ez ugyanaz a captcha, amelyet be kellett tölteni ahhoz, hogy bekapcsolja a ventilátort és egy tippel nyissa ki a flipchartot. A kamera mellett volt egy laptop terhelésfigyeléssel.

Hogyan jött létre egy szerver megsemmisítéséről szóló hackerjáték háttere

Szolgáltatás Kiszámoltam, hogy mi jelenjen meg a monitorozásban aktuális terhelésként: hőmérséklet és CPU ventilátor. A mutatókat átvitték az időbázis adatbázisba, és a grafana rajzolta.

Ha az elmúlt 5 másodpercben több mint 50 kérés érkezett a captcha megjelenítésére, akkor a terhelés fix + véletlenszerű számú lépéssel nőtt. A számítás szerint a 100%-os terhelést két perc alatt lehetett elérni.

Valójában több volt a logika a szolgáltatásban, mint a döntő játékban: a monitort úgy helyeztük el, hogy csak a CPU Fan forgása látszott.

A küldetés elején a Grafant elérhetővé akarták hagyni a Falcon weboldaláról. De tartalmazott a háttéralkalmazás jelentéséből származó springboot mérőszámokat is, amelyeket nem volt időnk törölni, ezért úgy döntöttünk, hogy letiltjuk a hozzáférést. És joggal – néhány játékos már a küldetés elején sejtette, hogy az alkalmazás a springboot keretrendszerben íródott, és még néhány szolgáltatás nevét is előásta.

Tárhely és adatbusz

Eszköz az információk átviteléhez a háttérrendszerről a webhelyre, arra a VPS-kiszolgálóra, amelyen a RabbitMQ fut.

A háttérrendszer és az adatbusz bekapcsolva maradt a VPS-ünk. Teljesítménye a képernyőn látott számítógépéhez hasonlítható: egy 2 magos VPS két gigabájt RAM-mal. A tarifát az erőforrásokért számolták fel, mivel a csúcsterhelést csak néhány napra tervezték - ezt teszik ügyfeleink, akik rövid időre tervezik a VPS betöltését. Aztán kiderült, hogy a terhelés nagyobb, mint amire számítottunk, és a fix tarifa jövedelmezőbb lenne. Ha küldetést végez, válassza ki a vonal tarifáit turbó.

A szerver DDoSa elleni védelmére Cloudflare-t használtunk.

Érdemes elmondani, hogy a VPS mindent becsülettel kiállt.

Az Arduino, amely a relék vezérléséért volt felelős, parancsokat kapott a fordítótól, és elvégezte a tényleges munkát

Inkább ez a témája a következő, a projekt hardveres részével foglalkozó cikknek: a háttérrendszer egyszerűen kéréseket küldött egy adott relé bekapcsolására. Történt, hogy a háttérprogram szinte az összes entitást ismerte, és a tőle érkező kérések úgy néztek ki, hogy „kapcsold be ezt az entitást”. Ezt a helyszín korai tesztelése érdekében tettük (még nem szereltük össze az összes Arduinót és relét), végül mindent így hagytunk.

Frontend

Gyorsan elkészítettük az oldalt a tilden, egy munkanapba telt, és 30 ezret spóroltunk a költségvetésünkön.

Kezdetben arra gondoltunk, hogy egyszerűen exportáljuk az oldalt, és hozzáadjuk a hiányzó logikát, de olyan használati feltételekbe ütköztünk, amelyek megtiltották ezt.

Nem álltunk készen arra, hogy megsértsük a licencet, így két lehetőség volt: mindent magunk valósítunk meg, vagy közvetlenül kapcsolatba lépünk Tildával, beszélünk a projektről és engedélyt kérünk a kód megváltoztatására.

Mi a második lehetőséget választottuk, és nem csak félúton találkoztak velünk, de még egy év ingyenes üzleti számlát is adtak nekünk, amit nagyon köszönünk nekik. Nagyon kínos volt megmutatni nekik a Sokol weboldal tervezését.

Ennek eredményeként js-logikát csatoltunk a frontendhez, amellyel kéréseket küldhetünk az elemi eszközökre, és kissé megváltoztattuk a játékelemek be- és kikapcsolására szolgáló gombok stílusát.

Weboldal tervezés

A keresések története, ami külön fejezetet érdemel.

Nem csak egy régimódi oldalt akartunk létrehozni, hanem egy teljesen undorítót, amely megsérti a tervezés minden alapvető szabályát. Ugyanakkor fontos volt a hihetőség megőrzése: nem kellett megtörnie a fül-orr-gégészet történetét, demonstrálnia kellett a szerző igényességét, és a játékosoknak el kellett hinniük, hogy létezhet egy ilyen oldal, és még ügyfeleket is hozhat. És elhozta! Amíg a játék zajlott, kétszer megkerestek minket, hogy weboldalakat hozzunk létre.

Eleinte magam készítettem a tervezést, igyekeztem több gifet és fényes elemet beletenni. De a 10 éves tervező férjem átnézett a válla fölött, és elvetette, hogy „túl jó”. A tervezési szabályok megszegéséhez ismernie kell azokat.

Hogyan jött létre egy szerver megsemmisítéséről szóló hackerjáték háttere

Több színkombináció is van, amely tartós undor érzést vált ki: zöld és piros egyenlő gazdagság, szürke és rózsaszín, kék plusz barna. Végül a piros és a zöld kombinációja mellett döntöttünk alapszínként, gifeket adtunk hozzá egy macskával, és kiválasztottunk 3-4 fotót magáról Sokolovról egy stock fotóból. Csak néhány követelményem volt: egy középkorú férfi, pár számmal túl nagy öltönyben, „profi stúdiófotózás” pózban. A teszthez megmutatták a barátaiknak, és megkérdezték, hogy „hogy tetszik?”

A tervezési folyamat során a férjemnek félóránként le kellett feküdnie, a helikopter repülni kezdett. Pasha megpróbálta kinyitni a fejlesztői konzolt a képernyő nagy részére, miközben befejezte az előlapot – hogy megvédje a szemét.

Valós eszközök

A ventilátorokat és a lámpákat szilárdtestreléken keresztül szerelték fel, hogy ne kapcsoljanak be azonnal teljes erővel - így a monitorozással párhuzamosan nő a teljesítmény.

De erről a következő bejegyzésben fogunk beszélni, a játék hardveres részéről és az oldal tényleges felépítéséről.

Maradjon velünk!

További cikkek a szerver megsemmisítésének küldetéséről

Hogyan jött létre egy szerver megsemmisítéséről szóló hackerjáték háttere

Forrás: will.com

Hozzászólás