Хабрахабр

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

За время существования нашей собственной программы Почта Mail.ru выплатила более $250 000, средняя выплата составляет $379, чуть подробнее об этом мы уже писали. Про Bug Bounty уже многое сказано и необходимость подобных программ для компаний кажется очевидной. Несмотря на переезд из Москвы, конференция собрала более 1000 участников за 2 дня. А сегодня, на примере недавно прошедшей конференции по информационной безопасности ZeroNights, мы расскажем о том, каким образом можно привлекать хакеров к участию в поиске багов и уязвимостей через профильные мероприятия.
В этом году конференция ZeroNights прошла в Клубе А2 Green Concert в Санкт-Петербурге. Если нужен хардкор — посмотрите «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 в сообществе.
  • Рекрутинг толковых специалистов, которые успешно справляются с поставленной задачей.

Идея

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

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

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

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

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

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

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

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

Задания

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

Решение

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

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

Решение

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

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

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

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

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

Результаты

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

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

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть