Как и планировалось, 14-го марта 2012 года мы завершили NeoQUEST-2012. Суммарные баллы подсчитаны, победители названы; в ближайшие несколько дней мы обязательно свяжемся с ними и определим, когда и где они получат свои честно заслуженные призы (в том числе и наш главный приз, тот самый MacBookPro, засветившийся и в самом квесте).
Теперь можно подвести итоги квеста, рассказать о том, как мы его делали и о том, с какими трудностями столкнулись. И, конечно, поблагодарить всех тех, кто принимал участие как в самом квесте, так и в его создании и отладке.
Итоговые результаты
На дату официального подведения результатов закрытия квеста число зарегистрированных участников достигло 1480 человек. Много это или мало – решать вам. Отдельным приятным моментом для нас явился тот факт, что очень многие участники зарегистрировались уже после начала соревнования; это значит, что информация о квесте распространялась и интерес к нему был не только в первые дни.
Команда More Smoked Leet Chicken не только прошла все задания, но и сделала это за минимальное время. Им и присуждается главный приз наших соревнований. Участникам «BECHED & Andrey1800» и «kilobyte» присуждаются призы за второе и третье места нашего соревнования. Кроме того, все участники, прошедшие первые этапы квеста, получат от нас памятные подарки. С самого начала квеста мы были поражены вашей активностью по нахождению ошибок и уязвимостей, взлому всего взламываемого и невзламываемого. Вы находили такие ходы, о которых мы и не догадывались, и с энтузиазмом разбирались в тех областях, с которыми до этого не сталкивались.
Заметки о прохождении
Несмотря на то что официально квест завершен, ещё две недели задания будут доступны для прохождения. Если вы хотите попробовать пройти его самостоятельно, то этот раздел лучше пропустить.
Разумеется, описанные способы прохождения заданий не единственно возможные. Сколько участников – столько и вариантов прохождения.
При создании NeoQUEST мы преследовали следующие цели:
найти компромисс между сложностью и временем прохождения. Квест должны успешно проходить не только команды опытных профессиональных игроков, но и квалифицированные специалисты по компьютерной безопасности, в том числе продвинутые студенты соответствующих специальностей. Чистое время прохождения всех заданий, по нашим подсчётам, должно было составить около 10-12 часов;
отойти от превалирующей в квестах веб-безопасности;
приблизить задания к тем ситуациям, с которыми мы все часто сталкиваемся в профессиональной деятельности. Квест не должен быть «искусством ради искусства»;
охватить разные аспекты информационной безопасности: от защиты SCADA-систем до элементов стеганографии и социальной инженерии;
объединить задания общим захватывающим сюжетом, создать целостную интересную игру.
Посмотрим, что из этого получилось. Квест логически поделен на 5 разделов:
Безопасность веб-приложений (задания 1, 2). // всё-таки мы не смогли от неё уйти совсем!
Криптография (задание 3). // какая же безопасность без неё, родимой?
Безопасность SCADA-систем (задание 4). // одна из целей террористов по легенде…
Безопасность Windows (задания 5, 6). // бесконечная тема…
Поиск информации в контейнере (задания 7, 8). // найти иголку в стоге сена…
Раздел 1-ый (задания 1, 2). Web-сервер:
Для прохождения заданий этого раздела достаточно уметь выявлять и использовать уязвимости в веб-приложениях, в частности, SQL-injection. В качестве веб-сервера используется связка Mint + lampp, где находятся несколько php-скиптов для работы с БД и вывода содержимого таблиц. Некоторые из них содержат ошибки, например, уязвимый запрос к БД:
Также на сервере находится псевдо-админка, которая видна только одному пользователю и позволяет скачать образ с виртуальной машиной FreeBSD. Путь к админке можно получить из файла robots.txt, содержимое которого выглядит следующим образом:
Раздел 2-ой (задание 3). Расшифровка логов. FreeBSD + proxy:
Это задание требовало от участников знаний криптографических алгоритмов RC4 и RSA, особенностей выбора параметров шифрования и основ криптоанализа.
На виртуальной машине с FreeBSD хранятся логи, предварительно зашифрованные алгоритмом RC4 на ключе, который впоследствии зашифрован RSA. Значение открытой экспоненты для RSA выбрано минимальным (равным 3), чтобы сообщения расшифровались за пару секунд. Для получения разложения числа N (модуль ключа в алгоритме RSA) необходимо применить атаку методом бесключевого дешифрования сообщения: http://algolist.manual.ru/defence/attack/rsa.php#RSA1. Получив ключ симметричного шифра, необходимо расшифровать логи алгоритмом RC4, например, здесь: http://www.crypo.com/tools/eng_rc4.php.
В логах содержатся записи о двух адресах: reactor и hider.
Раздел 3-ий (задание 4). SCADA. Дефолтный пароль:
Выбрав в качестве скады WinCC, мы столкнулись с некоторыми проблемами, которые, правда, присущи не только этой системе. WinCC категорически не хотела принимать участие в NeoQUEST, в частности, совершенно отказывалась подхватывать обновления операционной системы, из-за чего остались открыты некоторые «уж очень очевидные» уязвимости. Некоторые участники эти уязвимости использовали и «ломали» нам скаду, но мы ожидали этого и были готовы к такому развитию событий.
На WinCC развернута схема (по легенде реактор ЛАЭС), при доступе к которой по веб-интерфейсу выдаётся необходимый флаг. На веб-доступ установлен пароль по умолчанию, который можно узнать в документации к WinCC.
Раздел 4-ый (задание 5, 6). Windows:
Задания этого раздела затрагивали аспекты безопасности пользовательских версий Windows; для их прохождения участникам необходимо знать, каким образом в Windows определяются права на доступ к файлам (в частности, что дают привилегии владельца), как повысить уровень доступа в операционной системе, используя, например, уязвимости повышения привилегий. Для раздачи образа виртуальных машин (800 метров!) было решено использовать p2p сеть – торренты, чтобы и игрокам было удобнее, и мы могли поддерживать нормальную скорость в любых условиях. В первой части нужно открыть файлы из папки, доступ к которой есть только у администраторов системы. Планировалось, что для этого необходимо запустить эксплойт повышения привилегий, но есть и другой способ (гораздо проще) – загрузиться с LiveCD или подключить виртуальный диск к другой виртуальной машине. Мы всячески пытались усложнить второй путь (с LiveCD) и натолкнуть участников на первый (с эксплойтом). Для этого отключили встроенную учётную запись администратора; создали «Опытного пользователя», для которого широко известен эксплойт повышения привилегий; сделали шифрованный TrueCrypt раздел, убрали его с глаз долой; сделали, чтобы он автоматически монтировался, только когда заходят под администратором; и даже исходник с эксплойтом (немного с ошибками, конечно, но это всё равно существенно упростило задание) кинули на рабочий стол.
После получения прав администратора для прохождения нужно ещё немного поиграться с установленными правами на файлы, чтобы получить доступ к контейнеру.
Раздел 5-ый (задание 7, 8). Разбор контейнера:
Для прохождения этих заданий нужно и чуть-чуть подизассемблировать, и слегка затронуть социальную инженерию, и просто логически порассуждать. Результирующий флаг выдаёт exe-файл, который спрятан в контейнере. На рисунке изображена схема контейнера:
Внутри директории на шифрованном разделе лежит PNG файл, на котором указан id пользователя с vk.com. На этой страничке находятся несколько подсказок. В конец PNG дописан архив, и если сменить расширение файла с PNG на RAR, то он откроется как архив. Данные заархивированы с паролем, алгоритм получения которого указан в статусе пользователя на страничке VK. Внутри архива лежит файл, выглядящий как WAV-файл (его можно даже послушать), но на самом деле, это заксоренный exe с заголовком от WAV (подсказка про это тоже в VK). Ключ для xor’а находится на PNG-картинке в замаскированном виде. Исполняемый файл на вход принимает ключ и выдаёт последний флаг.
Организационные трудности, которых можно было бы избежать
Для нашей команды это был первый опыт организации подобного мероприятия, и уже сейчас по результатам проделанной работы мы можем сказать, какие вещи надо было делать по-другому. Главными выводами, пожалуй, будут следующие:
Никаких web-хостингов (либо проверенные временем). Когда мы начинали разработку NeoQUEST-2012, то решили, что регистрационную форму надо повесить на каком-нибудь хостинге. Думали, что уж с простеньким сайтом проблем не должно быть. Тут-то мы и ошиблись. Основные накладки были связаны именно с этой проблемой. Хостинг не выдержал даже простой сайт-регистрацию. Сбои давал он постоянно, а при попытках оперативно разобраться в проблеме, мы получали бесконечную бюрократическую цепь созвонов и согласований с различными людьми со стороны хостера, отнюдь не желающими брать на себя какую-то дополнительную ответственность. «Только администратор может перезагрузить сервер, а будет он не раньше понедельника». Нет, компанию тоже можно понять, мы у них не единственные клиенты, проблемы они все же решают. Просто в ситуациях, когда результат нужен качественный и вовремя, лучше вспомнить древнее правило: «если хочешь что-то сделать хорошо, делай это сам».
Нужно очень аккуратно подходить к аренде серверов. Аренда серверов имеет свои плюсы и минусы. Наша площадка не позволяет получать круглосуточный физический доступ к серверам, поэтому мы решили арендовать сервер на стороне. Плюсы такого решения казались очевидными — мы не зависим от сложностей, которые могут внезапно возникнуть на основной площадке (отключение электричества на выходных, например) и нам не приходится круглосуточно дежурить около этого сервера самим. Ан нет, и тут нас ждали непредвиденные сюрпризы. Например, внезапное решение поставщика сервера перенастроить сеть, о котором нам так и не сообщили. Вывод – такой же, как в предыдущем пункте.
На протяжении всего регистрационного периода мы внимательно мониторили комментария и замечания, высказываемые и тут на Хабре, и на других площадках, и старались оперативно править косяки. Большое спасибо всем, кто сообщал нам о них.
Выводы и благодарности
Хак-квесты – это скорее своеобразный отдых и развлечение для посвящённых. И, не смотря на заявленные громкие цели (и зловещие тайные цели, которые приписывали нам некоторые комментаторы), для всей нашей команды NeoQUEST в первую очередь послужил возможностью создать интересную хакерскую игру. Мы надеемся, что во время прохождения квеста вы получили не меньше удовольствия, чем мы, когда его подготавливали. Как мы уже сказали, это был первый опыт такой работы для нашей компании: опыт необычный, полезный и захватывающий, и мы не собираемся на этом останавливаться.
От лица нашей компании мы от всей души благодарим:
Danila и Boson, посвятивших огромную часть своего времени созданию и поддержке проекта;
всех, кто участвовал в съёмках наших видео;
наших друзей и коллег на тематических сетевых ресурсах, которым оказалась не безразлична судьба квеста и которые (порой совершенно неожиданно для нас!) рассказывали о нашем квесте в Сети;
всех откликнувшихся тут, на Хабре, и на других ресурсах, и всем, кто писал нам об ошибках и просчетах в support – это помогало нам вовремя ловить крупные косяки (обвал регистрационной формы) и оперативно ретушировать мелкие (типа таймера обратного отсчета, не учитывавшего часовой пояс, или недопустимых символов в поле ввода города и т.д.)
и, конечно, всех участников и призеров за то, что вы заинтересовались NeoQUEST и не пожалели своего времени на решение наших загадок, за вашу настойчивость и активность.
Мы славно потрудились вместе и приглашаем всех к дальнейшему сотрудничеству!
Ещё раз огромное всем спасибо, и увидимся на следующем NeoQUEST!