В декабре 2020 года, за неделю до нового года, компании Semrush и Mail.ru Group решили провести совместное обучающее мероприятие по информационной безопасности в формате CTF. 
Причём тут разработчики, тестировщики и devops, зачем и почему — расскажем в этой статье.

CTF соревнования уже не являются чем–то новым, а практика их проведения в IT–компаниях только растет. Сейчас будет довольно сложно найти человека, который не слышал о соревнованиях для хакеров.

Что такое CTF и почему сейчас про него слышно из каждого утюга

Capture The Flag (CTF) — это игра, в которой участники соревнуются, чтобы захватить флаг противников и защитить свой. Наверняка многие играли или слышали про такой режим в некогда популярных командных шутерах Quake и Team Fortress. В какой–то момент эта идея пришла в мир информационной безопасности. 

CTF в мире ИБ – это важный пункт в категории “обучение” и используется для прокачки навыков поиска и эксплуатации уязвимостей. Как правило, у компаний есть свои команды, выступающие как на мировых соревнованиях, так и на локальных: например, перед крупными конференциями, такими как Positive Hack Days, ZeroNights и OFFZONE обязательно проводятся CTF–соревнования. 

CTF может проходить в двух форматах. 
Первый – Attack-defense, где часть команд – это защитники, часть команд – атакующие.
Команды защитников получают свой набор серверов или сегмент сети, который нужно защищать от нападающей стороны. Нападающим, в свою очередь надо атаковать и добывать флаги. 
Второй – Task-based, где участник/команды просто решают задачи. 

В нашем случае формат CTF был Task–based, при котором командам необходимо решить задачи в разных категориях, например – Web, Infrastructure, Development, Crypto и другие.

Какие цели мы преследовали и где тут SDL

Security development lifecycle (SDL) – это набор различных практик безопасности на всех этапах жизненного цикла продукта. Эта методология существует уже довольно давно, изначально её анонсировала компания Microsoft, после чего методология получила широкое распространение. Узнать детали вы можете почитать на сайте Microsoft и на Хабре

Современный подход и постоянное выполнение практик SDL позволяет снизить вероятность возникновения уязвимостей и попадания их в прод, сформировать процессы ИБ, ускоряющие исправление уязвимостей и выработать культуру безопасной разработки. Всё это позволяет сделать продукт более защищенным.

Одной из практик SDL принято считать Security Awareness для сотрудников, в том числе обучение разработчиков аспектам информационной безопасности. 

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


выдержки из feedback:

Какие задания “заставили тебя по-новому взглянуть на свой код“?

— Мой код идеален!

— Cornichon — наслышан об уязвимости в pickle десериализации, но вот познакомился на практике

— Cloud Eats — аккуратнее буду с JWT и заголовками, буду смотреть за правами у сервисных аккаунтов, если буду их использовать

— Dumbank — рад, что я не dumb и таких ошибок не делаю

Какие из полученных знаний будут полезны тебе в работе?

— Cloud Eats (планирование инфраструктуры), Logger (познакомился с protobuf)
— Все: смогу быстрее принимать баланс между безопасностью и скоростью разработки, т.к. вижу пути атак

*Cornichon, Cloud Eats, Dumbank, Logger – названия заданий


Почему мероприятие – совместное?

В обеих компаниях применяются практики SDL и внутренний CTF проводится как минимум раз в год. Сложившаяся практика имеет положительный отклик внутри компаний, появляются CTF команды и растет интерес сотрудников к ИБ, ровно как и налаживается контакт с отделами ИБ. Поэтому мы решили разбавить привычный для команд формат и устроить небольшой нетворкинг с “товарищеским” матчем! 

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

Как готовились 

На подготовку к каждому CTF мы закладываем две недели работы пары инженеров Application Security. В этот раз задача была более сложная, так как участвовали команды из разных компаний, поэтому приготовить для нас задания и платформу мы пригласили третью сторону – сообщество SPbCTF

Первым этапом мы устроили мозговой штурм между организаторами и сообществом SPbCTF, вспомнили недавние уязвимости и разбили задачи на категории. 

Далее, спустя пару недель, получили описание заданий и начали любимый всеми процесс обсуждения правок с заказчиком :) 

Как результат, мы получили более 20–ти классных задач, покрывающих наш технологический стек. Среди этих задач также были задачи, которые будет интересно решать не только разработчикам.

Технологический стек заданий

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

Как готовить неправильных хакеров :)
Как готовить неправильных хакеров :)

Мы сделали упор на уязвимости в ходе разработки на языках программирования Golang, Python и Nodejs, а команды имели доступ к исходному коду некоторых заданий. 

Также мы не забыли про недостатки конфигурации облачных сервисов и типовых настроек apache & nginx, приводящие к серьезным последствиям. 
Другими словами, ключевики, которые мы использовали при планировании задач:

Как и прочие CTF соревнования, наше не обошлось без других, не менее интересных задач в области криптографии, обратной разработки (reverse) и недостатков процессов оплаты, использующих 3DS. 

Что мы получили

Соревнования длились с вечера пятницы до конца дня воскресенья. За это время зарегистрировались 40 команд, из которых 32 сдали хотя бы один флаг. 
12 команд набрали более 3000 баллов, необходимых для получения призов, а две смогли решить все задания! 
Здесь можно посмотреть разброс очков, набранных командами: 

Scoreboard
Scoreboard

В ходе соревнования CTF команды сдавали флаги каждый час! Это значит, что участники делили задачи внутри команды и эффективно использовали ночное время – достойно уважения. 

 Количество попыток сдать флаг за время соревнований
Количество попыток сдать флаг за время соревнований

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

18 Dec 2020 18:03:35

108:team08/AlexandrosDaSilva

covidinc3

18 Dec 2020 18:03:35

108:team08/darkstar_spb

lords1

Последний успешный флаг был сдан всего за семь минут до конца соревнований!

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

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

Одна из команд была быстрее
Одна из команд была быстрее

География участников получилась не менее занимательная – Санкт-Петербург, Москва, Нижний Новгород, Воронеж, Прага, Лимассол и другие.

Где ошиблись и какие уроки вынесли 

Мы учитывали опыт предыдущих соревнований, и в целом это помогло избежать серьезных проблем. Тем не менее, стоит отметить следующие моменты:

  • пандемия и отсутствие возможности быстро коммуницировать с коллегами вживую

  • близость к новому году и множество связанных с этим семейных дел сильно ограничило свободное время для участия некоторых сотрудников

  • проблемы с логистикой в предновогодние дни 

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

Призы

  • 1 место — годовая подписка на HackTheBox (каждому участнику команды)

  • 2 место — годовая подписка на PentesterLab (каждому участнику команды)

  • 3 место — годовая подписка на TryHackMe (каждому участнику команды)

В этот раз мы решили попробовать уйти от “материальных” призов и мотивировать коллег сражаться на общеизвестных “полях боев” :) 

Несмотря на необычность призы победителям понравились, хотя нашлись и те, кто не отказался бы и от чего-то материального. Мы обязательно учтем это в менее COVIDные времена. Приятным сюрпризом для нас стало то, что некоторые коллеги после соревнований сами решили приобрести себе подписку на Hack The Box и продолжить улучшать свои навыки! 

Интересные задания

Одним из самых интересных заданий было Cloud Eats, где участником предлагалось найти уязвимости в реализации приложения в облачной платформе Google Cloud. 

Задача была разбита на 4 этапа:

  • найти в приложении на Golang стандартную отладочную ручку /debug/pprof/ 

  • вытащить чувствительную информацию из дампа памяти кучи

  • используя GCP–токен из дампа получить информацию об аккаунте разработчика 

  • обойти Google Identity Application Proxy 

  • получить доступ к административной части веб приложения 

  • прочитать файлы из бакета 

  • достучаться до сервера во внутренней инфраструктуре и внимательно посмотреть на его сертификат :) 

Мы не сможем рассказать более подробно и красочно, чем наш коллега Дима Богер, его write–up можно найти здесь.  
Стоит отметить задание про депикселизацию на основе недавних новостей.  
Участникам необходимо было получить флаг из этой картинки:

https://ibb.co/NVwtxQ2
https://ibb.co/NVwtxQ2

С помощью https://github.com/beurtschipper/Depix/ вы можете попробовать решить это задание, однако имейте в виду, что для решения задачи только этого репозитория не достаточно. 

Смешные моменты

Во время соревнования мы отметили несколько забавных моментов в действиях команд.
Кто–то настойчиво требовал флаг по почте:

Другие пытались подобрать пароль от аккаунтов организаторов:

Или пытались добыть флаги, общаясь с живыми разработчиками вместо бота, которого нужно было взломать:

Выводы

В ходе соревнований мы собрали CTF–команды обеих компаний в один товарищеский матч. Более 100 коллег приняли участие в соревнованиях, и мы уверены, что каждый узнал что–то новое и получил представление как о характере задач, так и о формате мероприятия. Такая кооперация имеет преимущество – это возможность распределить нагрузку в организации мероприятия между ИБ–отделами разных компаний. 

Стоит упомянуть повышение мотивации и спортивный азарт, возникающие в таком взаимодействии. Желание сделать родную компанию как можно выше в рейтинге заметно сказывается на вовлечённости.

Качество таких мероприятий мы будем оценивать уже согласно внутренним метрикам, однако замечено, что мероприятие уже принесло свои плоды – коллеги закрепили свои знания на практике и теперь стали проявлять подлинный интерес к вопросам ИБ!