C 1 по 10 марта прошёл online-этап соревнования по кибербезопасности NeoQUEST-2017. Пришло время подвести итоги, поделиться любопытной статистикой прохождения, а также вкратце рассказать про сами задания.
В этом году мы решили отправить участников соревнования в бескрайний космос и придумали для них галактику из 9 планет-заданий, каждая из которых была уникальна.
Все 9 «планет» пройти не удалось никому, но, тем не менее, у нас не осталось ни одного непройденного задания! Победителю AV1ct0r покорились 7 заданий, и его 1025 баллов стали лучшим результатом в online-этапе соревнования! Серебряный призёр, Ilja, полностью прошел 4 задания и получил по одному ключу еще в двух, его результат — 817 баллов. «Бронзу» получил VampiRUS, на его счету 4 полностью пройденных задания и одно — наполовину решенное, количество набранных баллов составило 731.
Тройку призёров ждут отличные подарки, а всех, кто получил хотя бы один ключ — памятные сувениры! Теперь перейдем к тематике и «изюминкам» заданий NeoQUEST-2017!
Задание №1 планеты Greenoid: «Почини вождя!»
Зелёная планета, зелёные роботы с рожками, большими ртами и ручками-ножками-палочками? Да это ж Android! Название планеты, кстати, тоже намекало именно на эту мобильную операционную систему.
А когда участники скачали apk-файл, все их сомнения по поводу тематики задания должны были развеяться! Для «починки» вождя зелёных роботов участникам нужно было подвергнуть apk-файл reverse engineering, расшифровать хранящийся там зашифрованный байт-код, дизассемблировать нативную библиотеку и найти коллизию к хэш-функции CRC32. Write-up по этому заданию уже опубликовал в своем блоге победитель online-этапа AV1ct0r и описал в хабрастатье GH0st3rs (читать тут!)
Задание №2 планеты Photonis: «Фотомания»
В данном задании участники получили архив с изображениями, но изображения были необычными: некоторые из них содержали просто цветовой шум, а в остальных компоненты R, G и B каждого пикселя оказались равны друг другу (градации серого). Также каждое изображение включало дополнительную мета-информацию, в частности, гео-теги.
Участникам требовалось отфильтровать шум и отметить географические координаты оставшихся изображений на карте мира. В результате из полученных точек создавалось изображение символов, являющихся ключом к заданию (а также, как упоминалось в легенде, места на Земле, в которых удалось побывать инопланетянам). Такая вот забавная стеганография! Write-up на это задание тоже уже опубликован, читаем!
Задание №3 планеты Etheris: «Граждане, храните деньги в криптовалюте!»
В этом задании участники столкнулись с технологией блокчейн. Им предстояло разобраться с принципами работы умных контрактов Ethereum и провести на один из них две атаки. Первая напоминала известную рекурсивную атаку на The DAO, в ходе которой злоумышленник чуть не похитил криптовалюту на сумму 60 миллионов долларов! Для проведения второй атаки нужно было использовать ошибку работы с памятью и подменить владельца контракта собой.
Задание №4 планеты iFetus: «Запретный плод»
В легенде к этому заданию настойчиво упоминались разных размеров яблоки-носители информации? Намёк ясен! Вот оно — анонсированное задание на iOS! Участники получали архив, в котором было 780 файлов с непонятными именами.
На первый взгляд было абсолютно непонятно, что с ними делать. Наилучшим вариантом была их сортировка по типу: сразу обнаруживались 4 файла с расширениями, позволяющими понять, что эти файлы — ни что иное, как бэкап iOS-устройства. Затем участники либо бродили по файлам и следовали подсказкам, которые оставил для них разработчик, либо осуществляли поиск IP из нашей подсети (так делали самые хитрые!). Результатом поиска был zip-архив, имя которого – первый ключ задания.
Но у задания была еще и вторая часть! Содержимое архива — iOS приложение в непривычном виде (папка с форматом .app). Яблокоманы могли попробовать запустить его на iOS симуляторе, но мы решили сделать равные условия для всех и заставить участников реверсить! Приложение вытаскивало из NSUserDefaults логин и зашифрованный пароль, расшифровывало его и отправляло на сервер, а в случае корректности пароля получало ключ.
Восстановив пароль, участники столкнулись с еще одной проблемой: сервер постоянно отвечал им «Incorrect App». А хитрость была в том, что надо было подменить User-Agent на тот, который используется в приложении! Получить второй ключ удалось немногим, и даже наш победитель испробовал порядка 200 различных вариантов и только потом нашел верный (почитать write-up можно тут!).
Задание №5 планеты Espion: «Мультипаспорт!»
В этом задании мы решили заставить участников погулять по различным социальным сетям и осуществить OSINT или, в некотором роде, «шпионаж» (именно от слова espionage и было образовано название планеты!).
Участникам выдавался архив с большим количеством фотографий и предлагалось заполнить анкету «участника космической экспедиции». Анкета была условно разделена на три блока и, как оказалось позже, для ее заполнения требовалось посетить 5 социальных сетей.
Самым сложным был первый шаг: как перейти от фотографий к профилю пользователя в социальной сети? Оказывается, если присмотреться к фотографиям, некоторые из них были сделаны около вполне себе космического места: NASA Tourist Space Center. Одна из близких по номеру фотографий (да-да, только одна!) хранила в своем EXIF географические координаты. Использовав их при поиске в популярной синей социальной сети (это Питер, детка!) можно было выйти на профиль пользователя, а затем, увидев, что он продаёт шикарный розовый скафандр, сообразить, куда двигаться дальше! Кстати, hackzard написал отличный (и, что очень ценно, весёлый!) write-up к этому заданию.
Задание №6 планеты Prioritus: «Слишком много всего...»
В качестве исходных данных участникам предоставлялся IP-адрес и намеки на использование «приоритетов». На указанном адресе располагался веб-сервер, функционирующий с использованием протокола HTTP/2.
Изучив протокол HTTP/2 и его особенности, участники могли обнаружить технологию приоритезации HTTP/2-потоков. Генерируя свои запросы с различными приоритетами, сервер присылал различные ответы. После перебора 256 значений приоритетов, участники получали первый ключ и обнаруживали «проход» ко второму ключу — форму входа с полями для логина и пароля. Тут участникам предоставлялась возможность разработать собственный способ проведения boolean-based blind SQL-injection over HTTP/2 для получения второго ключа.
Задание №7 планеты E-mu: «Затерянные в додекаэдре»
А здесь участникам в качестве исходных данных предоставлялся скомпилированный под Linux бинарник QEMU, при этом, во время компиляции было добавлено новое виртуальное PCI-устройство, что существенно затрудняло задачу поиска ключа.
Участникам также требовалось поломать голову над головоломкой судоку: ключом к заданию являлось сообщение, записанное с помощью ASCI графики, которое хранилось в массиве размером 16x256. Изначально данный массив был зашифрован, а решение головоломки судоку 16x16 и было ключом для шифрования.
Задание №8 планеты Endian: «Спасение экипажа»
Технология Intel и ее особенности — частая тема в докладах NeoQUEST (например, этого и этого!)!
Мы не сомневаемся, что многие наши участники практически «с пелёнок» умеют изучать дизассемблер машинного кода под архитектуру Intel и даже в уме вычислять, сколько памяти необходимо, чтобы замапить 16Гб адресного пространства в long-mode c PML4 по 2Мб. Но не одним Intel'ом прекрасен и разнообразен мир! Мы решили немного поностальгировать и вспомнили времена, когда небо было голубее, деревья больше, а макбуки были на PowerPC.
Участникам давалось 2 файла — образ PCI-Expansion ROM для QEMU и файл c бинарником PowerPC для IDA Pro. Наш PCI ROM всего-то запрашивал пароль… JNE на NOP и ВЖУУУУХ! Все готово! Пора с помощью веб-сайта пробовать загрузить свой пропатченный PCI ROM. Однако самые внимательные подмечали, что ROM проверяется на целостность, причем не стандартной 8-битной чексуммой, а неоквестовским алгоритмом контроля целостности! Тут уже приходилось браться за коварный и непонятный PowerPC и пытаться выяснить, как обойти контроль целостности и заполучить заветный ключ!
Задание №9 планеты Paradisos: «В поиске землян»
На «райской» планете в качестве отправной точки участникам давался адрес Web-сайта, на котором была размещена информация о четырёх учёных. По легенде, участникам требовалось получить информацию об учёном, отсутствующем на сайте, путем проведения SQL-инъекции.
Задача усложнялась наличием WAF, который блокировал опасные запросы. Участники были вынуждены формировать нетривиальные SQL запросы для обхода логики работы WAF. Фантазию участников мало что ограничивало, кто-то углубился в эксплуатацию BBbSQLi, а кому-то хватило и трюков с комментариями в запросе, чтобы повергнуть WAF на лопатки. Как с этим заданием справился hackzard, можно прочитать здесь.
Сайт с заданиями будет доступен до апреля, так что время разобраться в них еще есть!
Статистика
В соревновании приняли участие 1352 человека, хотя бы один ключ получили 80 участников. Как и в прошлом году, мы собрали изменения в нашей турнирной таблице в симпатичную гифку (на которую, конечно, не поместились все участники)
Также мы собрали статистику по сложности заданий и по тому, в какие дни участники NeoQUEST-2017 были наиболее активны!
Самым простым оказалось задание №5 планеты Espion, под кодовым названием «Мультипаспорт!» — хотя бы один из трех ключей, имевшихся в задании, получили 48 участников.
Самым сложным оказалось задание №7 планеты E-mu с мозговыносящим названием «Затерянные в додекаэдре»: его прошло всего 2 участника. В качестве второго по сложности идет задание №3 планеты Etheris «Граждане, храните деньги в криптовалюте!» — тут хотя бы один из двух ключей удалось добыть всего троим.
Теперь посмотрим, добыть какие ключи в «многоключных» заданиях оказалось тяжелее всего.
- задание №3 планеты Etheris «Граждане, храните деньги в криптовалюте!» — 2 ключа;
- задание №4 планеты iFetus «Запретный плод» — 2 ключа;
- задание №5 планеты Espion «Мультипаспорт!» — 3 ключа;
- задание №6 планеты Prioritus «Слишком много всего...» — 2 ключа.
Проще всего для 48 участников оказалось получить первый ключ к заданию №5, однако чуть менее половины (20) тех, кто получил первый ключ, остальные ключи раздобыть не смогли.
Самыми непростыми ключами оказались вторые ключи к заданиям №3 и №4, при этом, если разница по числу получивших ключ для задания №3 оказалась невелика, то разница между теми, кто получил первый и второй ключи в задании №4, впечатляет: только двоим из 29 удалось получить оба ключа!
Всего за 10 дней соревнования было получено 212 ключей, и тут нам стало интересно: а в какие дни наши участники были наиболее активны?
Внезапно оказалось, что выходные дни прошли не особенно продуктивно, а наибольшее число ключей получено в понедельник и вторник (6 и 7 марта соответственно).
Ждём всех на «очную ставку»!
Online-этап соревнования окончен, и мы начинаем подготовку к летней «Очной ставке», которая состоится 29 июня в Питере! Посетить ее смогут абсолютно ВСЕ, даже те, кто не участвовал в online-этапе. Вход свободный!
Лучших участников online-этапа мы пригласим в качестве участников финальной восьмичасовой битвы за поездку на одну из международных конференций.
А в качестве гостей мы ждём всех-всех, кто интересуется информационной безопасностью! Берите друзей, коллег, и приходите/приезжайте/прилетайте. Мы гарантируем: круто, интересно, познавательно и весело будет АБСОЛЮТНО ВСЕМ! Доклады, конкурсы, real-time демонстрации атак, Twitter-викторина, крутые призы и общение, подведение окончательных итогов hackquest — всё это 29 июня в Санкт-Петербурге!
Автор: НеоБИТ