Этой зимой, а точнее — в один из дней между католическим Рождеством и Новым Годом — инженеры технической поддержки Veeam были заняты не совсем обычными задачами: они охотились за группой хакеров под названием «Veeamonymous».
О том, как ребята сами придумали и провели у себя на работе настоящий квест в реальности, с заданиями, «приближенными к боевым», рассказал Кирилл Стецко, Escalation Engineer.
— Зачем вы вообще это затеяли?
— Примерно так же, как люди придумали в свое время Linux – just for fun, для собственного удовольствия.
Нам хотелось движухи, и одновременно мы хотели сделать что-то полезное, что-то интересное. Плюс надо было дать некоторую эмоциональную разгрузку инженерам от их каждодневной работы.
— Кто это предложил? Чья была идея?
— Идея была нашего менеджера Кати Егоровой, а потом уже концепт и все дальнейшие идеи были рождены совместными усилиями. Изначально думали сделать хакатон. Но во время разработки концепта идея переросла в квест, все-таки инженер технической поддержки — это иной род деятельности, нежели программирование.
Итак, мы позвали друзей-товарищей-знакомых, разные люди нам помогали с концепцией – один человек с Т2 (вторая линия поддержки — прим.ред.), один человек с Т3, пара человек из команды SWAT (команда быстрого реагирования на особо срочные кейсы — прим.ред.). Собрались все вместе, сели и попытались придумать задания для нашего квеста.
— Было очень неожиданно про это все узнать, потому что, насколько я знаю, обычно квестовую механику прорабатывают спецы-сценаристы, то есть вы мало того что занимались такой сложной вещью, так еще и применительно к своей работе, к своему профессиональному полю деятельности.
— Да, мы хотели сделать не просто развлечение, а «прокачать» технические навыки инженеров. Одна из задач в нашем отделе – это обмен знаниями и обучение, а вот такой квест — это отличная возможность дать людям «потрогать» какие-то новые для них техники вживую.
— Как вы задания придумывали?
— Устроили мозговой штурм. У нас было понимание, что мы должны сделать некие технические испытания, причем такие, чтобы они были интересным и одновременно несли новые знания.
Например, мы подумали, что людям надо дать попробовать поснифать траффик, попользоваться hex-редакторами, что-то поделать для Linux, какие-то чуть более глубокие вещи, связанные с нашими продуктами (Veeam Backup & Replication и другие).
Также немаловажной частью был концепт. Мы решили отталкиваться от темы хакеров, anonymous access и атмосферы секретности. Символом сделали маску Гая Фокса, а название пришло само собой — Veeamonymous.
«В начале было слово»
Чтобы подогреть интерес, мы решили до начала мероприятия устроить PR-компанию в тематике квеста: развесили плакаты с анонсом по нашему офису. А через несколько дней втайне ото всех сами их разрисовали баллончиками и запустили «утку», мол, некие злоумышленники испортили плакаты, даже фотку с пруфом приложили….
— Так это вы сами делали, то есть команда организаторов?!
— Да, в пятницу, часов в 9, когда все уже ушли мы ходили и рисовали из баллонов букву «V» зеленого цвета.) Многие участники квеста так и не догадались, кто это сделал – люди подходили к нам и спрашивали, кто испортил плакаты? Кто-то очень серьезно подошел к этому вопросу и устроил целое расследование на эту тему.
Для квеста мы писали и аудио-файлы, «выдирали» звуки: например, когда инженер логинится в нашу [производственную CRM] систему, то там есть робот-автоответчик, который говорит всякие фразы, цифры… Вот мы из тех слов, которые у него записаны, составляли более-менее осмысленные фразы, ну, может, немножко кривые – например, у нас получилось «No friends to help you» в аудио-файле.
IP-адрес, например, мы представляли в двоичном коде, всё, опять же, с помощью этих цифр [произнесенных роботом], всякие пугающие звуки добавляли. Сами снимали видео: на видео у нас человек сидит в черном капюшоне и в маске Гая Фокса, но на самом деле там не один человек, а три, потому что двое стоят за ним и держат «фон» из одеяла:).
— Ну вы заморочились, прямо сказать.
— Да, мы загорелись. В общем, сначала придумали наши технические задания, а потом сочинили литературно-игровую канву на тему того, что же якобы произошло. По сценарию, участники охотились на группу хакеров под названием «Veeamonymous». Идея была еще и в том, что мы как бы «ломаем 4-ю стену», то есть переносим события в реальность – вот из баллончика рисовали, например.
С литературной обработкой текста нам помог один из носителей английского языка из нашего отдела.
— Погоди, а носитель языка зачем? Вы это еще и на английском языке все делали?!
— Да, мы же проводили для питерского и бухарестского офисов, поэтому все было на английском.
Для первого опыта мы пытались сделать, чтобы все просто сработало, поэтому сценарий был линейный и достаточно простой. Добавили побольше антуража: секретные тексты, шифры, картинки.
Еще мы использовали мемы: была куча картинок на темы расследований, НЛО, каких-то популярных страшилок – некоторые команды и на это отвлекались, пытались найти там какие-то скрытые послания, применить свои знания стеганографиии прочего… но, конечно, там ничего такого не было.
Про тернии
Однако в процессе подготовки мы столкнулись и с неожиданными для самих себя задачами.
Много бились над ними и решали всякие внезапно возникающие вопросы, а где-то за неделю до квеста вообще подумали, что всё пропало.
Наверное, стоит немного рассказать про техническую основу квеста.
Все делалось на нашей внутренней ESXi лабе. У нас было 6 команд, значит, надо было выделить 6 ресурсных пулов. Итак, для каждой команды мы развернули отдельный пул с необходимыми виртуальными машинами (одинаковые IP). Но так как все это находилось на серверах, которые лежат в одной сети, текущая конфигурация наших VLANов не позволяла изолировать машины в разных пулах. И, например, во время тестового прогона, мы получали такие ситуации, когда машина из одного пула коннектилась к машине из другого.
— Как смогли исправить ситуацию?
— Сначала долго думали, тестили всякие варианты с пермиссиями, отдельными vLAN-ами на машины. В итоге сделали так — каждая команда видит только Veeam Backup сервер, через который происходит вся дальнейшая работа, но не видит скрытый подплул, в котором находятся:
- несколько Windows машин
- Windows core сервер
- машина с Linux
- пара VTL (Virtual Tape Library)
Всем пулам назначена отдельная группа портов на vDS switch и свой Private VLAN. Такая двойная изоляция как раз нужна, чтобы полностью исключить возможность сетевого взаимодействия.
Про отважных
— Принять участие в квесте мог любой желающий? Как формировались команды?
— Это был наш первый опыт проведения такого мероприятия, и возможности нашей лаборатории были ограничены 6 командами.
Сначала мы, как я уже сказал, провели PR-компанию: используя плакаты и рассылку, сообщили, что будет проводиться квест. У нас даже были некие подсказки – на самих плакатах были зашифрованы фразы в двоичном коде. Таким образом мы заинтересовали людей, а люди уже сами между собой договаривались с друзьями, с приятелями, кооперировались. В итоге отозвалось больше желающих, чем у нас было пулов, поэтому пришлось проводить отбор: мы придумали несложное тестовое задание и разослали его всем, кто откликнулся. Это была логическая задачка, ее надо было решить на скорость.
В команде допускалось до 5 человек. Капитан там не требовался, идея была в кооперации, в общении между собой. Кто-то силён, допустим, в Linux, кто-то силен в тейпах (бэкапах на ленты), и каждый, видя задание, мог вложить свои усилия в общее решение. Все между собой общались, находили решение.
— А в какой момент это мероприятие стартовало? У вас был какой-то «час Х»?
— Да, у нас был строго назначенный день, мы его выбирали так, чтобы было меньше нагрузки в отделе. Естественно, заранее оповестили тим-лидов, что такие-то команды приглашаются к участию в квесте, и им нужно дать некоторое послабление [относительно загрузки] в этот день. По всему выходило, что это должен быть конец года, 28 декабря, пятница. Рассчитывали примерно 5 часов занять, но все команды справились быстрее.
— Все были в равных условиях, у всех были одни и те же задачки на основе реальных кейсов?
— Ну да, каждый из составителей брал из личного опыта какие-то истории. Про что-то мы знали, что такое может быть в реальности, и будет интересно, чтобы человек «пощупал» это, посмотрел, разобрался. Брали и какие-то вещи, более специфичные — например, восстановление данных с повреждённых лент. Кто-то с подсказками, но большинство команд справились самостоятельно.
Или надо было применить магию быстрых скриптов – например, у нас была история, что некая «логическая бомба» «разорвала» многотомный архив в рандомные папки по дереву, и надо было собрать данные. Можно это сделать вручную – по одному находить и копировать [файлы], а можно написать скрипт по маске.
В целом мы пытались придерживаться той точки зрения, что одну задачу можно решить разными способами. Например, если ты чуть более опытный или захочешь «заморочиться», то ты можешь ее решить быстрее, а есть прямой путь решения «в лоб» – но при этом ты потратишь на задачу больше времени. То есть почти у каждого задания было несколько вариантов решения, и было интересно, какие пути выберут команды. Так что нелинейность была именно в выборе варианта решения.
Кстати, самой трудной оказалась Linux-задача — только одна команда решила ее самостоятельно, без подсказок.
— А можно было брать подсказки? Как в настоящем квесте??
— Да, можно было брать, потому что мы понимали, что люди разные, и могли попасть в одну команду те, кому не хватает каких-то знаний, поэтому чтобы и прохождение не затягивать, и интерес соревновательный не пропал, мы решили, что будут подсказки. Для этого за каждой командой наблюдал человек из организаторов. Ну и мы следили, чтобы никто не читерил.
Про звёзды
— А были призы для победителей?
— Да, мы старались сделать максимально приятные призы как для всех участников, так и для победителей: победители получили дизайнерские толстовки с логотипом Veeam и фразой, зашифрованной в 16-ричном коде, черного цвета). Все участники получили по маске Гая Фокса и по фирменной сумке с логотипом и тем же кодом.
— То есть у вас всё как в реальном квесте было!
— Ну, мы хотели сделать крутую, взрослую вещь, и мне кажется, что у нас получилось.
— Так и есть! А какая реакция в итоге была у тех, кто участвовал в этом квесте? Цели-то вы добились?
— Да, многие потом подходили, говорили, что они явно увидели свои слабые места и захотели их подтянуть. Кто-то перестал бояться определенных технологий – например, дампить блоки с тейпов и пытаться там что-то выцепить… Кто-то понял, что ему надо подтянуть Linux, и так далее. Мы же постарались дать достаточно широкий круг задач, но не совсем тривиальных.
Команда победителей
«Кто хочет, тот добьётся!»
— От тех, кто готовил квест, это много усилий потребовало?
— Вообще да. Но это было связано, скорее всего, с тем, что у нас было никакого опыта подготовки таких квестов, такого рода инфраструктур. (Оговоримся, что это не реальная наша инфраструктура – она просто должна была выполнять какие-то игровые функции.)
Для нас это был очень интересный опыт. Я поначалу скептически отнесся, потому что идея мне показалась даже слишком крутой, подумал, что это очень сложно реализовать. Но начали делать, начали пахать, начали все загораться, и в итоге у нас получилось. И обошлось даже практически без накладок.
В целом мы потратили 3 месяца. По большей части мы придумывали концепт, обговаривали, что мы можем реализовать. В процессе, естественно, кое-что менялось, потому что мы понимали, что у нас для чего-то нет технической возможности, чтобы это сделать. На ходу приходилось что-то переделывать, но так, чтобы не сломалась вся канва, история и логика. Мы же пытались не просто дать список технических заданий, а чтобы это ложилось в историю, чтобы было связно и логично. Основная работа шла последний месяц, то есть 3-4 недели до дня Х.
— То есть это помимо своей основной деятельности вы выделяли время на подготовку?
— Этим мы занимались параллельно основной работе, да.
— Вас просят еще такое провести?
— Да, у нас много просьб повторить.
— А вы что?
— У нас есть новые идеи, новые концепты, мы хотим привлечь больше людей и растянуть это во времени – и процесс отбора, и сам процесс игры. В целом мы вдохновляемся проектом «Цикада», это можно погуглить – это очень крутая айтишная тема, там люди со всего мира объединяются, на реддите заводят ветки, на форумах, там и перевод шифров используют, и разгадывают загадки, и всякое такое.
— Идея была отличная, просто респект за идею и реализацию, потому что это реально дорогого стоит. Искренне желаю, чтобы у вас не пропало это воодушевление, чтобы все ваши новые проекты были также успешны. Спасибо!
— Да, а можно будет посмотреть на пример задачи, которую вы точно не будете переиспользовать?
— Я подозреваю, что мы ни одну не будем переиспользовать. Поэтому могу рассказать о ходе всего квеста.
Бонус-трекВ самом начале у игроков есть название виртуальной машины и credentials от vCenter. Залогинившись в него, они видят эту машину, но она не запускается. Тут надо догадаться, что что-то не так с .vmx файлом. Скачав его, они видят подсказку, необходимую для второго шага. По сути, там написано, что база, используемая Veeam Backup & Replication, зашифрована.
Убрав подсказку, закачав .vmx файл обратно и успешно включив машину, они видят, что на одном из дисков действительно лежит база, зашифрованная base64. Соответственно, задача — расшифровать её и получить полнофункциональный Veeam сервер.
Немного о виртуалке, на которой это всё происходит. Как мы помним, по сюжету главный герой квеста — личность довольно тёмная и занимается чем-то явно не слишком законным. Поэтому его рабочий компьютер должен иметь вполне себе хакерский вид, который предстояло создать нам, несмотря на то, что это Windows. Первым делом была добавлена масса бутафории вроде информации по крупным взломам, DDoS атакам и подобному. Затем установили всякого типичного софта и разложили везде разных дампов, файлов с хэшами и т.д. Всё как в кино. Среди прочего там были папки, именованные по принципу closed-case*** и open-case***
Чтобы пройти дальше, игрокам надо восстановить подсказки из файлов в бекапах.
Тут нужно сказать, что в начале игрокам давалось довольно мало информации, и большинство данных (вроде IP, логинов и паролей) они получают по ходу квеста, находя подсказки в бекапах или файлах, раскиданных на машинах. Изначально файлы бекапов лежат на Linux-репозитории, но сама папка на сервере замонтирована (mounted) c флагом noexec, поэтому отвечающий за восстановление файлов агент не может запуститься.
Починив репозиторий, участники получают доступ ко всему содержимому и наконец-то могут восстановить любую информацию. Осталось понять, какую именно. А для этого им как раз и надо изучить хранящиеся на этой машине файлы, определить, какие из них «битые» и что именно необходимо восстанавливать.
На этом этапе сценарий смещается в сторону от общих IT-знаний к специфичным функциям Veeam.
В данном конкретном примере (когда ты знаешь имя файла, но не знаешь где его искать) надо воспользоваться функцией поиска в Enterprise Manager, и так далее. В итоге после восстановления всей логической цепочки у игроков на руках оказывается ещё один логин/пароль и вывод nmap’a. Это приводит их на Windows Core сервер, причём по RDP (чтобы жизнь мёдом не казалась).
Главная фишка этого сервера: с помощью нехитрого скрипта и нескольких словарей там была сформирована абсолютно бессмысленная структура папок и файлов. А при логине выдаётся приветственное сообщение вида «Здесь взорвалась логическая бомба, поэтому подсказки для дальнейших шагов вам придётся собирать по кускам».
Следующая подсказка была разбита на многотомный архив (кусков 40-50) и рандомно разложена по этим папкам. Наш замысел был в том, что игроки должны проявить свои таланты в написании простеньких PowerShell скриптов, чтобы по известной маске собрать воедино многотомный архив и получить искомые данные. (Но получилось как в том анекдоте — часть испытуемых оказалась необычайно физически развита.)
В архиве лежало фото кассеты (с надписью «Last Supper — Best Moments»), что давало намёк на использование подключённой ленточной библиотеки, где была кассета со схожим названием. Вот только одна беда — она оказывалась неоперабельной настолько, что даже не каталогизировалась. Тут начиналась, вероятно, самая хардкорная часть квеста. Мы стёрли у кассеты заголовок, поэтому чтобы восстановить с неё данные, надо всего-то сдампить «сырые» (raw) блоки и просмотреть их в hex-редакторе на предмет нахождения маркеров начала файлов.
Находим маркер, смотрим оффсет, умножаем блок на его размер, прибавляем оффсет и с помощью внутренней тулы пытаемся восстановить файл с определённого блока. Если сделано всё правильно и математика сошлась, то на руках у игроков оказывается .wav файл.
В нём с помощью генератора голоса помимо прочего надиктован двоичный код, который раскрывается в ещё один IP.
Это, оказывается, новый виндовый сервер, где всё намекает на необходимость использования Wireshark, вот только его там нет. Основной фокус в том, что на этой машине установлено две системы — только диск со второй отключен через device manager в офлайн, и логическая цепочка приводит к необходимости перезагрузки. После чего оказывается, что по дефолту должна загружаться совсем другая система, где установлен Wireshark. А мы всё это время находились на вторичной ОС.
Тут уже ничего особо делать не надо, достаточно включить захват на единственном интерфейсе. При относительно внимательном рассмотрении дампа замечается явно левый пакет, рассылаемый со вспомогательной машины через равные промежутки времени, в котором лежит ссылка на youtube-ролик, где игроков просят позвонить на определённый номер. Первый позвонивший прослушает поздравление с первым местом, остальные — приглашение в HR (шутка)).
Кстати, у нас открыты
Источник: habr.com