Преди няколко дни завършихме едно от най-емоционално заредените събития, което имахме удоволствието да проведем в рамките на блога - хакерска онлайн игра с унищожаване на сървър.
Резултатите надминаха всички наши очаквания: участниците не само че се включиха, а бързо се организираха в сплотена общност от 620 души в Discord, която буквално завзе квеста за два дни без прекъсване за сън.
И ето как всичко завърши:

Как всичко започна и за какво всъщност става въпрос?
Играта започна на 12 август, когато публикувахме в блога с видео, в което хакер в образа на череп предлага да играят игра, да унищожат сървъра, да предизвикат късо съединение в стаята (или мини-пожар) и да вземат парите, останали в шредера.
Това беше онлайн квест: стартирахме YouTube предаване от стая, която напълнихме с IoT устройства, под леглото имаше сървър (който трябваше да бъде унищожен), а над сървъра беше закрепен аквариум и с над него беше окачена тежест. За да направим играта по-вълнуваща, решихме да направим награден фонд от 200 000 рубли, който зарязахме в шредера и настроихме да се включва на всеки 60 минути. Всеки час шредера поглъщаше по 1000 рубли - колкото по-скоро играчите спрат, толкова повече пари ще спечелят.

Създаването на този квест беше само по себе си приключение - трябваше да се хранен само с доставки и да спим по няколко часа в денонощието, точно в същата стая. Но най-учудващото беше да наблюдаваме полета на мисълта на играчите и тяхната емоционална отдаденост по време на процеса.
Ако сме честни, изобретателността на играчите при разгадаването на задачите надмина нашата скромна концепция многократно: всяка свободна минута четяхме чата в Discord и в някои случаи буквално плачехме от смях, наблюдавайки какво правят играчите и как се шегуват по време на процеса.
По проекта неуморно работеха 7 души: бекенд разработчик, специалист по хардуер, истински кино продуцент, CG дизайнер и двама вдъхновители-съпродуценти.
Ще разкажем в следващите постове как точно квестът беше реализиран от техническа гледна точка, а за момента ще споделя разгадаването му: как точно трябваше да се хакне тази стая по време на предаването. Заедно ще си припомним хронологията на събитията, както и всички луди теории на Илюминатите от чата в Discord и всичко.
Какво се случи с играчите в началото на играта
Всички предмети в стаята бяха разделени на три категории:
- Лесни за управление, неигрови интелигентни устройства
- Игрови устройства за решаване на квеста
- Антураж

Разположихме 8 много лесни за управление елемента: две лампи, една гирлянда, пет букви Сокол, всяка от които можеше да променя цвета си. Всичко това можеше да се включва/изключва директно от сайта, като веднага виждахме резултата в транслацията – направихме ги достъпни за всички играчи, независимо от нивото им на техническа подготовка.

Всичко, което се включваше лесно от сайта
От важно значение игрови елементи, необходими за решаването на квеста, достъпът до които не беше толкова лесен:
- Сървър с отворен капак и аквариум над него
- Гиря, окачена така, че да разбие аквариума
- Мегатрон 3000 – мощен лазерен показалец, насочен към въжето, което държи гирята
- Мощен вентилатор, който се включва при натоварване на сървъра
- Флипчарт, на който бяха написани потребителското име и паролата за Мегатрон
- Телефон, на който можеше да се обадите и да видите обаждането си на живо
- Шредер, който изяждаше по 1000-рублеви банкноти на час
Как точно беше решен квеста
Ще кажа направо: кутията се отваряше доста лесно.
Целта на играта беше да спрете шредера, създавайки късо съединение в стаята. За това трябваше да разбивате аквариума, пускайки гиря в него и заливайки сървъра с вода. Гирята бе прикрепена с шнур, на който беше насочен Мегатрон. Като завладееш контрола над Мегатрон, можеше да прережеш въжето. Това ставаше в 5 лесни стъпки:
Стъпка 1. Натоварете сървъра, стоящ в стаята
Например, като изпратите пакети с команда.
ab -r -n 10000 -c 100 -s 280 -l https://ws.ooosokol.ru/captchaПодсказката беше много натоварваща на .

Тази капча, която трябваше да атакувате

При натоварването на сървъра температурата му нарастваше и това можеше да бъде проследено в мониторинга, отворен точно пред камерата. След това се включваше вентилатор, който отваряше лека завеса на флипчарта. Тогава се показваше написаното на дъската потребителско име и паролата за достъп до страницата на Мегатрон.
А самата страница за управление на Мегатрон можеше да бъде намерена, проверявайки всички сертификати, издадени за домейна ooosokol.ru.
На поддомейн беше страницата за управление на Мегатрона. Но тя не се отваряше, докато на Мегатрон не бъде подадено първично захранване.
Всички тези етапи играчите преминаха почти веднага в коментарите на транслацията в youtube. След това задачите станаха по-сложни и играчите създадоха дискорд-сървър RUVDS Hack Room и продължиха обсъждането там.
Стъпка 2. Да се подаде първично захранване на Мегатрон
Всички интелигентни устройства, управлявани от сайта (онези светлини, които играчите не спираха да включват или изключват), имаха своите идентификатори.
За да се подаде първично захранване на Мегатрон и едновременно да го осветят, трябваше да се намери и включи скритото устройство на страницата за управление на офиса.

За това трябваше да се погледне на идентификаторите на устройствата и да се отбележи, че има общо 4 устройства, а на сайта са налични само 3.

Страницата на Мегатрон става достъпна при включването на 4-то устройство и самият лазер се осветяваше. Но в същото време стрелбата с лазера беше невъзможна, а на него висеше съобщение, че лазерът все още не е наличен и подсказка: в офиса е изключено захранването, трябва да се звънне на управляващата компания и да се поиска подаване на захранването.

Подсказка за управляващата компания
3. Да се обадите на управляващата компания и да поискате да включат захранването на Мегатрон
Според ЛОР-а Мегатрон не можеше да стреля, защото в офиса беше изключено захранването. Възстановяването на захранването можеше да бъде направено само от управляващата компания, до която трябваше да се обадите и да преминете идентификация като собственик на ООД.
Намирането на номера на управляващата компания беше лесно – ние го поставихме директно в футера.

Но преминаването на идентификацията беше много по-трудно.
При обаждане на номер +74991130688, попивателката вдигаше телефона и с уморен глас искаше да се назове ЕИК на компанията и пълното име на собственика. Без това тя отказваше да включи захранването и обясняваше, че е обикновена диспетчерска на аутсорс, имат 2000 клиенти и офиси и без тази информация не може да се намери нужния.
За играчите това се оказа най-трудният етап. Правилните ЕИК и име на собственика търсиха почти два дни, а аз (от името на оператора на диспетчерската) през това време приех над 400 обаждания. Телефонът звънеше на всеки 2-3 минути.
Момчетата копаеха както можеха. В ход влизаше всичко: те разглеждаха изходните кодове на сайта, търсеха собственика на сайта Соколов, проверяваха социалните мрежи.
Те търсеха ЕИК на различни компании

Почти пълна схема на търсене
В един момент дори се обадиха с подменен номер — сякаш звънят от офиса на компанията Сокол, посочена в фута.
Тогава разбрахме колко много компании носят името Сокол. Практически на всяка от тези компании звъняха играчите, но това не може да се сравнява с това, което преживя сайтът. , от които наистина купихме този Мегатрон преди около месец.
Първо, дискорд нападна поддръжката на Лазерсмастерс.

След това успяха да намерят там нечий акаунт! Докато поддръжката на Лазерсмастерс вече не сдържаше изразите си.
Внимавайте, дръжте децата далеч от екрана


В крайна сметка решихме просто да заддосим Лазерсмастерс и сайтът им падна. Също така успяхме да свалим и сайта на Сокол, въпреки че бързо го възстановихме.
При разследването момчетата от дискорда дори намериха актьор, чиято снимка купихме от сток, за да изиграе ролята на главния антагонист, собственикът на ООО Андрей Соколов. Оказа се, че го зоват Юрий и той изобщо не знае в каква работа е попаднал.

Андрей Соколов, персонаж на играта

Юрий, модел
Ако беше знаел как принуди 600 човека да не спят две денонощия…)
След това вече започнаха да копаят конкретно под мен, като организатор на квеста (което може би е щяло да завърши с успех, ако момчетата бяха разбрали как да хакнат моите работни канали).

Дори се притесних малко, когато назоваха моето бащино име и дори ЕГН. Но се успокоих, когато по време на работата на развален телефон изведнъж се появи старши брат, който изненадаително се оказа технически директор на Хабра.
Моят скъп роден брат, на когото също му се случи нещо такова.

Междувременно предположенията станаха все по-невероятни.

И достигнаха до илюминатски теории.

Най-вкусните теории за конспирация бяха свързани със Спондж Боб, Хари Потър и мигаща китайска диодна гирлянда, която поставихме вътре в системния блок.
Откъде Спондж Боб и Хари Потър, ще кажете вие? Вкарахме техните адреси в страницата за контакти на Сокол и това създаде множество съмнения в дискорд общността. Въпреки че просто искахме да отдадем дължимото на любимите си произведения от детството.

Тази привлекателност на страницата ""
И в резултат





Оказа се, че в сериала наистина има документи на Губка Боб. Те се наричаха като ЕГН.

Една от най-сложните теории беше, че в мигането на китайската гирлянда е зашито послание с азбука Морзе.
Мигането записваха и се опитваха да разшифроват.



От по-простите теории — момчетата се опитваха да разберат дали в картите не е зашита подсказка.

По пътя ни сравняваха с — незаслужено висока оценка, но все пак приятна.


Играчите активно опитваха социална инженерия. Обаждаха ми се под прикритие на ФСБ, пожарникари, самия Соколов, бившата му жена и охрана, която уж седи долу при нас. Казваха, че е избухнал пожар, някой е заседнал в асансьора, а най-душераздирателната история беше, че в офиса, който е обхванат от огън, уж седи кученцето на обаждащия се.

Имаше също опити за подкуп.
Постепенно в чата започнаха да се появяват собствени мемета.
Ето две-три.



А заводите междувременно оставаха без дейност.





Подсказка
Парите в шредера ставаха все по-малко. За да получи победителят нещо, решихме да дадем подсказка. Освен това, следвайки правилата на геймдизайна, точно преди финала да повишим напрежението.
Отделно в блога публикувахме видео. В началото беше вмъкнат фрагмент от Бойцовския клуб — като препратка към Тайлър Дърдън, който обмисляше вмъкването на 25-ия кадър в филми, докато работеше в кина.
Решихме да приложим същия механизъм и вмъкнахме подсказка с 25-ти кадър, как да правилния ИНН и име на собственика.


След това момчетата се справиха много бързо.
Стъпка 4. Да стреляш с лазер в небоева режим.
При подаване на захранването от управляващата компания и след включването на предпазителите, Мегатронът се включваше и можеше да стреля в тестов режим. В формата за въвеждане вече беше поставен токен за тестов изстрел.

На всеки 25 секунди се генерираше нов токен, който можеше да се използва, за да включите лазера за 10 секунди на мощност 10/255.
След това лазерът се охлаждаше 1 минута и в тази минута не беше наличен и не приемаше нови заявки за изстрел.
Тази мощност напълно не бе достатъчна, за да пререже въжето, но всеки играч можеше да стреля от Мегатрона и да види лазерния лъч в действие.
Реакцията на общността беше повече от бурна.

Но всички бързо се успокоиха и осъзнаха, че това все още не е краят на играта.

След това общността започна да разбира как да стартира боевия режим.
Мозъчна атака.


В Дискорд се появиха фалшиви профили.
Не знаехме, че на крака на масата по време на излъчването има нещо написано.
Общността премина на стъпка 4. Да разберем как се генерират токени: да намерим gist и да генерираме токен, който включва лазера в боен режим.
Боен режим на Мегатрон е 100% мощност на лазера при 3 Вт. Това е напълно достатъчно за 2 минути, за да пререже въжето, което държи гири, да счупи аквариума и да залее сървъра с вода.
Оставихме няколко подсказки на : именно кода за генериране на токена, по който можеше да се разбере, че тестовите и бойни токени се генерират на база един и същ счетчик. В случай на бойния токен, освен стойността на счетчика, се използва и сол, която почти напълно остана в историята на промените този gist, с изключение на последните два символа.

Както бързо разбраха всички, това беше 42
В коментарите на гиста имаше кореспонденция между Андрей Соколов и разработчика ("мъдрия разработчик", както го наричаха момчетата от дискорда).
В кореспонденцията Андрей изпрати един от бойните токени, а разработчикът отговори, че този токен е бил инициирован при стойност на счетчика 42.

Знаейки тези данни, можеше да се пробват последните 2 символа на солта и фактически да се установи, че за нея са използвани числа от Lost, преведени в 16ична система.
След това на играчите им оставаше само да уловят стойността на счетчика (анализирайки тестовия токен) и да генерират бойния токен, използвайки следващата стойност на счетчика и подбраната на предишната стъпка сол.
Счетчикът просто се увеличаваше при всяко тестово изстрелване и на всеки 25 секунди. За това никъде не писахме, трябваше да бъде малка игрова изненада. Момчетата бързо разбраха какво става и активираха мегатрон в боен режим.
Стъпка 5. Да прережем въжето с лазер

Как се случи това
Тук всичко е просто. Изпращането на бойния токен включваше лазера в боен режим, а стаята се променяше и преминаваше в "режим на катастрофа", както го наричахме в общия сценарий:
- Всичките светлини в стаята изгаснаха
- Кнопките на iot-устройствата на сайта станаха недостъпни
- Светеше мигаща лампа и звучеше сирена
- Червената гиря се освети
- На екрана на телевизора започна обратното броене до активацията на лазера в боен режим
Заделахме таймер за един час и половина, за да може всеки, който играе, да успее да включи предаването и да види финала. И не беше напразно: докато с трепет очаквах звука на удара и счупването на стъкло от съседната стая, целият екип, който построи квеста, незабелязано започна да се събира на базата, за да види финала със собствените си очи. Те просто нахлуваха в стаята и започваха да се прегръщат.
Междувременно в Дискорд


След свършването на обратно отброяване, лазерът беше включен за действие и за две минути преряза връвта — тежестта полетя направо в аквариума. Преди удара на екрана запищя луда капибара, панически вдигнала малките си лапки.
След като целият екип се събра там, направихме кратко обръщение към всички, които две денонощия се бориха за финала в Дискорд и отидохме да отворим шампанското:

Как изчислихме времето за пускане на рекламни видеоролици и полета на тежестта?
След десетина теста с прерязването на връвта с лазер, разбрахме, че това е много ненадеждна конструкция — полупрерязаната връв става по-тънка, под тежестта на гирята се изтегляше, местеше се и лазерът вече не можеше да я прерязва докрай.
Затова избрахме друг път: дублирахме прерязването, обвивайки връвта с нихромова нишка. През нишката пускахме ток, тя се нагряваше до червено и прерязваше връвта приблизително за 2 секунди — това ни даваше точна представа кога да включим пищящата капибара, да спряме таймера за старт и да пуснем рекламния клип:

Какво не успяхме да направим?
На финала от системното блокче трябваше да излезе гъст дим, като при пожар — подготвихме димни шашки, запалвахме ги по аналогичен начин, но по неизвестни причини те не сработиха (вероятно заради водата).
Кой е победителят?
Победител е Аркадий Алексеев от Санкт Петербург — именно той първи генерира тестов токен и спечели останалите в шредера пари в размер на 134 000 рубли.
Кратко интервю с Аркадий.
Разкажи за себе си, с какво се занимаваш на работа?
По образование съм специалист по безопасност, завърших БИТ в ИТМО. Работя като фулстек уеб разработчик на аутсорс. В училище бях олимпиадник, включително по програмиране и математика.
Как разбра за играта?
Влязох в Хабр просто да прочета, видях статия, заинтересувах се.
Колко часа игра, когато се присъедини?
Присъединих се вечерта на деня, когато публикуваха статията (т.е. 24 часа преди края). Поседях вечерта и значителна част от следващия ден.
Какво ви хареса и какво не?
По принцип ми хареса всичко (все пак, аз спечелих)), но малко ме подразни моментът със звънците. Все пак, да звъниш и да проверяваш всяка версия не е много приятно, понеже осъзнавах, че има още десетки, които звънят, половината шегуват и се опитват да правят социална инженерия.
Как разбрахте как да намерите бойния токен за мегатрона?
Когато влязох, вече бяха спамили сървъра, натискали бутоните, намерили паролата за админ панела на лазера, различни поддомейни и страници.
Също така беше лесно да се намери профил на GitHub и gist с коментари. Оттам е очевиден процесът на генериране на токена и secret за него. В такива квестове не е необходимо много да се изобретява, тъй като можеш да се удавиш в множество възможности; съответно трябва да следваш посоката, в която те насочва създателят на квеста.
С оглед на останалите поддомейни и тестовия сайт на Tilda, беше ясно, че след подаването на захранване на лазера, ще трябва да се подбере токен. Съответно, в същата вечер написах примерен заявка за включване на лазера (на основание на 4 налични форми: 1 на работния сайт и 3 на тестовия/стария) и се опитах да брутфорсвам работещите токени, започвайки от 42 (просто на шега — вдруги да е вече всичко включено, а страницата за изпращане на токена просто ще се отвори след ЕГН и име).
Не съм сигурен, че заявката беше правилна, тъй като нямаше време за проверка (все пак, можеше да се провери само включването на лазера), но се подготвях предварително за опитите с токена.
Също така там имаше очевидна логика с уеб сокетите и управлението на устройствата в app.js файла. Имаше силен намек за устройство a9, при изпращане на power: true, на което сокетът се сриваше. Опитах се да изпратя различни неща на него — може би имаше и допълнително устройство за разгадаване на ЕГН, но без успех.
По-късно проверих и останалите айдита до тези десет, но навсякъде имаше unknown device. Опитах се също да погугля нещо, даже влязох в chsokolow@gmail.com, изпратих всякакви неща чрез формата на страницата с ценоразписа, рових се с lasermasters, но всичко беше безуспешно. На следващия ден седях в чата, гуглех всякакви неща, после се появи темата за стего и се посъветвах с човек от stégsolv относно картинките и гифовете (но умът ми подсказваше, че 99% от тях нищо няма да съдържат, тъй като това би било твърде + противоречащо на основната линия на квеста).
Но накрая също прекарах няколко часа и се рових във всички снимки и гифове. Още няколко пъти се обадих с различни варианти на ИНН, но без успех. После вече реших да не се тревожа, но там публикуваха подсказка — и стана ясно, че скоро ще намерят ИНН, което и се случи. После май аз, май някой друг (не е очевидно) изпрати power: true на а9-устройство и лазерът заработи, въпреки че може би тук няма връзка и той просто е заработил след ИНН. Общо взето, влязох в админката на лазера и не малко се учудих, тъй като сървърът сам изпращаше токен (а аз вече бях подготвил брутинг). Стана очевидно, че токенът е тестов, тъй като транслацията + здравият разум + проверката ми го потвърдиха.
В кода имаше логика за изпращане на работещ токен някъде с нотификация, но явно или това беше неверен код, или беше необходимо за други части на системата. Направих скрипт за получаване на текущия работещ токен от тестовия и започнах да оставам на ф5, опитвайки се да ги изпратя — с това имах проблеми, тъй като всички постоянно натискаха бутона за изпращане, което променяше токена. После сайтът падна, броячът се нулира, но вече не е важно — след известно време изпратих работещия токен. По идея броячът беше 58 и токенът беше 449a776938f7ce4cf19f8603045dca0f. в момента на активиране, ако не се лъжа. Всъщност, това е всичко.
После ми стана малко неприятно от коментари като „да, всичко това е тривиално, да, просто е имало късмет“. Ами, ако влезеш на страницата, помислиш минутка, напишеш скрипт за няколко минути, провериш го — да, тривиално е. Но аз го направих за 10-20 секунди, а след това просто няколко минути не можех да изпратя токена.
Разбира се, можеше да опитам да напиша логика за автоматично приемане и изпращане, но това би отнело повече време и е с голям риск, плюс вероятно облачните услуги щяха да се накарали. Но с какво наистина ми провървя, е последният етап — малко алгоритми за бързина + реакционна скорост, това е точно моето. Ако задачата беше уточнена директно от пен теста, вероятно нямаше да съм първи.
Но това още не е края
Вече с нетърпение очаквам да ви разкажа за всички страхотни хора, които построиха този квест, и за всички инженерни решения, които те намериха. Но този пост и така стана твърде огромен — затова по темата ще има отделни статии, така че останете на линия и се абонирайте за нашия блог в Хабре.
Източник: habr.com
