Дополнительные главы практической безопасности (2021)/Домашнее задание по фаззингу

Материал из SecSem Wiki
Перейти к навигации Перейти к поиску

Домашнее задание по фаззингу

Первый семинар

Задача

http://fuzzing.tasks.course.secsem.ru/

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

Исследуемый продукт: GtkVNC — клиент для приложений доступа к удалённого экрану, которые используют протокол RFB. RFC на протокол

Для того, чтобы начать искать уязвимости достаточно сделать это...

Правила игры: Чем больше уязвимостей Вы найдёте в проекте — тем лучше. Сколько уязвимостей — неизвестно, но они есть. Если Вы — первый человек, кто нашёл уязвимость данного типа, то мы вместе непублично репортим уязвимость вендору и регистрируем на Вас идентификатор CVE. Уязвимости, которые приводят к возможности получения удалённого доступа на клиенте оцениваются выше, чем уязвимости, которые приводят к падению клиента (RCE круче, чем DoS). Уязвимости искать руками тоже можно не используя фаззинг, это не будет контролироваться.

Для того, чтобы подтвердить, что вы действительно нашли уязвимость вам необходимо будет написать минимальный Proof-of-Concept, который необходимо будет сдать в проверяющую систему. Проверяющая система будет запускать ваш PoC и тестировать, что бинарный пакет gtkvnc, скомпилированный с AddressSanitizer выдаёт типичную для ASAN-a ошибку. Если уязвимость, которую вы нашли не триггерит ASAN, но является уязвимостью (например это ошибка неинициализированной памяти, которую клиент удалённо может считать), то пишите в телеграмм paulchr . Такие уязвимость тоже буду засчитаны.

Прежде, чем посылать эксплоит на сервер рекомендуется убедиться, что вы можете получить ошибку локально, подключившись при помощи клиента GtkVNC, который скомпилирован с библиотекой ASAN. После того как вы убедились в этом, посылайте ваш PoC на сервер. Для этого надо зарегистрироваться на нём, выбрать "Targets" -> "GtkVNC" и загрузить скрипт на сервер. Запускаться он будет через ./poc, так что не забудьте шабанг.

Если PoC успешно пройдёт проверку, то он будет переведён из состояния "in progress" в состояние "success", иначе он перейдёт в состояние "failed". Таймаут работы — одна минута, но если вашему скрипту нужно больше времени на работу, чтобы стриггерить уязвимость, так как он, например, посылает много данных, то это поправимо (пишите в телеграмм). Если после загрузки файла на сервер ваш PoC завис в состоянии "in progreess", "created" или "internal error", то пишите в телеграмм, скорее всего что-то сломалось и я постараюсь это почитать как только так сразу. Система тестируется на людях в первый раз.

Если ваш PoC перешёл в состояние success, то поздравляю, вы стриггерили уязвимость, но это не конец. Для успешного завершения упражнения Вам необходимо написать репорт в проверяющую систему где вы опишете подробно насколько это возможно уязвимость и последствия для программы, к которым она приводит. Описание отправляется на ревью (состояние "on review") и может быть отклонено администраторами системы, если репорт был плохо написан. Примеры таких возможных случаев: причина уязвимости была неверно истолкована или непонятно изложена, импакт данной уязвимости был определён неверно, ваш PoC написан не достаточно понятно или обфусцирован или был загружен бинарный исполняемый файл. В таком случае Ваш submission отправляется в состояние "rejected". Если Вы первым смогли стриггерить данную уязвимость, но плохо написали репорт, и человек после Вас получил успешный статус "success", то он будет считаться первым успешно выполнившим задание, а следовательно, будет претендовать на получение идентификатора CVE, даже если Вы потом успешно заново сдали данную уязвимость.

В окружении в котором будет запускаться ваш PoC есть питон3 и библиотека pwntools. Подробнее об устройстве PoC контейнере

Делиться информацией о найденных уязвимостях ни с кем категорически нельзя до конца задания!

Вспомогательные материалы

Второй семинар