Как начать заниматься багхантингом веб-приложений |
19.09.2023 00:00 |
Оригинальная публикация
Компании могут проверять свои продукты, сервисы или инфраструктуру на реальность взлома разными способами: это и пентест (тестирование на проникновение), и редтиминг (Red Team, проверка возможностей компании по выявлению и предотвращению вторжения), и bug bounty (набор условий, в соответствии с которыми белые хакеры получают от организаций вознаграждение за уязвимости, найденные в их IT-сетях, системах и приложениях). Дыры в программном обеспечении могут обернуться убытками для компаний и компрометацией персональных данных (а иногда и финансовыми потерями) для пользователей. В этой и следующих статьях мы подробно пройдемся по теме bug bounty и расскажем о том, как прокачаться в багхантинге веб- и мобильных приложений. Первая статья будет особенно интересна
Информационные технологии стремительно развиваются, появляется огромное количество сервисов и приложений, в том числе и в составе критической инфраструктуры; растет сложность как их разработки, так и обслуживания. Вместе с этим повышаются различные риски, в частности риски появления уязвимостей и их эксплуатации злоумышленниками. Для начала определимся с терминами:
Платформы bug bountyСвои программы bug bounty обычно объявляют владельцы и разработчики сайтов, сервисов и программного обеспечения, чтобы поощрить исследователей безопасности сообщать об уязвимостях, особенно о таких критически опасных, как RCE. Делать это они могут на собственных ресурсах, продвигая их своими силами. Но если компания хочет сразу привлечь большое количество независимых исследователей безопасности, то она размещает свои программы на платформе bug bounty. Платформа bug bounty — это агрегатор, объединяющий на своей площадке программы самых разных компаний и позволяющий исследователям безопасности выбирать себе проект. При размещении на платформе компании публикуют список ресурсов, за отчет о недостатках защищенности в которых они готовы платить. А белые хакеры, заинтересованные в решении интересных задач, публичном признании и получении награды, обеспечивают объективность и достоверность исследований. Среди наиболее известных платформ можно выделить Bugcrowd, HackerOne, Vulnerability Lab, BountyFactory и Synack. Платформы есть и в СНГ: standoff365, bugbounty.ru (Россия), bugbounty.kz (Казахстан), bugbounty.by (Беларусь) и т. д. В начале этого года многие иностранные платформы bug bounty, в том числе и крупнейшая в мире — HackerOne, отказались от сотрудничества с российскими белыми хакерами и исключили из числа своих клиентов российские компании. В этой статье мы приводим данные о стоимости отдельных видов уязвимостей на примере платформы HackerOne, так как именно на ней на данный момент собрана самая обширная статистика. Градация знаний и опытаВ области информационной безопасности существует условная градация знаний и опыта:
Приведем пару ярких достижений багхантеров. Есть примеры, когда багхантеры с многолетним опытом, действуя в интересах, в том числе, и мировых IT-гигантов, находили критические уязвимости или выявляли новые методики атак, использующие нестандартную технику эксплуатации, с помощью которых можно было захватить серверы компаний. К примеру, багхантер alexbirsan обнаружил проблему путаницы зависимостей в цепочке поставок, которая приводила ко взлому Apple, Microsoft и десятки других компаний. О результатах исследований багхантер сообщал компаниям. Каждая организация, которая была подвергнута атаке, предоставила ему разрешение на проверку своей безопасности либо в публичной программе вознаграждения, либо в частной форме. Другим ярким примером является багхантер albinowax, который обнаружил технику HTTP Request Smuggling. Она позволяла отправлять двусмысленный запрос, который по-разному обрабатывался frontend- и backend-серверами приложения, что могло дать киберпреступнику возможность получить доступ к пользовательским данным. Что касается денежного вознаграждения в bug bounty, то и тут есть яркие примеры. Первым, кто заработал 1 миллион долларов на американской площадке HackerOne, был багхантер Santiago Lopez, а другой багхантер inhibitor181 первым заработал на этой же площадке уже 2 миллиона долларов. С чего начинается багхантингЧтобы начать искать уязвимости за вознаграждение, нужно как минимум иметь базовые теоретические и практические знания. А чтобы вознаграждения (как денежные, так и репутационные) становились больше, необходимо постоянно углублять и накапливать эти знания и актуализировать полученный опыт. Упорный труд, концентрация, желание изучать новое и самосовершенствоваться принесут бенефиты в виде денежного вознаграждения и признания в обществе багхантеров. Технические темы, которые мы рекомендуем изучить будущему багхантеру в обязательном порядке:
Примеры самых часто встречающихся уязвимостейОпираясь на наш отчет, посвященный анализу уязвимостей и угроз веб-приложений в 2020–2021 гг., выделим часто встречающиеся уязвимости и атаки на пользователя в веб-приложениях, которые достаточно просты в эксплуатации:
Полезный инструментарийИспользование дополнительного программного обеспечения позволяет ускорить и упростить работу багхантера. Первое, о чем хотелось бы упомянуть, — это BurpSuite от компании PortSwigger. Это программное обеспечение является одним из лучших в своем классе для сканирования уязвимостей, тестирования на проникновение и обеспечения безопасности веб-приложений. Существует бесплатная версия BurpSuite CommunityEdition, платная BurpSuite Professional и корпоративная BurpSuite Enterprise Edition, включающая в себя несколько инструментов. Рассмотрим некоторые из них:
Другой инструмент, называемый швейцарским ножом белого хакера, пентестера и багхантера, — Metasploit от компании Rapid7. Он является модульным, расширяемым и изначально уже содержит большое количество модулей различного направления: эксплойты, полезные нагрузки, энкодеры и т. д. Для автоматизации обнаружения и использования уязвимостей SQL Injection и захвата серверов баз данных можно использовать инструмент с открытым исходным кодом — sqlmap. Он содержит большое количество функций. Приведем наиболее важные из них (с остальным функционалом можно ознакомиться на официальном сайте):
Для сканирования больших сетей, их исследования и аудита безопасности можно использовать программное обеспечение с открытым исходным кодом — nmap. Для него существует и графическая обертка — zenmap. Для быстрого фаззинга веб-приложения (обнаружения директорий, файлов и параметров) стоит посмотреть в сторону инструмента ffuf с открытым исходным кодом. Его использование должно проходить с явным указанием небольшого количества потоков. Это необходимо для того, чтобы не подвергать высоким нагрузкам исследуемую цель. В противном случае это может привести к замедлению выполнения запросов у других клиентов и к отказу в их обслуживании. Но все же самым главным является труд, усердие и понимание того, как работают технологии. Багхантеру необходимо совершенствовать свое мастерство, пополнять опыт драгоценными знаниями, отслеживать и изучать новые техники атак и уязвимости. «Быстрый старт» на настоящих примерахПосле того как изучена теоретическая база (самые популярные уязвимости, наиболее часто используемые сценарии атак, базовый список инструментария), самое время закрепить полученные знания на примерах старых версий настоящих систем с открытым исходным кодом, в которых уже были обнаружены уязвимости.
Уделим внимание внедрению кода, а именно — SQL Injection. Эту уязвимость рассмотрим на примере MantisBT версии 2.24.3. Эксплойт этой уязвимости CVE-2020-28413 опубликован в специализированном разделе на сайте MantisBT. Поэтому воспроизвести атаку с использованием BurpSuite для перехвата запроса и его повторения, а также sqlmap для более автоматизированного получения информации из базы данных может каждый желающий. Имеется учетная запись пользователя observer:SEk7AnRiF5 с ролью доступа «Наблюдатель». Необходимо настроить прокси между браузером и BurpSuite, а после — перехватить POST-запрос на сценарий /api/soap/mantisconnect.php с указанными данными для авторизации пользователя observer. Согласно эксплойту, уязвимым параметром SQL Injection будет являться значение тега access. Отправляется легитимный, ничего не нарушающий HTTP-запрос: В ответ сервер возвращает 200-й статус и запрашиваемую информацию: Однако если заменить значение 1 на одинарную кавычку (') в теге access, то в данном случае сервер, согласно эксплойту, должен вернуть 500-й статус с ошибкой о некорректности сформированного приложением и исполняемого базой данных SQL-запроса. Отправление запроса с одинарной кавычкой: Действительно Теперь имеет смысл воспользоваться ранее упомянутым инструментом — sqlmap, с помощью которого можно автоматизировано получить информацию из базы данных, эксплуатируя найденную уязвимость SQL Injection. Сперва необходимо скачать sqlmap и в его корень папки поместить последний выполняемый запрос с одинарной кавычкой (') в текстовом файле с именем, к примеру request. Вместо одинарной кавычки следует поставить звездочку (*), для того чтобы sqlmap знал, какой параметр в запросе необходимо эксплуатировать. По умолчанию MantisBT именует базу данных как bugtracker. Зная это, мы можем запросить список таблиц, которые находятся в ней: Результатом будет служить несанкционированное получение списка всех таблиц в базе bugtracker, к которым также можно обращаться и получать их содержимое. На HackerOne уязвимости SQL Injection оцениваются так: Пришло время поговорить про атаки на пользователя. В нашем примере будет рассмотрена атака на пользователя «Межсайтовое выполнение сценариев» (XSS) и «Подделка межсайтового запроса» (CSRF). В начале рассмотрим атаку на пользователя «Межсайтовое выполнение сценариев» (XSS) на примере системы с открытым исходным кодом GitBucket. Для версии 4.37.1 существует публичный эксплойт, с помощью которого авторизованный злоумышленник имеет возможность внедрить вредоносный JavaScript-код на определенные страницы, при просмотре которых он будет исполняться. Выполнение JavaScript-кода в браузере жертвы может привести к краже cookies, редиректу на другую страницу, внедрению кейлогера (вредоносного ПО для отслеживания нажимаемых клавиш), отрисовки формы авторизации с последующей кражей логина и пароля. В рассматриваемой системе при атаке на администратора имеется возможность полностью скомпрометировать сервер. Покажем метод внедрения вредоносного JavaScript-кода. Для начала авторизованный злоумышленник должен создать свой репозиторий. После создания репозитория в нем необходимо создать «вопрос» (issues), в заголовке которого злоумышленником размещается вредоносная нагрузка: "><img src=1 onerror=alert()> Далее при посещении главной страницы или страницы злоумышленника (вкладка Public activity) будет исполнен внедренный JavaScript-код в браузере пользователя. На HackerOne можно посмотреть, насколько опасными могут быть XSS-атаки и как высока может быть награда за их обнаружение. Рассмотрим другую атаку на пользователя — «Подделка межсайтового запроса» (CSRF) — на примере системы с открытым исходным кодом GitLab. Подделка межсайтового запроса означает, что злоумышленник на контролируемом сайте размещает HTML-форму, которая будет отправлена в уязвимую систему от лица авторизованного в системе пользователя, которого злоумышленник заманил на свой сайт. Последствиями этой атаки может быть смена персональных данных (имя, телефон, почта, пароль), выполнение каких-либо действий, например перевод денежных средств на счет злоумышленника в уязвимой банковской системе или публикация комментариев от лица атакуемого пользователя. В GitLab для версий ниже 14.0.2 существует уязвимость CSRF (https://hackerone.com/reports/1122408 , https://gitlab.com/gitlab-org/gitlab/-/issues/324397). В данном случае уязвимость позволяет создавать сниппеты (/dashboard/snippets) от лица атакуемого пользователя. Перед демонстрацией убедимся, что у текущего пользователя отсутствуют его сниппеты. На основе публично доступного эксплойта по приведенным выше ссылкам злоумышленник создает на контролируемом сайте страницу с HTML-формой следующего содержания: После того как авторизованный в системе GitLab пользователь перейдет на сайт злоумышленника с размещенной там формой, от имени этого пользователя выполнится запрос в систему GitLab и будет создан сниппет. После отправки формы сервер вернет ответ, который говорит о том, что сниппет был успешно создан и атака «Подделка межсайтового запроса» на пользователя была проведена. У атакуемого пользователя появился сниппет с содержимым, которое контролировал злоумышленник. А вот так оценивают CSRF-атаки на HackerOne: Российская платформа для багхантингаНаибольшее количество программ и максимальные выплаты сегодня можно найти на платформе The Standoff 365 Bug Bounty. После запуска на платформе были размещены 16 программ bug bounty, в том числе «Азбуки вкуса», Rambler&Co, VK, Дзена, Skillbox и GeekBrains. В программах VK максимальные награды достигают 1,8 млн рублей за критические уязвимости (и первые выплаты уже одобрены). Чтобы участвовать в программах bug bounty, багхантеру нужно зарегистрироваться на удобной ему площадке, выбрать понравившуюся программу, внимательно прочитать ее правила, изучить скоуп и начать искать уязвимости. Обнаружив уязвимость или возможность проведения атаки, исследователь пишет отчет, отправляет его и ждет ответа. Награда будет зависеть от уровня опасности уязвимости. Приведем в качестве примера суммы вознаграждений программы bug bounty от компании VK: Как и везде, в багхантинге существует конкуренция. Багхантеры сталкиваются с ней, когда, например, отправляют отчет об уязвимости, а его не принимают, устанавливая статус «Дубликат». Эта ситуация означает, что другой багхантер сообщал об этой уязвимости ранее и сейчас, скорее всего, уже идет процесс ее устранения. Как отправить отчетРассмотрим, как отправить отчет, на примере программы bug bounty от Positive Technologies. Ее описание вы найдете здесь. На странице необходимо нажать кнопку «Сдать отчет» и выбрать пункт «Об уязвимости»: После этого багхантер попадет на страницу отправки отчета об уязвимости. Описание отчета состоит из нескольких пунктов:
Продемонстрируем пример заполнения отчета о разобранной ранее уязвимости — SQL Injection в MantisBT версии 2.24.3 (CVE-2020-28413): ЗаключениеРост заинтересованности все большего количества компаний в результативной кибербезопасности делает профессию багхантера все более популярной и востребованной. В эпоху глобальной цифровизации, когда сложность и размер приложений постоянно растут, риск появления уязвимостей и их эксплуатации хакерами становится все выше. Внедрение программ bug bounty, как на уровне отдельной компании, так и на уровне специализированной площадки, поможет исправлять уязвимости до того, как ими сможет воспользоваться злоумышленник. Важно продвигать такие понятия, как наступательная информационная безопасность, этичный хакинг и багхантинг, наряду с обучением программированию. Обширная база доступных учебных материалов позволяет стать багхантером любому человеку. Самое главное — это начать учиться, углублять полученные знания и набирать драгоценный опыт. Заключительным аккордом перечислим интернет-ресурсы, книги и площадки, которые, на наш взгляд, помогут в изучении багхантинга:
|