И не прошло суток, как я пишу новую статью, и тоже имеющую отношение к технологии NFC. А именно — оффлайн транзакции в общественном транспорте, почему так и какие плюсы и минусы для пассажиров и перевозчиков это несет. Около пяти лет назад отшумели несколько скандалов, связанных со взломом карт «Тройка» в Москве. Тогда хакерам требовалось получить ключи для доступа к содержимому карт Mifare 1K и подобным, а так же довольно специфичное ПО для работы с ними. В то же время, вероятность быть обнаруженным была довольно-таки высока — карты с несоответствиями содержимого и сервера «Тройки» быстро отправлялись в стоп-лист, и при попытке пройти по такой карте, турникет издавал пронзительный вопль, привлекая внимание. Что же изменилось, когда терминалы стали поддерживать банковские карты?
Именно такую картину при оплате проезда можно наблюдать в некоторых больших городах. Новые терминалы могут работать как со старыми картами Mifare, так и с бесконтактными EMV картами. Надо ли говорить что несмотря на отшумевшие скандалы, уязвимости старых Mifare никуда не делись? Но в этой статье, мы поговорим об уязвимостях которые привносит поддержка EMV.
Описанное ниже носит чисто информативно-познавательный характер. Я понимаю, что некоторых читателей в силу разных субъективных причин данное предупреждение не остановит, но все же помните — существуют статьи УК РФ №159 и №272!
EMV (Europay Mastercard Visa) — стандарт описывающий поведение чипа платежной карты в различных сценариях для обеспечения максимально возможной безопасности платежей. Более подробно про это можно прочитать здесь, в посте уважаемого AlexGre. Нас интересует только то, что в некоторых случаях протокол позволяет оффлайн транзакции, то есть операцию, которую проводит карта и терминал исключительно между собой, а в банк-эквайер информация о транзакции передается позднее. Плюсом данного подхода несомненно является то, что это решение идеально подходит для условий, где нет связи, или соединение нестабильное — как тот же автобус, например. Минус вытекает из названия — терминал не может проверить наличие денежных средств на карте, как и статус самой карты. Подтвердить или опровергнуть списание средств по конкретной операции банк сможет только во время синхронизации. Что будет, если предъявить кондуктору пустую или заблокированную карту? А ничего не будет. С помощью базовых APDU-команд терминал спросит у карты срок ее действия и сравнит с системным временем — если срок действия не истек — тогда он спросит у карты ее PAN — это тот самый номер карты, выбитый на ней. Сохранив эти данные, далее на усмотрение TRM (Terminal Risk Managment, Управление Рисками Терминала), терминал передаст случайное число карте, та его хеширует и подписывает своим ключом, терминал сохраняет исходное число и ответ карты, чтобы позднее передать их в банк. Произведя эти операции, терминал отправляет карте команду завершения связи и обрывает соединение, печатая чек-билет. Позже терминал не сможет списать деньги с этой карты — PAN карты отправляется в стоп-лист — пока не погасить долг, эту карту ни в одном автобусе не примут. Идеальная система, не правда ли? Казалось бы, какие тут уязвимости, никакой халявы все за все заплатят в итоге. Все бы так и оставалось, если бы не одно большое «Но»… Или несколько.
И вот 9 сентября 2014 года компания Apple представила новый способ бесконтактных платежей поверх существующей инфраструктуры. Apple Pay была ориентирована на простоту, скорость и приватность. Простоту обеспечивал (и обеспечивает) интуитивно-понятный интерфейс Wallet, а приватность обеспечивается токенизацией. При добавлении карты в Wallet, платежная система (например Mastercard или Visa), генерирует токен. Токен это PAN — но не тот, что выбит на добавляемой карте, а его эквивалент в платежной системе. Отныне запросы POS-терминалов по этому виртуальному PAN будут рассмотрены платежной системой как если бы это был номер физической карты. При таком подходе, даже потенциально скомпрометированный терминал не видит реального номера карты — токен можно использовать только для платежей на POS-терминалах, в остальных случаях он бесполезен. Позже по такому же принципу стали работать Samsung Pay и Google Pay (Ранее — Android Pay).
Таки да. Устройство с бесконтактной оплатой здесь равносильно физической карте. И в случае ошибки платежа — терминал в автобусе педантично занесет PAN в стоп-лист. Справедливость восторжествовала! Только… PAN то эфемерный! При каждом добавлении карты в мобильное устройство токен будет разный. Соответственно — передобавляем карту в устройство — и мы вылезли из стоп-листа не заплатив ни копейки. При необходимости повторить. Таким образом для воспроизведения данной атаки подойдет любое устройство, способное произвести бесконтактную оплату. То есть 90 процентов всех телефонов с NFC.
Оффлайн — никак. Совсем. Нет возможности определить принадлежность токена к какому-либо аккаунту. Поэтому нужны терминалы способные переходить в оффлайн лишь по необходимости, и оставаться онлайн как можно дольше. Я понимаю, что сумма рисков невелика, но уязвимость настолько проста в эксплуатации, что воспользоваться могут все. Исправить ситуацию можно — есть специализированные валидаторы для общественного транспорта.
Не всегда инновации, внедренные впопыхах, будут безопасны и надежны. Как и с транспортной системой — старые уязвимости еще не заделали, но уже подвезли новые, легкоэксплуатируемые. А костыли — это плохо. Я надеюсь что мое небольшое исследование поможет некоторым транспортным компаниям переосмыслить приоритеты.
Именно такую картину при оплате проезда можно наблюдать в некоторых больших городах. Новые терминалы могут работать как со старыми картами Mifare, так и с бесконтактными EMV картами. Надо ли говорить что несмотря на отшумевшие скандалы, уязвимости старых Mifare никуда не делись? Но в этой статье, мы поговорим об уязвимостях которые привносит поддержка EMV.
Предупреждение для маргиналов, жуликов и хакеров всех мастей:
Описанное ниже носит чисто информативно-познавательный характер. Я понимаю, что некоторых читателей в силу разных субъективных причин данное предупреждение не остановит, но все же помните — существуют статьи УК РФ №159 и №272!
Немного теории
EMV (Europay Mastercard Visa) — стандарт описывающий поведение чипа платежной карты в различных сценариях для обеспечения максимально возможной безопасности платежей. Более подробно про это можно прочитать здесь, в посте уважаемого AlexGre. Нас интересует только то, что в некоторых случаях протокол позволяет оффлайн транзакции, то есть операцию, которую проводит карта и терминал исключительно между собой, а в банк-эквайер информация о транзакции передается позднее. Плюсом данного подхода несомненно является то, что это решение идеально подходит для условий, где нет связи, или соединение нестабильное — как тот же автобус, например. Минус вытекает из названия — терминал не может проверить наличие денежных средств на карте, как и статус самой карты. Подтвердить или опровергнуть списание средств по конкретной операции банк сможет только во время синхронизации. Что будет, если предъявить кондуктору пустую или заблокированную карту? А ничего не будет. С помощью базовых APDU-команд терминал спросит у карты срок ее действия и сравнит с системным временем — если срок действия не истек — тогда он спросит у карты ее PAN — это тот самый номер карты, выбитый на ней. Сохранив эти данные, далее на усмотрение TRM (Terminal Risk Managment, Управление Рисками Терминала), терминал передаст случайное число карте, та его хеширует и подписывает своим ключом, терминал сохраняет исходное число и ответ карты, чтобы позднее передать их в банк. Произведя эти операции, терминал отправляет карте команду завершения связи и обрывает соединение, печатая чек-билет. Позже терминал не сможет списать деньги с этой карты — PAN карты отправляется в стоп-лист — пока не погасить долг, эту карту ни в одном автобусе не примут. Идеальная система, не правда ли? Казалось бы, какие тут уязвимости, никакой халявы все за все заплатят в итоге. Все бы так и оставалось, если бы не одно большое «Но»… Или несколько.
Apple/Samsung/Google Pay — токенизация
И вот 9 сентября 2014 года компания Apple представила новый способ бесконтактных платежей поверх существующей инфраструктуры. Apple Pay была ориентирована на простоту, скорость и приватность. Простоту обеспечивал (и обеспечивает) интуитивно-понятный интерфейс Wallet, а приватность обеспечивается токенизацией. При добавлении карты в Wallet, платежная система (например Mastercard или Visa), генерирует токен. Токен это PAN — но не тот, что выбит на добавляемой карте, а его эквивалент в платежной системе. Отныне запросы POS-терминалов по этому виртуальному PAN будут рассмотрены платежной системой как если бы это был номер физической карты. При таком подходе, даже потенциально скомпрометированный терминал не видит реального номера карты — токен можно использовать только для платежей на POS-терминалах, в остальных случаях он бесполезен. Позже по такому же принципу стали работать Samsung Pay и Google Pay (Ранее — Android Pay).
Токены в оффлайн транзакциях
Таки да. Устройство с бесконтактной оплатой здесь равносильно физической карте. И в случае ошибки платежа — терминал в автобусе педантично занесет PAN в стоп-лист. Справедливость восторжествовала! Только… PAN то эфемерный! При каждом добавлении карты в мобильное устройство токен будет разный. Соответственно — передобавляем карту в устройство — и мы вылезли из стоп-листа не заплатив ни копейки. При необходимости повторить. Таким образом для воспроизведения данной атаки подойдет любое устройство, способное произвести бесконтактную оплату. То есть 90 процентов всех телефонов с NFC.
Как бороться?
Оффлайн — никак. Совсем. Нет возможности определить принадлежность токена к какому-либо аккаунту. Поэтому нужны терминалы способные переходить в оффлайн лишь по необходимости, и оставаться онлайн как можно дольше. Я понимаю, что сумма рисков невелика, но уязвимость настолько проста в эксплуатации, что воспользоваться могут все. Исправить ситуацию можно — есть специализированные валидаторы для общественного транспорта.
Типа таких.
Такой транспортный валидатор проводит онлайн транзакции, если есть возможность сделать это онлайн. В городе такая возможность есть почти всегда.
Такой транспортный валидатор проводит онлайн транзакции, если есть возможность сделать это онлайн. В городе такая возможность есть почти всегда.
Какие выводы?
Не всегда инновации, внедренные впопыхах, будут безопасны и надежны. Как и с транспортной системой — старые уязвимости еще не заделали, но уже подвезли новые, легкоэксплуатируемые. А костыли — это плохо. Я надеюсь что мое небольшое исследование поможет некоторым транспортным компаниям переосмыслить приоритеты.