Привет, наш дорогой читатель!
Хочу представиться: меня зовут Станислав (@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 года.
Тут вся наша запланированная подготовка была отброшена в «долгий ящик», вся собранная команда без единого дня подготовки разбежалась по своим делам.
Я (@clevergod) занимался подготовкой к OSCP экзамену, привлекал Тимура (@BadBlackHat) и еще нескольких ребят к решению ряда тасков на различных CTF-площадках, таких как HackTheBox, priviahub, TryHackMe.
Делали работу и проекты, уроки с детьми, наблюдали за ситуацией в стране и мире, а так же за коллапсами, которые возникали локально в Казахстане, Киргизии, России, Украине, Белоруссии. Но в один момент меня охватил жар – а что, если организаторы реально сдержат данное ими слово и кибер-битва пройдет в режиме “удалЁнки”, что на фоне всеобщей финансовой расхлябанности казалось несбыточным в текущем году.
И вот она, новость:
После этого анонса мы с Тимуром, как истинные аксакалы, за полтора месяца до мероприятия начали думать, а что собственно делать то?! Мы ведь не готовились вовсе, никаких сходок и игр в атак-дефенс не было. Так же хочу заметить, что на тот момент времени мы не знали регламента, состава команд, но начали потихоньку думать об участии.
Поучаствовали в конкурсе от организаторов 18 сентября, я выиграл какие-то «ништяки» и отказался от них ввиду того, что Казахстан наш любимый в очередной раз «запаковали наглухо» (Arkady Samsonov, личный привет тебе).
Пробежались по нашим прошлогодним заметкам и поняли, что самым неожиданным для нашей команды в прошлом году было очное знакомство друг с другом, как бы это дурно не звучало. Но парадокс ситуации ровно в том, что все, кто участвовал ранее до нас и побеждал — это достаточно крупные и именитые компании, штат участников в которых был огромен и они не просто знакомы между собой, они выполняли реальные проекты друг с другом, и вопросы инструментария, чек-листов и иные орг. моменты у них были реализованы на уровне ВНД и ДНК.
И вплоть до 7 ноября вся наша команда находились в напряжении ожидая вердикт от организаторов по составу команд. И да, за 5 дней до старта нас включили последними в список участников!
Но мы знаем каждого из участников команды нашего форума, их сильные и слабые стороны, и сыграны мы именно в режиме «удалЁнки», нужно лишь немного реструктурировать вектор подготовки и найти инструмент для аккумуляции данных, шлифануть навыки удержания захваченной точки (тут нам очень помог сервис King of the Hill (KoTH).
Со слезами на глазах вспоминаю 2019 год, когда мы реализовали 1-Day одного сервиса, с удивлением обнаружили, что нас там, мягко говоря, не ждали эти мастодонты, которые властвовали всеми офисами и делали все, чтобы наши бэк-коннекты были уничтожены, даже не успев отработать.
Почему “Бегите глупцы”? – сказывается опыт участия в прошлом году. Участвовали 15 команд, в результате чего вся ИС (инфраструктура) была довольно часто парализована, организаторы несколько раз “ревертили” ИС, и наша команда, ровно как и другие участники, находились в локальной сети — не в VPN-туннелях.В процессе организационных моментов после очередной новости о том, что один из наших топовых багхантеров Рамазан (r0hack) выбывает из гонки в рамках нашей команды и будет участвовать за «своих DeteAct», а также, при объявлении новости о новом регламенте в режиме удаленки — 30 красных, 5 синих и 6 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
• Александр Калединов
• Александр Ким
• Алексей Морозов
• Антон Шепеленко
• Батыржан Тютеев
• Богдан Лукин
• Дмитрий Комиссаренко
• Дмитрий Фёдоров
• Евгений Шадрин
• Кирилл Мурзин
• Кутлымурат Мамбетниязов
• Олег Юрченко
• Павел Никитин
• Сергей Песков
• Станислав Истягин
• Тимур Молдалиев