Причин написания статьи у меня было несколько.
Первая — это показать, что белые хакеры в Украине есть. Существуют они благодаря одной из программ поощрения поиска уязвимостей, которую проводит Приватбанк.
Следующая причина — это рассказать свою success story работы с одним из крупнейшим банком Украины в рамках данной программы.
Так же я хочу показать эффективность работы такой программы на реальном примере и сподвигнуть к организации таких программ те компании, которые по каким то причинам сомневаются или не видят в них реальных плюсов.
Ну и последняя причина — показать будущим и настоящим ресёчерам, что участие в баг-баунти программах интересно, этично и материально выгодно.
Я не считаю себя профессиональным хакером, я не имею профильного образования в области безопасности, у меня нет сертификатов, я не читал талмуд спецификации TCP/IP протокола и я не участвовал в хакатонах и прочих соревнованиях профессиональных хакеров. В то же время у меня есть опыт программирования и написания различных веб-сервисов на PHP, Python, Java. И я примерно понимаю, где обычно программисты допускают ошибки и какие аспекты безопасности игнорируют при разработке веб-приложений. Для меня этого достаточно, что бы успешно находить уязвимости самого критичного уровня.
На данный момент мой опыт как ресёчера составляет 3 года. Именно столько времени я принимаю участие в программе поиска уязвимостей ПриватБанка.
С самого начала я вёл учёт всех найденных уязвимостей. Я сохранял в отдельный файл детальное описание уязвимости, способа воспроизведения, скриншоты подтверждения. Последние помогают, если по какой-то причине разработчикам банка не удаётся воспроизвести уязвимость, либо она оказывается закрытой очередным апдейтом до начала проверки. Спустя некоторое время я начал заносить в файл время подачи заявки, время фикса, сумму вознаграждения. Благодаря этому у меня есть некоторая статистика, с которой я хотел бы вас сегодня познакомить.
Итак, на данный момент у меня собрана статистика по 55 заявленным мною уязвимостям, все из которых на данный момент закрыты.
Согласно статистике по статусам заявок, картина следующая:
Как видно, большинство заявок принимаются в работу. Некоторый уязвимости не были воспроизведены разработчиками банка по причине их сложности либо потому, что на момент того, как уязвимость брали в работу, данный сервис был кардинально переписан. Так же бывали дубликаты, но как правило это были простые, легко обнаружимые уязвимости. N/A — это значит, что по какой-то причине я не сохранил результатов по данной заявке. Все заявки со статусом “принята” в итоге были закрыты и за них были выплачены вознаграждения.
Тип уязвимости/атаки по классификации OWASP:
По классификации уязвимостей видно, что самый распространнёный тип — это Broken Access Control. Это те уязвимости, которые позволяют получить не авторизованный доступ простым перебором инкерментальных значений, которые задают id пользователя или операции. Причина в том, что такие уязвимости легче всего обнаружить и они являются следствием ошибок в архитектуре приложения. Так как банк — это сложная система многочисленных внутренних взаимодействующих друг с другом подсистем, таких как back-офис, процессинг, антифрод, это накладывает определённые трудности на реализацию взаимодействия веб-приложения с этими системами в рамках прав конечного пользователя сервиса. Это приводит к появлению таких уязвимостей, как доступ к выпискам по картам других пользователей, доступ к приватным данным и в конце концов, к доступу к финансовых средствам пользователей.
Так же безусловно отпечаток на этот рейтинг откладывают мои личные предпочтения и набор знаний, которым я обладаю и который я использую при поиске уязвимостей.
Тип получаемой информации или доступа в случае эксплуатации уязвимости:
Как видно по статистике, чаще всего удавалось получить доступ к приватным данным (ФИО, паспортные данные, номера карт, телефонов, адресов), финансовым данным (баланс счёта, выписки и тд.), аккаунтам в разных сервисах(как правило благодаря XSS или Open Redirect) и, что не маловажно, в 1 из 5 случаев доступ к финансовым средствам других пользователей.
Время фикса. Это условная величина. Так как я не обладал информацией о точном времени закрытия уязвимости, я брал время, которое прошло с момента подачи заявки и до оповещения о планируемой выплате вознаграждения.
Как видно, чаще всего оповещение приходило в пределах 2-х месяцев, но иногда по некоторым уязвимостям не было ответа по 3-4 месяца.
Ну и естественно, самый интересный момент для исследователей — это средний размер вознаграждения по закрытым заявкам. Сразу предупрежу, сумма вознаграждения не привязывалась к курсу доллара до середины 2015 года, поэтому какое-то время она уменьшалась в долларовом эквиваленте в связи со стремительным ростом курса доллара к гривне.
Как видно, чаще всего сумма вознаграждения попадает в диапазон $50-500.
Теперь немного деталей. Ниже я собрал длинный список с кратким описанием по каждой уязвимости, что бы можно было составить приблизительное представление о критичность каждой из них:
№ | Домен | Тип уязвимости/атаки (OWASP) | Тип доступа | Краткое описание |
---|---|---|---|---|
1 | privat24.privatbank.ua | Broken Access Control | Приватные данные | Получение критичных данных любой карты |
2 | privat24.privatbank.ua | Broken Access Control | Приватные данные | Доступ к архиву платежей пользователей |
3 | privat24.privatbank.ua | Broken Access Control | Приватные данные | Доступ к приватным данным пользователей (ФИО, паспортные данные, сумма остатка и задолженности) |
4 | privat24.privatbank.ua | Broken Access Control | Приватные данные | Доступ к приватным данным пользователей (ФИО, паспортные данные, девичья фамилия матери) |
5 | privat24.privatbank.ua | Broken Access Control | Финансовые данные | Просмотр выписок по номеру карты |
6 | privat24.privatbank.ua | Broken Access Control | Финансовые операции | Оплата sms рассылки с чужой карты |
7 | liqpay.com | Broken Access Control | Финансовые данные | Данные по платежам клиентов |
8 | napi.privatbank.ua | Broken Access Control | Приватные данные | Получение критичных данных чужой интернет карты |
9 | napi.privatbank.ua | Broken Access Control | Финансовые данные | Покупка авто/жд билетов по чужой карте |
10 | privat24.privatbank.ua | Broken Access Control | Финансовые операции | Создание регулярного платежа по чужой карте |
11 | pcalendar.privatbank.ua | Broken Access Control | Финансовые операции | Изменение статуса любого регулярного платежа, пересоздание, даже если он был удален, просмотр данных по нему |
12 | siteheart.com | Session Variable Overloading | Доступ к аккаунту | Полный доступ к любому аккаунту siteheart.com |
13 | privat24.privatbank.ua | CSRF | Приватные данные | Подключение своего телефона к смс-информированию об операциях по чужой карте |
14 | privat24.privatbank.ua | Broken Access Control | Финансовые операции | Создание регулярного платежа по чужой карте |
15 | cards.privatbank.ua | XSS | Доступ к аккаунту | Кража куки авторизованного пользователя |
16 | privat24.privatbank.ua | Broken Access Control | Финансовые операции | Массовое пополнение мобильных телефонов с чужой карты |
17 | ecommerce.liqpay.com | Broken Access Control | Финансовые операции | Платеж с чужой карты при оплате услуг на сайте мерчанта, подключенного к ПриватБанку |
18 | privat24.privatbank.ua | Broken Access Control | Приватные данные | Получение номеров телефонов, подключенных к услуге SMS-уведомления для любой карты ПриватБанка |
19 | privat24.privatbank.ua | Broken Access Control | Приватные данные | Просмотр информации по коммунальным платежам клиентов приват24 (ФИО, адрес проживания, моб. телефон, задолженность) |
20 | pcalendar.privatbank.ua | Broken Access Control | Финансовые данные | Баланс по любой карте ПриватБанка |
21 | pcalendar.privatbank.ua | Broken Access Control | Финансовые операции | Создание регулярного платежа по чужой карте |
22 | pcalendar.privatbank.ua | Broken Access Control | Финансовые операции | Создание регулярного платежа по чужой карте |
23 | privat24.privatbank.ua | Insecure Configuration | Серверные данные | Открыта структура каталогов |
24 | privat24.privatbank.ua | Broken Access Control | Операция модификации | Получение и изменение интернет-лимита по любой карте ПриватБанка |
25 | privat24.privatbank.ua | Broken Access Control | Финансовые данные | Просмотр выписок по номеру карты, присутствуют адреса и gps координаты банкоматов и терминалов самообслуживания, которыми пользуется клиент |
26 | privat24.privatbank.ua | Insecure Configuration | Финансовые данные | Доступны Google чеки |
27 | transfers.privatbank.ua | Broken Access Control | Финансовые данные | Информация по переводам в приват24 (PrivatMoney, Золотая корона, Unistream, Western Union, Contact, Coinstar и Swift) |
28 | privat24.privatbank.ua | Broken Access Control | Финансовые операции | Создание регулярного платежа по чужой карте |
29 | privat24.privatbank.ua | Broken Access Control | Приватные данные | Просмотр информации по коммунальным платежам клиентов приват24 (ФИО, адрес проживания, моб. телефон, задолженность) |
30 | privat24.privatbank.ua | Broken Access Control | Финансовые данные | Информация по заявкам на кредитный рейтинг в УБКИ (ФИО, ИНН, дата рождения, кредитный рейтинг и пр.) |
31 | client-bank.privatbank.ua | Broken Access Control | Финансовые данные | Получение выписки по эквайрингу по любому мерчанту ПриватБанка |
32 | client-bank.privatbank.ua | Broken Access Control | Пароли | Получение пароля любого мерчанта, зарегистрированного в приват24 в эквайринге. Помимо пароля доступен номер карты для приёма платежей, название клиента, адрес сайта клиента, ip адрес и пр. |
33 | limit.pb.ua | Broken Authentication and Session Management | Приватные данные | Подробная информация по клиенту (ФИО, номера карт, телефонов, дата рождения, адреса проживания и т.д.) |
34 | privat24.privatbank.ua | Broken Access Control | Приватные данные | Получение по номеру карты ФИО владельца, номера телефона, срока действия карты |
35 | socauth.privatbank.ua | Insecure Configuration | Приватные данные | Подробная информация по клиенту (ФИО, номера карт, телефонов, дата рождения, адреса проживания и т.д.) |
36 | privat24.privatbank.ua | Broken Authentication and Session Management | Доступ к аккаунту | Многократно вход в приват24 по сформированной ссылке без ввода статического и отп пароля даже после окончания действия сессии ользователя |
37 | chat.sender.mobi | XSS | Доступ к аккаунту | Кража куки авторизованного пользователя |
38 | msb.privatbank.ua | XSS | Доступ к аккаунту | Кража куки авторизованного пользователя |
39 | mypayments.privatbank.ua | Broken Authentication and Session Management | Приватные данные | Подробная информация по клиенту (ФИО, номера карт, телефонов, дата рождения, адреса проживания и т.д.) |
40 | privat24.privatbank.ua | Broken Authentication and Session Management | Финансовые данные | Выписки по картам пользователей. |
41 | liqpay.com | Broken Authentication and Session Management | Доступ к аккаунту | Cлабая защита сессии пользователя при авторизации через звонок на мобильный телефон |
42 | client-bank.privatbank.ua | Broken Access Control | Финансовые данные | Выписки по любому терминалу, подключенному к эквайрингу. |
43 | client-bank.privatbank.ua | Broken Access Control | Финансовые данные | Просмотр документов юр. лиц, созданных при помощи конструктора документов |
44 | chat.sender.mobi | XSS | Доступ к аккаунту | Кража куки авторизованного пользователя |
45 | bank24.privatbank.ua | XSS | Доступ к аккаунту | Кража куки авторизованного пользователя |
46 | blago.privatbank.ua | Broken Access Control | Финансовые операции | Уязвимость позволяет любому зарегистрированному пользователю подменить карту любого другого пользователя на свою для получения пожертвований |
47 | client-bank.privatbank.ua | Broken Access Control | Финансовые данные | Информация по чужим договорам с зарубежными партнерами |
48 | client-bank.privatbank.ua | Broken Access Control | Приватные данные | Информация о пользователях, имеющих доступ к указанному счёту, а именно логин(иногда это номер телефона), ФИО, email. |
49 | privat24.privatbank.ua | Broken Access Control | Операция модификации | Массовое измение (как минимум уменьшение) кредитных лимитов по картам клиентов ПриватБанка |
50 | nkk.privatbank.ua | Broken Access Control | Приватные данные | Доступ к информации, которую клиент заполняет при оформлении заявки на кредит |
51 | privat24.privatbank.ua | Redirects and forwards | Доступ к аккаунту | Доступ к аккаунту пользователя через токен, полученный через Open Redirect |
52 | client-bank.privatbank.ua | Broken Authentication and Session Management | Доступ к аккаунту | Доступ к аккаунту пользователя через токен, полученный через referer на сайте статистики |
53 | client-bank.privatbank.ua | Redirects and forwards | Доступ к аккаунту | Доступ к аккаунту пользователя через фишинг, используя Open Redirect |
54 | client-bank.privatbank.ua | Broken Authentication and Session Management | Доступ к аккаунту | Доступ к аккаунту пользователя через токен, полученный через referer на сайте статистики |
55 | client-bank.privatbank.ua | Broken Access Control | Финансовые данные | Доступ к к договорам с зарубежными партнерами клиентов |
Таким образом, анализируя критичность перечисленных выше уязвимостей, вы можете оценить эффективность данной программы для банка.
Ну и напоследок, я хотел бы развеять стойкое, но ошибочное мнение многих, что с ПриватБанком лучше не работать, так как они могут обвинить в взломе, как это было описано в истории с Алексеем Моховым.
Главный принцип белого хакера — это этичность. Поиск уязвимостей должен проводиться исключительно на аккаунтах и счетах самих “взломщиков” либо их родственников/друзей/знакомых с их личного разрешения. Так же, если поиск уязвимости осуществлялся в рамках баг-баунти программы, раскрывать информацию о ней стоит только после её закрытия и только с разрешения владельца ресурса, на котором она была найдена. Тогда все ваши действия не будут осуществлять в ущерб компании и не будут нарушать закон, а поэтому претензий к вам, как к исследователю, не будет.
Комментарии (19)
G-M-A-X
29.07.2016 16:20У скольки банков есть такие программы?
Наверное, только у ПБ. :)dinikin
29.07.2016 16:23+1В Украине только у ПриватБанка, в мире есть банки с похожими программами, можно попробовать их поискать на https://hackerone.com
CyberAlibi
29.07.2016 16:42+8Я тут немножко посчитаю чужие деньги…
1500 + 1250 * 3 + 1000 + 750 * 5 + 500 * 9 + 250 * 8 = 16500
16500 / 36 = 458 $ в месяц
Понятное дело, есть еще основная работа. Но блин, это запрлата Q&A'щика… Но только какой мануальный тестировщик найдет хоть один из этих багов? Программисты, которые говнокодят, получают больше чем исследователи, которые за ними подчищают.
Извините, накипело просто.
dinikin
29.07.2016 16:49+5Всреднем, я репортил 55/3г/12мес = 1.5 уязвимости в месяц. На поиск уязвимости уходит от 15 мин.до пару-тройку часов. Изредка больше. $458 за пару часов работы — это не такие уж и маленькие деньги. Средний разработчик получает $10-15/час
nochkin
29.07.2016 19:36+3Так «зарплаты» не совсем корректно сравнивать. Ведь разработчик получает свои деньги гарантированно даже если он ковырялся в носу этот час, а хакер получает только в случае успеха.
Dolios
29.07.2016 17:40Добавьте нормальные подписи к осям. Например, «Время фикса, дней» написано и у оси абсцисс, и у оси ординат, и решительно невозможно понять, что изображено на диаграмме.
slonopotamus
29.07.2016 18:23+2Статья «почему в Украине все же есть белые хакеры» как будто бы опровергает статью «почему в Украине нет белых хакеров». Беда в том, что содержимое обеих статей никак не отвечает на вопросы, поставленные в их заголовках.
georgevp
30.07.2016 01:47Не пытаясь начать очередной холивар, отмечу, что правильность размещения предлогов перед названием географических объектов разъяснена на известном многим редакторам сайте — http://www.gramota.ru/spravka/buro/hot10/. Опять же извинюсь, всё это касается только русского языка.
VolCh
30.07.2016 19:53Это касается литературных норм русского языка при использовании его в качестве государственного языка России.
А вообще феерично:Порядок утверждения… правил русской орфографии и пунктуации определяется Правительством Российской Федерации.
Heavis
30.07.2016 09:01+1Спасибо за статью!
Хотелось бы ещё почитать про самые интересные для Вас баги, как они искались, способы эксплуатации.
Тем более что все уязвимости уже закрыли.
Vladimir_Sklyar
30.07.2016 14:35Отличная статья, показывающая, что выбор есть всегда, ну а ответственность за этот выбор персональная. Подход автора требует определенной дисциплины и систематичности, на что в повседневной жизни, конечно, не всегда хватает ресурсов. Статистика собрана очень интересная, спасибо!
G-M-A-X
30.07.2016 14:57Выбор есть всегда?
Только у одного банка такая программа.
Всем остальным пофиг.Vladimir_Sklyar
30.07.2016 15:20Я имел в виду тот выбор, когда человек сам выбирает, на чью сторону ему становиться. Типа выбор между добром и злом )) Хотя с нашими банками не совсем понятно, где добро, а где зло )
rewiaca
Благодарю! Было интересно почитать. А за какую именно уязвимость большего всего выплатили, если не секрет?
dinikin
Массовое пополнение мобильных телефонов с чужой карты