Содержание статьи
WARNING
Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный материалами данной статьи.
В 2016 году самым популярным вопросом ко мне как эксперту по безопасности банковских систем был вопрос о безопасности бесконтактных платежей. Сначала вопросы касались PayPass, payWave, затем — Apple Pay, Samsung Pay, Android Pay. Увы, готовых ответов на них у меня не было, и мне самому приходилось «спрашивать интернет». Самые популярные на тот момент статьи описывали Apple Pay как «самую защищенную технологию», в том числе и на устройствах с джейлбрейком.
И единственная проблема была связана с карточным мошенничеством — когда уже украденные карты использовались мошенниками в Apple Pay для совершения платежей.
«Как же так? Ведь сам постулат о хорошей защищенности Apple Pay даже на устройствах, подвергшихся джейлбрейку, по сути абсурден: киберпреступник всегда может перехватить номер карты в момент ее добавления на устройство (и в этом, кстати, я оказался практически прав). Это явно тема для исследования», — подумал я. Почти одновременно с этим вышло исследование Сальвадора Мендозы об атаках на токены Samsung Pay, что и подвигло меня сконцентрироваться на Apple Pay.
INFO
Кстати, между Apple Pay и Samsung Pay есть существенная разница: Samsung Pay не дает пользователям работать на взломанных (рутованных) устройствах, что несколько ограничивает возможности атакующего.
В итоге исследования в области безопасности приложений (web-, mobile- и других) привели меня и к изучению Apple Pay JS, а вот результат оказался несколько неожиданным.
Теория
Возможность использовать Apple Pay на веб-сайтах и в приложениях появилась в iOS 10. С точки зрения пользователя, все работает почти точно так же, как и при оплате в магазинах: при нажатии кнопки «Оплатить с Apple Pay» появляется Payment Sheet — шторка с данными о том, что и как пользователь оплачивает, куда товар доставлять (если это применимо, как в случае с интернет-магазинами), Billing address и так далее. Пользователю остается лишь подтвердить операцию с помощью отпечатка пальца (Touch ID) или PIN-кода (после нескольких неверных вводов Touch ID).
Далее данные шифруются/подписываются с помощью криптоключей покупателя на Secure Element телефона и криптоключей магазина (мерчанта) на серверах Apple.
INFO
Secure Element — микропроцессор, схожий с тем, что используется в пластиковых картах, отвечает за безопасное хранение и выполнение платежных операций.
Далее на сервер мерчанта или сразу на Payment Gateway посылается криптограмма (cryptogram) — зашифрованная информация о сумме, виртуальной карте Apple Pay (токен), идентификатор платежа, а также onlinePaymentCryptogram — аналог подписи с помощью 3-D Secure. Так как эти данные — аналог представления кода 3-D Secure, то и совершить платеж по ним можно только один раз. Ну и кроме того, Apple заботится о противодействии атакам повтора (Replay Attack).
Описание формата платежного токена |
Практика
Фейковые данные и Race Condition
Внимательное изучение платежного процесса на разных сайтах и приложениях, использующих Apple Pay (полный список), выявило, что:
- адрес доставки и платежный адрес никак не проверяются на целостность;
- при подделке суммы с помощью атаки типа man in the middle при вызове Payment Sheet часть платежных шлюзов снимает сумму, отправляемую самим магазином (актуальную стоимость услуг), а часть — сумму, отображенную и подписанную клиентом (хранящуюся в cryptogram);
- один платеж можно повторить несколько раз, воспользовавшись Race Condition — недостатком системы, в результате которого одна транзакция может быть проведена несколько раз, что приведет к неоднократному снятию денег.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»