Котейки против Чёрного властелина: статистика online-этапа NeoQUEST-2018

pr10aiwxj5xhfndi5nwefdbpico.jpeg
С 5 по 16 марта проходил online-этап соревнования по кибербезопасности NeoQUEST-2018. Под катом подробно расскажем о заданиях (но не обо всех, некоторые пойдут отдельными write-up’ами) и статистике их прохождения, а также о том, почему все 11 дней соревнования участники заваливали команду NeoQUEST картинками нетрадиционной своеобразной направленности!

Общие итоги


Online-этап включал в себя 11 заданий, которые, по легенде, содержали в себе части ключа к сокровищам таинственной Атлантиды! Получить все ключи не удалось никому — второй ключ к заданию №11 «Cat Fur Grows» так и остался непокоренным!

dsmksniiyvq4rvpy8yacphy5wbs.jpeg


Первое место занял mityada, набрав 1527 баллов и получив все ключи, кроме злополучного ключа №2 из задания 11! «Серебро» получил bay, собрав те же ключи, но слегка уступив во времени, его результат — 1508 баллов. «Бронза» оказалась у hackzard — все задания, кроме 11ого, и 1429 баллов!

Поздравляем ребят! Борьба за 1 место была очень напряженной, бывало так, что за день лидер сменялся 3 раза. Тройку лидеров ждут крутые подарки, а всех, кто прошел хотя бы одно задание полностью — памятные сувениры от команды NeoQUEST!

Подробно о заданиях и маааленькой пасхалочке!


Сайт с заданиями будет доступен еще некоторое время, так что шанс разобраться в них еще есть!

Задание №1 — «Зелёное объединение»


Вижу зелёное — понимаю, что речь идет об Android!
Участникам предоставлялся APK файл, представляющий собой приложение, разработанное с использованием фреймворка Unity3D. В главном окне приложения есть кнопка, которая при нажатии показывает 2 случайных байта.

При декомпиляции приложения и просмотре директории \assets\bin\Data находились запакованные ассеты для Unity, их можно просмотреть с помощью программы Unity Assets Bundle Extractor:

6biu6gonhdznekrxm8mfkg_xfsc.png

Внимательное изучение директорий позволяло обнаружить один GameObject с именем e4e623ca0e06d69d7d63a7daae5fb27f — похоже на ключ? Так это он и есть! Этот лёгкий первый ключ получили целых 112 участников.

Также в данной сборке были расположены различные текстуры, на каждой из которых изображались 2 байта, именованные от 1 до 24. По-видимому, это ни что иное, как части флага! Эти текстуры, пользуясь этой же программой, можно (и нужно!) было импортировать в формат png. Теперь необходимо понять, все ли части используются во втором флаге, и в каком порядке?

Для этого декомпилируем C# сборку \assets\bin\Data\Managed\Assembly-CSharp.dll. После тщательного анализа видим функцию GetSeqKey, которая нигде не вызывается. Подозрительно!
В данной функции выполняется XOR строки и массива, но при этом, в исходном коде нет верных значений строк и массива.

Зато в массиве есть подсказка «what’s with the button?». Если внимательно посмотреть на кнопку, можно увидеть странную текстуру:

kucjm2jzrf0pylu0r_3i8ma_r-e.png

Получаем значения высоты каждого столбика в px, это и есть наш массив для XOR (0×68, 0×5b, 0×59, 0×00, 0×59, 0×58, 0×40, 0×44, 0×17, 0×58, 0×48, 0×57, 0×14, 0×47, 0×45, 0×48, 0×16, 0×58, 0×4f, 0×11, 0×5c, 0×55, 0×00, 0×5b, 0×49, 0×41, 0×40, 0×45). Но это лишь часть ключа!

Чтобы найти вторую часть, внимательно смотрим на состав пакета с ассетами и видим там 3D-объект с именем text, импортируем его в формате *.obj и открываем, например, в Photoshop. Видим текст «You hold the key to my heart». Для получения правильной последовательности делаем XOR полученных ключей и получаем последовательность: 14, 17, 7, 24, 16, 11, 3, 21. Осталось извлечь все части флага и собрать целый, согласно полученной последовательности!

Со вторым ключом дело было сложнее: его получили всего 49 участников!

Задание №2 — «Пара-пара-пар!»


В этом задании участникам был дан файл «input», являющийся дампом Bluetooth-трафика между телефоном и Bluetooth-гарнитурой. Кроме служебной информации, в трафике были еще и аудиоданные, передаваемые по RTP/SBC протоколу. Участникам нужно было извлечь аудиоданные, в которых с использованием азбуки Морзе было зашифровано слово, SHA1 от которого и было ключом!

С этим заданием успешно справились 78 участников!

Задание №3 — «Найти Ихтиандра»


Мы любим задания на OSINT, и знаем, что вы их тоже любите! Наш участник mr_umnik уже написал по нему write-up, но только у нас есть любопытные подробности об этом задании! Ведь кто, как не вы, дорогие участники, проявили бурную фантазию и загружали нам настолько удивительные фото, что мы даже собрали коллекцию!

Всё, что было дано в этом задании — никнейм andr_ihtiandr и ссылка на «анкету». Поиск ВКонтакте сразу давал результат! Из фото в профиле находилось название организации (AtlanticNeoSecurity) и подсказка, куда двигаться дальше — в «защищенный мессенджер», то есть, в Telegram!

Попытки пообщаться с пользователем @andr_ihtiandr ни к чему не привели бы, зато в фотографии профиля был намек на следующую социальную сеть: Ask.fm! Оттуда удается узнать фамилию основателя компании, в которой работает Ихтиандр: Nobody.

Однако, профиль ВКонтакте содержал не только намек на Telegram, но и фразу «And sometimes I write interesting things on text storage site =)». А это уже указатель на Pastebin, и действительно — там мы тоже находим Ихтиандра! Его профиль содержит одну-единственную запись, которая, на самом деле, картинка в формате .jpg, закодированная в Base64!

kjhqezje8xwfryz2_nbkcyh0hk4.jpegКартинка выглядела вот так (тут-то фантазия участников и расцвела буйным цветом). «Продолжай» относилось к дальнейшему анализу картинки, которая (раз уж она .jpg) открывалась еще и как RAR-архив!

Содержимое архива (подробнее об этом читайте тут) состояло из текстового файла и картинки, открыв которую блокнотом или HEX-редактором, участники находили подсказку о том, что именно эта картинка поможет им найти год основания компании!

И действительно, поиск Google по картинкам выдавал результаты с новостью о найденных в 2009 году останках Атлантиды!

Осталось всего-то ничего для получения ключа: загрузить файл. И не просто файл, а, как мы специально написали в onine-анкете, «фото того, кто спрятался на почти чёрно-белой картинке».

И надо же такому случиться, что деятельный ум проходящих задание связал Чёрного властелина и фразу «почти чёрно-белой»… По такой логике — действительно, спрятаться за Чёрного властелина мог только… белый раб!

В итоге команда NeoQUEST с ужасом наблюдала, как среди загружаемых фотографий растёт число полуобнаженных мужчин! Помимо них, к счастью, были и абстрактные картинки, и даже вариации на тему Ихтиандра! Из странного, но приличного мы составили коллаж:

2hld_zpvnspjpcvzjlcosv__qna.jpeg


И только потом, наконец-то, стали появляться котики! Да-да, именно они! Ведь на почти чёрно-белой картинке ВКонтакте было изображено жёлтое такси, а еще цветным были выделены буквы: «c», «a», «T». Cat — вот чье фото мы так долго ждали!

Коты тоже радовали разнообразием, и мы не поленились сделать подборку самых интересных:

panp1c9mvowtoqzb-bqderrp3fk.jpeg


При загрузке правильного фото участники получали ключ. С заданием справились 76 человек!

Задание №4 — «Дирижабль? Ага!»


В этом задании участников ждала распределенная сеть ZeroNet, и по этому заданию уже тоже есть write-up от Nokta_strigo.

Для получения первого ключа было достаточно просто изучить принципы работы ZeroNet. Чтобы получить второй, участникам приходилось попотеть, взламывая шифр на основе регистра сдвига с линейной обратной связью.

Задание №5 — «Замучай ослика!»


Входные данные к этому заданию — адрес сайта, представляющий собой страничку «техподдержки», на которой можно создать обращение и загрузить PDF-файл. Через некоторое время на обращение приходил ответ, содержащий первую страницу загруженного PDF-файла и — в самом конце — фразу «Answered from Internet Explorer 11». Все это намекало на то, что администратор открывает PDF в Internet Explorer 11.

Для открытия PDF в IE11 существует плагин Adobe Reader, но пока что это никак не помогало в поисках ключа. Внимательно исследуя страницу, можно было найти скрытый элемент меню «GET KEY», который выполнял перенаправление на страницу /setkey.php.

u_vzimiqen9drxjpopau8efvsng.png


В данной форме всего один элемент — логин пользователя. В различных ситуациях выдаются разные сообщения, но при вводе корректного логина участник получал такое сообщение:

mjshswawy3hv47cdad6uhhzyeca.png


По-видимому, нужно, чтобы это действие осуществил администратор. Как же это сделать?

Тут на помощь приходил сканер уязвимостей (любой) — при сканировании формы обнаруживалось, что она не защищена от CSRF! Что ж, осталось только подготовить специальный PDF-файл.

Один из возможных вариантов — написать на языке FormCalc POST-запрос, используя адрес сайта (213.170.100.210):

var b = Post("https://213/170.100.210/setkey.php", "login=test&setKey=Выдать ключ", "application/x-www-form-urlencoded")

Вроде бы все верно, но… ключа нет. Тут нужно было вспомнить о том, что у сайта — невалидный SSL-сертификат! Тут как раз помогла часть подсказки «А для открытия Ваших файлов у него установлен плагин Adobe. Он работает на том же сервере, на котором размещён Web-сервер». Смотрим настройки безопасности Internet Explorer — и точно! Сайт localhost является безопасным. Меняем адрес сайта 213.170.100.210 на localhost — и вот он, ключ!

С заданием успешно справились 16 участников.

Задание №6 — «Кто тут инженер?»


Участникам был дан лог показаний акселерометра смартфона, а по легенде можно было узнать про некоторое сообщение в формате RTTY и параметры RTTY-кодирования: несущая частота — 100 Гц, смещение 70 Гц.

Проанализировав лог акселерометра, участники могли увидеть, что значения ускорения устройства измерялись только по одной из осей координат 600 раз в секунду, а показания ускорения выглядят вполне адекватно: 0–60 м/с2.

Основная идея задания заключалась в том, что по имеющимся значениям ускорения можно вычислить местоположения устройства, а много-много измерений местоположения за единицу времени — это вполне себе слышимая звуковая дорожка! Далее — дело техники: вспомнив основы численного интегрирования, участникам нужно было вычислить множество пар «таймстемп-местоположение» и «перегнать» полученные данные в звуковой wav-файл. Оставалось только немного пошаманить с амплитудой звука и, усилив сигнал, раскодировать RTTY-послание, в котором был ключ!

Инженерами оказались 29 участников.

Задание №7 — «Адский реверсер — моё ампЛУА!»


Задание №7 было посвящено поиску и эксплуатации use-after-free уязвимости, кроме того, в самом задании был намек на использование языка Lua.

Подробный разбор этого задания (и не только его!) сделал GH0st3rs, write-up доступен тут! С заданием справились только четверо участников!

Задание №8 — «Блокчейн добрался даже до Атлантиды…»


В этом задании участникам был дан клиент для взаимодействия с простым блокчейном. Для получения ключа нужно было смайнить блок, содержащий ник участника. Но стандартный алгоритм майнинга был слишком медленным! Чтобы увеличить скорость, участникам нужно было найти уязвимость в хэш-функции, которая использовалась для проверки блоков.

Задание прошли только 10 участников, и мы разберем его подробнее, ждите write-up!

Задания №9 — «QEMU+eCos=QECOS» и №10 — «Spectre»


На эти два задания активный GH0st3rs тоже уже успел написать write-up! Читайте их по ссылке. Скажем лишь, что задание №9 было посвящено работе с непривычной для многих операционной системой eCos, оно содержало в себе 2 ключа, первый из которых получили всего 5 участников, а второй — и того меньше: четверо участников!

Название задания №10 сразу говорило о том, что без уязвимости Spectre тут не обошлось! Участникам NeoQUEST нужно было извлечь ключи (целых 3 штуки!) из сломанного приложения, предварительно найдя в нем ошибки и «починив» его.

Первый и третий ключи получили по 29 участников, а второй оказался сложнее и был найден только 19-ю участниками.

Задание №11 — «Cat Fur Grows»


Этим необычным названием мы усиленно намекали участникам на то, что без обхода механизма защиты Windows под названием Control Flow Guard (CFG) здесь не обойтись! В задании нужно было найти/нафаззить уязвимости и получить ReadWrite примитив для обхода всего, что есть в последней Windows — DEP, ASLR, CFG, и т.д.

Первый из двух ключей получили только четверо участников, а вот второй ключ так и не покорился никому. Именно этому заданию мы посвятим отдельную хабрастатью, ведь, помимо того, что оно самое сложное, у него было несколько вариантов прохождения!

Пасхалка


За несколько дней до окончания соревнования один из наших разработчиков решил сделать небольшой сюрприз участникам и придумал небольшую инженерную пасхалку. В тексте легенды некоторые символы были выделены жирным шрифтом:

Введение — НА (на часы)
Задание 1 — ЖМ (содерЖиМое), И (экспедициИ)
Задание 2 — НА (но НАм все это)
Задание 3 — СТ (мое соСТояние)
Задание 5 — АР (в них не обнАРужив)
Задание 6 — Т (смарТфон)
Задание 7 — 7 (из IP-адреса)
Задание 8 — Р (шикаРный), АЗ (АналиЗ)

Собрав все символы вместе, участники получали такую фразу: «НАЖМИ НА СТАРТ 7 РАЗ».

k4pb0jugrblkpvlmjtgw0ui42uw.png


Да-да, на тот самый старт, что под дирижаблем!

После 7 нажатий открывалась вот такая страничка:

rgub7tznkjjs89vho2zevqfhwik.png


Чтобы получить недостающий кусочек ссылки, участникам нужно было найти попиксельную разницу между картинками. Способов сделать это — достаточно, но самый простой — найти онлайн-тулзу, например, вот эту, она нашла вот такую разницу:

iibhegfp-vk-fdvuobip1nzq9tq.jpeg


Фраза «W3Are1n1AMMn0W!11» отражала радостные эмоции разработчика в связи с тем, что его родная кафедра «Информационная безопасность компьютерных систем» СПбПУ (один из организаторов NeoQUEST!) перешла в состав Института прикладной математики и механики. Что ж, абитуриенты, бакалавры и аспиранты — теперь вы знаете, где нас найти! Тем более, что успешное участие в NeoQUEST учитывается при поступлении на кафедру «ИБКС»!

Но довольно лирики, ведь пасхалка еще не пройдена до конца! Перейдя по полученной ссылке, участники получали новую загадку:

hjhm6xlwfhnka37wbub06vayvg0.jpeg

Шестерёнки, формулы… Непонятно. Хотя вскоре, приглядевшись, участники понимали, что верхняя формула — не что иное, как отношение числа зубчиков на самой большой шестеренке к числу зубчиков на самой маленькой! Теперь вся сложность заключалась в том, чтобы верно подсчитать зубчики (63 и 16, соответственно), разделить одно на другое (3,9375), умножить на 104 и взять SHA1 от получившегося значения (6246a5c59e9cd5944ab1b196dcb9d950c2172254)!

«Пасхалку» прошли 46 участников, каждый получил 10 баллов — динамическая шкала на это задание не действовала.

А теперь — статистика!


В соревновании приняли участие 1253 человека, хотя бы один ключ получили 167 участников. Изменения в турнирной таблице — в нашей традиционной гифке:

l7twgx6gvxkzixoocpbuv-6irxq.gif


Также мы собрали статистику по сложности заданий (учитывалось число участников, прошедших задание полностью):

tziyw-edr_oc2uxo_dcujt0kmyw.png


И еще — статистику по заданиям с несколькими ключами! Всего их было 5:

  1. Задание №1, «Зелёное объединение» — 2 ключа;
  2. Задание №4, «Дирижабль? Ага!» — 2 ключа;
  3. Задание №9, «QEMU+eCos=QECOS» — 2 ключа;
  4. Задание №10, «Spectre» — 3 ключа;
  5. Задание №11, «Cat Fur Grows» — 2 ключа;


58xkgzct3upssxqey2wrvsyxjaq.png

За весь период online-этапа NeoQUEST-2018 было получено 594 ключей! Самым легким оказался первый ключ к заданию с Android (№1, «Зелёное объединение»).

Впереди — «Очная ставка»!


В этом году «Очная ставка» состоится в Петербурге не летом, а осенью — в конце сентября. Однако это — не все перемены, которые ждут гостей и участников!

Мы оставим самое крутое и любимое: доклады, воркшопы и демонстрации атак и добавим новенького! Впервые NeoQUEST пройдет вместе с научно-технической конференцией «Методы и технические средства обеспечения безопасности информации»! Гости NeoQUEST-2018 узнают много нового о взаимосвязи науки и практики кибербезопасности, о важности научного research для специалиста по защите информации и о том, как с научной точки зрения работают современные механизмы защиты информации!

При этом, желающие смогут принять участие не только в NeoQUEST, но и в научных секциях конференции! Чтобы узнать подробнее про участие с докладом или воркшопом на NeoQUEST, пишите на на support@neoquest.ru, а подробнее про конференцию «Методы и технические средства обеспечения безопасности информации» узнавайте на объединенном сайте, по всем вопросам обращайтесь на mitsobi@neobit.ru.

Впереди — write-up’ы нескольких заданий и активная подготовка к «Очной ставке»! Кстати, участники, прошедшие целиком хотя бы одно задание, — проверяйте почту, в скором времени начнем рассылку!

© Habrahabr.ru