Котика разбили, рояль спасли… точнее, наоборот: котика скачали с сервера, роялю поломали ножки, но в целом он бодрячком. И сегодня был последний день, когда все желающие могли попробовать свои силы в скачивании NFT-гифки с танцующим котиком, хотя ноутбук уже пять дней как двинул лапти за печь. А теперь мы вскрываем все карты и рассказываем обо всех загадках и их решениях.
По истории, хозяин ноутбука дал нам его IP-адрес, SSH-ключ и логин. В конфиге SSH был настроен доступ только по ключам, чтобы участники могли не тратить время на подбор пароля. Публичный ключ был таким:
Главная цель была — попасть на ноутбук нашего друга и скачать с него NFT-гифку с котиком, пока на ноут не упадёт рояль. Но вскоре, после начала операции по спасению котика, выяснилось, что в ноутбуке уже потоптались хакеры, поэтому участники не могли попасть на ноутбук — не подходил приватный ключ. Группа хакеров называла себя sp0rk b4gel
Их интересовал исходный код, принадлежавший компании, где работал герой нашей истории. Код они слили, а вместе с ним случайно и котика прихватили, даже не заметив этого. После этого, хакеры начали шантажировать нашего друга, угрожая опубликовать его наработки, что грозило ему судебным преследованием.
Для надежного сохранения измененного SSH-ключа, хакерская группа разделила его по схеме Шамира на 10 частей, из которых 8 были необходимыми для входа в ноутбук. 9 ключей были распределены среди «хакеров», а 10-й, бонусный, мы вставили вне сюжета (об этом ниже). И участникам нужно было решить несколько задач, получая за каждую из них по фрагменту правильного приватного ключа. Сами задания были в виде случайных «промашек» хакеров.
Поскольку кроме названия хакерской группы у участников не было иных зацепок, то им пришлось обратиться сначала к Google.
В поисковой выдаче они нашли манифест хакеров. Текст манифеста на textbin.net был успешно проиндексирован Google и находился по названию. В конце манифеста указаны ники хакеров, по каждому из которых можно было найти соответствующее задание-«подкоп» под хакера, ведь просто так они не отдали бы измененный ключ, верно?
Часть ключа:
Категория задания: crypto, re
Гуглим ник, в итоге находим фотоальбом (проиндексированные во время квеста ссылки на него на Pinterest или Juxtapost) и сайт https://50n1c4h0.netlify.app/ по одной из фотографий в фотоальбоме, рекомендующей использовать этот сайт:
Сайт — «протектор» для защиты конфиденциальных данных. Внутри него доморощенная 16-битная виртуальная машина с байткодом, немного накрытая обфускатором. Программа для этой машины — реализация поточного шифра RC4 с ключом
Поскольку алгоритм обратим, можно воспользоваться любой реализацией шифра RC4, подставить ключ и получить исходный открытый текст — это reverse-путь решения задания.
Можно было пойти и другим, криптоаналитическим путём: заметив, что выходной байт шифротекста зависит только от позиции и значения входного байта и не меняется (например, байт
Часть ключа:
Категория задания: почти pwn
Мы не могли оставить в стороне прошлый квест (подробнее о нём читайте тут) и решили использовать сайт студии «Сокол» как дань уважения тем участникам, которые дни и ночи пытались спасти деньги из пасти прожорливого шредера.
Заходим на сайт https://ooosokol.ru/ (намёк на этот проект был в сообщении хакеров). Видим, что сайт уже взломал хакер GemmadohA. Также он оставил там веб-шелл (есть в комментарии в странице дефейса, чтобы не забыть). Логин и пароль для веб-шелла:
Хакер также создал на взломанном сервере себе аккаунт. Приватный ключ от него с сервера не убрал (
Видим, что хакер всё еще висит (подсказка «что если хакер всё ещё на сервере, он же только недавно его взломал» в Discord) по SSH (с IP 194.87.236.30), что-то копается в файлах. Для него висит сокет агента SSH в
При помощи команды:
используем его SSH-агент против него самого (хакаем хакера, в Discord была дана подсказка «hack the hacker») и заходим на его же сервер. В домашней папке лежит очередной secret.txt.
Часть ключа:
Категория задания: misc
Гуглим ник, попадаем в темы на хакерских форумах, где зарегистрирован этот хакер.
В описании профиля хакера указана ссылка на Яндекс.Диск для «полезной информации»: https://disk.yandex.ru/d/kQ9MPqO3anRiTA
На диске среди всяких полезных программ (клиенты ICQ) находится запароленный архив icons.zip. Пароль от него:
Задание решается без знания пароля по малоизвестному, но всё же все еще актуальному методу zip known plaintext attack при помощи программы bkcrack (наследница pkcrack). Именно для реализации этой атаки в архиве лежат две случайные PNG-картинки (их содержимое участникам неизвестно, да это и не требуется, однако найти в интернете их тоже можно), поскольку их заголовок, первые 16 байт которого одинаковы для любого PNG-файла, и является достаточным (там достаточно всего 12 байт, причем даже необязательно последовательных) для проведения атаки.
В результате получаем ZipCrypto-ключ
Часть ключа:
Категория задания: forensics
Гуглим ник, находим (во время проведения квеста находилась) тему на форуме с просьбой о помощи по вскрытию Wi-Fi сети с именем «DIR-615 y4n4naby5» (видимо Wi-Fi искомого хакера). В сообщении приложен дамп трафика, который необходим для подбора пароля к Wi-Fi сети (четырёхкратное WPA-рукопожатие).
В теме на форуме выложен дамп трафика Wi-Fi сети, и в дампе информации даже больше, чем необходимо для подбора пароля. Пароль же подбирается по старому, очень известному (он даже включен в самый известный пентестерский дистрибутив Kali Linux) и применяемому при первом же удобном случае при практически любых подборах словарю RockYou. Этот пароль —
Знание пароля также позволит и расшифровать «ненужный» WiFi-трафик при помощи того же Wireshark, и увидеть, что за данные передавал хакер. Кроме мусора (обмен данными с серверами Alibaba и Google) можно заметить интересное подключение по протоколу FTPS (FTP поверх SSL/TLS) к серверу soclose.numbers.com (такое имя не зарегистрировано, это и не важно, а IP вообще «подделан» на один из IP Google). TLS, как известно, шифрованный протокол, однако параметры без каких-либо дополнительных специальных настроек (сервером был vsftpd, а клиентом — andftp) оказались такими (TLS 1.2 без использования выработки общего секрета по схеме Диффи-Хеллмана), что для расшифровки трафика из дампа нужен лишь приватный ключ сервера (если задействовать схему Диффи-Хеллмана, то это было бы невозможно без дампов памяти клиента или сервера). Параметры ключа сервера (RSA-2048) подобраны так (p и q близки друг к другу), чтобы быть подверженными атаке по методу факторизации Ферма. На это есть намек в имени сервера («so close numbers»). Атака выполняется мгновенно при помощи той же RSACtfTool, и дает
p = 133205738301055492415292455053957573761950370019465363197330018804911429748841372623440097998280840848577224963374030102174633719338576372412863025595291812898461741802590180711710007911941796139236802646966981084378380345280502967196789430710224184344783160032007107024729298554505470658071546418304653261811
q = 133205738301055492415292455053957573761950370019465363197330018804911429748841372623440097998280840848577224963374030102174633719338576372412863025595291812898461741802590180711710007911941796139236802646966981084378380345280502967196789430710224184344783160032007107024729298554505470658071546418304653247279
А соответственно и приватный ключ:
С ним расшифровываем TLS-трафик (снова тем же Wireshark) и получаем содержимое заливаемого по FTPS файла secret.txt, в котором лежит искомая часть ключа. То есть выполняем два шага: взломать WPA и взломать TLS.
Часть ключа:
Категория задания: forensics
Гуглим ник, находим (во время проведения квеста находилась) тему на форуме с просьбой проверить ошибку при открытии тома TrueCrypt:
В сообщении на форуме написано, что возникает проблема при открытии определенного TrueCrypt-тома. Дан скриншот ошибки и ссылки на файлообменники, на которых лежит сам контейнер и дамп памяти для отладки проблемы. Пароль на контейнер длинный и неподбираемый:
Он будет вот таким:
Адрес KDBG для volatility —
Часть ключа:
Категория задания: stego
Гуглим ник, находим его «творчество»: https://textbin.net/hzbmlkhzjg
Текстовая стеганография по методу цепей (о чем была дана подсказка в Discord «связанные одной цепью» и «текст связан, неслучаен, имеет смысл» в видео) Маркова: An Approach for Text Steganography Based on Markov Chains (подсказка в Discord 1409.0915). Реализация этой идеи: http://jthuraisamy.github.io/markovTextStego.js/
В текста «творчества» (первая глава киберпанк-романа) есть очевидным образом находимые имена собственные, например, «McCoy Pauley» или «Bobby Quine», взятые из первой известной книги в этом жанре: «Нейромант» Уильяма Гибсона. В качестве специфичного корпуса текста для цепей Маркова использована первая глава этой книги (о чем есть намек в названии «повести», да и других слов и предложений кроме как из первой главы там нет), свободно доступная здесь.
Вводим текст первой главы «Нейроманта» в качестве корпуса, вводим текст первой главы «творчества» хакера в качестве шифротекста и получаем искомую часть ключа. Да, со стеганографией всегда приходится немного погадать и поподбирать варианты.
Часть ключа:
Категория задания: osint
Находим (это же osint) хакера на том же github: https://github.com/VenchamoSs.
На гитхабе указан второй ник — a.k.a. welAnty. В понравившихся репах — gpg, а значит хакер пользуется и интересуется PGP/GPG-решениями. Находим хакера на keybase.io (известный сайт, где пользователи GPG обмениваются приватными ключами), там есть публичный ключ с email welanty@forexrobotexperts.now.im. А также указание не использовать старый ключ с ID 0xF6B246D4. Если поискать по этому ID на самом известном и старом сайте для обмена ключами, то можно найти тот самый старый ключ с email eukx@forexrobotexperts.com. По нему в утечке ANTIPUBLIC (входит и в Collection #1, самая крупная компиляция утечек за последние несколько лет) есть пароль
Часть ключа:
Категория задания: osint, forensics
a href=«www.google.com/search?q=%22-velashic-%22»>Гуглим ник, находим тему на форуме Cyberforum в разделе про Arduino. Там всё описано: хакер просит помощи, по своей некорректно работающей Arduino и прилагает дамп USB-трафика, поскольку подозревает, что она «слишком китайская» и при заливке прошивки что-то идет не так. Код прошивки должен играть песню группы Metallica «Master of Puppets». В дампе помимо заливки прошивки на Arduino попало также и общение с USB-флешкой (распространенная ситуация, поскольку USB-интерфейсов в Wireshark меньше, чем USB-портов на компьютере, ведь их количество соответствует не портам, а USB-хабам на материнской плате). С флешки считывается файл с той же песней для прослушивания, а также записывается запароленный архив secret.7z. Во время извлечения видим, что происходит запись в NTFS-раздел на флешке, а в NTFS есть концепция fixup, поэтому не забываем поправить (о чем была дана подсказка в рояле) 2 байта по смещению 142 (попали на границу сектора) с
Часть ключа:
Категория задания: crypto, re
Находим github-аккаунт с единственным репозиторием: https://github.com/chyrgerillll/mymnemonicgen В репозитории лежит реализация генератора мнемонических фраз, использующихся для запоминания доступа к криптокошелькам «в голове» по стандарту BIP39. Этот стандарт используется практически во всех криптовалютах и практически во всех реализациях их кошельков, далеко не только в Bitcoin. Генерацию приватных ключей для кошельков из этих мнемофраз описывает стандарт BIP44, также используемый большинством реализаций криптокошельков, о чем есть намек в репозитории. Seed-данные из энтропии, сохраненной в мнемофразе, для него вырабатываются по BIP32 (список всех трёх стандартов в первой подсказке из видео). Пример того, как всё это генерируется, можно увидеть вот здесь: https://iancoleman.io/bip39/ (последняя подсказка, данная в Discord; также подсказан использованный стандартный путь генерации
Там же, в репозитории, есть и адрес кошелька в тестнете Ropsten криптовалюты Ethereum, для приема донатов на продолжение разработки генератора. На нем лежит несколько тестовых эфиров. В репозитории также есть и намек на то, что требуется для выполнения задания: попробовать сломать сгенерированный этой доморощенной реализацией генератора кошелек и дать знать об этом автору (или и вовсе «увести» тестовые эфиры). Необходимый для связи email хакера (chyrgerillll@rambler.ru) можно узнать, склонировав репозиторий к себе и посмотрев, как он засветился в одном из коммитов (также неочевидная и частая проблема пользователей git).
Генератор использует стандартный питоновский ГПСЧ (вихрь Мерсенна), в качестве seed’а к нему — текущее время. Оно берётся из транзакции с пополнением средств (и подбирается ±30 секунд, поскольку время на компьютере хакера могло быть не идеально правильным, о чем была дана подсказка в Discord — всего 60 000 вариантов). Таким образом восстанавливается состояние ГПСЧ (seed 1621586183221, 21.05.2021 08:36:23.221 GMT) и получается искомая seed-фраза «try process bubble call spell peanut pear valve boring stumble inject turn», а по ней и приватный ключ (
Если отправить полученные сведения и ключ (как подтверждение того, что генератор действительно уязвим) хакеру по почте, то он предложит сделку: участник не трогает более его кошелек, а в ответ получает искомую часть ключа.
На третий день висения рояля мы дали участникам подсказку, которая помогала решить это задание. Подсказка зашифрована в конце этого видео:
Интересный факт: актриса не собиралась ломать гипсовый череп, но настолько вжилась в роль, что сделала это весьма экспрессивно, удачно оживив видео. Хорошо, что количество черепов по привычке зарезервировали по схеме N+1, и мы смогли записать еще пару дублей.
Так вот, мы решили взять этот забавный момент, зациклить и зашифровать в него подсказку. Закодированное в аудио RTTY-сообщение (на что в Discord были даны подсказки по поводу того, что звук похож на «звучание старого модема» или даже скорее «телетайпа») можно было декодировать например с помощью известной в узких радиолюбительских кругах программы Fldigi:
Сообщение таким образом давало подсказки по заданиям для хакеров 3r1or0l3r и chyrgerillll.
Если собрать полученные при решении заданий части ключа в программе ssss (реализует разделение секрета по схеме Шамира, намек на эту программу содержится в тексте всех частей), то участник получает ссылку (зашифрованную pastebin): https://0bin.net/paste/YrFxYqMg#ZVK78BWtOhtncw3-xwJe9dw5rGBOboTBOJhEaop8tge
По этой ссылке находится приватная часть ключа, необходимая для захода на ноутбук.
В посте про музыкальные монограммы у нас есть описание одного из алгоритмов шифрования (немецкий метод, 18 век). Задание простое: участнику необходимо набрать на рояле зашифрованную монограмму RUVDS:
На сайте на клавиатуре у нас были такие вот надписи:
Для того, чтобы набрать RuVDS, надо было проиграть на рояле такую вот последовательность:
4 7 1 4 5
Результатом этого будет сообщение, которое приходит в Telegram того, кто проиграл эту мелодию:
«Поздравляем! Ты вскрыл одну из 8 частей для раскрытия секрета (SSH-ключа)!
Вот она: ssss-11-2ff9228ea4b6b1fe9361a28e506ca2d35699652cc2a5838d185b075ebe9b60ce4d6e1345f6a0ebe55f5a097218265bb35a3fea2632cc569a5bb6f377591138c0d80daa96420be7150d183a»
Отвечая на вопросы участников, да, это был бонусный ключ, его наличие не обязательно для прохождение квеста, поэтому он выбивается из общего сценария повествования квеста (лора).
Хозяйке на заметку: термин «лор» произошёл от английского слова «lore», что в контексте квестов означает «знание, предание».
Бонусный ключ мы добавили для того, чтобы дать тем участникам, для которых основной сюжет слишком сложный, попробовать себя и получить хоть какой-то ключ.
Кроме того, мы следили в Discord за тем, как участники проходили квест, и подкинули им дополнительные подсказки. Если участники догадывались проиграть на рояле закодированные ники хакеров, то получали такие сообщения через Telegram-бота:
1 5 5 1 5 1 2 3 (-velashic-, задание 9)
«Молодец! Вот тебе подсказка по нику -velashic-:
проверь целостность извлеченного архива.
6 1 3 2 5 4 4 или 6 3 4 (m0x143y)
«Молодец! Вот тебе подсказка по нику m0x143y:
Перед выкладыванием в интернет по своей проблеме он ведь сказал что там уже нет приватной инфы…
Мы уже объявили имена победителей, успевших скачать котика. Но после падения рояля у участников было ещё пять дней, чтобы решить все задания, уже только из спортивного интереса. И мы поздравляем еще раз всех, кто не опустил руки и тоже добрался до гифки с котиком!
А ещё, по результатам голосования в Discord мы решили наградить участника not-alone за огромную помощь в совместном решении задач: мы дарим ему сертификат на 200 долларов для аренды виртуального сервера в любом из 11 дата-центров RUVDS, а также ящик нашего фирменного пенного Smart Admin.
Всем победителям добравшимся до конца, мы дарим промокод на 50% скидки на Хакер.
❒ За получением призов необходимо обратиться к @Johurn.
И теперь точно в завершение: помним, любим, скорбим.
По истории, хозяин ноутбука дал нам его IP-адрес, SSH-ключ и логин. В конфиге SSH был настроен доступ только по ключам, чтобы участники могли не тратить время на подбор пароля. Публичный ключ был таким:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDMyK0W5OMnzJFszo5ClCVbqAQ6s1NWYeast+WjIyWF7
Главная цель была — попасть на ноутбук нашего друга и скачать с него NFT-гифку с котиком, пока на ноут не упадёт рояль. Но вскоре, после начала операции по спасению котика, выяснилось, что в ноутбуке уже потоптались хакеры, поэтому участники не могли попасть на ноутбук — не подходил приватный ключ. Группа хакеров называла себя sp0rk b4gel
Их интересовал исходный код, принадлежавший компании, где работал герой нашей истории. Код они слили, а вместе с ним случайно и котика прихватили, даже не заметив этого. После этого, хакеры начали шантажировать нашего друга, угрожая опубликовать его наработки, что грозило ему судебным преследованием.
Для надежного сохранения измененного SSH-ключа, хакерская группа разделила его по схеме Шамира на 10 частей, из которых 8 были необходимыми для входа в ноутбук. 9 ключей были распределены среди «хакеров», а 10-й, бонусный, мы вставили вне сюжета (об этом ниже). И участникам нужно было решить несколько задач, получая за каждую из них по фрагменту правильного приватного ключа. Сами задания были в виде случайных «промашек» хакеров.
Поскольку кроме названия хакерской группы у участников не было иных зацепок, то им пришлось обратиться сначала к Google.
В поисковой выдаче они нашли манифест хакеров. Текст манифеста на textbin.net был успешно проиндексирован Google и находился по названию. В конце манифеста указаны ники хакеров, по каждому из которых можно было найти соответствующее задание-«подкоп» под хакера, ведь просто так они не отдали бы измененный ключ, верно?
▍ Задание 50n1c4h0
Часть ключа:
ssss-01-5dc6284446d3f3ae3d2b9e12167a118708f08686474e6471d178703938e3bc043796c79f72853a2cd77d2e956e41490b9b961a526f4911527bfe14c24f0022ce31a52f5fc118ca1dd1c1f0
Категория задания: crypto, re
Гуглим ник, в итоге находим фотоальбом (проиндексированные во время квеста ссылки на него на Pinterest или Juxtapost) и сайт https://50n1c4h0.netlify.app/ по одной из фотографий в фотоальбоме, рекомендующей использовать этот сайт:
Сайт — «протектор» для защиты конфиденциальных данных. Внутри него доморощенная 16-битная виртуальная машина с байткодом, немного накрытая обфускатором. Программа для этой машины — реализация поточного шифра RC4 с ключом
4c524338f5169e91e0cc05971f5b9b6e
(hex). На фотографии из фотоальбома показан результат работы протектора над искомой частью ключа (из QR-кода декодируем:6efb5c8eaf511770715681cac161b49f45ad9c12837ae41b35639653fcbc03e55e16a5d4953ba1fee6f8d4a3606b0751fd6d6a0b8e14200f4ed78943d4553d0bebfabcb8c0e30fa3580ab08899edbadd878b6e7c033febf6679558d1511c74f8d9ca54ef4c646a08f1bfeefe1a3b7884d3f2c94ee14649dcdc11591b8a8b0a005c80a8ce4b7c3dde988d59065ec574ad194fdc204137fc6748994942237e
). Поскольку алгоритм обратим, можно воспользоваться любой реализацией шифра RC4, подставить ключ и получить исходный открытый текст — это reverse-путь решения задания.
Можно было пойти и другим, криптоаналитическим путём: заметив, что выходной байт шифротекста зависит только от позиции и значения входного байта и не меняется (например, байт
0x41
на позиции 1 будет всегда преобразован в 0x39
, байт 0x42
— в 0x5F
и т.д.), можно было побайтово подбирать входные данные под известные из QR-кода выходные, таким образом также получив искомую часть ключа, байт за байтом.▍ Задание GemmadohA
Часть ключа:
ssss-02-8e8425381bc24f44cbdefdae711d91c0a733350e949827f66a0ee00a5301afc3f68aad0a69e1b3d93465e70db0675089dd27fd993efe39bc881ad00b19d6055b856e9853af0b681213cb81
Категория задания: почти pwn
Мы не могли оставить в стороне прошлый квест (подробнее о нём читайте тут) и решили использовать сайт студии «Сокол» как дань уважения тем участникам, которые дни и ночи пытались спасти деньги из пасти прожорливого шредера.
Заходим на сайт https://ooosokol.ru/ (намёк на этот проект был в сообщении хакеров). Видим, что сайт уже взломал хакер GemmadohA. Также он оставил там веб-шелл (есть в комментарии в странице дефейса, чтобы не забыть). Логин и пароль для веб-шелла:
gemmadoha:gemmadoha
, почти как классический admin:admin
.Хакер также создал на взломанном сервере себе аккаунт. Приватный ключ от него с сервера не убрал (
/home/gemmadoha/.ssh/id_rsa
), поскольку генерировал на нём же. Читаем веб-шеллом приватный ключ, заходим на сервер ooosokol.ru по SSH.Видим, что хакер всё еще висит (подсказка «что если хакер всё ещё на сервере, он же только недавно его взломал» в Discord) по SSH (с IP 194.87.236.30), что-то копается в файлах. Для него висит сокет агента SSH в
/tmp
, это можно обнаружить, просто поискав все файлы, владельцем которых является хакер (а чтобы не тратить зря время на попытки повышения привилегий, в Discord была дана подсказка «то, что вы ищете — не на этом сервере»).При помощи команды:
SSH_AUTH_SOCK=/tmp/ssh-5j3MjI6mby/agent.23577 ssh gemmadoha@194.87.236.30
используем его SSH-агент против него самого (хакаем хакера, в Discord была дана подсказка «hack the hacker») и заходим на его же сервер. В домашней папке лежит очередной secret.txt.
▍ Задание thereane777
Часть ключа:
ssss-04-44ed995def2ab783d02fdd783c528a347f29adc494130b65827721002fe47d0b5d3f29cf55620b596c49f23652cb4648cb3c7b5c605d5a9e2f0f3c46f32894c9980d028a7e7b33f8c8c48b
Категория задания: misc
Гуглим ник, попадаем в темы на хакерских форумах, где зарегистрирован этот хакер.
В описании профиля хакера указана ссылка на Яндекс.Диск для «полезной информации»: https://disk.yandex.ru/d/kQ9MPqO3anRiTA
На диске среди всяких полезных программ (клиенты ICQ) находится запароленный архив icons.zip. Пароль от него:
v1pPGOuPS8HXFrS
(длинный и неподбираемый). Без знания пароля видно, что в архиве два файла .png (картинки) и интересный файл secret.txt.Задание решается без знания пароля по малоизвестному, но всё же все еще актуальному методу zip known plaintext attack при помощи программы bkcrack (наследница pkcrack). Именно для реализации этой атаки в архиве лежат две случайные PNG-картинки (их содержимое участникам неизвестно, да это и не требуется, однако найти в интернете их тоже можно), поскольку их заголовок, первые 16 байт которого одинаковы для любого PNG-файла, и является достаточным (там достаточно всего 12 байт, причем даже необязательно последовательных) для проведения атаки.
В результате получаем ZipCrypto-ключ
dd8d62b4 83fed681 6761bbc1
, при помощи которого открываем архив и получаем содержимое файла secret.txt, в котором лежит искомая часть ключа.▍ Задание y4n4naby5
Часть ключа:
ssss-05-9b5f9fef9cf5d85d206ed65b4a645888f6409b79c956309a2f1860daa0c4d8cd23113fdcee5fa5575ff7e9398d061eed52c62eee743f77c569c861fb1ade55a2149dc05a9f2e4f2e18bad5
Категория задания: forensics
Гуглим ник, находим (во время проведения квеста находилась) тему на форуме с просьбой о помощи по вскрытию Wi-Fi сети с именем «DIR-615 y4n4naby5» (видимо Wi-Fi искомого хакера). В сообщении приложен дамп трафика, который необходим для подбора пароля к Wi-Fi сети (четырёхкратное WPA-рукопожатие).
В теме на форуме выложен дамп трафика Wi-Fi сети, и в дампе информации даже больше, чем необходимо для подбора пароля. Пароль же подбирается по старому, очень известному (он даже включен в самый известный пентестерский дистрибутив Kali Linux) и применяемому при первом же удобном случае при практически любых подборах словарю RockYou. Этот пароль —
fireheart79
(был успешно подобран участником форума). Подбор займет не более часа на современном процессоре (никакие видеокарты не нужны) при помощи того же hashcat.Знание пароля также позволит и расшифровать «ненужный» WiFi-трафик при помощи того же Wireshark, и увидеть, что за данные передавал хакер. Кроме мусора (обмен данными с серверами Alibaba и Google) можно заметить интересное подключение по протоколу FTPS (FTP поверх SSL/TLS) к серверу soclose.numbers.com (такое имя не зарегистрировано, это и не важно, а IP вообще «подделан» на один из IP Google). TLS, как известно, шифрованный протокол, однако параметры без каких-либо дополнительных специальных настроек (сервером был vsftpd, а клиентом — andftp) оказались такими (TLS 1.2 без использования выработки общего секрета по схеме Диффи-Хеллмана), что для расшифровки трафика из дампа нужен лишь приватный ключ сервера (если задействовать схему Диффи-Хеллмана, то это было бы невозможно без дампов памяти клиента или сервера). Параметры ключа сервера (RSA-2048) подобраны так (p и q близки друг к другу), чтобы быть подверженными атаке по методу факторизации Ферма. На это есть намек в имени сервера («so close numbers»). Атака выполняется мгновенно при помощи той же RSACtfTool, и дает
p = 133205738301055492415292455053957573761950370019465363197330018804911429748841372623440097998280840848577224963374030102174633719338576372412863025595291812898461741802590180711710007911941796139236802646966981084378380345280502967196789430710224184344783160032007107024729298554505470658071546418304653261811
q = 133205738301055492415292455053957573761950370019465363197330018804911429748841372623440097998280840848577224963374030102174633719338576372412863025595291812898461741802590180711710007911941796139236802646966981084378380345280502967196789430710224184344783160032007107024729298554505470658071546418304653247279
А соответственно и приватный ключ:
-----BEGIN RSA PRIVATE KEY-----
MIIEoAIBAAKCAQEAjI7G8TjcvnASyKj8jlnIC8mj2BjCISJRKa91xVC2ATA6dgJQ
Vq12wxCJ/4tvG/GHv4mtTF3T5EASTUD+KSIjGPxakcXFEF13VfNS6C0TwyBH5+yZ
/f5AdzTPDqF2ScZQ1J461NVOscZN9eXU5JGO/b+NpP/QZ2Od4E3WBTfP1zpBSAno
VOLs3TjWSAfW1AY6uEBS2NKT0VMRSya2u57ZdPkC2+pH1NG9GW6CR4KR2RVT2vdF
COEyMNSixhklBdVNNIHkZYQH0NMt4FUfY5bE9W6wBvUtzIEVqNXCQv3IC6tmPYIg
vy8FquGNln1mFr7+H4TMaoIlz4LYdK2UwtBanQIDAQABAoIBAHTRZT6uh6gu9S2Y
ZO7aZ4yEdYvwZ8eqAdKnZTYssleigbP6kFK5sG7GnCqq9BlBUBU8k69Ye/bD2XIj
hhkhqhHmClAFEpdbVwc0R793V2lgtuJmnkWevm1UkpISV4FRNXTAXRzue4z8x2aL
MbkV0MXMIij0A30qKdh2WF3V2QOCx9dLjuL5AZ6B4keOYz3mKbp1fzU/xWzEgSaJ
qBtcf4qZcj/c3Kov+3i3/WDXu4phCYVi/JpBok0zTKiMLFJ+xqISabd8yZJb5hVi
VSu9YRyu4H1rg3N6a5Ukdgp56F3kW4sur6KsftQmLShdgGctF+SBF7ZiKcfkT9oX
tQ0guvECgYEAvbD27ue9r5qmuBX4WdqtbM6tEGm5q914wKnpbTb1ZNp2fzoSU3ti
cfpUpxvsFQy8P8SB0Lv6sTzC6wfPhGVMnXa4HE5NrZ4jtXdk1dxaC/TvaYGeHpTj
/fGARDDRXBlbXVFgnPnC3EOUATWD5obWtaJg5HOSZwMFJB1ehPWc+/MCgYEAvbD2
7ue9r5qmuBX4WdqtbM6tEGm5q914wKnpbTb1ZNp2fzoSU3ticfpUpxvsFQy8P8SB
0Lv6sTzC6wfPhGVMnXa4HE5NrZ4jtXdk1dxaC/TvaYGeHpTj/fGARDDRXBlbXVFg
nPnC3EOUATWD5obWtaJg5HOSZwMFJB1ehPWcwy8Cf0Kv9CAJWKZjuDj/gFAWkOGv
xyf+A0holAsnsOi0aZELPJ19zPOMbQ+k8h3NszGzSHsimoDHlVq6Acye8lWZR1YU
ZqWM4cIn1mX1k32b+gw6D/EHoI8fyQd935oZj4DRaU1lTpHhPKAzIdVK+xQQU2uH
qoimGNIePbB0osYbkxUCgYBwECTBnNx96pJFvIz8oGjGGA873AnZk7xrrbV+VPKC
A2Hv5aG/+et9xFLQanl9Mgngbjn206bVoDzS1slswN+TQvifmE7hm8Qix4clpMj5
uVja7r03+eP7OPn6zxBQJZbJOXMnKZJJyA6e7DuhK9WadnRhYjmCa9FUtZkKWYOj
9wKBgCzJOfLSMgROqzznGTesCXueTI0NnecG7WvZehtRc0LHEAiC12e9YvCqj7Ao
JsZBfec+IGk2vX8AunUKvYUZL2J7WfCyp57Kj1YgnEyikTVPsOEwjb5lALK1FwIT
xTH7xPD8OVIW0eQPvmhczoMKYPQG0mtZk+QkPr9dv0YcvwNB
-----END RSA PRIVATE KEY-----
С ним расшифровываем TLS-трафик (снова тем же Wireshark) и получаем содержимое заливаемого по FTPS файла secret.txt, в котором лежит искомая часть ключа. То есть выполняем два шага: взломать WPA и взломать TLS.
▍ Задание m0x143y
Часть ключа:
ssss-06-ad1a38b7f24f17489ef204207f7c3b8cf17032b316d5cb9d123619d209676ad6e7ba567c33ac41376876265a70f45f73a991cb6e9100b0df4b8b102a51a147dc6d641cf8bbbecd07321e0b
Категория задания: forensics
Гуглим ник, находим (во время проведения квеста находилась) тему на форуме с просьбой проверить ошибку при открытии тома TrueCrypt:
В сообщении на форуме написано, что возникает проблема при открытии определенного TrueCrypt-тома. Дан скриншот ошибки и ссылки на файлообменники, на которых лежит сам контейнер и дамп памяти для отладки проблемы. Пароль на контейнер длинный и неподбираемый:
uBocLXywprQ9VJ6jxpYP
. Однако есть дамп памяти, и, например, при помощи volatility-плагина truecryptmaster можно извлечь мастер-ключ TrueCrypt-а (truecryptsummary выдаст, что том был смонтирован и пути к нему, а truecryptpassphrase не выдаст ничего, потому как дефолтная настройка TrueCrypt — не кешировать пароли).Он будет вот таким:
Container: \??\C:\Users\m0x143y\Documents\encrypted.tc
Hidden Volume: No
Removable: No
Read Only: No
Disk Length: 66846720 (bytes)
Host Length: 67108864 (bytes)
Encryption Algorithm: AES
Mode: XTS
Master Key
0xfffffa801b57f1a8 84 2c 3d a3 24 7d 9a 37 d6 53 7e ac 1f 3c 2c 7f .,=.$}.7.S~..<,.
0xfffffa801b57f1b8 de 61 85 de 81 a9 84 2a 4d 3c d9 57 df 81 c7 29 .a.....*M<.W...)
0xfffffa801b57f1c8 8f 56 fc e1 80 4e cf 2a ce 44 5b 9f a6 10 6f 98 .V...N.*.D[...o.
0xfffffa801b57f1d8 15 e2 50 1f 49 38 f0 a9 62 a7 96 4a db d3 53 9f ..P.I8..b..J..S.
Адрес KDBG для volatility —
0xf80002a45120
, профиль подойдет Win7SP1x64_23418
(т.е. volatility --kdbg=0xf80002a45120 --profile=Win7SP1x64_23418 -f mem.raw truecryptmaster
). Затем при помощи, например, MKDecrypt можно по полученному мастер-ключу (без знания пароля, он уже не нужен) дешифровать контейнер в сыром виде. Для чего? Искомый файл secret.docx
(сделано так, чтобы он не попал целиком в память в MFT и не сильно упростил решение из-за малого размера) удален из контейнера (подсказка «там уже нет ничего важного» в рояле), как и обещано в сообщении (и в Discord была дана подсказка «а была ли там важная информация?»), там лежит только всякий мусор (пентест-программы и пустые кошельки Monero). Однако с «сырым» расшифрованным контейнером и практически любой программой восстановления данных с FAT-разделов, например, R-Studio, photorec или DMDE, «удаленный» из криптоконтейнера файл с частью ключа восстанавливается.▍ Задание 3r1or0l3r
Часть ключа:
ssss-07-7931b90aace8673aa4d6162c3e729b7c89152de5e9bed9ab9fb9ff8eb1fbe8307bd985f728de99123980abee36d0495fbad93cf52d990a9a0fdbb82b62c7b141f3642e051dfa8112b56833
Категория задания: stego
Гуглим ник, находим его «творчество»: https://textbin.net/hzbmlkhzjg
Текстовая стеганография по методу цепей (о чем была дана подсказка в Discord «связанные одной цепью» и «текст связан, неслучаен, имеет смысл» в видео) Маркова: An Approach for Text Steganography Based on Markov Chains (подсказка в Discord 1409.0915). Реализация этой идеи: http://jthuraisamy.github.io/markovTextStego.js/
В текста «творчества» (первая глава киберпанк-романа) есть очевидным образом находимые имена собственные, например, «McCoy Pauley» или «Bobby Quine», взятые из первой известной книги в этом жанре: «Нейромант» Уильяма Гибсона. В качестве специфичного корпуса текста для цепей Маркова использована первая глава этой книги (о чем есть намек в названии «повести», да и других слов и предложений кроме как из первой главы там нет), свободно доступная здесь.
Вводим текст первой главы «Нейроманта» в качестве корпуса, вводим текст первой главы «творчества» хакера в качестве шифротекста и получаем искомую часть ключа. Да, со стеганографией всегда приходится немного погадать и поподбирать варианты.
▍ Задание VenchamoSs
Часть ключа:
ssss-08-6fe2d9b400840e44d5f20e15043cc4739ed97879110790350dd2e5e67f0b56b6e11607bb9e99f0cb1c57ede4d309e9f85363168f2ff1d2f316c9c89a8179110a759140a911075a0547f908
Категория задания: osint
Находим (это же osint) хакера на том же github: https://github.com/VenchamoSs.
На гитхабе указан второй ник — a.k.a. welAnty. В понравившихся репах — gpg, а значит хакер пользуется и интересуется PGP/GPG-решениями. Находим хакера на keybase.io (известный сайт, где пользователи GPG обмениваются приватными ключами), там есть публичный ключ с email welanty@forexrobotexperts.now.im. А также указание не использовать старый ключ с ID 0xF6B246D4. Если поискать по этому ID на самом известном и старом сайте для обмена ключами, то можно найти тот самый старый ключ с email eukx@forexrobotexperts.com. По нему в утечке ANTIPUBLIC (входит и в Collection #1, самая крупная компиляция утечек за последние несколько лет) есть пароль
N4syZRJ843.
Заходим по паролю на SSH (единственный открытый на сервере сервис) welanty@forexrobotexperts.now.im, забираем часть ключа. ▍ Задание -velashic-
Часть ключа:
ssss-09-be6c314465393225739da1e65200657df7d4a15e66e606c9619ef51a88d5b4015353ac2f089f3dfcd3f86757e89e404dfc2552fe59218310f94b8834d7a82d47b68669aa31eb0860a95d26
Категория задания: osint, forensics
a href=«www.google.com/search?q=%22-velashic-%22»>Гуглим ник, находим тему на форуме Cyberforum в разделе про Arduino. Там всё описано: хакер просит помощи, по своей некорректно работающей Arduino и прилагает дамп USB-трафика, поскольку подозревает, что она «слишком китайская» и при заливке прошивки что-то идет не так. Код прошивки должен играть песню группы Metallica «Master of Puppets». В дампе помимо заливки прошивки на Arduino попало также и общение с USB-флешкой (распространенная ситуация, поскольку USB-интерфейсов в Wireshark меньше, чем USB-портов на компьютере, ведь их количество соответствует не портам, а USB-хабам на материнской плате). С флешки считывается файл с той же песней для прослушивания, а также записывается запароленный архив secret.7z. Во время извлечения видим, что происходит запись в NTFS-раздел на флешке, а в NTFS есть концепция fixup, поэтому не забываем поправить (о чем была дана подсказка в рояле) 2 байта по смещению 142 (попали на границу сектора) с
0600
на 708f
по таблице USN/USA (Update Sequence Array) FILE-записи. Пароль к архиву угадывается из очевидного интереса хакера — группа «metallica» (также есть и в известном словаре RockYou), в архиве лежит secret.txt с искомой частью ключа.▍ Задание chyrgerillll
Часть ключа:
ssss-10-132faac795e60a0f9457167c3db3f1b1efd25cdd5049329e68fd43ce884e606d17fb14e70c897bd3308aaa213443952522c95b2e3c29d68dca9611a12e6f3d8a660113370c2f6753fc0643
Категория задания: crypto, re
Находим github-аккаунт с единственным репозиторием: https://github.com/chyrgerillll/mymnemonicgen В репозитории лежит реализация генератора мнемонических фраз, использующихся для запоминания доступа к криптокошелькам «в голове» по стандарту BIP39. Этот стандарт используется практически во всех криптовалютах и практически во всех реализациях их кошельков, далеко не только в Bitcoin. Генерацию приватных ключей для кошельков из этих мнемофраз описывает стандарт BIP44, также используемый большинством реализаций криптокошельков, о чем есть намек в репозитории. Seed-данные из энтропии, сохраненной в мнемофразе, для него вырабатываются по BIP32 (список всех трёх стандартов в первой подсказке из видео). Пример того, как всё это генерируется, можно увидеть вот здесь: https://iancoleman.io/bip39/ (последняя подсказка, данная в Discord; также подсказан использованный стандартный путь генерации
m/44’/60’/0’/0/0
).Там же, в репозитории, есть и адрес кошелька в тестнете Ropsten криптовалюты Ethereum, для приема донатов на продолжение разработки генератора. На нем лежит несколько тестовых эфиров. В репозитории также есть и намек на то, что требуется для выполнения задания: попробовать сломать сгенерированный этой доморощенной реализацией генератора кошелек и дать знать об этом автору (или и вовсе «увести» тестовые эфиры). Необходимый для связи email хакера (chyrgerillll@rambler.ru) можно узнать, склонировав репозиторий к себе и посмотрев, как он засветился в одном из коммитов (также неочевидная и частая проблема пользователей git).
Генератор использует стандартный питоновский ГПСЧ (вихрь Мерсенна), в качестве seed’а к нему — текущее время. Оно берётся из транзакции с пополнением средств (и подбирается ±30 секунд, поскольку время на компьютере хакера могло быть не идеально правильным, о чем была дана подсказка в Discord — всего 60 000 вариантов). Таким образом восстанавливается состояние ГПСЧ (seed 1621586183221, 21.05.2021 08:36:23.221 GMT) и получается искомая seed-фраза «try process bubble call spell peanut pear valve boring stumble inject turn», а по ней и приватный ключ (
0x702ca34414cc046ed2f63857a098b166541c3f477d7679a19e51de901d0df471
), дающий доступ к кошельку. Если отправить полученные сведения и ключ (как подтверждение того, что генератор действительно уязвим) хакеру по почте, то он предложит сделку: участник не трогает более его кошелек, а в ответ получает искомую часть ключа.
На третий день висения рояля мы дали участникам подсказку, которая помогала решить это задание. Подсказка зашифрована в конце этого видео:
Интересный факт: актриса не собиралась ломать гипсовый череп, но настолько вжилась в роль, что сделала это весьма экспрессивно, удачно оживив видео. Хорошо, что количество черепов по привычке зарезервировали по схеме N+1, и мы смогли записать еще пару дублей.
Так вот, мы решили взять этот забавный момент, зациклить и зашифровать в него подсказку. Закодированное в аудио RTTY-сообщение (на что в Discord были даны подсказки по поводу того, что звук похож на «звучание старого модема» или даже скорее «телетайпа») можно было декодировать например с помощью известной в узких радиолюбительских кругах программы Fldigi:
Сообщение таким образом давало подсказки по заданиям для хакеров 3r1or0l3r и chyrgerillll.
▍ Результат выполнения заданий победителем
Если собрать полученные при решении заданий части ключа в программе ssss (реализует разделение секрета по схеме Шамира, намек на эту программу содержится в тексте всех частей), то участник получает ссылку (зашифрованную pastebin): https://0bin.net/paste/YrFxYqMg#ZVK78BWtOhtncw3-xwJe9dw5rGBOboTBOJhEaop8tge
По этой ссылке находится приватная часть ключа, необходимая для захода на ноутбук.
▍ Бонусный ключ (10-й).
В посте про музыкальные монограммы у нас есть описание одного из алгоритмов шифрования (немецкий метод, 18 век). Задание простое: участнику необходимо набрать на рояле зашифрованную монограмму RUVDS:
На сайте на клавиатуре у нас были такие вот надписи:
Для того, чтобы набрать RuVDS, надо было проиграть на рояле такую вот последовательность:
4 7 1 4 5
Результатом этого будет сообщение, которое приходит в Telegram того, кто проиграл эту мелодию:
«Поздравляем! Ты вскрыл одну из 8 частей для раскрытия секрета (SSH-ключа)!
Вот она: ssss-11-2ff9228ea4b6b1fe9361a28e506ca2d35699652cc2a5838d185b075ebe9b60ce4d6e1345f6a0ebe55f5a097218265bb35a3fea2632cc569a5bb6f377591138c0d80daa96420be7150d183a»
Отвечая на вопросы участников, да, это был бонусный ключ, его наличие не обязательно для прохождение квеста, поэтому он выбивается из общего сценария повествования квеста (лора).
Хозяйке на заметку: термин «лор» произошёл от английского слова «lore», что в контексте квестов означает «знание, предание».
Бонусный ключ мы добавили для того, чтобы дать тем участникам, для которых основной сюжет слишком сложный, попробовать себя и получить хоть какой-то ключ.
Кроме того, мы следили в Discord за тем, как участники проходили квест, и подкинули им дополнительные подсказки. Если участники догадывались проиграть на рояле закодированные ники хакеров, то получали такие сообщения через Telegram-бота:
1 5 5 1 5 1 2 3 (-velashic-, задание 9)
«Молодец! Вот тебе подсказка по нику -velashic-:
проверь целостность извлеченного архива.
6 1 3 2 5 4 4 или 6 3 4 (m0x143y)
«Молодец! Вот тебе подсказка по нику m0x143y:
Перед выкладыванием в интернет по своей проблеме он ведь сказал что там уже нет приватной инфы…
▍Победители и призы
Мы уже объявили имена победителей, успевших скачать котика. Но после падения рояля у участников было ещё пять дней, чтобы решить все задания, уже только из спортивного интереса. И мы поздравляем еще раз всех, кто не опустил руки и тоже добрался до гифки с котиком!
Добравшиеся до конца
Александр
not-alone
lofarter
Герман
Ильдар
not-alone
lofarter
Герман
Ильдар
А ещё, по результатам голосования в Discord мы решили наградить участника not-alone за огромную помощь в совместном решении задач: мы дарим ему сертификат на 200 долларов для аренды виртуального сервера в любом из 11 дата-центров RUVDS, а также ящик нашего фирменного пенного Smart Admin.
Всем победителям добравшимся до конца, мы дарим промокод на 50% скидки на Хакер.
❒ За получением призов необходимо обратиться к @Johurn.
И напоследок хотим поделиться некоторыми забавными цитатами участников:
Еще немного забавных картинок из дискорда:
И теперь точно в завершение: помним, любим, скорбим.