November 11, 2016

Почему региональный классический CTF уже мертв.

“Автосервис. Клиент смотрит счет и спрашивает у мастера:
- А что за пункт "Прокатило" - 10000 руб???
Мастер:
- Не прокатило? Вычеркиваем…”

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

В начале соревнований все шло относительно неплохо, настолько, насколько все могло быть неплохо в условиях разделения старого состава команды пополам и дополнения новичками. Конечно, соревнования сочетали контест сетевых администраторов-сумасшедших (благодаря оригинальному использованию и без того мерзкого Docker) и Backdoor CTF (большинство уязвимостей были рода if username==vasya then setuid(0)), что после почти безупречных финалов VolgaCTF здорово ударило по нашему рвению к победе, но, тем не менее, до конца соревнований нам удавалось держаться на втором месте.

До тех пор, пока за 10 минут до конца мы не обнаружили свою виртуальную машину зависшей наглухо. Все время соревнований мы сохраняли дампы сетевого трафика, и один раз у нас успело кончиться место. Мы решили, что в этот раз случилось то же самое и удалили их. Но, что характерно, это не помогло, а CPU#0 начинал быть stuck for %d s. По счастливой случайности, администратор нашей команды догадался сделать netstat и увидел целую стену SYN соединений. Что странно, не все они были от роутера, часть из них была из подсети некоей команды #3. Как оказалось, это была небезызвестная команда Life, находившаяся на 3 месте… на тот момент. Мы немедленно позвали администраторов, однако они просто посмотрели на это, развернулись и ушли. К тому времени мы уже опустились на 3 место.

Типичный трафик на SibirCTF


После конца соревнований, мы, конечно, стали добиваться апелляции и дисквалификации команды-нарушителя, и во время разбора полетов узнали интересные вещи:
  • Прежде всего, мы видели оригинальные IP потому что роутер не успевал их маскировать из-за большой нагрузки. Но это не атака на инфраструктуру, потому что, “А если я вам поставлю очень тормозные роутеры, что, всех будем дисквалифицировать?”. Доведение до абсурда это, конечно, хлеб демагога, но в этот раз он оказался сладким.
  • 250 висящих коннектов это ничего страшного. Даже если по ним не идут данные. Вдруг они только в эту секунду 250, а раньше и потом их по нулям было.
  • Атака по сервису, который никто не сумел раскопать это ок…
  • ...даже если “атакующая” команда еще и вдобавок отказывается предоставить атакующие скрипты…
  • ...как и просто информацию об используемой уязвимости.
  • Никакого логгирования трафика не идет от слова совсем. На RuCTF логгирование давно уже стало стандартной практикой.
  • И самая мякотка “Ну, мы еще подумаем, что делать с вашими командами, кто что нарушил.”. Ну да, действительно, нас закидали SYN-флудом, а потом еще и дисквалифицируют.

После этого нам пообещали разобраться и сообщить решение в течение пары дней. Тем вечером, по приезду в Новосибирск, нам удалось восстановить с диска виртуальной машины удаленные дампы трафика (во избежание фальсификаций данных нами, мы скопировали файлы виртуальной машины организаторам еще в Томске). Что характерно, этот файл было легко отличить от остальных по чертовски большому объему: Wireshark тоже иногда падал при обработке. Естественно, там SYN-флуд можно было разглядеть во всей красе и подробностях. Мы немедленно отправили дамп и инструкции по его получению организаторам.

Однако, видимо время в этом городе идет иначе чем у нас, поэтому ответ нам удалось получить только через месяц.
Решение было таковым: скорборд откатывается на 10 минут назад, и один участник команды Life дисквалифицирован.
Может показаться, что все в порядке, но есть пара нюансов:
  • Прежде всего, доказательства нам буквально удалось собрать только чудом.
    Заглючивший роутер, показавший IP, ведение нами дампов, удачное восстановление удаленных данных с диска. Если не было бы хоть чего-то из этого, нас скорее всего послушали бы столь же долго, как когда мы показывали netstat во время атаки.
  • Команда Life вообще не заморачивалась содействием следствию: каждый из тех, кого спрашивали об инциденте “говорил за себя” что это не он, а про остальных он ничего не знает. Сложно поверить что у команды на 3 месте была такая “слаженная” игра, что никто ничего друг о друге не знает.
  • Положение предусматривает единственную меру наказания: дисквалификацию команды. Если учесть, что команда успела провести DoS атаку, завалить сетевую инфраструктуру и вдобавок изменить этим скорборд, такое решение выглядит по меньшей мере странным.

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

Но скорее всего вы их не найдете.
И организаторы - последние, кто будет вам с этим помогать.

No comments:

Post a Comment