﻿# Легкий способ заработать на Bug Bounty

Наверняка вы уже не раз слышали выражение "багхантинг", и я уверен, что вы бы не отказались заработать пару\-тройку сотен \(а то и тысяч\) долларов, найдя в чужой программе потенциальную уязвимость\. В этой статье я расскажу о трюке, который поможет исследовать проекты с открытым исходным кодом на наличие таких уязвимостей\.

![0660_Easy_Way_To_Earn_Money_With_BugBounty_ru/image1.png](https://import.viva64.com/docx/blog/0660_Easy_Way_To_Earn_Money_With_BugBounty_ru/image1.png)

## Bug Bounties on Free and Open Source Software \- что это такое?

Bug Bounty \- это общее название для различных программ, в которых разработчики сайтов и программного обеспечения предлагают денежные вознаграждения за нахождение багов и уязвимостей\. Помимо весьма известных Bug Bounty программ от крупных корпораций типа Apple или Microsoft, существуют также программы по поиску уязвимостей в проектах с открытым исходным кодом\. 

Многие из них можно найти на HackerOne, но, пожалуй, самым крупным является FOSSA \- Free and Open Source Software Audit\. Это программа по поиску уязвимостей в различных открытых проектах, спонсируемая Европейским Союзом\. Суммарный призовой фонд представляет собой внушительную сумму \- аж 850 000 евро\! 

## Как принять участие?

Для начала нужно зарегистрироваться на [HackerOne](https://www.hackerone.com/)\. Нам будут нужны именно те проекты, которые имеют открытый исходный код\. На HackerOne есть [целый список](https://hackerone.com/directory/programs)\.

Если же есть желание поучаствовать в Bug Bounty от Европейского союза \- список проектов, участвующих в этой программе, можно найти вот [здесь](https://juliareda.eu/2018/12/eu-fossa-bug-bounties/)\. Для большинства проектов будет достаточно быть зарегистрированным на HackerOne, но многие их приведенных в том списке программ находятся на сайте intigriti\.com\. 

Чтобы принять участие, необходимо выбрать подходящий для себя проект, а затем внимательно прочитать условия участия\. Если они вас удовлетворяют \- значит, настала пора практики\.

Чтобы найти уязвимость и получить свои деньги, нужно будет всего лишь скачать проект \(или клонировать его с GitHub\) и тщательно проанализировать каждую строчку кода, исследуя каждое выражение на предмет потенциальных ошибок\. Если найдёте что\-нибудь, что может повлиять на безопасность программы \- оформляйте это в отчет и присылайте разработчикам\. Если они оценят вашу находку как стоящую поощрения \- ваши денежки у вас в кармане :\)\.

## Подождите, а где легкость?

А легкость заключается в том, что анализировать код исключительно вручную вовсе не обязательно\. Существуют инструменты, позволяющие искать ошибки в коде в автоматическом режиме\. Например \- статические анализаторы кода\. Я предпочитаю использовать нашу разработку – [PVS\-Studio](https://pvs-studio.ru/ru/pvs-studio/)\. Анализатор PVS\-Studio способен находить ошибки в коде, написанном на C\+\+, C\# и Java, а также имеет удобный интерфейс\. Помимо этого, есть [несколько вариантов](https://pvs-studio.ru/ru/blog/posts/0614/) его бесплатного использования\. Также существует и множество [других анализаторов кода](https://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis)\.

Конечно, статические анализаторы могут выявить далеко не все ошибки\. Да и бог с ними\! Ведь перед нами стоит цель найти ошибки быстро и просто, а не найти их все\.

После того, как проект скачан и собран, будет достаточно сделать лишь пару кликов, чтобы запустить анализ\. Результатом его будет отчет с некоторым \(как правило, немалым\) количеством сгенерированных анализатором предупреждений\. В PVS\-Studio они классифицируются на три уровня достоверности\. Начинать стоит с предупреждений первого уровня, поэтому оранжевый и желтый уровни можно отфильтровать из результата анализа\.

![0660_Easy_Way_To_Earn_Money_With_BugBounty_ru/image3.png](https://import.viva64.com/docx/blog/0660_Easy_Way_To_Earn_Money_With_BugBounty_ru/image3.png)

Пример фильтрации результатов анализа\. Кликните на картинку для увеличения\.

Таким образом, останется лишь просмотреть оставшиеся предупреждения и выбрать из них те места, которые могут представлять собой наибольшую опасность\. Стоит обязательно проверить, можно ли воспроизвести какую\-либо из них непосредственно во время работы программы\. Если у вас получится это сделать \- это не только увеличит шансы на то, что разработчики примут отчет, но и наверняка увеличит сумму выплаты\. В этом деле наглядность \- ваш лучший друг\.

Также стоит подумать, не влияет ли найденная ошибка на безопасность программы\. Ведь в этом случае выплаченная вам сумма будет в несколько раз больше :\)

На скриншоте показан интерфейс Visual Studio\. Однако, пусть это не вводит вас в заблуждение\. Анализатор можно использовать не только как плагин для Visual Studio, но и самостоятельно, в том числе в среде [Linux и macOS](https://pvs-studio.ru/ru/docs/manual/0036/)\.

## Плюсы данного подхода

Во\-первых, использование статического анализатора \- это один из самых простых способов поиска ошибок\. Чтобы использовать анализаторы кода, вовсе не обязательно обладать какими\-то специальными знаниями: достаточно лишь разбираться в языке, на котором написан проверяемый код\. 

Во\-вторых, анализаторы внимательны\. Они не устают и не теряют бдительности, в отличие от человека\. Поэтому с помощью них можно анализировать сколь угодно большие базы кода с практически минимальными затратами\.

В\-третьих, анализаторы зачастую обладают большим знанием, чем человек\. Что это значит? Давайте я поясню свою мысль на примере кода из ядра Android:

```cpp
static void FwdLockGlue_InitializeRoundKeys() {
  unsigned char keyEncryptionKey[KEY_SIZE];
  ....
  memset(keyEncryptionKey, 0, KEY_SIZE); // Zero out key data.
}
```

Казалось бы, где здесь может быть ошибка? 

Оказывается, компилятор, видя, что массив _keyEncryptionKey_ больше нигде не используется, может оптимизировать код и удалить из него вызов функции _memset_\. Причем делать это он будет только при сборке в конфигурации release\. Всё бы ничего, да только ключ шифрования на какое\-то время останется в оперативной памяти незатёртым, благодаря чему он может быть получен злоумышленником\. Настоящая брешь в безопасности\! 

И ведь найти эту ошибку самому практически невозможно: в режиме отладки вызов _memset_ работает нормально\. Да и тесты для этого особо и не напишешь\.\.\. Остается об этой фиче только знать и помнить самому\. 

А что, если об этой фиче не знают разработчики проекта? Что, если при поиске багов об этой фиче не будете знать и вы? Анализатору это не важно, потому что у него есть диагностика [V597](https://pvs-studio.ru/ru/docs/warnings/v597/), поэтому во время просмотра отчета вы обязательно о ней узнаете\.

Наконец, в\-четвертых\. Один из самых полезных плюсов применения статического анализа при участии в погоне за Bug Bounty \- это скорость\. Да, с помощью него можно проверить два, три, четыре проекта за вечер \- но это еще не всё\. 

Самое главное, что вы можете быть первым\. Пока за нахождение багов в каком\-либо проекте предлагается награда, проект продолжает дорабатываться и развиваться\. Разработчики выкатывают новые релизы и новые фичи, а вместе с ними приходят новый код и новые просторы для ошибок\. При использовании описанного мной подхода можно будет прицельно рассматривать новые ошибки и потенциальные уязвимости в первый же день их выхода в свет\.

![0660_Easy_Way_To_Earn_Money_With_BugBounty_ru/image4.png](https://import.viva64.com/docx/blog/0660_Easy_Way_To_Earn_Money_With_BugBounty_ru/image4.png)

## Потенциальные уязвимости

Внимательный читатель может озадачиться:

_Стоп, стоп\! С одной стороны, говорится об поиске в коде ошибок в программах, с другой стороны упоминаются потенциальные уязвимости\. Более того, уязвимости более интересны с точки Bug Bounty\. Прошу пояснить\!_

Дело в том, что ошибки и потенциальные уязвимости – это, по сути, одно и тоже\. Конечно, только немногие ошибки/потенциальные уязвимости при дальнейшем исследовании могут оказываются настоящими уязвимостями\. Однако, безобидный ляп и серьезная уязвимость может выглядеть в коде совершенно одинаково\. В статье "[Как PVS\-Studio может помочь в поиске уязвимостей?](https://pvs-studio.ru/ru/blog/posts/cpp/0514/)" приводитсся несколько таких \(на первый взгляд обыкновенных\) ошибок, которые, как теперь известно, являются уязвимостями\.

Кстати, согласно докладу National Institute of Standards and Technology \(NIST\), около 64% уязвимостей в приложениях, связаны именно с программными ошибками, а не с недостатками системы безопасности \(not a lack of security features\)\.

Так что уверенно берите в руки PVS\-Studio и приступайте к поиску ошибок и дефектов безопасности\! В этом, кстати, вам поможет классификация предупреждений согласно [CWE](https://pvs-studio.ru/ru/pvs-studio/sast/cwe/)\.

## Заключение

Надеюсь, я помог читателю в поисках того самого бага, который принесет ему немного признания и денежного вознаграждения\. Уверен, что статический анализ им в этом поможет\! Помните, что у разработчиков, как правило, нет времени на детальный анализ найденных ошибок, поэтому вам еще предстоит доказать, что ваша находка действительно может повлиять на работу программы\. Лучшим способом будет наглядно её воспроизвести\. И помните: чем сильнее баг в коде может нарушить безопасность, тем больше за неё заплатят\.

На этом, пожалуй, всё\. Желаю удачи в поисках награды\!