Как багхантеры перехватывали письма в пневмопочте на ZeroNights

gjt-qc6rzuwpubuquoaxn0sahq0.jpeg

Про Bug Bounty уже многое сказано и необходимость подобных программ для компаний кажется очевидной. За время существования нашей собственной программы Почта Mail.ru выплатила более $250 000, средняя выплата составляет $379, чуть подробнее об этом мы уже писали. А сегодня, на примере недавно прошедшей конференции по информационной безопасности ZeroNights, мы расскажем о том, каким образом можно привлекать хакеров к участию в поиске багов и уязвимостей через профильные мероприятия.
В этом году конференция ZeroNights прошла в Клубе А2 Green Concert в Санкт-Петербурге. Несмотря на переезд из Москвы, конференция собрала более 1000 участников за 2 дня. В рамках конференции звучали доклады многих крутых специалистов. Если нужен хардкор — посмотрите «NUClear explotion», «From Graphic Mode To God Mode, Discovery Vulnerabilities of GPU Virtualization», «Researching Marvell Avastar Wi-Fi: from zero knowledge to over-the-air zero-touch RCE». В этом году также было много интересных докладов про Web, можно посмотреть слайды и WebVillage и не только. Лично мне был важен доклад от Ильи Нестерова и Сергея Шекян. Отличить бота от реального пользователя становится всё сложнее и сложнее. Подробнее про доклады тут.

Наши задачи


Мы ставили перед собой следующие задачи:

  • Продвижение бренда и программы Bug Bounty в сообществе.
  • Рекрутинг толковых специалистов, которые успешно справляются с поставленной задачей.


Идея


Самый сложный челлендж в подобных проектах: разработать интересные задания, которые, во-первых, привлекут участников, а во-вторых, позволят нам проверить их реальные навыки.

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

Стенд выглядел так:

mjv2k73bjiq4efknnmavxurqijo.jpeg

Вместо самой почты мы использовали теннисные шарики, которые спускались сверху вниз в нужные накопители, по-умолчанию в «бухгалтерию». Нужно было активировать заслонки, которые управлялись при помощи Arduino + RPi3, и перенаправить «почту» в другие накопители.

Схема действий:

  • Подключаемся к Wi-Fi-сети задания.
  • Находим в сети Raspberry Pi, которая подключена к Arduino, управляющей заслонками.
  • На RPi крутится веб-сервер. Нужно выполнить два задания — проэксплуатировать уязвимости и они в конце давали кнопки для активировации заслонок, которые позволяли и перенаправить «почту»


vgsselmssg0jmmqduqxeverva70.jpeg

Шарик символизирует пневмописьмо:

qvohaxvkwcvrmulpf363l70pj-k.jpeg

Идеи для заданий мы взяли из репортов наших исследователей.

Задания


В первом задании участники должны были найти хост RPi3 и обнаружить там типовую уязвимость конфигурации для веб-сервера Apache: страницу /server-status, на которой отображаются все приходящие HTTP-запросы. В числе прочих на эту страницу приходил запрос с секретным значением в GET параметрах, который позволял пройти первый уровень. За это задание посетители получали промокод на $100 для участия в нашей программе Bug Bounty.

Решение

Уязвимость конфигурации Apache ищется обычными инструментами типа dirbuster, строка server-status есть во всех актуальных словарях. Кроме того, мы оставили несколько подсказок, чтобы задание можно было решить без каких бы то ни было скриптов и программ, даже с обычного телефона.


Для прохождения второго задания необходимо было внимательнее изучить содержимое уже известной страницы мониторинга. В коде клиентского приложения необходимо было найти скрытый метод, который не вызывался из интерфейса, но содержал в себе уязвимость — «слепую» NoSQL-инъекцию в Mongodb.

Решение
Чтобы автоматизировать слепую инъекцию, необходимо решить две задачи:
Написать скрипт, который умеет получать 1 бит информации за один запрос. На выходе нужно иметь возможность вставлять в запрос интересующее логическое выражение и по ответу сервера понимать, истинно оно или ложно.

Придумать, как можно побитово получать интересующую информацию из БД (например, если вы хотите узнать значение поля secret='some_secret', можно использовать регулярные выражения. Сначала узнаём первый символ secret ~ '^a', secret ~ '^b'… secret ~ '^s'… После этого второй secret ~ '^sa', secret ~'^sb'… Аналогично получаем весь секретный токен).

Это не единственная и не самая эффективная реализация, варианты получше можно посмотреть в коде sqlmap.


Основную сложность представлял нетипичный стек технологий: MeteorJS, который активно использует Websockets, а также MongoDB и Pubsub вместо привычных для HTTP запросов и ответов не позволяли использовать существующий инструментарий и требовали от участников умения самостоятельно автоматизировать атаки. Многие участники искали уязвимости в функциональности самой платформы MeteorJS, ошибочно приняв его за код задания. Также для некоторых участников возникали трудности при автоматизации запросов через Websockets.

qgs2f2m0a4s7eqrwiir5l4cv8ru.jpeg

В качестве приза за этот конкурс участники получали толстовку «Mail.ru Bug Hunter».

Результаты


Всего за два дня конференции в нашем конкурсе поучаствовало более 200 человек. С первым заданием справились 100 участников, второе задание выполнили 45 человек.

Разумеется, успешно завершивших задачу мы прособеседовали прямо на месте. Розданные карточки на $100 имеют отложенный эффект, но уже несколько из них были активированы и мы получили хорошие баги на H1. Они стимулируют хакеров искать новые баги, помогать нам совершенствовать наши системы и улучшать безопасность. Маленькая карточка — большие результаты. А сто баксов — это сто баксов.

lwpqy8edtdgnyx9x_-cwj6r6sgm.jpeg

© Habrahabr.ru