Спустя год, наша команда ХакерДом УрГУ собирается вновь встретиться со сборной командой г.Челябинск. Эта игра обещает быть очень интересной, ведь общий счет между нашими командами 1:1. Очень хотелось пригласить на эти игры УрГУПС и другие университеты и институты, но с их стороны пока нет никакой реакции. Аууу!!! Студенты, вы где? Поэтому пока, как и в прошлом году, заявлено 2-е команды. Соревнования пройдут в субботу, 24 ноября в здании УрГУ.
В игре проверяются способности специалистов защитить сложную незнакомую систему с сохранением необходимой функциональности. Задача, с которой сталкиваются участники, сходна с реальной работой консультанта по информационной безопасности в новой организации. Необходимость защищать свой сервер и, в то же время, исследовать, атаковать и размещать свои флаги на чужих серверах делает соревнование более динамичным и зрелищным.
Команды получают идентичные образы. В ходе игры жюри будет размещать на серверах команд некоторую информацию (флаги) и проверять их доступность. Задачей команд – обнаружить как можно большее количество флагов противника, при этом не давая обнаружить свои. За найденные флаги команда получает очки за нападение, за утерянные – ничего. За поддержание сервисов в рабочем и исправном состоянии команда получает очки за защиту, соответственно, за нерабочий сервис – ничего. Команда победитель определяется путем подсчета баллов по окончанию игры, победителем считается та команда, которая будет иметь большее количество баллов. Но, просьба не относиться к этим правилам очень строго. Будьте готовы ко всему!
Невозможно привести полный список правил, которые применяются на CTF. Выбор способа атаки или защиты полностью ложится на игроков команды. Но, принимая решение, помните, что цель игры не выявить, кто из нас 31337, а кто l4m3r, а обучиться технике атаки и защиты системы в настоящей жизни. Не нацеливайтесь на взлом системы подсчета очков, вместо это этого сконцентрируйтесь на разработке и реализации эффективной системы защиты и техниках атаки.
Ниже представлен небольшой список общих правил.

1. Каждой команде выделяется сеть класса С. Например, для команды 1 это будет сеть 10.0.1.0/24, а для команды 2 – 10.0.2.0/24.
2. Каждая команда обладает собственным маршрутизатором, который необходимо настроить с вышеуказанной схемой. IP адрес внетреннего интерфейса должен быть 10.0.х.1, где х – номер команды.
3. Игровой сервер должен иметь IP адрес 10.0.х.2, где х – номер команды. Именно по этому адресу жюри будет производить опрос игрового сервера.
4. Оставшиеся IP адреса (т.е. 3–254) игроки используют по своему желанию.
5. Трафик между командами будет проходить через NAT маршрутизатор, таким образом, весь входящий трафик будет от одного IP адреса. Например, при обращении из сегмента команды №1 к серверу команды №2, пакет пройдет NAT маршрутизатор и на выходе будет иметь IP адрес 172.16.0.5.
6. Количество используемых компьютеров в сегменте команды неограничено. Это могут быть локальные или удаленные компьютеры. Для приезжающей команды мы постараемся достать необходимое им количеством компьютеров (в разумных масштабах :).
| Команда ХакерДом (УрГУ) | Сборная команда г.Челябинск (ЧелГУ, ЮУрГУ) |
| 1. Бересенёв Александр (студент УрГУ) | 1. Вышегородцев Марат (студент ЮУрГУ) |
| 2. Богданов Кирилл (студент УрГУ) | 2. Игнатов Сергей (студент ЮУрГУ) |
| 3. Журавлев Николай (магистрант УрГУ) (к) | 3. Долгушев Василий (студент ЧелГУ) |
| 4. Зиненко Артем (студент УрГУ) | 4. Карманов Максим (аспирант ЮУрГУ) (к) |
| 5. Судариков Роман (студент УрГУ) | 5. Сапожников Антон (аспирант ЮУрГУ) |
| 6. Шилиманов Кирилл (студент УрГУ) | 6. Шледевиц Павел (студент ЧелГУ) |
| 7. Щелканов Евгений (студент УрГУ) | 7. Юнусов Тимур (студент ЧелГУ) |
Символом (к) помечены капитаны команд.
| Время | Событие |
| Пятница (23.11.07) в 17:00 | доклад от Вышегородцева Марата на тему «Сравнительный анализ ЯП PHP и PERL как средств создания web-приложений». |
| Суббота (24.11.07) в 12:00 | подготовка компьютеров и оборудование рабочего места. |
| Суббота (24.11.07) в 15:00 | начало игры. |
| Суббота (24.11.07) в 16:00 | сегменты команд соединяются. |
| Суббота (24.11.07) в 22:00 | конец соревнований, подсчет очков и награждение победителей. |
| Воскресенье (25.11.07) в 12:00 | разбор полетов. |
Мы живем в мире, где соревнования являются одним из условий существования, мы соревнуемся за работу и достойную зарплату, за поступление в хороший ВУЗ и за проживание в хорошем месте, парни соревнуются за девушек, а девушки за парней, соревнуются большие компании и маленькие фирмы за секторы на рынках сбыта и услуг. Запустили первый спутник и создали первую компьютерную сеть СССР и США благодаря соревнованию между собой. Соревнуются все, соревнования – это часть нашей жизни.
Во многих областях умений проводятся различного рода соревнования. Например, в спорте (футбол, баскетбол, бег …), в учебе (олимпиады), в программировании, администрировании и т.д., перечислять можно очень долго. Трудно назвать род занятий, за исключением противозаконных, в котором не было бы никаких видов соревнований. Хотя, если задуматься, наверно и у нарушителей общественного покоя есть свои чемпионаты. Соревнования помогают познакомиться с другими людьми, занимающихся тем же делом, показать свой уровень, посмотреть на других участников и, конечно же, – обменятся опытом. Пожалуй, это одна из главных причин их проведения. Соревнования позволяют организовать вокруг определенного рода деятельности сообщество, у которого одна цель – стать лучше.
Мы же играем в CTF (Capture The Flag) – игра, в которой проверяются навыки программирования и администрирования систем, умения обнаружить брешь в безопасности системы и её быстрого устранения, решать нестандартные задачи и быть готовым ко всему. Другими словами, CTF – это соревнования хакеров.
Прошел ровно год после нашей последней игры с челябинцами. В тот раз мы играли в г.Челябинске, где одержали победу и сравняли счет между нашими командами (1:1). А потому, эта игра обещала быть очень интересной. И даже, если бы мы тогда не сравняли счет, нынешняя игра с челябинской командой Smoked Chicken, я думаю, все равно сохранила бы интерес. На протяжении года нам удалось только один раз встретиться с командой Smoked Chicken, это были международные соревнования CIPHER 3. Где мы заняли 12 место, а челябинцы были лишь 20-е. Но, невзирая на разницу в местах, я думаю, что личный счет между нашими командами по-прежнему 1:1. Одно дело соревнования, где выступает 25 команд и совсем другое – личная встреча.
По итогам игры, которая прошла 24 ноября 2007 в здании УрГУ, победу одержала команда Smoked Chicken, с чем я их поздравляю. Ребята, вы продемонстрировали действительно хорошую игру! И, хотя команда ХакерДом проиграла, их игрой я очень доволен.
Ну вот, для и тех, кому интересен только результат и общий счет между командами, я уже привел все данные. Теперь же я немного поделюсь нашим опытом в подготовке и проведении CTF.
Примерно год назад, в начале декабря (сразу после игры с Smoked Chicken), с подачи Сергея Борисова мы впервые приняли участие в международных соревнованиях CTF, которые проводил Университет Санта-Барбара, Калифорния. По итогам игры мы заняли 19 место, но все были очень довольны, не столько местом, сколько самой игрой и тем опытом, который мы получили. До этой игры мы не знали, как проводятся международные соревнования, как организуется игровой сервер, какие приложения пишутся, как размещаются флаги и как жюри проверяет работоспособность сервисов. До этого, мы все придумывали сами с нуля. И это было здорово! После международной игры мы в корне поменяли принцип организации тренировок и их подготовки. Если раньше тренировку готовили 2 человека, и на подготовленном образе играла одна команда, то после игры мы разбились на три команды. Одна команда готовит, две другие – играют. И чередуемся. Это позволило сделать тренировку более динамичной и интересной. В первой и ответной игре с Smoked Chicken за всю игру устанавливалось не более 5–6 флагов, а после международной игры мы на тренировках стали устанавливать до 1000 флагов. Увеличение количества флагов интересно тем, что обнаружив и устранив уязвимость необходимо написать эксплоит для сбора флагов с серверов других команд. Что позволяет проверить, на сколько хорошо команды умеют программировать. А ещё мы поняли, что флагов на игре может и не быть вообще. Вот так вот! На международных соревнованиях мы осознали, что игра не ограничивается взломом серверов противника. В процессе игры командам предлагается решать различного рода задачи, т.к называемые квесты. Например, это может быть взлом неизвестного шифра или хеша, обнаружение стеганографии в сообщениях, восстановление файлов, разбор и написание программ на экзотических языках или даже на перфокартах, задача на логику и многое другое. Первая игра на таком уровне была для нас большим прорывом. Мы совершенно по-другому стали понимать CTF. Но наш взгляд не изменился, он расширился. Именно тогда я понял, что описать словами, что такое CTF – невозможно. Да и нужно ли это? Если вы хотите узнать, что такое CTF – просто играйте.
Летом 2007г. мы начали договариваться с челябинцами о проведении очередной игры. Это была 3-я встреча, и уже стало понятно, что соревнованиям необходимо придумать название. За этим дело не стало – UralCTF пришлось всем по вкусу. Таким образом, мы начали подготовку соревнований UralCTF3. Планы как всегда, были очень богатые. На этот раз мы планировали, что к нам присоединиться хотя бы ещё один ВУЗ. Делали попытки подключить УрГУПС, но не получилось. Времени на подготовку им было слишком мало. А остальные так и не собрались. В итоге осталось то, что было изначально – ХакерДом УрГУ против Smoked Chicken.
В начале осени началась подготовка UralCTF3. На это время мы успели принять участие в 3-х международных играх. Вторая игры проходила в конце апреля, организаторам выступал Университет Южной Флориды, США, где мы заняли 7-е место из 20 команд. А в середине лета приняли участие в CIPHER, проводимые Ахенским Техническим Университетом, Германия. На них мы показали 12-й результат из 26 команд. Поэтому, при подготовке Ural CTF 3 мы решили использовать весь наш опыт, полученный на международных соревнованиях.
В самом начале мы разделились на тех кто играет и на тех, кто готовит игру. К счастью, это не вызвало особых проблем. У нас в команде как раз игровых 2-а состава. В команду жюри ушли все те, кто играл в прошлый раз с челябинцами, а остальные начали усиленную подготовку к игре. Итого, в команде жюри оказалось 6-ть человек + Максим Смолин от челябинцев. Как показывает практика, очень удобно, когда в команде жюри собираются представители от всех команд, которые принимают участие в игре. Все от этого только выигрывают. С таким составом жюри, я думал, что мы сможем сделать все!
Основной идеей игры мы решили сделать работу провайдера. Командам предлагалось побыть немного в роли провайдера, Голландского провайдера. Который предоставляет услуги хостинга. Только не спрашивайте, почему именно Голландский провайдер :). Командам необходимо было поддерживать хостинг в рабочем состоянии и заботиться о безопасности своих клиентов. Да да, именно клиентов. Ведь безопасность, в конечном счете, должна быть направлена на людей, т.е. на пользователей.
В итоге на игру мы придумали и написали 6-ть сервисов. Для того, что бы картина работы хостинга была более правдоподобной, мы сделали так, что в процессе игры количество пользователей постоянно росло. Другими словами, жюри постоянно создавало пользователей.
Сама игра была организованна так. Команды получили идентичные образы серверов, на которых работает хостинг. Раз в 2 минуты жюри генерировало новых пользователей на хостинге и каждому приписывались некоторые сервисы, которыми он будет пользоваться. Если сервис работает, пользователь платит деньги провайдеру, если сервис недоступен – провайдер платит неустойку. В зависимости от работы провайдера у него изменялся уровень репутации, что влияет на количество генерируемых пользователей. Неработающие сервисы заставляют провайдера платить неустойки клиентам и при этом у него падает репутация. А когда сервисы работают – наоборот. Пользователь доволен и рассказывает всем об этом провайдере. Репутация растет – пользователей генерируется больше и количество денег увеличивается. Помимо поддержания сервисов в рабочем состоянии можно зарабатывать деньги путем кражи личных данных у пользователей и последующей их перепродаже на черном рынке. Чем больше репутация, тем больше пользователей, чем больше пользователей тем больше денег, но, тем больше личной информации может быть украдено и продано на черном рынке. Победителей выявляли по количеству денежных средств на счетах команд по окончанию игры. Конечно, во время игры команды могли зарабатывать дополнительные очки путем написания уведомлений (т.н. advisory), в которых они могут описать найденные уязвимости. Так что, все должно было быть отлично!
Подготовка к игре шла отлично. В день игры все шло по графику. В 12.00 команды встретились и начали настраиваться. Примерно к 15.30 обе команды были в полной боевой готовности. Проведя короткий брифинг команды разошлись по своим кабинетам. Как только началась игра жюри подготовило небольшой сюприз. Помимо игровых команд, ХакерДом УрГУ и Smoked Chicken в игре участвовали ещё 2 команды (Estonia и Hohland), за которые играли сами жюри. Что бы не скучно было нашим участникам :).
Очень хорошо начали Smoked Chicken, мне очень понравилось, как они начали игру. Получив игровой образ они скопировали его остальным участникам и каждый, на сколько я понял, запустил свою копию сервера и разбирался со своим сервисом. А за главным сервером следил админ. Это было очень удобно. Мы же поступали по другому, мы поднимали ещё одну копию сервера, на котором все отлаживаются. Но в сравнении со схемой челябинцев, наша явно проигрывала. Хотя бы в том, что если кому-нибудь понадобиться перезагрузить сервер все будут отдыхать. А так, когда ты единолично владеешь образом – нет никаких проблем.
Через час включили сеть, и тут оказалось, что на главном маршрутизаторе жюри всплыли баги, в следствии чего команда ХакерДом оказалась изолированной. Они не могли выйти в интернет и не видели другие команды. По началу мы начали решать эти проблемы аккуратно, но, когда по истечению примерно 40 мин. ситуация не изменилась мы остановили игру. Через 30 мин. сеть снова была в рабочем состоянии и команды продолжили игру. По турнирной таблице отрыв между командами был небольшой, и мы решили не сбрасывать счет, а продолжить. Как оказалось позже, проминка в 40 мин. для ХакерДом оказалась фатальной. Вернее, даже не в команде дело, как я уже говорил, команда играла отлично. Баг оказался в игровой системе. В начале игры мы расставили коэффициенты, т.е. сколько денег стоит флаг, сколько пользователь платит провайдеру за рабочий сервис, сколько получает за нерабочий и т.д. И вот эти коэффициенты были расставлены там образом, что один раз упав становиться невозможно подняться. Именно в эту яму и попал ХакерДом. К концу игры турнирная таблица выглядела следующим образом:
| Команда | Деньги | Репутация | Трафик | Количество пользователей | Флаги |
| Smoked Chicken | 345485 | 236916 | 17095 | 267 | 115 |
| Hohland | 294800 | 103193 | 18655 | 289 | 13 |
| Estonia | 215699 | 77443 | 10575 | 142 | 0 |
| Hackerdom | 166612 | 79654 | 5915 | 92 | 287 |
Как видите, ХакерДом не смог обогнать даже те команды за которые играла жюри. С учетом того, что за команду Estonia никто из жюри не играл. По количеству украденных флагов мы пока не можем дать точные результаты, потому как были некоторые проблемы с системой проверки флагов. И есть подозрения, что некоторые флаги от команд не принимались и как следствие, не учитывались.
Не взирая на проблемы с системой подсчета очков, команда Smoked Chicken играла здорово. Поздравляю, отличная игра! К концу игры выяснилось, что они получили root привилегии на серверах команд Hohland и Estonia. Это впечатляет. А HackerDom повесил шелл у SmokedChicken и преимущественно с них тянул флаги. Что тоже не может не радовать :).
На мой взгляд, обе команды продемонстрировали хорошие навыки в защите информации. И я надеюсь, что в будущем мы также будем обмениваться друг с другом опытом и хорошо проводить время.
Видео с игры:
UralCTF3.mpg,
UralCTF3.mpg.md5.
на YouTube