Каждый, кто участвовал в программах по поиску уязвимостей (bug bounty), знает, что найденная «дыра» — еще не повод требовать денег и славы. Описание проблемы, инструментов для ее обнаружения – все это важно описать в грамотном отчете.
Мы перевели актуальную статью из блога американской компании Cobalt, которая предоставляет услуги пентестинга as a service. Исследователь Дэвид Сопас рассказывает о том, какие ошибки допускают пользователи и как на самом деле нужно писать отчеты, чтобы заработать реальные деньги, а не бонусные копейки.
О наболевшем
На практике от участников программ bug bounty иногда приходят отчеты примерно такого вида:
«Ребята, у вас на почтовом сервере отсутствует SPF-запись.
Проверьте сами: http://».
Или встречаются просьбы об увеличении премии:
«Исследователь [такой-то] получил за такой же отчёт 100 долларов.
Вы можете заплатить мне на 50 больше?
Пожалуйста, я заслуживаю большего!»
Любой куратор программы отнесет подобные отчёты к категории WTF. Не из-за самой уязвимости, а из-за отсутствия подробной информации и попыток нормально её донести со стороны пентестера. Не забывайте, вы пытаетесь продать свои услуги, поэтому должны показать владельцу программы, что действительно заинтересованы в безопасности его продукта, и при этом уметь правильно себя подать.
Хороший отчет о найденной уязвимости значительно влияет на успех всей работы.
Подготовка до исследования
Для начала внимательно ознакомьтесь с задачами и правилами программы. Это – одна из вещей, которую обязательно нужно сделать ДО того, как приступить к поиску уязвимостей. Представьте своё разочарование, когда, получив ваш качественный и выстраданный отчёт, владелец программы ответит, что поиск таких уязвимостей не входил в перечень поставленных задач.
Если у вас есть конкретные вопросы по поводу задач программы, лучше связаться с её владельцем/куратором по электронной почте или задать свой вопрос в комментариях к чужому отчёту.
После того, как вы нашли серьезную уязвимость, следующим шагом должно стать составление отчёта о результатах. Ниже список рекомендаций, которые позволят написать качественный отчет.
Заголовок для найденной уязвимости
Пишите о сути уязвимости. Не нужно громких «бульварных» заголовков.
Пример хорошего названия: Отражённая XSS на странице продукта
Пример плохого названия: КРИТИЧНО – XSS в вашей программе
Помните, что название станет первым, что увидит куратор или владелец программы. Так что первое впечатление о вас и о вашем отчёте он составит именно по этому пункту.
Описание
Описание найденной уязвимости должно быть кратким, понятным и чётко сформулированным. Владельцы программ не хотят тратить много времени на чтение отчётов.
Отличный способ описать уязвимость быстро и понятно – это дать ссылки на проекты, которые помогут владельцу понять её суть, идентифицировать и устранить. Например, можно найти ссылки на OWASP, CVE или другие подобные проекты по обеспечению безопасности (ссылки на «Википедию» и прочие не очень надёжные источники в качестве подтверждения лучше не использовать).
К примеру, если я нахожу XSS-уязвимость, в отчёте я пытаюсь объяснить, что конкретно нашёл (со ссылкой на OWASP) и чем она может обернуться. Кроме того, если я впервые принимаю участие в данной программе, я обязательно представлюсь и начну отчёт с приветствия. Немного вежливости ещё никому не повредило.
Не нужно просто копировать в отчёт информацию из логов автоматизированных инструментов для тестирования и подобных источников. Так руководство программы может решить, что у вас не нашлось времени (или желания) описать всё самостоятельно.
Экспериментальное подтверждение уязвимости
В этой части нужно стараться писать так, как будто получатель отчёта и/или куратор программы – новичок в этой сфере. Поэтому лучше составить короткий список из шагов, необходимых для воспроизведения выявленной уязвимости.
Пример экспериментального подтверждения для обнаруженной XSS-уязвимости:
Шаг 1: пройдите по этой ссылке [Адрес ссылки].
Шаг 2: введите свои имя пользователя и пароль (для этого шага понадобится действующая учётная запись на сайте).
Шаг 3: в поле поиска в правом верхнем углу введите текст:
Шаг 4: нажмите на кнопку «Поиск».
Шаг 5: вы увидите всплывающее окно Javascript с вашим доменом.
Пожалуйста, ознакомьтесь с приложенным скриншотом, на котором показана выявленная мной XSS-уязвимость.
Иногда (зависит от типа найденной уязвимости) рекомендуется прислать часть кода страницы, чтобы владелец программы смог быстрее найти место, в котором она проявляется:
Оценка критичности
Чтобы владелец программы лучше понял степень критичности найденной уязвимости, стоит привести конкретный пример, как недобросовестный пользователь сможет использовать её в своих целях. Опишите подобную ситуацию и укажите, как, что и почему в результате может потерять компания (и её клиенты).
Используемые инструменты
Расскажите, какими инструментами и программами вы пользовались для выявления уязвимости. Если использовали только браузер, обязательно укажите его версию. Воспроизвести некоторые уязвимости можно только на определённых версиях ПО, так что здесь стоит дать максимально полную информацию.
Пример: Burp, Nmap и Firefox 47.0
Вложения
Приложенные скриншоты (а в некоторых ситуациях даже видеофайлы) помогут сделать отчёт понятней и повысят его ценность.
Иногда владельцам не удаётся воспроизвести найденную вами уязвимость, поэтому пошаговое видео или скриншоты с иллюстрацией процесса могут оказаться очень кстати.
Если по каким-то причинам не удаётся заснять процесс на видео, можно прислать в программу аудиофайл с описанием процесса. Это поможет воспроизвести выявленную уязвимость и покажет владельцам программы, что вы действительно приложили усилия при составлении отчёта, то есть даст вам преимущество при его оценке.
Предлагаемые методы устранения уязвимости
Предлагайте владельцам программ конкретные и понятные решения. Не просто советуйте им «почистить» код, а давайте ссылки на ресурсы, на которых указано, как это можно сделать. Поверьте, они оценят такой шаг. Иногда сами разработчики не знают, как устранить уязвимость, так что подробное описание вашего видения вполне может помочь. И это выгодно для обеих сторон, ведь главное — это именно бороться с уязвимостями.
Комментарии
Комментарии – отличный инструмент, который пригодится, когда/если владельцу программы понадобятся какие-то пояснения по информации в отчёте.
В процессе общения всегда стоит оставаться вежливым. Не нужно постоянно интересоваться, есть ли новая информация по присланному вами отчёту. Одного-двух сообщений в месяц с просьбой предоставить обратную связь вполне достаточно, но, если вам долго не отвечают, всегда можно связаться со службой поддержки платформы и попросить разобраться в ситуации.
Заключение
Главная наша цель – показать владельцу программы, что пентестеры и специалисты по безопасности в первую очередь хотят помочь. Мы все на одной стороне и можем вместе работать против «плохих парней». Проблема в том, что не все согласны с этим мнением. Именно поэтому профессионализм и качественные отчёты важны для построения нормальных отношений с владельцами программ.
Мы вместе с автором надеемся, что после прочтения этой статьи ваши отчёты станут лучше, а премии за выявленные уязвимости – больше!
Если ты хочешь начать работать с программами bug bounty или брать задания посложнее – нужно обладать уверенными знаниями пентестинга веб-приложений. Самостоятельное ковыряние чужих сайтов может обернуться печальными последствиями. Этичный хакинг – дело тонкое, требующее внимательного обучения и соблюдения политик безопасности. Чтобы научиться искать уязвимости, писать по ним отчеты и уверенно пользоваться всем арсеналом этичного хакера, присмотрись к нашему курсу «Профессиональный пентестер». Второй отборочный курс стартует в апреле.