Новости По следам iCTF'09

Progressor
, 08 December 2009

В ночь с пятницы 4 декабря на субботу прошел iCTF2009. В нем приняло участие рекордное количество команд - 56, из которых 54 проявили активность. Правила вновь кардинально поменялись. SiBears заняла 31 место.

А теперь подробнее.

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

В начале игры организаторы выложили презентацию со звуковым сопровождением, в которой объяснялись новые правила. Итак, есть около тысячи юзеров-ботов, которые посредством некоторого браузера посещают сервера в сети в определенном порядке. Браузеры самописные, у каждого по несколько версий. В сети размещены сайты команд, а также несколько серверов организаторов - банк, новостной сайт и поисковик. Юзер сначала заходит в свой аккаунт на сайте банка, потом заходит на новостной сайт, берет там случайное слово в новостях и ищет это слово поисковиком. Поисковик периодически индексирует сайты команд и, соответственно, по искомому слову выдает ссылки на сайты команд, где это слово встречается. Юзер выбирает одну из верхних ссылок и переходит по ней, попадая на сайт некоторой команды. На сайте его радостно встречают хакеры и нещадно эксплуатируют уязвимости в браузере бота, заставляя исполнять вредоносный код. Таким образом можно, например, получить куки от банковского аккаунта бота и потом залогиниться на сайте банка от имени пользователя. И перевести деньги на аккаунт своей команды.

Система рейтинга в игре на этот раз тоже изменилась. Было три типа очков - собственно очки, деньги и флаги. За деньги можно размещать на новостном сайте свои новости, повышая вероятность перехода ботов на сайт своей команды. Деньги можно снимать с аккаунтов несчастных ботов. Еще с ботов можно тырить флаги, правда, мы так и не стырили ни одного, поэтому ничего рассказать не могу. А очки давались за решение сторонних квестов. Флаги и очки можно было обменивать на деньги. Обратно - нельзя.

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

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

Браузеры были написаны на нескольких языках - си, перл, питон, эрланг, джава. Мы копали все, кроме эрланга. Но, где-то в середине игры организаторы сняли браузер на джаве - как выяснилось, настройки окружения не позволяли использовать заложенные уязвимости этого браузера. Потом организаторы начали прямо на канал в мирке постить исправленный исходник браузера на питоне - в итоге и этот браузер сняли. У нас остался си и перл (ну и эрланг). Как выяснилось после игры - организаторы и исходники сишного бинарика выложили (мы не видели). Кстати, использование в качестве официального источника информации немодерируемого канала в мирке с парой сотен участников - ОЧЕНЬ сомнительное решение. В общем, браузерами мы тоже не много занимались, в основном народ решал квесты. Илья разреверсил сишный браузер и написал эксплойт, правда, тот почему-то не работал. Мы со Стасом потыкали перловый браузер, сперли кучу кук от банковских аккаунтов, но подошла почему-то только одна сессия. Перевели деньги на свой аккаунт, потом я экспериментировал с переводами, все пытался -19 баксов перевести куда-нибудь. В итоге с нас сняли 19 баксов, а двум командам добавили). Я так и не понял, как так.

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

Ближе к концу игры, часа за два до конца мы решили почти все силы бросить на решение квестов - флаги мы не таскали, а про деньги думали, что они не влияют на место команды в общем зачете (судя по финальной таблице - мы ошибались). В общем, мозговой штурм на квесты принес нам еще немножко очков. Особенно ярким был момент, когда раскопали квест, в котором был дан большой набор чисел и нужно было ответить на вопрос, кто скрывается за этими данными. По виду было похоже на трехмерные координаты, Костя составил кучу двумерных срезов и вот наше коллективное больное воображение в семь часов утра, после бессонной напряженной ночи усмотрело в этих линиях Гомера Симпсона. Квест сдали за 3 минуты до конца. Финальный аккорд.

Заняли 31 место. Бывает:)

Команды, занявшие топовые места в таблице, делали упор на деньги и флаги. И эксплуатировали эрланговый браузер. А у нас нет спеца по эрлангу (а он нужен?:)).

Итак, подведу сугубо субъективный итог.

Минусы:

- Задержка старта на два часа, после этого исходники браузеров появились спустя еще час.

- Немодерируемый канал в мирке с несколькими сотнями участников в качестве источника официальной информации - плохая идея.

- Мощная система квестов вкупе с не очень понятной системой флагов ИМХО повернула многие команды от цтф к квестам.

- Из пяти браузеров к концу игры в строю остались три.

Плюсы:

- Оригинальная, изящная идея. Совершенно новый подход. Просто пальчики оближешь.

- Разнообразие языков программирования (перл, питон, джава, бинарик).

- Разнообразные многочисленные квесты.

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

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