Како е создаден заднината на хакерска игра за уништување сервер

Како е создаден заднината на хакерска игра за уништување сервер
Продолжуваме да ви кажуваме како беше договорена нашата ласерска потрага со уништување на серверот. Започнете во претходниот статија за решавање на потрагата.

Севкупно, задниот дел на играта имаше 6 архитектонски целини, кои ќе ги анализираме во оваа статија:

  1. Заден дел од играчките ентитети кои беа одговорни за механизмите на играта
  2. Автобус за размена на податоци за заднина и локација на VPS
  3. Преведувач од барања за заднина (елементи на играта) до Arduino и хардвер на локацијата
  4. Arduino, кој беше одговорен за контрола на релеите, добиваше команди од преведувачот и ја заврши вистинската работа
  5. Вистински уреди: вентилатор, венци, подни светилки итн.
  6. Frontend - самата веб-страница на Falcon, од која играчите ги контролираа уредите

Ајде да поминеме низ секоја од нив.

Задниот дел на играта ентитети

Бексендот беше имплементиран како пролетна апликација за подигање: имаше неколку контролери за одмор, крајна точка на веб-сокет и услуги со логика на играта.

Имаше само три контролори:

  • Мегатрон. Тековната страница на Мегатрон беше испратена преку GET барања: пред и по вклучувањето на напојувањето. Ласерот пукал преку барањето POST.
  • Мапирање на страници со тилд, така што тие се опслужуваат по име на страницата. Tilde произведува страници за извоз не со оригинални имиња, туку со внатрешна ID и информации за усогласеност.
  • Captcha контролер за опслужување на captcha на серверот со псевдо-високо оптоварување.

Крајната точка на Websocket се користеше за контрола на гаџети: светилки, венци и букви. Беше избрано за синхроно прикажување на тековниот статус на уредот на сите играчи: дали е вклучен или исклучен, активен или не, каква боја на буквата моментално свети на ѕидот. За да ја отежнеме задачата за вклучување на ласерот, додадовме овластување на венецот и ласерот со истиот најава и лозинка admin/admin.

Играчите можеа да го тестираат со вклучување на венец и да го повторат истото со ласерот.

Избравме таков тривијален пар најава-лозинка за да не ги мачиме играчите со непотребен избор.

За да биде задачата малку поинтересна, ID-ите на објекти од mongodb беа користени како идентификатори на уреди во собата.

ObjectId содржи временски печат: две случајни вредности, од кои едната се зема врз основа на идентификаторот на уредот, а втората врз основа на pid на процесот што го генерира и вредноста на бројачот. Сакав да ги направам идентификаторите генерирани во редовни интервали и со различни процеси pid, но со заеднички бројач, за да биде поинтересен изборот на идентификатор на ласерски уред. Сепак, на крајот, сите почнаа со идентификатори кои се разликуваа само по бројната вредност. Ова можеби го направи чекорот премногу едноставен и не бараше анализа на структурата objectId.

Преведувач од барања за заднина

Пајтон скрипта, кој работеше на тајмери ​​и ги преведе од апстракции на игри во физички модел. На пример, „вклучи ја подната светилка“ → „вклучи го релето N2“.

Скриптата се поврза со редот на RabbitMQ и ги префрли барањата од редот до Arduino. Ја спроведуваше и логиката на паралелно префрлување на светлината: заедно со некои уреди, светлото на нив беше вклучено, на пример, кога напојувањето првично беше доставено до Мегатрон, беше осветлено со светло на сцената. Дизајнот на осветлување за кинематографијата на целата сцена е посебна приказна за одличната работа на нашиот копродуцент на проектот и продукциски дизајнер Илја Серов, а ние ќе кажеме за тоа во посебен пост.

Преведувачот бил одговорен и за логиката на лансирање на шредерот со помош на тајмер и пренесување на сликата на телевизорот: тајмерот за лансирање на уништувачот, вреска капибара, реклама на крајот од играта.

Како беше структурирана логиката за генерирање на мегатронскиот токен

Тест истрел

На секои 25 секунди се создаваше нов токен и можеше да се користи за вклучување на ласерот 10 секунди со моќност од 10/255. Врска до github со Megatron код.

Ласерот потоа се олади 1 минута - за тоа време беше недостапен и не прифаќаше нови барања за снимање.

Оваа моќ не беше доволна за да изгори низ јажето, но секој играч можеше да пука Мегатрон и да го види ласерскиот зрак во акција.

За генерирање на токенот се користеше алгоритмот за хаширање MD5. И шемата успеа МД5 од МД5 + шалтер + тајна за борбен токен и без тајна за тест жетон.

MD5 е референца за комерцијален проект што го направи Павел, нашиот поддржувач. Пред само неколку години овој проект користеше MD5, а кога тој му кажа на проектниот архитект дека тоа е застарен алгоритам за шифрирање, тие почнаа да користат MD5 од MD5. Бидејќи решивме да го направиме најнеобичниот можен проект, тој се сети на сè и реши да направи мала референца.

Борбен истрел

Борбениот режим на Мегатрон е 100% ласерска моќност од 3 вати. Ова е доволно за 2 минути да изгори низ јажето што ја држеше тежината, да го скрши аквариумот и да го поплави серверот со вода.

Оставивме неколку совети за Github на проектот: имено, кодот за генерирање на токени, од кој може да се разбере дека тестовите и борбените токени се генерираат врз основа на истиот бројач индикатор. Во случај на борбен токен, покрај противвредноста, се користи и сол, што е речиси целосно оставено во историјата на менување на оваа суштина, со исклучок на последните два знака.

Знаејќи ги овие податоци, беше можно да се подредат последните 2 симболи на солта и всушност да се открие дека за тоа се користени броевите од Lost, претворени во хексадецимален систем.

Потоа, играчите мораа да ја фатат вредноста на бројачот (со анализа на тест-токенот) и да генерираат борбен токен користејќи ја следната бројачка вредност и солта избрана на претходниот чекор.

Бројачот едноставно се зголемуваше со секој тест истрел и на секои 25 секунди. Никаде не пишувавме за ова, требаше да биде мало изненадување од играта.

Услуга за интеракција Captcha

Во светот на игрите, ова беше истата captcha што требаше да се вчита за да се вклучи вентилаторот и да се отвори флипчартот со навестување. До камерата имаше лаптоп со мониторинг на оптоварување.

Како е создаден заднината на хакерска игра за уништување сервер

Услуги Пресметав што да се прикаже во мониторингот како моментално оптоварување: температура и вентилатор на процесорот. Метриките беа префрлени во базата на податоци на време и беа нацртани од grafana.

Ако во последните 5 секунди имало повеќе од 50 барања за прикажување на captcha, тогаш оптоварувањето се зголемило за фиксен + случаен број чекори. Пресметката беше дека 100% оптоварување може да се постигне за две минути.

Всушност, имаше повеќе логика во сервисот отколку што беше прикажано во последната игра: го поставивме мониторот на таков начин што беше видлива само ротацијата на вентилаторот на процесорот.

На почетокот на потрагата тие сакаа да го остават Графан достапен од веб-страницата на Фалкон. Но, исто така, содржеше метрика за пружински подигање од извештајот за апликацијата за заднина, кои немавме време да ги избришеме, па решивме да го блокираме пристапот до него. И со право - дури и на почетокот на потрагата, некои играчи погодија дека апликацијата е напишана во рамката за пролетно подигање, па дури и ги ископаа имињата на некои услуги.

Хостинг и магистрала за податоци

Алатка за пренос на информации од заднината на страницата, серверот VPS на кој работеше RabbitMQ.

Заднината и магистралата за податоци беа вклучени нашиот VPS. Неговата моќ беше споредлива со компјутерот што го видовте на екранот: 2-јадрен VPS со два гигабајти RAM меморија. Тарифата се наплаќаше за ресурси, бидејќи врвното оптоварување беше планирано само за неколку дена - тоа го прават нашите клиенти кои планираат да вчитаат VPS за краток временски период. Потоа се покажа дека товарот е поголем отколку што очекувавме, а фиксната тарифа ќе биде попрофитабилна. Ако правите потрага, изберете ги тарифите за линијата турбо.

За да го заштитиме серверот од DDoSa, користевме Cloudflare.

Вреди да се каже дека ВПС издржа сè со чест.

Arduino, кој беше одговорен за контрола на релеите, добиваше команди од преведувачот и ја заврши вистинската работа

Ова е повеќе тема на следната статија за хардверскиот дел од проектот: задниот дел едноставно испрати барања за вклучување на одредено реле. Така се случи задниот дел да ги знае скоро сите ентитети и барањата од него изгледаа како „вклучи го овој ентитет“. Ова го направивме за рано тестирање на страницата (сè уште не ги склопивме сите Arduino и релеи), на крајот оставивме сè така.

Предниот крај

Брзо ја креиравме страницата на тилда, ни требаше еден работен ден и ни заштеди 30 илјади од нашиот буџет.

Првично, мислевме едноставно да ја извеземе страницата и да ја додадеме логиката што ни недостасуваше, но наидовме на услови за употреба што ни забранија да го правиме тоа.

Не бевме подготвени да ја прекршиме лиценцата, па имаше две опции: да спроведеме сè сами или директно да ја контактираме Тилда, да разговараме за проектот и да побараме дозвола за промена на кодот.

Ја избравме втората опција и не само што не пречекаа на половина пат, туку дури ни дадоа и една година бесплатна деловна сметка, за што сме им многу благодарни. Беше многу непријатно да им се покаже дизајнот на веб-страницата на Сокол.

Како резултат на тоа, прикачивме js логика на предниот дел за испраќање барања до основни уреди и малку ги променивме стиловите на копчињата за вклучување и исклучување на елементите на играта.

Дизајн на веб-страница

Историјата на пребарувања, која вреди посебно поглавје.

Сакавме да создадеме не само старомодна страница, туку апсолутно одвратна која ги прекршува сите основни правила на дизајнот. Во исто време, важно беше да се одржи веродостојноста: не мораше да ја скрши приказната за ОРЛ, да ја демонстрира претенциозноста на авторот и играчите да веруваат дека таква страница може да постои, па дури и да донесе клиенти. И го донесе! Додека траеше играта, двапати бевме контактирани за да креираме веб-страници.

Отпрвин сам го правев дизајнот, обидувајќи се да вклучам повеќе гифови и сјајни елементи. Но, мојот 10-годишен сопруг дизајнер погледна преку рамо и го отфрли како „премногу добро“. За да ги прекршите правилата за дизајн, треба да ги знаете.

Како е создаден заднината на хакерска игра за уништување сервер

Постојат неколку комбинации на бои кои предизвикуваат трајно чувство на одвратност: зелена и црвена со еднакво богатство, сива и розова, сина плус кафена. На крајот, се решивме на комбинација од црвена и зелена како основни бои, додадовме гифови со мачка и избравме 3-4 фотографии од самиот Соколов од сток фотографија. Имав само неколку барања: средовечен маж, облечен во несоодветно одело со неколку големи димензии и во поза „професионална студиска фотосесија“. За тестот, тие им го покажаа на пријателите и прашаа „како ви се допаѓа?

За време на процесот на развој на дизајнот, мојот сопруг мораше да лежи на секои половина час, хеликоптерот почна да лета. Паша се обиде да ја отвори програмерската конзола на поголемиот дел од екранот додека заврши со завршувањето на предниот дел - за да ги заштити очите.

Вистински уреди

Вентилаторите и светлата беа монтирани преку релеи со цврста состојба за да не се вклучат веднаш со целосна моќност - така што моќта ќе се зголемува паралелно со мониторингот.

Но, ќе зборуваме за ова во следниот пост, за хардверскиот дел од играта и вистинската конструкција на страницата.

Останете со нас!

Други написи за потрагата по уништување на серверот

Како е создаден заднината на хакерска игра за уништување сервер

Извор: www.habr.com

Додадете коментар