Найди флаг и не отдавай его. Как мы проводили RBKmoney CTF

    Привет! В этом посте мы расскажем о том, как провели первый в истории RBK.money CTF (capture the flag). Механика соревнования была примерно такой же, как и на привычных вам CTF, а вот результаты немного удивили. Впрочем, возможно, мы просто перестарались с задачами.


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



    Участвовали примерно 100 команд, в некоторых из которых было по 5-7 человек, а в других — по одному. Особенностью CTF стали две вещи. Первая — отчасти соревнование было посвящено Erlang. Штука не самая популярная, да. Вторая — несколько задач решить не осилил никто из участников, одно из заданий было очень типично для Erlang, ещё одно — на извлечение информации из аудиофайла. То ли люди перестали увлекаться стеганографией, то ли мы немного переборщили.


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


    Приложения и сервисы



    CTF мы готовили около месяца, хотелось не просто провести yet another соревнование, но и сделать что-то новое, опробовать свежие технологии или особенные подходы к их реализации — и нам интересно, и для участников возможность открыть для себя что-то занятное. Ряд задач был довольно ожидаем, например, у нас было несколько заданий, в которых фигурировали сервисы, написанные на Erlang. Ясное дело, их надо было взломать, чтобы достать флаг. А еще было приложение, код которого надо было исследовать, не имея под рукой самого кода. То есть у ребят не было исходников этого приложения, была только готовая скомпилированная версия, и им нужно было найти инструменты (или написать собственные, да), с помощью которых понять принцип работы приложения, а затем уже достать ключ. В общем, реверс-инжиниринг как он есть.


    Потом была задача из области стеганографии. Ну вы знаете, когда в картинку можно зашить какие-то данные, почти криптография, но при которой скрывается сам факт передачи информации. У нас вместо картинки был аудиофайл, в который и зашили флаг.


    Некоторые задания решались путем разведки по открытым источникам. Для хранения кода RBK.money используется Github, и именно там мы прятали ряд флагов или же каких-то файлов, которые были ключевыми для решения той или иной задачи. К примеру, один флаг мы спрятали в репозитории, в информации об одном из коммитеров. Для этого надо было сложить 2 и 2 и чуть-чуть покодить. Вот вроде бы всё очевидно, но эту задачу тоже мало кто решил. Народ кинулся вручную перебирать наших сотрудников на предмет совпадения рабочих почт и никнеймов на гитхабе, хотя на самом деле существуют весьма удобные инструменты, с помощью которых можно исследовать публичные репозитории разных организаций на предмет интересной информации.


    Инфраструктура и web



    Другие задания касались работы веба и инфраструктуры. Для веба мы написали два задания, одно на Python, второе (да-да) на Erlang. В случае с Python была банальная SQL-инъекция, при грамотной эксплуатации которой можно было бодренько выдернуть нужный флаг. А вот веб на Erlang осилил только один человек. В принципе, это отчасти обусловлено тем, что Erlang сложно считать не то что популярным языком, а даже распространенным. А для решения задачи надо было не только знать, что из себя представляет этот язык и его код, но и почитать документацию про модули и функции, поисследовать приложение. Поэтому в общей пропорции задач мы не стали давать более 45 процентов Erlang.


    Кстати, еще из специфики, которая вводила участников в замешательство. У нас в продуктовой среде вообще везде используется IPv6. Соответственно, ряд задач тоже был доступен только по IPv6, это был своего рода челлендж. С которым тоже не все справились.


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


    А в задаче про Harbor registry участники вообще начали вести деструктивную деятельность и стали мешать друг другу проходить этот этап. Надо было взломать Harbor registry для докер-образов, используя последние CVE, которые доступны публично. Иными словами, найти сам harbor registry, где он размещается, определить, какой он версии, и найти на него публичный эксплойт.


    Тот, кто проделал это первым (к слову, он пропатчил harbor быстрее наших же девопсов), решил остаться и единственным, начав мешать всем остальным. Пришлось принимать меры. Но соображалку оценили.


    Задачи



    Список задач можно посмотреть на портале нашем https://dashboard.hq.rbk.mn/ который мы давали ребятам на CTF. Сразу после публикации поста реанимируем там конкурсы, можете регаться, смотреть и решать задачки. Если возьметесь их решать, выберите, пожалуйста, подходящий ответ в опросе ниже. Мы хотим проводить еще CTF, но надо определиться, жестим мы с заданиями, или же стоит продолжать в том же духе.

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

    Как вам задачи?

    • 33,3%вы слишком замудрили, делайте попроще в следующий раз2
    • 50,0%нормальные задачи, это участники были слабоваты3
    • 0,0%я решил всё с первого раза0
    • 16,7%напишу подробнее в комментариях1
    RBK.money
    RBK.money – современная платежная платформа

    Комментарии 8

      0
      Идея с реализацией интересны, но "в общей пропорции задач мы не стали давать более 45 процентов Erlang" — это уже троллинг корпоративного уровня.
      Или толстый намёк «учите erlang, товарищи!»
      PS c другой стороны, это мог быть fantom, groovy или cow с не меньшим успехом.
        0

        Эрланг и корпораты? Ну такое конечно, спорное. Ну и что мне поделать, если у меня процессинг на нем пишется, не могу же я сказать: "господа вайтхэты, специально для вас переписали микросервисы с эрланга на дотнет".

          0
          Давно хотелось задать вопрос, почему именно Erlang, а не Elixir?
          И как относитесь к go? Может что пробовали на нем делать?
            0

            Исторически с предыдущих работ начинали на на нем. Потом долго хотели перейти на эликсир, но что-то никак, да и в целом эрланг всем устраивает.


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

              0

              А разработчика на erlang прям много?! Обычно не найти никого, только те, кто пробовал elixir, но с erlang у них обычно всё плохо...

                0

                Не прям много, но достаточно. Нам хватает.

                  0
                  Ради интереса посмотрел на соотношение вакансий / резюме на hh по go: много джунов, единицы middle/senior и общее количество вакансий примерно равно количеству резюме.
                  С Go всё так печально?
                    0

                    С гошечкой все так печально, по крайней мере в моей личной выборке(

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

      Самое читаемое