Si u krijua prapavija e një loje hakerash për shkatërrimin e një serveri

Si u krijua prapavija e një loje hakerash për shkatërrimin e një serveri
Ne vazhdojmë t'ju tregojmë se si u organizua kërkimi ynë lazer me shkatërrimin e serverit. Filloni në të mëparshmen artikull për zgjidhjen e kërkimit.

Në total, pjesa e pasme e lojës kishte 6 njësi arkitekturore, të cilat do t'i analizojmë në këtë artikull:

  1. Mbështetja e entiteteve të lojës që ishin përgjegjëse për mekanizmat e lojës
  2. Backend dhe autobusi i shkëmbimit të të dhënave të faqes në VPS
  3. Përkthyes nga kërkesat e backend (elementet e lojës) në Arduino dhe hardueri në vend
  4. Arduino, i cili ishte përgjegjës për kontrollin e stafetëve, mori komanda nga përkthyesi dhe bëri punën aktuale
  5. Pajisjet aktuale: ventilator, kurora, llamba dyshemeje, etj.
  6. Frontend - vetë faqja e internetit e Falcon, nga e cila lojtarët kontrollonin pajisjet

Le të kalojmë nëpër secilën prej tyre.

Fundi i entiteteve të lojës

Backend-i u zbatua si një aplikacion për nisjen e pranverës: ai kishte disa kontrollues të pushimit, një pikë fundore të folesë në internet dhe shërbime me logjikën e lojës.

Kishte vetëm tre kontrollues:

  • Megatron. Faqja aktuale e Megatron u dërgua përmes kërkesave GET: para dhe pas ndezjes së energjisë. Lazeri shkrepi përmes kërkesës POST.
  • Harta e faqeve në mënyrë që ato të shërbehen sipas emrit të faqes. Tilde prodhon faqe për eksport jo me emra origjinalë, por me ID të brendshme dhe informacione të pajtueshmërisë.
  • Kontrolluesi Captcha për të shërbyer captcha të serverit pseudo me ngarkesë të lartë.

Pika përfundimtare e faqes së internetit u përdor për të kontrolluar pajisjet: llambat, kurora dhe shkronjat. U zgjodh për t'u shfaqur në mënyrë sinkrone të gjithë lojtarëve statusin aktual të pajisjes: nëse është e ndezur ose e fikur, aktive ose jo, çfarë ngjyre shkronje ndizet aktualisht në mur. Për ta bërë pak më të vështirë detyrën e ndezjes së lazerit, i shtuam autorizimin garlandës dhe lazerit me të njëjtin login dhe fjalëkalim admin/admin.

Lojtarët mund ta testojnë atë duke ndezur garlandën dhe të përsërisin të njëjtën gjë me lazerin.

Ne zgjodhëm një palë të tillë të parëndësishme hyrje-fjalëkalim në mënyrë që të mos mundojmë lojtarët me zgjedhje të panevojshme.

Për ta bërë detyrën pak më interesante, ID-të e objekteve nga mongodb u përdorën si identifikues pajisjesh në dhomë.

ObjectId përmban një vulë kohore: dy vlera të rastësishme, njëra prej të cilave merret bazuar në identifikuesin e pajisjes dhe e dyta bazuar në pid-in e procesit që e gjeneron atë dhe vlerën e numëruesit. Doja t'i bëja identifikuesit të gjeneruar në intervale të rregullta dhe me procese të ndryshme pid, por me një numërues të përbashkët, në mënyrë që zgjedhja e një identifikuesi të pajisjes lazer të ishte më interesante. Megjithatë, në fund, të gjithë filluan me identifikues që ndryshonin vetëm në kundërvlerën. Kjo mund ta ketë bërë hapin shumë të thjeshtë dhe nuk kërkon analizë të strukturës objectId.

Përkthyes nga kërkesat e backend

Skript Python, i cili punoi në kohëmatës dhe i përktheu ato nga abstraksionet e lojërave në një model fizik. Për shembull, "ndiz llambën e dyshemesë" → "ndize stafetën N2".

Skripti u lidh me radhën e RabbitMQ dhe transferoi kërkesat nga radha në Arduino. Ai zbatoi gjithashtu logjikën e ndërrimit të dritës paralele: së bashku me disa pajisje, drita në to ishte ndezur, për shembull, kur fillimisht furnizohej me energji elektrike në Megatron, ajo u ndriçua me dritë skene. Dizajni i ndriçimit për kinematografinë e të gjithë skenës është një histori më vete për punën e shkëlqyer të bashkëprodhuesit dhe projektuesit të projektit tonë Ilya Serov, dhe ne do të tregojmë për të në një postim të veçantë.

Përkthyesi ishte gjithashtu përgjegjës për logjikën e nisjes së grirëses duke përdorur një kohëmatës dhe transmetimin e imazhit në televizor: kohëmatësin për lëshimin e grirëses, një kapibara që bërtet, një reklamë në fund të lojës.

Si u strukturua logjika për gjenerimin e tokenit Megatron

Gjuajtje provë

Çdo 25 sekonda gjenerohej një token i ri dhe mund të përdorej për të ndezur lazerin për 10 sekonda me fuqi 10/255. Lidh me github me kodin Megatron.

Lazeri më pas u fto për 1 minutë - gjatë kësaj kohe ai nuk ishte i disponueshëm dhe nuk pranoi kërkesa të reja për shkrepje.

Kjo fuqi nuk ishte e mjaftueshme për të djegur përmes litarit, por çdo lojtar mund të gjuante Megatron dhe të shihte rreze lazer në veprim.

Algoritmi hashing MD5 u përdor për të gjeneruar tokenin. Dhe skema funksionoi MD5 nga MD5 + kundër + sekret për një shenjë luftarake dhe pa sekret për një shenjë prove.

MD5 është një referencë për një projekt komercial që bëri Pavel, mbështetësi ynë. Vetëm disa vjet më parë ky projekt përdori MD5, dhe kur ai i tha arkitektit të projektit se ishte një algoritëm i vjetëruar i enkriptimit, ata filluan të përdorin MD5 nga MD5. Meqenëse vendosëm të bënim projektin më noob të mundshëm, ai kujtoi gjithçka dhe vendosi të bënte një referencë të vogël.

Gjuajtje luftarake

Modaliteti luftarak i Megatron është 100% fuqi lazer me 3 vat. Kjo është e mjaftueshme për 2 minuta për të djegur përmes litarit që mbante peshën, për të thyer akuariumin dhe për të përmbytur serverin me ujë.

Ne lamë disa sugjerime për Github-in e projektit: përkatësisht, kodin e gjenerimit të tokenit, nga i cili mund të kuptohet se argumentet e provës dhe luftarake krijohen bazuar në të njëjtin tregues kundër. Në rastin e një token luftarak, përveç kundërvlerës, përdoret edhe një kripë, e cila është lënë pothuajse plotësisht në historikun e ndryshimeve të këtij thelbi, me përjashtim të dy karaktereve të fundit.

Duke ditur këto të dhëna, ishte e mundur të renditeshin 2 simbolet e fundit të kripës dhe në fakt të zbulohej se numrat nga Lost, të konvertuar në sistemin heksadecimal, ishin përdorur për të.

Më pas lojtarët duhej të kapnin vlerën e kundërvlerësimit (duke analizuar shenjën e provës) dhe të gjeneronin një shenjë luftarake duke përdorur vlerën tjetër të numëruesit dhe kripën e zgjedhur në hapin e mëparshëm.

Numëruesi thjesht rritej me çdo goditje provë dhe çdo 25 sekonda. Nuk kemi shkruar askund për këtë, supozohej të ishte një surprizë e vogël loje.

Shërbimi i ndërveprimit Captcha

Në botën e lojërave, kjo ishte e njëjta captcha që duhej të ngarkohej për të ndezur tifozin dhe për të hapur tabelën me një aluzion. Pranë kamerës ishte një laptop me monitorim të ngarkesës.

Si u krijua prapavija e një loje hakerash për shkatërrimin e një serveri

Shërbim Llogarita se çfarë të shfaqej në monitorim si ngarkesë aktuale: temperaturën dhe ventilatorin e CPU. Metrikat u transferuan në bazën e të dhënave të bazës kohore dhe u vizatuan nga grafana.

Nëse në 5 sekondat e fundit kishte më shumë se 50 kërkesa për të shfaqur captcha, atëherë ngarkesa u rrit me një numër fiks + të rastësishëm hapash. Llogaritja ishte se ngarkesa 100% mund të arrihej në dy minuta.

Në fakt, kishte më shumë logjikë në shërbim sesa u shfaq në lojën e fundit: ne e vendosëm monitorin në atë mënyrë që të shihej vetëm rrotullimi i Fan CPU.

Në fillim të kërkimit ata donin ta linin Grafan të aksesueshëm nga faqja e internetit e Falcon. Por ai gjithashtu përmbante metrika të nisjes së pranverës nga raporti i aplikacionit prapavijë, të cilin nuk kishim kohë t'i pastronim, kështu që vendosëm të bllokonim aksesin në të. Dhe me të drejtë - edhe në fillim të kërkimit, disa lojtarë morën me mend se aplikacioni ishte shkruar në kornizën Springboot dhe madje gërmuan emrat e disa shërbimeve.

Hosting dhe autobus i të dhënave

Një mjet për transferimin e informacionit nga prapavija në sit, serveri VPS në të cilin funksiononte RabbitMQ.

Backend-i dhe autobusi i të dhënave u mbajtën të ndezur VPS-ja jonë. Fuqia e tij ishte e krahasueshme me kompjuterin që shihni në ekran: një VPS me 2 bërthama me dy gigabajt RAM. Tarifa u ngarkua për burimet, pasi ngarkesa e pikut ishte planifikuar vetëm për disa ditë - kjo është ajo që bëjnë klientët tanë që planifikojnë të ngarkojnë VPS për një periudhë të shkurtër kohore. Pastaj doli që ngarkesa ishte më e lartë nga sa prisnim, dhe një tarifë fikse do të ishte më fitimprurëse. Nëse bëni një kërkim, zgjidhni tarifat e linjës turbo.

Për të mbrojtur serverin nga DDoSa, ne përdorëm Cloudflare.

Vlen të thuhet se VPS i rezistoi gjithçka me nder.

Arduino, i cili ishte përgjegjës për kontrollin e stafetëve, mori komanda nga përkthyesi dhe bëri punën aktuale

Kjo është më shumë tema e artikullit tjetër në lidhje me pjesën harduerike të projektit: backend thjesht dërgoi kërkesa për të ndezur një stafetë specifike. Kështu ndodhi që pjesa e pasme i njihte pothuajse të gjitha entitetet dhe kërkesat prej saj dukeshin si "ndizni këtë entitet". Ne e bëmë këtë për testimin e hershëm të faqes (ne nuk kishim mbledhur ende të gjithë Arduino dhe stafetë), në fund lamë gjithçka ashtu.

Frontend

E krijuam shpejt faqen në tilde, u desh një ditë pune dhe na kurseu 30 mijë buxheti.

Fillimisht, ne menduam thjesht të eksportonim faqen dhe të shtonim logjikën që na mungonte, por u përballëm me termat e përdorimit që na ndalonin ta bënim këtë.

Ne nuk ishim gati të shkelnim licencën, kështu që kishte dy mundësi: të zbatonim gjithçka vetë ose të kontaktonim drejtpërdrejt Tildën, të flisnim për projektin dhe të kërkoni leje për të ndryshuar kodin.

Ne zgjodhëm opsionin e dytë dhe ata jo vetëm që na takuan në gjysmë të rrugës, por na dhanë edhe një vit llogari biznesi falas, për të cilën u jemi shumë mirënjohës. Ishte shumë e vështirë t'u tregoja dizajnin e faqes së internetit të Sokolit.

Si rezultat, ne bashkangjitëm logjikën js në frontend për dërgimin e kërkesave në pajisjet elementare dhe ndryshuam pak stilet e butonave për ndezjen dhe fikjen e elementeve të lojës.

Dizajni i faqes në internet

Historia e kërkimeve, e cila vlen një kapitull më vete.

Ne donim të krijonim jo vetëm një faqe të modës së vjetër, por një faqe absolutisht të neveritshme që shkel të gjitha rregullat themelore të dizajnit. Në të njëjtën kohë, ishte e rëndësishme të ruhej besueshmëria: duhej të mos thyente historinë e ENT, të demonstronte pretenciozitetin e autorit dhe lojtarët do të duhej të besonin se një faqe e tillë mund të ekzistonte dhe madje të sillte klientë. Dhe ai e solli! Ndërsa loja po vazhdonte, ne u kontaktuam dy herë për të krijuar faqe interneti.

Në fillim e bëra vetë dizajnin, duke u përpjekur të përfshija më shumë gif dhe elementë me shkëlqim. Por bashkëshorti im stilist prej 10 vitesh e shikoi mbi supe dhe e hodhi poshtë si "shumë të mirë". Për të thyer rregullat e projektimit, duhet t'i njihni ato.

Si u krijua prapavija e një loje hakerash për shkatërrimin e një serveri

Ka disa kombinime ngjyrash që ngjallin një ndjenjë të qëndrueshme neverie: jeshile dhe e kuqe me të njëjtën pasuri, gri dhe rozë, blu plus kafe. Në fund, ne u vendosëm në një kombinim të së kuqes dhe jeshiles si ngjyra bazë, shtuam gif me një mace dhe zgjodhëm 3-4 foto të vetë Sokolov nga një foto e aksioneve. Kisha vetëm disa kërkesa: një burrë në moshë të mesme, i veshur me një kostum të papërshtatshëm, shumë të madh dhe në një pozë "sesioni fotografik në studio profesionale". Për testin, ata ua treguan miqve dhe pyetën "si ju pëlqen?"

Gjatë procesit të zhvillimit të projektimit, burri im duhej të shtrihej çdo gjysmë ore; helikopteri filloi të fluturonte. Pasha u përpoq të hapte tastierën e zhvilluesit në pjesën më të madhe të ekranit ndërsa ai mbaroi përfundimin e pjesës së përparme - për të mbrojtur sytë.

Pajisjet aktuale

Tifozët dhe dritat u montuan përmes releve të gjendjes së ngurtë në mënyrë që të mos ndizen menjëherë me fuqi të plotë - në mënyrë që fuqia të rritet paralelisht me monitorimin.

Por ne do të flasim për këtë në postimin tjetër, për pjesën harduerike të lojës dhe ndërtimin aktual të faqes.

Qëndroni të akorduar!

Artikuj të tjerë në lidhje me kërkimin për të shkatërruar serverin

Si u krijua prapavija e një loje hakerash për shkatërrimin e një serveri

Burimi: www.habr.com

Shto një koment