Немецкие исследователи информационной безопасности Карстен Ноль (Karsten Nohl), dexter и Фабиан Браунляйн (Fabian Braunlein) на конференции Chaos Computing Club рассказали о критических уязвимостях платежных протоколов, которые могут быть использованы злоумышленниками для кражи данных банковских карт покупателей и денег со счетов продавцов.

В чем проблема


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

Тем не менее, большая часть всей этой платежной инфраструктуры опирается на проприетарные протоколы родом из 90-х годов прошлого века — на практике это означает наличие большого количества дыр безопасности. Платежные терминалы и процессоры все чаще становятся целью злоумышленников.

Кража финансовых данных


Используя уязвимости платежных протоколов преступники могут получать доступ к информации большого количества банковских карт, а затем подбирать к ним PIN-коды.

К примеру, в Германии главным коммуникационным протоколом для связи платежных терминалов и кассовых аппаратов является ZVT. Он просто позволяет хакерам считывать информацию с банковских карт, получив доступ к локальной сети магазина.

Хуже того, в протоколе реализован механизм для удаленного чтения PIN-кодов карточек. Он защищен криптографической подписью (MAC). Однако ключ симметричного шифрования хранится в так называемых Hardware Security Modules (HSM), некоторые из которых подвержены простым атакам по времени (timing attack) — это позволяет злоумышленникам получить доступ к ключу.



Важный момент — в множестве платежных терминалов используется один и тот же ключ, что открывает злоумышленникам широкие возможности для совершения атак (и противоречит базовым принципам проектирования защищенных систем).

Компрометация счетов продавцов


Кроме того, недостаточная защищенность финансовых протоколов открывает злоумышленникам возможности и по краже денег со счетов продавцов.

Платежные терминалы общаются со специальными платежными процессорами (которые, в свою очередь, взаимодействуют с банками) через интернет, используя стандарт ISO 8583. Существуют различные «диалекты» этого стандарта — в Германии популярен Poseidon. И он также содержит критические уязвимости.

В частности, одна из ошибок аутентификации описывается так. Для исполнения криптографического протокола аутентификации терминал использует секретный ключ. Пока что, все хорошо. Но дальше мы вновь видим повторение ошибки ZVT — множество терминалов хранят один и тот же ключ. Замена одного номера (Terminal ID) в любом конкретном терминале открывает доступ к счету продавца, к которому «привязан» этот терминал. Что еще хуже, Terminal ID печатается на каждом чеке — это еще больше облегчает проведение атаки.



В результате, атакующие могут производить возврат средств (refund) или производить оплату промокодов на сотовую связь (top-up codes).

Подробное описание представленных атак можно найти в этом PDF.

Не все так плохо


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

Тем не менее, российские исследователи информационной безопасности также публиковали информацию о серьезных уязвимостях в системах работающих в нашей стране банков и возможных атаках на сами банкоматы и платежные терминалы.

Комментарии (3)


  1. axilirator
    30.01.2016 21:58
    +3

    Было бы неплохо пометить публикацию как перевод.
    Оригинальная статья: srlabs.de/pos-vulns


  1. Jesting
    31.01.2016 13:52
    +4

    Про ZVT, если вдруг кто не прочел в первоисточнике, объясню: Торговая точка использует связку кассовый компьютер + терминал для приёма карт.
    В древности терминал подключался к кассе через Serial-порт. Теперь же появилась возможность осуществлять тоже соединение через Ethernet. Протокол, который не был предназначен для сети, при этом никто не менял. И если раньше man-in-the-middle в отдельно взятом последовательном кабеле был невозможен(всякое шпионское опустим) то теперь теоретически злоумышленник может встроить себя в сеть магазина, получать и даже модифицировать весь трафик между терминалом и кассой.

    Про пин-код который никогда не покидает терминал в открытом виде, но всё же получается узнать при помощи ZVT. На терминале можно вводить не только пин-код но так же сумму и прочие значение. Протокол может запросить ввод такого значение при этом отобразив произвольное приглашение. Теоретически можно попросить терминал о вводе 4-х значного числа и при этом отобразить приглашение с текстом Enter PIN. Такой ввод терминалом не будет восприниматься как пин-код. Пользователь введет заветные цифры (правда немаскированно) и терминал отправит ввод злоумышленнику.
    Современные терминалы кстати имеют защиту от произвольного приглашения к вводу. Как правила все приглашения захардкожены и специальной командой (условно ShowPromtNumbe(int num)) можно отобразить одно из приглашений находящихся в памяти терминала. Таким образом подобная схема в текущих реалиях возможно только на очень старом и давно не обновляемом железе.

    Для того чтобы подобных злодеяний было меньше, в 2006 году приняли стандарт PCI DSS, который достаточно жестко регламентирует многие аспекты платежной инфраструктуры и сопутствующих вещей.


    1. Jesting
      31.01.2016 14:44

      В прочем, имхо, я рассказал немного о других уязвимостях.