Типичная атака на систему ДБО


                     Евгения Поцелуевская
              epotseluevskaya@ptsecurity.ru
Positive Technologies – это:


   MaxPatrol – уникальная система анализа
   защищенности и соответствия стандартам

   XSpider – инновационный сканер безопасности

   Positive Research – один из крупнейших
   исследовательских центров в Европе

   Positive Hack Days – международный форум по
   информационной безопасности
Мы

 Проводим более 20-ти крупномасштабных
 тестирований на проникновение в год

 Анализируем защищенность систем ДБО на потоке

 Участвуем в ПК 3, разработке СТО БР ИББС

 Развиваем SecurityLab.ru – самый популярный
 интернет-портал, посвященный информационной
 безопасности

 Лицензиаты ФСТЭК, ФСБ, Министерства обороны РФ
А еще
Самые распространенные уязвимости систем ДБО


  Возможна идентификация приложений

    Недостаточная защита от Brute Force

    Межсайтовое выполнение сценариев

   Возможно проведение атак на сессию

            Слабая парольная политика
  Предугадываемый формат идентификаторов
                           пользователей

    Стандартные сообщения об ошибках
            Незащищенная передача данных
                      при аутентификации

  Раскрытие информации об идентификаторах

         Отсутствует маскирование PAN
Результаты анализа защищенности ДБО

                                        Получение данных для подключения к
                   Полный контроль      СУБД и внутренним системам (возможно
                     над системой       развитие из внутренней сети)

                                                     Доступ в личные кабинеты
      Выполнение                                     пользователей
       команд на
        сервере
                                                          Проведение транзакций
                                                          без ввода OTP
                                                          авторизованным
                                                          пользователем
     Полный
    контроль
    над СУБД              Несанкционированное
                          проведение транзакций




  Большинство систем ДБО содержали серьезные уязвимости,
  просто каждая ДБО была уязвима по-своему
PHDays I-Bank




PHDays I-Bank НЕ ЯВЛЯЕТСЯ системой
ДБО, которая действительно работает в
каком-либо из существующих банков
Система разрабатывалась специально
для конкурса на PHDays 2012
Демонстрация
Самые распространенные уязвимости систем ДБО


  Возможна идентификация приложений

    Недостаточная защита от Brute Force

    Межсайтовое выполнение сценариев

   Возможно проведение атак на сессию

            Слабая парольная политика
  Предугадываемый формат идентификаторов
                           пользователей

    Стандартные сообщения об ошибках
            Незащищенная передача данных
                      при аутентификации

  Раскрытие информации об идентификаторах

         Отсутствует маскирование PAN
Шаг 1: аутентификация

                                       Есть же CAPTCHA. В чем проблема?


  Недостаточная защита от Brute Force

                                   Пользователь может установить свой пароль. Проверяется только
                                   его длина. Наверняка найдется кто-то с паролем 12345678


           Слабая парольная политика
Предугадываемый формат идентификаторов
                         пользователей




      В PHDays I-Bank, как и почти во всех реальных системах ДБО,
      идентификатор пользователя состоит из цифр.

      Примеры идентификаторов: 1000001, 1000002, …
Демонстрация
Проблемы реализации CAPTCHA у PHDays I-BANK

    Значение передается в скрытом поле HTML-формы




  public function encodeCaptchaCode($code) {
    return @base64_encode(@strrev(@base64_encode($code)));
  }


    Для шифрования не используются временные
    значения – расшифровать строку проще простого




 PUlUTTVFak0= =ITM5EjM  MjE5MTI= 
Как еще можно обходить CAPTCHA

   Brute Force (допускается повторная отправка одного и того же
   значения)
   Передавать значение, не совпадающее с кодом, но попадающее
   под требования проверки (приложение проверяет только длину
   кода или наличие определенных символов)
   Передавать запросы, для которых CAPTCHA       не проверяется
   (например,  код   может     не  требоваться   при   передаче
   определенных заголовков в запросе)
   Использовать автоматические распознаватели текста (FineReader)
   Автоматизировать удаление
   наложенных на текст шумов
   ...
   На крайний случай всегда есть
   дрессированные обезьянки
   ручная проверка
Шаг 1: аутентификация



  Недостаточная защита от Brute Force




          Слабая парольная политика
Предугадываемый формат идентификаторов
                         пользователей




Раскрытие информации об идентификаторах
Шаг 2: авторизация для проведения транзакции



    Предугадать OTP не получится, алгоритм
    генерации достаточно надежный
Шаг 2: авторизация для проведения транзакции



    Предугадать OTP не получится, алгоритм
    генерации достаточно надежный

    Но так ли нужно его угадывать? ;)
Шаг 2: авторизация для проведения транзакции

Шаг1             Шаг2           Шаг3              Шаг4
Ввод платежных   Ввод           Проверка          Проведение
реквизитов и     одноразового   OTP, подтвержде   транзакции
суммы платежа    пароля         ние транзакции
Демонстрация
Другие варианты обхода авторизации по OTP

    Brute Forсe (возможна повторная      отправка
    значений для одного и того же OTP)

    Проведение транзакций небольшими частями,
    для которых ввод OTP не требуется (в системе
    установлены   лимиты,   начиная  с   которых
    необходима авторизация)

    Предугадывание    значений   OTP     (слабые
    алгоритмы генерации OTP)

    Получение информации об ожидаемом значении
    OTP   в  открытом    виде   (например, путем
    получения доступа к лог-файлу)
Race condition

Если отправлять много запросов, то возможна ситуация,
когда запросы будут выполняться одновременно:

                      Хочу перевести
      Запрос N                           Запрос N+1
                      1000 рублей на
                       свой же счет



      Проверка                            Проверка
      наличия                             наличия
    необходимой                         необходимой
       суммы                               суммы




   Зачисление денег                    Зачисление денег




                         Profit! $$$
Race condition

Если отправлять много запросов, то возможна ситуация,
когда запросы будут выполняться одновременно:
                      Пользователь: хочу
                            Хочу перевести
      Запрос N        перевести 10 000 рублей на     Запрос N+1
                            1000 рублей на
                      свой же свой же счет
                              счет



      Проверка                                        Проверка
      наличия                                         наличия
    необходимой                                     необходимой
       суммы                                           суммы




   Зачисление денег                                Зачисление денег




                                Profit! $$$
Race condition

Если отправлять много запросов, то возможна ситуация,
когда запросы будут выполняться одновременно:
                      Пользователь: хочу
                            Хочу перевести
      Запрос N        перевести 10 000 рублей на      Запрос N+1
                            1000 рублей на
                      свой же свой же счет
                              счет

                      Приложение: Проверяю… у
                      пользователя 10 000 рублей,
      Проверка        достаточно для перевода.         Проверка
      наличия                                          наличия
    необходимой                                      необходимой
       суммы                                            суммы




   Зачисление денег                                 Зачисление денег




                                Profit! $$$
Race condition

Если отправлять много запросов, то возможна ситуация,
когда запросы будут выполняться одновременно:
                      Пользователь: хочу
                            Хочу перевести
      Запрос N        перевести 10 000 рублей на     Запрос N+1
                            1000 рублей на
                      свой же свой же счет
                              счет

                      Приложение: Проверяю… у
                      пользователя 10 000
      Проверка        рублей, достаточно для          Проверка
      наличия         перевода.                       наличия
    необходимой                                     необходимой
       суммы          ….                               суммы
                      Перевожу необходимую
                      сумму (баланс=0 рублей)


   Зачисление денег                                Зачисление денег




                                Profit! $$$
Race condition

Если отправлять много запросов, то возможна ситуация,
когда запросы будут выполняться одновременно:
                      Пользователь: хочу
                            Хочу перевести
      Запрос N        перевести 10 000 рублей на      Запрос N+1
                            1000 рублей на
                      свой же свой же счет
                              счет

                      Приложение: Проверяю… у
                      пользователя 10 000 рублей,
      Проверка        достаточно для перевода.         Проверка
      наличия         ….                               наличия
    необходимой                                      необходимой
       суммы          Перевожу необходимую              суммы
                      сумму (баланс=0 рублей)
                      ….
                      Начисляю необходимую
                      сумму (Запрос N: + 10 000,
   Зачисление денег   Запрос N+1: +10 000)          Зачисление денег




                                Profit! $$$
Демонстрация
XML External Entity

   Уязвимость позволяет внедрять XML-код, и, как
   следствие:
     Читать файлы на сервере

     Сканировать ресурсы внутренней сети посредством HTTP-,
     SMB-, FTP- запросов

     Реализовать отказ в обслуживании

     Читать файлы общедоступных ресурсов на базе Windows
     (hostC$)

     …
Демонстрация
Хотите пример из продуктивной системы?

                 Милочка, а проверьте-ка
                 систему ДБО нашего
                 банка




                            Да, сэр



               через полчаса…



               Да тут же SQL-инъекция! Грубейшая ошибка
               разработки веб-приложения!
А ведь можно было бы…

                По содержимому базы проанализировать
                платежи: порядок обработки, статусы, суммы,
                получатели
А ведь можно было бы…

                По содержимому базы проанализировать
                платежи: порядок обработки, статусы, суммы,
                получатели

                Найти клиентов, периодически переводящих
                крупные суммы в пределах установленных
                лимитов
А ведь можно было бы…

                По содержимому базы проанализировать
                платежи: порядок обработки, статусы, суммы,
                получатели

                Найти клиентов, периодически переводящих
                крупные суммы в пределах установленных
                лимитов

                Выбрать тех, где не подключена услуга SMS-
                оповещения (например, сосредоточиться на
                некарточных счетах)
А ведь можно было бы…

                По содержимому базы проанализировать
                платежи: порядок обработки, статусы, суммы,
                получатели

                Найти клиентов, периодически переводящих
                крупные суммы в пределах установленных
                лимитов

                Выбрать тех, где не подключена услуга SMS-
                оповещения (например, сосредоточиться на
                некарточных счетах)

                Создать свой платеж, присвоив ему нужный
                статус, или просто подменить реквизиты
                платежа, уже готового к отправке в АБС
А ведь можно было бы…

                По содержимому базы проанализировать
                платежи: порядок обработки, статусы, суммы,
                получатели

                Найти клиентов, периодически переводящих
                крупные суммы в пределах установленных
                лимитов

                Выбрать тех, где не подключена услуга SMS-
                оповещения (например, сосредоточиться на
                некарточных счетах)

                Создать свой платеж, присвоив ему нужный
                статус, или просто подменить реквизиты
                платежа, уже готового к отправке в АБС

                Profit!
Заключение

  Большинство систем
  ДБО имеют
  серьезные
  уязвимости
Заключение

  Большинство систем
  ДБО имеют
  серьезные
  уязвимости
  Эксплуатация
  уязвимостей часто
  бывает не такой уж
  сложной
Заключение

  Большинство систем
  ДБО имеют
  серьезные
  уязвимости
  Эксплуатация
  уязвимостей часто
  бывает не такой уж
  сложной
  Тем важнее их
  своевременно
  обнаружить и
  устранить
Заключение
    Проблема                                                  Решение
                         Реализовать эффективный алгоритм генерации идентификаторов пользователей, которые не
                         были бы легко угадываемы (например, идентификатор может включать символы, зависящие от
                         имени пользователя)
                         Устранить уязвимости, связанные с раскрытием информации об используемых идентификаторах
                         (исправить код приложения, что и где править – расскажем :) )
                         Реализовать строгую парольную политику (задать длину и сложность пароля, периодичность
Возможен обход           смены пароля, невозможность использования предыдущих паролей, а также легко угадываемых
механизма                словарных паролей)

аутентификации           Использовать правильную CAPTCHA (не передавать код CAPTCHA вместе со страницей; «шум»
                         должен мешать не человеку, а машине; и т.п.)
                         Реализовать блокировку попыток подбора данных (при этом блокировка должна зависеть как от
                         частоты попыток подбора и количества неправильно введенных паролей, так и от количества
                         неправильно введенных идентификаторов, чтобы избежать блокировки легитимных
                         пользователей)
                         ….
                         Реализовать эффективный алгоритм генерации OTP
                         Устранить недостатки в логике авторизации: OTP должен обязательно требоваться для всех
Возможен обход           транзакций, вне зависимости от суммы, времени суток, или индивидуальных настроек
механизма авторизации    пользователей
по OTP                   Обеспечить защиту от подбора OTP (при каждом вводе неправильного значения OTP меняется)
                         …
                         Обеспечить невозможность одновременного доступа к данным с целью изменения для разных
             Race        потоков или разных компонентов приложения (использовать блокировку данных на время
             Condition   обработки)
                         Обеспечить проверку и фильтрацию входных данных от пользователя (экранирование
                         специальных символов)
                 XXE     При необходимости использования XML запретить поддержку внешних сущностей (External
                         Entity) и DTD
                         ….
Спасибо за внимание!


                 Евгения Поцелуевская
          epotseluevskaya@ptsecurity.ru

Демонстрация атаки на ДБО

  • 1.
    Типичная атака насистему ДБО Евгения Поцелуевская epotseluevskaya@ptsecurity.ru
  • 2.
    Positive Technologies –это: MaxPatrol – уникальная система анализа защищенности и соответствия стандартам XSpider – инновационный сканер безопасности Positive Research – один из крупнейших исследовательских центров в Европе Positive Hack Days – международный форум по информационной безопасности
  • 3.
    Мы Проводим более20-ти крупномасштабных тестирований на проникновение в год Анализируем защищенность систем ДБО на потоке Участвуем в ПК 3, разработке СТО БР ИББС Развиваем SecurityLab.ru – самый популярный интернет-портал, посвященный информационной безопасности Лицензиаты ФСТЭК, ФСБ, Министерства обороны РФ
  • 4.
  • 5.
    Самые распространенные уязвимостисистем ДБО Возможна идентификация приложений Недостаточная защита от Brute Force Межсайтовое выполнение сценариев Возможно проведение атак на сессию Слабая парольная политика Предугадываемый формат идентификаторов пользователей Стандартные сообщения об ошибках Незащищенная передача данных при аутентификации Раскрытие информации об идентификаторах Отсутствует маскирование PAN
  • 6.
    Результаты анализа защищенностиДБО Получение данных для подключения к Полный контроль СУБД и внутренним системам (возможно над системой развитие из внутренней сети) Доступ в личные кабинеты Выполнение пользователей команд на сервере Проведение транзакций без ввода OTP авторизованным пользователем Полный контроль над СУБД Несанкционированное проведение транзакций Большинство систем ДБО содержали серьезные уязвимости, просто каждая ДБО была уязвима по-своему
  • 7.
    PHDays I-Bank PHDays I-BankНЕ ЯВЛЯЕТСЯ системой ДБО, которая действительно работает в каком-либо из существующих банков Система разрабатывалась специально для конкурса на PHDays 2012
  • 8.
  • 9.
    Самые распространенные уязвимостисистем ДБО Возможна идентификация приложений Недостаточная защита от Brute Force Межсайтовое выполнение сценариев Возможно проведение атак на сессию Слабая парольная политика Предугадываемый формат идентификаторов пользователей Стандартные сообщения об ошибках Незащищенная передача данных при аутентификации Раскрытие информации об идентификаторах Отсутствует маскирование PAN
  • 10.
    Шаг 1: аутентификация Есть же CAPTCHA. В чем проблема? Недостаточная защита от Brute Force Пользователь может установить свой пароль. Проверяется только его длина. Наверняка найдется кто-то с паролем 12345678 Слабая парольная политика Предугадываемый формат идентификаторов пользователей В PHDays I-Bank, как и почти во всех реальных системах ДБО, идентификатор пользователя состоит из цифр. Примеры идентификаторов: 1000001, 1000002, …
  • 11.
  • 12.
    Проблемы реализации CAPTCHAу PHDays I-BANK Значение передается в скрытом поле HTML-формы public function encodeCaptchaCode($code) { return @base64_encode(@strrev(@base64_encode($code))); } Для шифрования не используются временные значения – расшифровать строку проще простого PUlUTTVFak0= =ITM5EjM  MjE5MTI= 
  • 13.
    Как еще можнообходить CAPTCHA Brute Force (допускается повторная отправка одного и того же значения) Передавать значение, не совпадающее с кодом, но попадающее под требования проверки (приложение проверяет только длину кода или наличие определенных символов) Передавать запросы, для которых CAPTCHA не проверяется (например, код может не требоваться при передаче определенных заголовков в запросе) Использовать автоматические распознаватели текста (FineReader) Автоматизировать удаление наложенных на текст шумов ... На крайний случай всегда есть дрессированные обезьянки ручная проверка
  • 14.
    Шаг 1: аутентификация Недостаточная защита от Brute Force Слабая парольная политика Предугадываемый формат идентификаторов пользователей Раскрытие информации об идентификаторах
  • 15.
    Шаг 2: авторизациядля проведения транзакции Предугадать OTP не получится, алгоритм генерации достаточно надежный
  • 16.
    Шаг 2: авторизациядля проведения транзакции Предугадать OTP не получится, алгоритм генерации достаточно надежный Но так ли нужно его угадывать? ;)
  • 17.
    Шаг 2: авторизациядля проведения транзакции Шаг1 Шаг2 Шаг3 Шаг4 Ввод платежных Ввод Проверка Проведение реквизитов и одноразового OTP, подтвержде транзакции суммы платежа пароля ние транзакции
  • 18.
  • 19.
    Другие варианты обходаавторизации по OTP Brute Forсe (возможна повторная отправка значений для одного и того же OTP) Проведение транзакций небольшими частями, для которых ввод OTP не требуется (в системе установлены лимиты, начиная с которых необходима авторизация) Предугадывание значений OTP (слабые алгоритмы генерации OTP) Получение информации об ожидаемом значении OTP в открытом виде (например, путем получения доступа к лог-файлу)
  • 20.
    Race condition Если отправлятьмного запросов, то возможна ситуация, когда запросы будут выполняться одновременно: Хочу перевести Запрос N Запрос N+1 1000 рублей на свой же счет Проверка Проверка наличия наличия необходимой необходимой суммы суммы Зачисление денег Зачисление денег Profit! $$$
  • 21.
    Race condition Если отправлятьмного запросов, то возможна ситуация, когда запросы будут выполняться одновременно: Пользователь: хочу Хочу перевести Запрос N перевести 10 000 рублей на Запрос N+1 1000 рублей на свой же свой же счет счет Проверка Проверка наличия наличия необходимой необходимой суммы суммы Зачисление денег Зачисление денег Profit! $$$
  • 22.
    Race condition Если отправлятьмного запросов, то возможна ситуация, когда запросы будут выполняться одновременно: Пользователь: хочу Хочу перевести Запрос N перевести 10 000 рублей на Запрос N+1 1000 рублей на свой же свой же счет счет Приложение: Проверяю… у пользователя 10 000 рублей, Проверка достаточно для перевода. Проверка наличия наличия необходимой необходимой суммы суммы Зачисление денег Зачисление денег Profit! $$$
  • 23.
    Race condition Если отправлятьмного запросов, то возможна ситуация, когда запросы будут выполняться одновременно: Пользователь: хочу Хочу перевести Запрос N перевести 10 000 рублей на Запрос N+1 1000 рублей на свой же свой же счет счет Приложение: Проверяю… у пользователя 10 000 Проверка рублей, достаточно для Проверка наличия перевода. наличия необходимой необходимой суммы …. суммы Перевожу необходимую сумму (баланс=0 рублей) Зачисление денег Зачисление денег Profit! $$$
  • 24.
    Race condition Если отправлятьмного запросов, то возможна ситуация, когда запросы будут выполняться одновременно: Пользователь: хочу Хочу перевести Запрос N перевести 10 000 рублей на Запрос N+1 1000 рублей на свой же свой же счет счет Приложение: Проверяю… у пользователя 10 000 рублей, Проверка достаточно для перевода. Проверка наличия …. наличия необходимой необходимой суммы Перевожу необходимую суммы сумму (баланс=0 рублей) …. Начисляю необходимую сумму (Запрос N: + 10 000, Зачисление денег Запрос N+1: +10 000) Зачисление денег Profit! $$$
  • 25.
  • 26.
    XML External Entity Уязвимость позволяет внедрять XML-код, и, как следствие: Читать файлы на сервере Сканировать ресурсы внутренней сети посредством HTTP-, SMB-, FTP- запросов Реализовать отказ в обслуживании Читать файлы общедоступных ресурсов на базе Windows (hostC$) …
  • 27.
  • 28.
    Хотите пример изпродуктивной системы? Милочка, а проверьте-ка систему ДБО нашего банка Да, сэр через полчаса… Да тут же SQL-инъекция! Грубейшая ошибка разработки веб-приложения!
  • 29.
    А ведь можнобыло бы… По содержимому базы проанализировать платежи: порядок обработки, статусы, суммы, получатели
  • 30.
    А ведь можнобыло бы… По содержимому базы проанализировать платежи: порядок обработки, статусы, суммы, получатели Найти клиентов, периодически переводящих крупные суммы в пределах установленных лимитов
  • 31.
    А ведь можнобыло бы… По содержимому базы проанализировать платежи: порядок обработки, статусы, суммы, получатели Найти клиентов, периодически переводящих крупные суммы в пределах установленных лимитов Выбрать тех, где не подключена услуга SMS- оповещения (например, сосредоточиться на некарточных счетах)
  • 32.
    А ведь можнобыло бы… По содержимому базы проанализировать платежи: порядок обработки, статусы, суммы, получатели Найти клиентов, периодически переводящих крупные суммы в пределах установленных лимитов Выбрать тех, где не подключена услуга SMS- оповещения (например, сосредоточиться на некарточных счетах) Создать свой платеж, присвоив ему нужный статус, или просто подменить реквизиты платежа, уже готового к отправке в АБС
  • 33.
    А ведь можнобыло бы… По содержимому базы проанализировать платежи: порядок обработки, статусы, суммы, получатели Найти клиентов, периодически переводящих крупные суммы в пределах установленных лимитов Выбрать тех, где не подключена услуга SMS- оповещения (например, сосредоточиться на некарточных счетах) Создать свой платеж, присвоив ему нужный статус, или просто подменить реквизиты платежа, уже готового к отправке в АБС Profit!
  • 34.
    Заключение Большинствосистем ДБО имеют серьезные уязвимости
  • 35.
    Заключение Большинствосистем ДБО имеют серьезные уязвимости Эксплуатация уязвимостей часто бывает не такой уж сложной
  • 36.
    Заключение Большинствосистем ДБО имеют серьезные уязвимости Эксплуатация уязвимостей часто бывает не такой уж сложной Тем важнее их своевременно обнаружить и устранить
  • 37.
    Заключение Проблема Решение Реализовать эффективный алгоритм генерации идентификаторов пользователей, которые не были бы легко угадываемы (например, идентификатор может включать символы, зависящие от имени пользователя) Устранить уязвимости, связанные с раскрытием информации об используемых идентификаторах (исправить код приложения, что и где править – расскажем :) ) Реализовать строгую парольную политику (задать длину и сложность пароля, периодичность Возможен обход смены пароля, невозможность использования предыдущих паролей, а также легко угадываемых механизма словарных паролей) аутентификации Использовать правильную CAPTCHA (не передавать код CAPTCHA вместе со страницей; «шум» должен мешать не человеку, а машине; и т.п.) Реализовать блокировку попыток подбора данных (при этом блокировка должна зависеть как от частоты попыток подбора и количества неправильно введенных паролей, так и от количества неправильно введенных идентификаторов, чтобы избежать блокировки легитимных пользователей) …. Реализовать эффективный алгоритм генерации OTP Устранить недостатки в логике авторизации: OTP должен обязательно требоваться для всех Возможен обход транзакций, вне зависимости от суммы, времени суток, или индивидуальных настроек механизма авторизации пользователей по OTP Обеспечить защиту от подбора OTP (при каждом вводе неправильного значения OTP меняется) … Обеспечить невозможность одновременного доступа к данным с целью изменения для разных Race потоков или разных компонентов приложения (использовать блокировку данных на время Condition обработки) Обеспечить проверку и фильтрацию входных данных от пользователя (экранирование специальных символов) XXE При необходимости использования XML запретить поддержку внешних сущностей (External Entity) и DTD ….
  • 38.
    Спасибо за внимание! Евгения Поцелуевская epotseluevskaya@ptsecurity.ru