Эта статья будет ответом на недавнюю публикацию Владимира Таратушка.
Причин написания статьи у меня было несколько.
Первая — это показать, что белые хакеры в Украине есть. Существуют они благодаря одной из программ поощрения поиска уязвимостей, которую проводит Приватбанк.
Следующая причина — это рассказать свою 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)


  1. rewiaca
    29.07.2016 15:27
    +1

    Благодарю! Было интересно почитать. А за какую именно уязвимость большего всего выплатили, если не секрет?


    1. dinikin
      29.07.2016 15:32
      +5

      Массовое пополнение мобильных телефонов с чужой карты


  1. G-M-A-X
    29.07.2016 16:20

    У скольки банков есть такие программы?
    Наверное, только у ПБ. :)


    1. dinikin
      29.07.2016 16:23
      +1

      В Украине только у ПриватБанка, в мире есть банки с похожими программами, можно попробовать их поискать на https://hackerone.com


  1. CyberAlibi
    29.07.2016 16:42
    +8

    Я тут немножко посчитаю чужие деньги…

    1500 + 1250 * 3 + 1000 + 750 * 5 + 500 * 9 + 250 * 8 = 16500

    16500 / 36 = 458 $ в месяц

    Понятное дело, есть еще основная работа. Но блин, это запрлата Q&A'щика… Но только какой мануальный тестировщик найдет хоть один из этих багов? Программисты, которые говнокодят, получают больше чем исследователи, которые за ними подчищают.

    Извините, накипело просто.

    image


    1. dinikin
      29.07.2016 16:49
      +5

      Всреднем, я репортил 55/3г/12мес = 1.5 уязвимости в месяц. На поиск уязвимости уходит от 15 мин.до пару-тройку часов. Изредка больше. $458 за пару часов работы — это не такие уж и маленькие деньги. Средний разработчик получает $10-15/час


      1. nochkin
        29.07.2016 19:36
        +3

        Так «зарплаты» не совсем корректно сравнивать. Ведь разработчик получает свои деньги гарантированно даже если он ковырялся в носу этот час, а хакер получает только в случае успеха.


  1. Bellicus
    29.07.2016 17:24
    -12

    Да сколько ж вы эту тему еще мусолить будете?


  1. Dolios
    29.07.2016 17:40

    Добавьте нормальные подписи к осям. Например, «Время фикса, дней» написано и у оси абсцисс, и у оси ординат, и решительно невозможно понять, что изображено на диаграмме.


  1. slonopotamus
    29.07.2016 18:23
    +2

    Статья «почему в Украине все же есть белые хакеры» как будто бы опровергает статью «почему в Украине нет белых хакеров». Беда в том, что содержимое обеих статей никак не отвечает на вопросы, поставленные в их заголовках.


  1. georgevp
    30.07.2016 01:47

    Не пытаясь начать очередной холивар, отмечу, что правильность размещения предлогов перед названием географических объектов разъяснена на известном многим редакторам сайте — http://www.gramota.ru/spravka/buro/hot10/. Опять же извинюсь, всё это касается только русского языка.


    1. VolCh
      30.07.2016 19:53

      Это касается литературных норм русского языка при использовании его в качестве государственного языка России.

      А вообще феерично:

      Порядок утверждения… правил русской орфографии и пунктуации определяется Правительством Российской Федерации.


  1. Heavis
    30.07.2016 09:01
    +1

    Спасибо за статью!
    Хотелось бы ещё почитать про самые интересные для Вас баги, как они искались, способы эксплуатации.
    Тем более что все уязвимости уже закрыли.


  1. Vladimir_Sklyar
    30.07.2016 14:35

    Отличная статья, показывающая, что выбор есть всегда, ну а ответственность за этот выбор персональная. Подход автора требует определенной дисциплины и систематичности, на что в повседневной жизни, конечно, не всегда хватает ресурсов. Статистика собрана очень интересная, спасибо!


    1. G-M-A-X
      30.07.2016 14:57

      Выбор есть всегда?
      Только у одного банка такая программа.
      Всем остальным пофиг.


      1. Vladimir_Sklyar
        30.07.2016 15:20

        Я имел в виду тот выбор, когда человек сам выбирает, на чью сторону ему становиться. Типа выбор между добром и злом )) Хотя с нашими банками не совсем понятно, где добро, а где зло )


      1. VolCh
        30.07.2016 19:54

        Ну вы можете выбирать исследовать софт этого банка или других.


      1. Jaa
        31.07.2016 16:59

        У остальных банков в Украине нет и близко такого коммерческого электронного продукта, как у Привата. Им не пофиг — у них нечего ресёчить.


        1. rewiaca
          04.08.2016 19:35

          У многих украинских банков есть интернет-банкинг