Что есть CTF?
Это соревнования в форме игры, но не в Counter-Strike, Quake или даже WoT. Всё проще и в то же время сложнее. Разговор наш пойдет о соперничестве команд в области информационной безопасности. Но не абы где, а в России.
А теперь разберём подробнее, для непосвященных.
CTF в ИБ или Сapture the Flag — это соревнования, как правило, командные, проходящие в игровой форме, где основная задача, это захватить «флаг» у соперника, причем условия, насколько это возможно, приближены к реальным. Нечто похожее, касательно формата, есть в других играх: в пейнтболе, страйкболе и у ролевиков. Но мы говорим об ИБ, где главная цель — обеспечить стабильную работоспособность своих серверов, решать те или иные прикладные задачи, защитить информацию (флаги) и захватить её, но уже у соперника. Далее участникам конкурса отправляется флаг на специальную площадку и получается подтверждение того, что задача правильно решена. Если нет, то стоит попробовать дать ответ ещё раз. И так до победного. У каждой команды свой сервер, а на сервере — сервисы. Они обычно пишутся на 5-9 языках программирования. На этих сервисах разработчиками введены уязвимости, естественно намерено, дабы соревнования проходили веселее, с задором. По итогу, жюри всё это дело проверяет, насколько всё работает корректно и стабильно. Всё игровое действо длится в среднем 7-8 часов.
Игра может проходить как очно, так и удалённо, через интернет.
В компьютерных играх это обычно так
Виды и особенности cоревнований СTF
С годами игра, построенная по правилам классики Capture the Flag, достаточно сильно изменилась. В настоящее время ИБ означает не только соревнования, связанное с захватом флага. Эксперименты с механиками правил проведения CTF привели к возникновению множества их видов, типов и разновидностей, с теми или иными нюансами.
Но мы остановимся на двух основных форматах. Первый — так называемый Task-Based. В данном формате участники получают набор задач. К ним нужно найти ответ и отправить. Сам ответ — это флаг, который обычно состоит из набора символов и фраз производных форм. Верно выполняешь таск — получаешь очки. За сложные задания дают больше. Задания в CTF-играх, как правило, делятся на следующие категории: найти веб-уязвимость в приложении, исследование программ и инцидентов, криптография, администрирование, поиск инфы из открытых источников, стенография и misc – разнообразные развлекательные задачи. Как видите, набор квестов, выпадающих на плечи участников-хакеров достаточно обширен.
А в жизни обычно так. Фото команды SPbCTF
Второй вид формата проведения соревнования — классический или Attack-Defense. В этой игре команды получают в свои руки серверы, как правило, идентичные друг другу с рядом наборов уязвимостей. Жюри время от времени подкидывают приватную инфу — флаги. Перед командами встает задача найти и устранить уязвимость на сервере, которая, как правило, не одна. И что интереснее, необходимо найти уязвимости у соперника, воспользоваться ими и увести флаг. Классика CTF проводится реже Task-Based, потому что организация сервисов несколько труднее, чем написать таски.
Также есть CTF, объединяющие в себе обе структуры. Их называют миксами. Здесь команды должны не только защитить свой сервис, попутно атакуя сервис соперников, но и решать задачи. В данном случае все ограничивается только фантазией организатора, поскольку правила и механики могут любые.
Не лишним будет упомянуть другой формат соревнований — «Царь горы» (King of the hill), где основная цель, это взломать систему, закрепиться там и не позволить соперникам скинуть вас с горы, перехватив управление. В этом вся соль. Особенность режима ещё и в том, что по истечению какого-то промежутка времени, система полностью откатывается и борьба за первенство на «горе», тобишь доступа, начинается по новому кругу.
Наше участие в СTF
Наша компания Timeweb принимает участие в этих соревнованиях впервые. Так что, так сказать, создаём практику участия и надеемся выступать на регулярной основе. От нашей компании впервые официально выступила команда (с одноименным названием компании), сформированная из сотрудников с разных отделов. Основная цель участия на данных мероприятиях, это прежде всего получения новых навыков (и отточки уже имеющихся) и бесценного опыта для членов команды CTF Timeweb, а также демонстрация всех преимуществ и особенностей нашей компании клиентам, поддержки и развития безопасности хостинга.
Мы также продвигаем свой бренд Timeweb в соревнованиях CTF и планируем найти новые контакты, не только на местном уровне внутренних соревнований в России но и на международных.
Первое официальное соревнование CTF нашей команды: TMU CTF 2021. Оно проходило с 08.09.2021 по 10.09.2021.
Организатором соревнования стал университет Тарбиат Модарес (TMU), который находится в Иране. Результатом наших состязаний стало 71 место из 496.
Вот такие интересные задания
Шифрование помогает сохранить данные в тайне, но при этом приводит к лишнему вниманию. Если файл не открывается так просто, то наверняка там что-то ценно. Таким образом, важно скрывать и сам факт наличия секретных сведений. Лучше всего это делать, растворяя конфиденциальную информацию в каком-то безобидном файле. Скажем, картинке или нескольких. Так мы обращаемся к визуальной криптографии и стенографии.
Визуальная криптография (изобретенная Мони Наором и Ади Шамиром в 1994 году на EUROCRYPT) — это особый метод безопасного шифрования сообщений таким образом, чтобы получателю для их расшифровки не требовались специальные знания, высокопроизводительные вычисления или даже целый компьютер. Достаточно лишь нашей человеческой зрительной системы и немного аналитического мышления. Ведь расшифрованная информация отображается в виде визуального изображения.
Наор и Шамир продемонстрировали свою идею с помощью прозрачных пленок, которые и являются слоями оригинального изображения. Каждый слой изображения печатается на прозрачной пленке. Для расшифровки полного изображения происходит накладывание всех слоев на одну поверхность. Аналогичным способом можно использовать визуальную криптографию и в компьютерных системах. В данном случае слои изображения накладываются друг на друга с помощью графических программ.
В общем, упрощая это и говоря по факту, мы складываем два изображения в одно. Сами они представляют собою, по сути, «шум» из пикселей. Наложение по пикселям этих двух картинок выводит общее расшифрованное изображение, в котором заложен скрытый текст. Тут стоит отметить, что если слоёв много и не хватает одного, расшифровать сообщение не выйдет даже самым решительным злоумышленникам.
В CTF существуют задания, где нет необходимости сложения изображений в одно, зато есть вычитание их байтов. Это уже называется стенографией. Суть в том что мы получаем разницу в байтах, которая является скрытым текстом или даже целым файлом.
Со всем этим связано следующее задание…
Закодированное сообщение и секретный ключ
Разбор заданий:
Hello#Warmup
Описание:
A fun visual cryptography tool will amaze your kids!
Note: Remember the flag format is TMUCTF{...}.
Решение:
- Для решения используется утилита Visual cryptography tool
- В папке с картинками используем команду:
python visual_crypto.py -vvv --message chiped_message.png --secret secret.png
- Получаем флаг.
Задания MICS содержат в себе различные категории заданий CTF. В нашем задании были категории WEB, CRYPTO и STEGO.
Web — это одна из категорий тасков CTF, включающая в себя анализ получаемых и передаваемых вэб-приложению данных, поиск, эксплуатирование уязвимостей и защита от них различных вэб-приложений, разнообразный взлом, вэб-подмену информации, использование ошибок проектирования в настройке сервера. Например, внедрение SQL-инъекций, XSS-инъекций, PHP-инъекций, проведение «Man-in-the-middle», «Meet-in-the-middle_attack», «Man_in_the_Browser» атак и многого другого. Довольно обширная категория, которая включает в себя разнообразный взлом, подмену информации, использование дырок в настройке сервера — и всё это через сетевое подключение.
AgentMisc#Spy Agent (Web+Crypto+Stego)
Think like a spy!
194.5.207.57
Для решения этого задания используем Binwalk, довольно быстрый, а главное, простой инструмент для анализа, который позволяет нам обнаружить в предоставленных файлах (либо дампах) скрытые файлы.
Решение:
- Переходим на страницу “/about.html” сайта “http://194.5.207.57”
- Открываем просмотр кода страницы. И видим в коде страницы строку с содержанием base64
Декодируем этот текст и получаем ссылку на сайт загрузчик.
echo "aHR0cHM6Ly9tZWdhLm56L2ZpbGUvUTVaR1dMNWEjcW04Y20tV2ZVVVZMbGUyaTA2ZVJITkc0eFRwNjlRY0tJV0JaUmtGSFktVQ==" | base64 --decode
https://mega.nz/file/Q5ZGWL5a#qm8cm-WfUUVLle2i06eRHNG4xTp69QcKIWBZRkFHY-U
Скачиваем картинку.
Далее проверяем картинку на содержание других файлов утилитой binwalk
binwalk --dd='.*' imitation-game.jpg
DECIMAL HEXADECIMAL DESCRIPTION
---------------------------------------------------------------------------
0 0x0 JPEG image data, JFIF standard 1.02
6423339 0x62032B Zip archive data, at least v2.0 to extract, uncompressed size: 212356, name: Movies, Myth, and the National Security State.pdf
6619519 0x65017F End of Zip archive, footer length: 22
Файл pdf содержит несколько файлов.
Мы извлекаем из PDF файла архив через pdfcandy
pdfcandy.com
В архиве находим картинки.
Они представляют из себя шифр Хексахэ.
questhint.ru/hexahue
Дешифруем и получаем пароль от файлов “14mp455w0rd”
Глядя на первое изображение, которое было в самом начале, ищем скрытые файлы с помощью утилиты “steghide” и парольной фразы «14mp455w0rd» и обнаруживаем текстовый файл с флагом.
steghide extract -sf imitation-game.jpg
Enter passphrase:
wrote extracted data to "flag.txt".
cat flag.txt
TMUCTF{C41rncr055_15_4_50v137_5py!}
Exploiting или Pwn («бинарная эксплуатация», «эксплойтинг», «пвн») — это категория задач, в которых, как правило, нужно искать и эксплуатировать уязвимости в скомпилированных приложениях. Чаще всего это уязвимости повреждения памяти (memory corruption).
В этом задании мы используем GHIDRA, которая по сути своей является утилитой для реверс-инжеринга, для изменения и преобразования бинарного кода в текст на языке ассемблера и получения информации о программе, её поведении и работе (функции, параметры, указатели на адреса памяти), когда исходный код недоступен. После анализа, мы, основываясь на полученных данных о работе программы, эксплуатируем уязвимость по сценарию, от которого получаем флаг. Хорошая альтернатива IDAPro, gdb(edb), radar2.
PWN#Baby Pwn
Описание:
Can you get the flag?
nc 194.5.207.56 7010, nc 185.239.107.54 7010
Решение:
1. Используем утилиту ghidra для декомпиляции кода и анализируем предоставленный код. Анализ показывает 3 функции.
2. Видим, что в функции main происходит вызов приветствия при условии переполнения локальной переменной.
int main(void) {
char name [28];
int local_c;
setbuf(stdout,(char *)0x0);
setbuf(stderr,(char *)0x0);
setbuf(stdin,(char *)0x0);
tmulogo();
local_c = 0;
puts("Hi, Please enter your name: ");
gets(name);
if (local_c == 0xcafe) {
helloUser(name);
}
return 0;
}
В этой же функции находим уязвимый gets со своим ret(адрес возврата).
3. Переходим в функцию wow, которая не вызывается нигде, но читает флаг.
void helloUser(undefined8 param_1) {
char local_88 [128];
printf("Nice to meet you %s!\n",param_1);
puts("Tell me about yourself ;;)");
gets(local_88);
puts("It was a pleasure meeting you.");
return;
}
4. Переполняем буфер приветствия и не забываем, что до адреса возврата есть еще rbp,
5. Пишем в ret(адрес возврата) адрес wow.
6. ret дергает со стека этот адрес и пишет его в rip
OSINT (Open Source Intelligence) — сбор и анализ информации из публично доступных источников. В нынешних реалиях речь идет, в основном, про интернет-источники. От русскоязычных экспертов можно услышать термин «интернет-разведка», что по смыслу приравнивается к OSINT.
Osint#The Zodiac Dessert
Описание:
Убийца Зодиака — это псевдоним американского серийного убийцы, который действовал в Северной Калифорнии в конце 1960-х годов. Неизвестный убийца назвал себя «Зодиак» в серии писем и открыток, отправленных в прессу области залива Сан-Франциско. Эти письма содержали четыре криптограммы. У меня есть одноклассник, который одержим этим убийцей, поэтому мы отправились в путешествие, чтобы посетить места убийств Зодиака. Когда мы были на месте убийства рядом с садом, мы проголодались, поэтому пошли в ближайшее кафе. Я заказал жареные креветки и немного картофеля фри с чесноком. У нее был бутерброд и десерт за 4 доллара. Сможешь узнать, какой десерт она заказала?
Примечание. Название десерта должно содержать подчеркивание вместо пробелов. Не забудьте обернуть его
TMUCTF {}
. Например, TMUCTF {Full_Name_of_The_Dessert}
.Решение:
Для начала гуглим: murder site near garden zodiac
Открываем первую ссылку и смотрим места убийств. Из четырех убийств подходит, только то, которое расположено рядом с «Золотыми воротами» в Presido (murder Paul Stine).
Ищем кафе, в котором есть garlic french fries и grilled shrimp(в GMaps: cafe with garlic french fries and grilled shrimp) конечно в области убийства.
Это должно быть недорогое кафе, в котором есть разные блюда. Из всех кафе наиболее подходит кафе Cafe Bunn Mi, оно находится рядом с убийством.
Открываем меню и листаем до десертов. Видим десерт за 4 бакса и вводим его в флаг.
Итоги
Подводя итог, хотим сказать, что нам весьма приятно было поучаствовать в этих соревнованиях и проявить себя, используя весь багаж знаний и опыта. Надеемся, эта практика станет регулярной и о нас вы услышите ещё не раз!