Ежегодный форум ИБ – PHDays 2020 завершился победой Codeby часть1

Привет, наш дорогой читатель!

Хочу представиться: меня зовут Станислав (@clevergod), я являюсь вице-капитаном команды Codeby.net, и этой статьей мы начинаем цикл из 3х-4х материалов, посвящённых нашему участию в киберполигоне The Standoff.
По своей старой привычке, постараемся безэмоционально описать всю боль, слезы и радость прошедшего для нашей команды удивительного 123-часового марафона под названием The Standoff 2020.

В этой статье мы расскажем, почему грамотная подготовка — это больше половины успеха и почему так важно организовать взаимодействие ни разу не пентест-команды в рамках одного отдельно взятого проекта.
Попробуем передать по шагам атмосферу, но поверьте 5 суток безудержного веселья можно описывать в бесконечном цикле статей или даже снять экшн-сериал…

Кто такие Codeby — форум энтузиастов, неравнодушных ребят, проживающих в различных странах и регионах, которых объединяет желание к саморазвитию и безвозмездному обучению молодого поколения специалистов в различных областях деятельности как ИТ, так и информационной безопасности.

P.S. — Хочу сказать, что мы с кэпом(BadBlackHat) очень долго шли к этой победе, преодолевая один барьер за другим, отдавая все силы и ресурсы для того, чтобы наша общая мечта сбылась.
Внимание, статья содержит много скринов!

 

The Standoff — это уникальная киберсреда, созданная экспертами по ИТ и ИБ для безопасного развития IT-инфраструктуры, которая позволяет смоделировать цифрового двойника современного мегаполиса и продемонстрировать, как киберпреступники могут повлиять на его высокотехнологичную инфраструктуру. Виртуальный город The Standoff содержит те же аппаратные и программные компоненты со всеми имеющимися уязвимостями, что и настоящий город. В этом году здесь были воссозданы аэропорт, морской порт, железная дорога, деловой центр, банк, парк развлечений, городские системы (светофоры и уличное освещение), система телерадиовещания, нефтедобывающая станция, электроподстанция, газораспределительная станция, тепловая электростанция, ветроэлектрическая установка, нефтехимический завод.

На платформе The Standoff специалисты по киберзащите (blue teams — 6 команд) и нападающие (red teams — 29 команд) разыгрывают целый спектр реальных сценариев кибератак, имитируют полные циклы тестирования.

Оговорюсь, The Standoff, как концепция, вырос из «противостояния», которое несколько лет проводилось в рамках международного форума Positive Hack Days, в котором мы участвовали год назад (в 2019-м). И о том, как прошло наше знакомство с мероприятием впервые, почему мы с 5-го места опустились на 12-е и о планах подготовки — можете прочесть в этой статье.

 

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

  • украсть персональные данные пользователей или документы с компьютера топ-менеджера;
  • вывести все деньги со счетов клиентов банка;
  • нарушить багажную ленту в аэропорту;
  • отодвинуть трап в момент высадки пассажиров;
  • разлить нефть, остановить производство;
  • выключить светофоры;
  • устроить железнодорожную аварию;

и иные риски заложенные, а также не предусмотренные организаторами.

Помимо этих задач, так же хакерам была поставлена задача найти как можно больше уязвимостей за награду (программа bug bounty).

#УдалЁнка

Итак, в начале текущего, не побоюсь этого слова, “ковидного” года, мы попали в 15 отобранных команд и начали предпринимать попытки подготовки к мероприятию, учитывая все прошлогодние «косяки и шишки».

Организаторы поставили условия обязательного присутствия в команде некоего ментора (публичную личность, ранее имеющую опыт участия в мероприятии и не участвующую в этом году) иии… нам с кэпом больше в голову не пришло ничто иное, как пригласить нашего товарища Батыра, ныне успешного бизнесмена и технический директора Казахстанских компаний NitroTeam и Spectre, Батыржан Тютеев(@b4trjan) ответил нам положительно, и мы были счастливы принять его в нашу команду нашим ментором и экскурсоводом.

Но, Вы уже, наверное, слышали, что первоначальная дата мероприятия (11 марта) была перенесена на осень 2020 года.

Тут вся наша запланированная подготовка была отброшена в «долгий ящик», вся собранная команда без единого дня подготовки разбежалась по своим делам.
Я занимался подготовкой к OSCP экзамену, привлекал Тимура(@BadBlackHat) и еще нескольких ребят к решению ряда тасков на различных CTF-площадках, таких как HackTheBox, priviahub, TryHackMe.

Делали работу и проекты, уроки с детьми, наблюдали за ситуацией в стране и мире, а так же за коллапсами, которые возникали локально в Казахстане, Киргизии, России, Украине, Белоруссии. Но в один момент меня охватил жар – а что, если организаторы реально сдержат данное ими слово и кибер-битва пройдет в режиме “удалЁнки”, что на фоне всеобщей финансовой расхлябанности казалось несбыточным в текущем году.
И вот она, новость:

 

После этого анонса мы с Тимуром, как истинные аксакалы, за полтора месяца до мероприятия начали думать, а что собственно делать то?! Мы ведь не готовились вовсе, никаких сходок и игр в атак-дефенс не было. Так же хочу заметить, что на тот момент времени мы не знали регламента, состава команд, но начали потихоньку думать об участии.

Поучаствовали в конкурсе от организаторов 18 сентября, я выиграл какие-то «ништяки» и отказался от них ввиду того, что Казахстан наш любимый в очередной раз «запаковали наглухо» (Arkady Samsonov, личный привет тебе).

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

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

Но мы знаем каждого из участников команды нашего форума, их сильные и слабые стороны, и сыграны мы именно в режиме «удалЁнки», нужно лишь немного реструктурировать вектор подготовки и найти инструмент для аккумуляции данных, шлифануть навыки удержания захваченной точки (тут нам очень помог сервис King of the Hill (KoTH).

Со слезами на глазах вспоминаю 2019 год, когда мы реализовали 1-Day одного сервиса, с удивлением обнаружили, что нас там, мягко говоря, не ждали эти мастодонты, которые властвовали всеми офисами и делали все, чтобы наши бэк-коннекты были уничтожены, даже не успев отработать.

В процессе организационных моментов после очередной новости о том, что один из наших топовых багхантеров Рамазан (r0hack) выбывает из гонки в рамках нашей команды и будет участвовать за «своих DeteAct», а также, при объявлении новости о новом регламенте в режиме удаленки — 30 красных, 5 синих и 6 VPN-коннектов на атакующую команду, часть ребят из прошлого состава тоже оказались за бортом команды по ряду причин.

Почему “Бегите глупцы”? – сказывается опыт участия в прошлом году. Участвовали 15 команд, в результате чего вся ИС (инфраструктура) была довольно часто парализована, организаторы несколько раз “ревертили” ИС, и наша команда, ровно как и другие участники, находились в локальной сети — не в VPN-туннелях.

Мы и вправду начали переживать за техническую составляющую организаторов, ведь, во-первых, узловая нагрузка на VPN-сервера. во-вторых, простые и банальные сканы сети могут привести к аккумуляции огромного трафика, не говорят уже об автоматизированных скриптах на верхнеуровневых моделях OSI.

Мы поняли, что нужно не просто найти замену, но и укрепить нашу разбросанную по всему СНГ команду. Выделить из всего этого региональную и часовую пользу, привлечь очень нужных узко-занятых и невероятно талантливых ребят. В результате были собраны люди от Европы до Владивостока (привет Доброфлот): Олег(@undefi) с Костаная, Александр(@tgrm_official), Кирилл(@K1R_0Byte) и Мурат(@manfromkz) с Алматы, Magick из Барселоны, Богдан (Mister_Bert0ni) из Украины, постояльцы команды из России и другие. Каждому в команде была отведена отдельная роль. Мы с Тимуром приняли решение разбить людей на 2 команды с 2-мя отдельными суб-капитанами и ветками для общения (и даже заместителями капитанов на всякий случай), отдельными голосовыми каналами и различными задачами, чтобы никто никому не мешал. Параллельно наполняли и аккумулировали данные четко и без помех.

В итоге мы немного перенасытили наш дискорд канал информацией. Как бы ни старались структурировать — все равно получился сумбур, поэтому решили создать отдельный канал, а старым пользовались как личной википедией. “Почему именно Discord?” — спросите Вы, да потому, что мы с рядом ребят пользуемся им достаточно давно, и ни разу не геймеры. Это единственная площадка, где можно писать тексты, кидать скрины, говорить голосом и стримить свой экран без каких-либо потерь в качестве (ни в одной букве моих текстов нет проплаченной рекламы, только полезные заметки).

Поиграли несколько раз, используя этот чат в дискорде на нескольких площадках, собираясь единовременно в лучшем случае по 2-6 человек. Вот как он выглядел — наш дискорд:

#Боль первая:

За 2 дня до начала была развернута большая, для нас лично, ИС на «забугорных дедиках» и «казахских серверах» (Александр А., спасибо за железо):

  • У нас были сканеры уязвимостей «всех сортов и марок» (намеренно не упоминаю вендоров);
  • Различные сервисы и службы для коммуникации;
  • Фишинг-сервисы с отдельно купленными заранее доменными именами, созвучными с оф. сайтом конференции и организаторов;
  • Белые IP-адреса (Сергей Д., спасибо за интернет);
  • Различные самописные скрипты и инъекции
  • Брут и прокси сервера и др.

Почти за все это отвечал в техническом плане 1 человек — Кирилл, за что ему лично низкий поклон.

Самое смешное, что за пару часов до начала мы запутались, настраивая VLAN-ы, и уронили Ethernet интерфейс с выходом в интернет на одном из серверов с ESXi, а сам сервер на тот момент уже стоял в Костанайском ЦОДЕ.

И как Вы, наверное, догадываетесь — Костанайскую область и сам г. Костанай изолировали, в очередной раз, оградив подступы и подъезды города кордонами. Наш Олег, пробрался-таки к серверу спустя 6 часов и «передернул»… ну да ладно, это про сетевой интерфейс сказано, пошляки :)

Также хотел бы отметить, что у нас был «козырь в рукаве» — это новая веха в тестировании на проникновение, платформа автоматизации пентеста PenTera от Pcysys(Citum и Axxtel привет), на которую мы очень сильно надеялись до начала марафона. В 98% сетей в L2, даже сильно заVLan’енных, она показывала невероятные результаты!

#Боль вторая:
За ночь до начала соревнований организаторы присылают нам данные VPN-туннеля и это, господа, L2tp + IPSEC. Да, представьте себе в 21 веке…

Мы были в ужасе, почему-то рассчитывая, что к нам прилетят конфиги OpenVPN — видимо мы заигрались на современных CTF-площадках.

Ну так вот, боль заключается в том, что мы находились в часовых поясах от -7 GMT до +10 GMT, вдобавок, уже неделю как развернули PFSence и настроили маршрутизацию, прописали правила для бек-коннектов (Бинд и реверс шеллы), создали, настроили и раздали под всех персональные конфиги, под которые были написаны правила, проверенные на CTF-площадках для каждого. И представьте себе, из-за отсутствия поддержки устаревших протоколов PFSence и OpenSence, мы за ночь должны были придумать аналог, а их на виртуальной среде не так уж много (к примеру, — MikrotikOS, который, к слову, не совсем бесплатный), переписать все рулы, проверить хоть как-то и раздать всем.

#Начало 12.11.2020
Начали мы довольно шустро, без склок и эмоций, без паники и излишних рассуждений. Каждый в команде понимал свою роль, шли четко и позиционно. Пришлось, конечно, вначале попотеть изрядно, когда увидели целую череду принятых очей соперников на дашборде.

Пытались акцентировать внимание на действительно большой инфраструктуре, находили векторы, осуществляли RCE и старались не сдавать их, а всё же осуществить максимальный закреп. Но без ошибок не обошлось…

Вошли в 120 подсеть, используя «любимые» пароли организаторов и RDG от Microsoft, (к слову это был тот самый «хваленый» Банк), и на расслабоне допустили роковую ошибку — запустили Mimikatz, за что были немедленно выставлены за пределы подсети.

Большую часть проблем в первые 2-3 суток для нас лично представили именно SOC и защитники, которым нужно отдать должное и похвалить, но и без нареканий некоторых «синих» не обошлось. К примеру, самый веселый и озорной хост, с которым бились не только мы, но и другие команды в 80 подсети (BBG.GQS офис 4), окрестили в «групповой». Ниже поясню почему.

Вот мы видим дыру:

Вот он код:

Код правят на лету:

И мы не можем литься, как раньше, Attack Detect! ишь ты:

Спустя огромное количество времени и использованных умений обхода, находим другую уязвимость, получаем рута:

И тут же отлуп… И так продолжалось достаточно долго. У нас на этот хост даже был отдельно выделенный человек-мастодонт, который играл в «короля горы» (об этом термине Вы поймете в продолжении статьи или взглянув на изображение ниже) в течении почти 2 суток, отвлекаясь на другие, не менее интересные вектора. В итоге в капитанском чате кто-то скинул такой вот мем, который не просто повеселил нас, но и придал сил и наградил всю команду зарядом положительных эмоций, которых так не хватало, спасибо тебе автор изображения:

Также были 247 хост в 40 подсети и 135 хост в 20 подсети — во всех случаях в первые двое суток все успешно проэксплуатированные точки входа и привески были запатчены, причем на одной из машин было достаточно четко видно, что привеска до рута не получить, но код правили с диким шорохом, и это точно были защитники.

Знаете, в такой дерганной и мелочной ситуации в начале игры, когда позиции меняются, каждый старается бежать вперед паровоза и играть в позиционные гонки, кто-то из соперников дико чудит — мы начали размениваться частью нажитых очей, проверяя, что все-таки будет с отданными RCE, LFI — их закроют или оставят. Нам необходимо было реально понять, сдавать пустые вектора или держать все позиции до победного.

Поясняю, было приличное количество точек входа, за которыми дальше попросту не было ничего, и мы их называли «пустышки».

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

Ребята, она была огромна, в ней реально можно было заблудиться. Давайте немного расскажу: первичный скан всех 6-ти подсетей содержал как минимум 10 машин внутри каждой, итого уже более 60-ти хостов. Внутри первого взятого вектора была еще целая офисная сеть, состоящая из леса доменов, первичных, вторичных и read-only контроллеров, различных wsus, db, backup, fileserver, exchange, rdg, sharepoint и других серверов, за которыми находились пользовательские ПК и связующие сервисы, но обо всем об этом поговорим во второй части, которую подготовим уже совсем скоро!

В первый день мы чувствовали, что весь наш запал на победу, азарт и стремление только усиливаются. Покажу, как выглядел внутренний портал 8 часов с момента старта и мы первые! – осталось каких-то 116 часов и 16 минут до конца марафона…

Для тех, кому чтиво не по душе — оставлю ниже сразу результат марафона. Кому всё же интересно продолжение — оно скоро появится. Во второй части рассказа будут и технические подробности, и новые эмоциональные всплески с реализацией бизнес рисков… а пока, посмотрите разбор от организаторов По следам The Standoff: расследуем успешные атаки на город

В заключении хочется отметить всех, кто так или иначе участвовал в марафоне и подготовке к ней, предоставлял оборудование и серверные мощности и совсем не важно, на минуту заходили или были с нами все 123 часа без сна, спасибо Вам ребята:
Joan Agusti Martinez Carbonell
Александр Калединов
Александр Ким
Алексей Морозов
Антон Шепеленко
Батыржан Тютеев
Богдан Лукин
Дмитрий Комиссаренко
Дмитрий Фёдоров
Евгений Шадрин
Кирилл Мурзин
Кутлымурат Мамбетниязов
Олег Юрченко
Паша «Кролик»
Сергей Песков
Станислав Истягин
Тимур Молдалиев