Пару дзён таму мы завяршылі адну з самых эмацыйна-зараджаных падзей, якое нам пашанцавала праводзіць у рамках блога - хакерскую анлайн-гульню са знішчэннем сервера.
Вынікі перасягнулі ўсе нашы чаканні: удзельнікі не проста прынялі ўдзел, а хутка арганізаваліся ў зладжанае кам'юніці з 620 чалавек у дыскардзе, якое літаральна штурмам узяло квэст за двое сутак без перапынку на сон.
Як усё пачыналася і пра што ўвогуле гаворка?
Гульня пачалася 12 жніўня, калі мы выклалі ў блогу
Гэта быў анлайн-квест: мы запусцілі ютуб-трансляцыю з пакоя, якую запоўнілі iot-прыладамі, подкроватным серверам (які і трэба было знішчыць), а над серверам замацавалі акварыум і падвесілі над ім гіру. Каб гульня была больш вострасюжэтнай, мы вырашылі зрабіць прызавы фонд у 200 000 рублёў, які загрузілі ў Шродэр і настроілі яго на ўключэнне кожныя 60 хвілін. Кожную гадзіну Шродэр з'ядаў па 1000 рублёў - чым раней гульцы спынілі б яго, тым больш грошай бы выйгралі.
Будаваць гэты квэст было само па сабе квэстам - нам прыйшлося харчавацца адной дастаўкай і спаць па некалькі гадзін у суткі прама ў тым жа пакоі. Але самым дзіўным было назіраць за палётам думкі гульцоў і іх эмацыйнай аддачай у працэсе.
Калі сапраўды, то вынаходлівасць гульцоў у разгадцы задачак перасягнула нашу сціплую задумку ў шмат разоў: кожную вольную хвіліну мы чыталі чат дыскорда і ў некаторых выпадках літаральна рыдалі ад смеху, пазнаючы, чым займаюцца гульцы і як яны жартуюць падчас.
Над праектам не пакладаючы рук працавалі 7 чалавек: бекендэр, спецыяліст-хардвашчык, сапраўдны кінапрадзюсер, CG-дызайнер і два ідэйныя натхняльнікі-супрадзюсары.
Мы раскажам у наступных пасадах, як менавіта квэст быў рэалізаваны з тэхнічнага пункту гледжання, а пакуль я раскажу яго разгадку: як менавіта трэба было хакаць гэты пакой на трансляцыі. Заадно ўспомнім храналогію падзей, а таксама ўсе вар'яцкія ілюмінацкія тэорыі з чаціка дыскорда і ўсё.
Што было ў гульцоў у пачатку гульні
Усе прадметы ў пакоі дзяліліся на тры катэгорыі:
- Простыя ў кіраванні, ня гульнявыя iot-прылады
- Гульнявыя прылады для праходжання квэста
- антураж
Мы размясцілі 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-м кадрам падказку, як
Пасля гэтага хлопцы разабраліся вельмі хутка
Крок 4. Пастраляць лазерам у не-баявым рэжыме
Пры падачы харчавання кіруючай кампаніяй і пасля ўключэння коркаў, Мегатрон уключаўся і мог страляць у тэставым рэжыме. У форму для ўводу ўжо быў падстаўлены токен для тэставага стрэлу.
Кожныя 25 секунд генераваўся новы токен, яго можна было выкарыстоўваць, каб уключыць лазер на 10 секунд на магутнасці 10/255
Затым лазер астуджаўся 1 хвіліну і ў гэтую хвіліну быў недаступны, не прымаў новыя запыты на стрэл.
Гэтай магутнасці зусім не хапала для таго, каб перапаліць вяроўку, але любы гулец мог пульнуць з Мегатрона і ўбачыць лазерны прамень у дзеянні.
Рэакцыя супольнасці была больш, чым бурнай
Але ўсё хутка супакоіліся і зразумелі, што гэта яшчэ не канец гульні
Далей супольнасць пачала разбірацца, як запусціць баявы рэжым.
У дыскордзе з'явіліся фэйкі
Мы не ведалі, што на ножцы стала на трансляцыі нешта напісана
Супольнасць падышла да кроку 4. Разабрацца, як генеруюцца токены: знайсці gist і згенераваць токен, які ўключае лазер у баявым рэжыме
Баявы рэжым Мегатрона - гэта 100% магутнасць лазера ў 3 Вт. Гэтага цалкам дастаткова на 2 хвіліны, каб перапаліць вяроўку, якая трымала гіру, разбіць акварыум і заліць сервер вадой.
Мы пакінулі некалькі падказак на
Як усе хутка здагадаліся, гэта было 42
У каментарах гіста была перапіска Андрэя Сакалова з распрацоўшчыкам («мудры расраб», як назвалі яго хлопцы з дыскорда).
У перапісцы Андрэй дасылаў адзін з баявых токенаў, а расраб адказаў, што гэты токен быў ініцыялізаваны пры значэнні лічыльніка 42.
Ведаючы гэтыя дадзеныя, можна было перабраць 2 апошнія знака солі і фактычна высветліць, што для яе выкарыстоўваліся лікі з Lost, пераведзеныя ў 16-ічную сістэму.
Далей гульцам заставалася злавіць значэнне лічыльніка (прааналізаваўшы тэставы токен) і згенераваць баявы токен, выкарыстоўваючы наступнае значэнне лічыльніка і падабраную на мінулым кроку соль.
Лічыльнік проста інкрыментаваўся пры кожным тэставым стрэле і кожныя 25 секунд. Аб гэтым мы нідзе не пісалі, гэта павінна было быць невялікай гульнявой нечаканасцю. Рабяты з гэтым вельмі хутка разабраліся і запусцілі мегатрон у баявым рэжыме.
Крок 5. Перапаліць лазерам вяроўку
Як гэта было
Тут ужо ўсё проста. Адпраўка баявога токена ўключала лазер у баявы рэжым, а пакой змянялася і прыходзіла ў "рэжым катастрофы", як мы гэта звалі ў агульным сцэнары:
- Выключаўся ўвесь свет у пакоі
- Кнопкі iot-дэвайсаў на сайце станавіліся недаступныя
- Уключалася мігалка і гук сірэны
- Чырвоная гіра падсвятлялася
- На экране тэлевізара пачынаўся зваротны адлік да запуску лазера ў баявы рэжым
Мы далі на зваротны адлік паўтары гадзіны, каб усе, хто гуляў, паспелі ўключыць трансляцыю і ўбачыць фінал. І нездарма: пакуль я з заміраннем сэрца чакала гуку ўдару і якое разбіваецца шкла з суседняга пакоя, уся каманда, якая будавала квэст, не змаўляючыся, пачалі выязджаць на базу, каб убачыць фінал на свае вочы. Яны проста забягалі ў пакой і пачыналі абдымацца.
Тым часам у дыскардзе
Пасля заканчэння зваротнага адліку лазер уключыўся ў баявы і за дзве хвіліны перапаліў вяроўку - гіра паляцела прама ў акварыум. Перад ударам на экране загарлапаніла вар'яцкая капібара, у паніцы падняўшы маленькія лапкі.
Раз ужо ўся каманда сабралася там, мы знялі невялікі зварот усім, хто двое сутак змагаўся за фінал з дыскардзе і пайшлі адчыняць шампанскае:
Як мы пралічылі час запуску рэкламных відэаролікаў і палёт гіры?
Пасля дзясятка тэстаў перапальвання вяроўкі лазерам мы зразумелі, што гэта вельмі ненадзейная канструкцыя - полупроженная вяроўка становіцца танчэй, пад вагай гіры нацягвалася, мяняла размяшчэнне і лазер ужо не мог прарэзаць яе да канца.
Таму мы пайшлі іншым шляхам: задубліравалі перапальванне, абматаўшы вяроўку ніхромавай ніткай. Праз нітку пускалі ток, яна напальвалася дачырвана і перапальвала вяроўку прыблізна за 2 секунды - гэта давала нам дакладныя разуменне калі ўключаць гарлапанячую капібару, спыняць таймер запуску і запускаць рэкламны ролік:
Што ў нас не атрымалася?
У фінале з сістэмнага блока павінен быў пайсці густы дым, як пры пажары - мы прыгатавалі дымавыя шашкі, запальвалі іх аналагічнай выявай, але яны чамусьці не спрацавалі (верагодна з-за вады).
Хто ж пераможца?
Пераможцам выйшаў Аркадзь Аляксееў з Санкт-Пецярбурга – менавіта ён першым згенераваў тэставы токен і выйграў пакінутыя ў шродэры грошы ў памеры 134 000 рублёў.
Невялікае інтэрв'ю з Аркадзем.
Раскажы аб сабе, чым займаешся на працы?
Па адукацыі я бяспечнік, скончыў БІТ у ІЦМА. Працую фулстэк-вэб-распрацоўшчыкам на аўтсорсе. У школе быў алімпіяднікам, у тым ліку па праграмаванні і матэматыцы.
Як даведаўся пра гульню?
Зайшоў на Хабр проста пачытаць, убачыў артыкул, зацікавіўся.
Колькі гадзін гуляў, калі далучыўся?
Далучыўся ўвечар таго дня, калі выклалі артыкул (г.зн. за суткі да канца). Пасядзеў вечар і немалую частку наступнага дня.
Што спадабалася, што не?
У цэлым спадабалася ўсё (яшчэ б, я ж выйграў)), але крыху напружыў момант са званкамі. Ну тыпу тэлефанаваць і правяраць кожную версію неяк не вельмі, як мінімум ніякавата было - я ж разумеў, што там такіх яшчэ некалькі дзясяткаў тэлефануе, палова жартуе і спрабуе ў сац.інжынерыю.
Як ты зразумеў, як знайсці баявы токен да мегатрона?
Калі я зайшоў, ужо паспамілі сервер, патыкаў лямпачкі, знайшлі пароль ад адмінкі лазера, усякія паддамены і старонкі.
Яшчэ лёгка было знайсці профіль на гітхабе і гіст з каментамі. Адтуль відавочны працэс генерацыі токена і secret для яго ж. У такіх квэстах не трэба надта вынаходзіць имхо, бо можна патануць у кучы варыянтаў развіцця падзей; і адпаведна трэба ісці туды, куды цябе штурхае стваральнік квэста.
З улікам астатніх паддаменаў і тэставага сайта на тыльдзе, было ясна, што пасля падачы харчавання на лазер, трэба будзе падабраць токен. Адпаведна яшчэ ў той жа вечар я накідаў прыкладны запыт на ўключэнне лазера (на падставе 4х даступных формаў: 1 на працоўным сайце і 3 на тэставым/старым) і паспрабаваў пабруціць працоўнымі токенамі пачынальна з 42 (ну так, на дурня - раптам тамака ўжо ўсё уключана, а старонку з адпраўкай токена проста адкрыюць пасля ІНАЎ і ПІБ).
Не ўпэўнены, што запыт быў дакладны, бо правяраць не было часу (бо праверыць можна было толькі ўключэнні лазера), але да перабору токена я рыхтаваўся загадзя.
Яшчэ там была відавочная логіка з вэбсокетамі і кіраваннем прылад у app.js-файле. Там быў тоўсты намёк на a9 прыладу, пры адпраўцы power: true на якое сокет фарбаваўся. Я паспрабаваў усялякае на яго паадпраўляць — ці мала, там магла быць дадатковая прылада для разгадкі ІНАЎ, але без поспехаў.
Потым я яшчэ пабруціў астатнія айдышнікі побач з тымі дзесяццю, але ўсюды было unknown device. Яшчэ паспрабаваў трошкі ўсялякае, залезці на [электронная пошта абаронена], паадпраўляў усякае ў форме на старонцы прайс-ліста, пакапаўся з lasermasters, але ўсё без поспехаў. На наступны дзень сядзеў у чаце, гугліў усякае, потым усплыла стего-тэма і я параіўся з чалавекам стегсолв для карцінак і гіфок (але розумам разумеў, што 99% там нічога няма, бо гэта было б занадта + супярэчнасць з асноўнай лініяй квэста) .
Але ў выніку таксама пару гадзін сядзеў і капаўся ва ўсіх пікчах і гіфках. Яшчэ пару разоў тэлефанаваў з рознымі варыянтамі ІНАЎ, але міма. Потым ужо вырашыў падзабіць, але там падказку выклалі — і стала зразумела, што ў бліжэйшы час ІНАЎ знойдуць, што і здарылася. Потым ці то я, ці то нехта яшчэ (там не відавочна) адправіў power: true на а9-прыладу і лазер зарабіў, хоць магчыма тут сувязі няма і ён зарабіў проста пасля ІНАЎ. Увогуле, зайшоў у адмінку лазера і нямала здзівіўся, бо сервер сам дасылаў токен (а я тое ўжо рыхтаваўся бруціць). Стала відавочна, што токен тэставы, бо трансляцыя + разумны сэнс + я яго праверыў.
У кодзе была логіка адпраўкі працоўнага токена кудысьці натыфікацыяй, але, мабыць, альбо гэта быў няправільны код, альбо гэта было патрэбна для іншых частак сістэмы. Я накідаў скрыпт для атрымання бягучага працоўнага токена з бягучага тэставага і стаў сядзець на ф5, спрабуючы іх адправіць - з гэтым былі праблемы, бо ўсе ўвесь час тыкалі кнопку адпраўкі па магчымасці тым самым змяняючы токен. Потым яшчэ сайт упаў, лічыльнік скінуўся, але ўжо не сутнасць - праз некаторы час я адправіў працоўны токен. Па ідэі лічыльнік быў 58 і токен был 449a776938f7ce4cf19f8603045dca0f на момант актывацыі, калі не памыляюся. Уласна ўсё.
Потым у мяне яшчэ некалькі падгарэла ад каментаў а ля "ды гэта ўсё трывіяльна, ды пашанцавала просты". Ну, калі зайсці на старонку, падумаць хвілінку, напісаць скрыпт за пару хвілін, праверыць яго - то так, трывіяльна. Але я зрабіў гэта секунд за 10-20, і потым проста некалькі хвілін не мог адправіць токен.
Вядома, можна было паспрабаваць напісаць логіку для падхвата і адпраўкі аўтаматам, але гэта ўжо даўжэй і вялікая рызыка, плюс напэўна клаўд пачаў бы лаяцца. Вось з чым мне сапраўды пашанцавала, дык гэта з самім апошнім этапам - трохі алгарытмаў на хуткасць + хуткасць рэакцыі, гэта прамы маё. Калі б там было заданне непасрэдна з пентэста, я б не стаў першым, хутчэй за ўсё.
Але гэта яшчэ не канец
Мне зусім не церпіцца распавесці вам аб усёй выдатнай камандзе, якая будавала гэты квэст і ўсіх інжынерных рашэннях, якія яна знаходзіла. Але гэтая пасада і так атрымалася занадта велізарнай — таму пра гэта будуць асобныя артыкулы, так што stay tuned і падпісвайцеся на наш блог на Хабры.
Крыніца: habr.com