Інформаційна безпека

Як вкрасти гроші з безконтактної картки і Apple Pay

У статті розбираються популярні міфи і сценарії шахрайства з безконтактними системами оплати на прикладі цього POS-терміналу, карт PayPass/payWave і телефонів з функцією

Google Pay/Apple Pay.

Розглянуті теми:

  • Чи СПРАВДІ можна вкрасти гроші, притулившись POS-терміналом до кишені? — ми спробуємо повністю відтворити цей сценарій шахрайства від початку до кінця, з використанням цього POS-терміналу і платіжних карток в реальних умовах.
  • У чому різниця між фізичними та віртуальними картами Apple Pay? — як відбувається зв’язування фізичної карти і токена Apple Pay, і чому Apple Pay у багато разів безпечніше звичайної карти.
  • Використовуємо апаратний NFC-сніффер (ISO 14443A) — скористаємося пристроєм HydraNFC для перехоплення даних між POS-терміналом і картою. Розглянемо, які конфіденційні дані можна отримати з перехопленого трафіку.
  • Розбираємо протокол EMV — якими обмінюється даними карта з POS-терміналом, використовуваний формат запитів, механізми захисту від шахрайства і replay-атак.
  • Досліджуємо операції без карти (CNP, MO/TO) — в яких випадках насправді(!) можна вкрасти гроші з картки, маючи тільки реквізити, лічені безконтактно, а в яких не можна.

Увага!

У статті детально описується гіпотетична схема шахрайства, від початку і до кінця, очима шахрая, з метою покрити всі аспекти, в яких культивуються міфи і помилки. Незважаючи на провокаційний заголовок, основний висновок статті — безконтактні платежі досить безпечні, а атаки на них трудомісткі і невигідні.

Матеріали у статті представлені виключно в ознайомлювальних цілях. Всі сцени демонстрації шахрайства інсценовано і виконані за згодою беруть участь у них осіб. Всі списані гроші з карток були повернуті їх власникам. Крадіжка грошей з карт є кримінальним злочином і переслідується за законом.
Як це працює?
Для початку розглянемо базові поняття: будь руху грошей з використанням платіжних карт можливі тільки через посередників, підключених до платіжної системи, наприклад VISA або MasterCard. На відміну від переказів між фізичними особами, списання грошей з карти доступно тільки юридичній особі (мерчантом), що має договір еквайрінгу з банком.


Етапи транзакції при оплаті через POS-термінал

На ілюстрації вище зображена класична схема оплати через POS-термінал. Саме ця послідовність дій відбувається, коли після оплати на касі ви очікуєте підтвердження на терміналі.

  1. Покупець прикладає/проводить/вставляє картку в POS-термінал;
  2. POS-термінал по інтернету передає дані в банк-еквайєр;
  3. Банк-еквайєр через міжнародну платіжну систему (МПС) звертається в банк-емітент і запитує, чи може конкретний власник картки оплатити покупку;
  4. Банк-емітент підтверджує або відхиляє купівлю, після чого друкується сліп (другий чек).

Бувають винятки з цієї схеми, наприклад оффлайн транзакції, їх ми розглянемо далі. Також, якщо банк-еквайєр і банк-емітент є одним і тим же банком, кроки 2 і 4 виконуються в межах одного банку.

Продавець (Merchant) — особа або організація, що надає товари або послуги

Банк-еквайєр (Acquiring bank) — банк, який надає продавцю послуги прийому платежів через банківські картки. У цьому банку, зазвичай, знаходиться розрахунковий рахунок продавця, куди зараховуються списані з картки гроші.

Банк-емітент (Issuing bank) — банк, що випустив карту. В ньому знаходиться рахунок власника картки, у якого списуються гроші.

Міжнародна платіжна система (МПС) — міжнародна система-посередник між банками по всьому світу, що дозволяє банкам проводити розрахунки між собою без укладення договору з кожним банком окремо. Всі банки, підключені до МПС, погоджуються працювати за одними правилами, що значно спрощує взаємодію. Наприклад, Visa, MasterCard, UnionPay, American Express, СВІТ (ні, СВІТ не працює закордоном).

Власник карти (Cardholder) — людина, що уклав з банком-емітентом договір про обслуговування картки.

Чим відрізняється звичайна карта від Apple Pay або Google Pay?
Процедура прив’язки банківської картки до системи Apple Pay або Google Pay через незрозумілість процесу часто породжує помилки навіть у професіоналів в IT. Мені доводилося чути багато різних міфів про цієї технології.

Популярні міфи про Apple Pay

 

  • Карта копіюється в телефон
    Це не так, мікропроцесорної карті міститься захищена область пам’яті з криптографічного інформацією, яка після випуску картки не може бути вилучена. Із-за цього чипованну карту не копіювати, ніяк взагалі. Справедливості заради треба сказати, що подібні атаки можливі, але вартість їх перевищує сумарну кількість грошей, які витратять за все життя більшість читачів цієї статті.
  • Телефон кожен раз підключається до інтернету під час оплати
    Google Pay/Apple Pay не підключаються до інтернету під час оплати через POS-термінал. Вся потрібна інформація зберігається локально на телефоні.
  • На кожну оплату генерується новий номер картки (PAN)
    Так може здатися, якщо читати прес-релізи Apple про технології Apple Pay. Але це помилкове трактування поняття токена. Насправді, реквізити віртуальної карти залишаються незмінними досить довго, ви можете це перевірити за останнім цифрам номера картки на сліп (банківському чеку) при оплаті покупок.
  • При оплаті через Apple Pay/Google Pay стягується додаткова комісія
    Це не так, ви заплатите рівно стільки, скільки вказано на ціннику, і згідно з умовами договору з банком-емітентом, чию карту ви прив’язали.
  • Гроші можуть списатися два рази
    Цей міф стосується не тільки Google Pay/Apple Pay, але і звичайних банківських карт. Вважаю, що він з’явився з-за систем оплати громадського транспорту, в яких термінал списує гроші з проїзного квитка кожен раз при піднесенні, так що можна списати кошти два або більше раз, якщо неакуратно піднести картку. У випадку з POS-терміналами цього ризику не існує, так як термінал припиняє обмін з картою, як тільки отримав потрібні дані.


Зв’язування фізичної карти з «токеном» у телефоні

Системи, подібні до Apple Pay, працюють на основі EMV Payment Tokenisation Specification. Процедура зв’язування фізичної карти і телефону з Apple Pay не описана публічно, тому розберемо процес на основі відомих даних:

  1. Постачальник (Google, Apple, Samsung) отримує інформацію про картці;
  2. Через МПС постачальник запитує, чи підтримує дана карта (банк-емітент) роботу з EMV Tokenisation;
  3. На стороні МПС генерується віртуальна карта (токен), який завантажується в захищене сховище в телефоні. Мені невідомо, де саме генерується приватний ключ від віртуальної карти, передається він по інтернету або генерується локально на телефоні, в даному випадку це не має значення.
  4. У телефоні з’являється згенерована віртуальна мапа-токен, операції за якої банк-емітент інтерпретує як операції з першої фізичній карті. У разі блокування фізичної карти, токен теж блокується.

Your browser does not support HTML5 video.
Apple Pay дозволяє вважати реквізити віртуальної карти. PAN номер і expire date відрізняються від прив’язаною карти російського Альфа-Банку. За BIN віртуальної карти (480099) визначається MBNA AMERICA BANK.

При оплаті телефоном, POS-термінал бачить звичайну картку VISA або MasterCard, і спілкується з нею так само, як і з фізичною картою. Віртуальна мапа-токен містить всі атрибути звичайної карти: PAN-номер, строк дії та інше. При цьому номер віртуальної картки і термін дії відрізняються від прив’язаною оригінальної карти.

Сценарій 1 — звичайний POS-термінал


Шахрай, озброєний POS-терміналом

Самий популярний сюжет шахрайства в головах обивателів: до них в натовпі притискається шахрай з включеним терміналом і списує гроші. Ми спробуємо відтворити цей сценарій в реальності.

Умови наступні:

  • У шахрая повністю робочий звичайний POS-термінал, підключений до банку-еквайєру, такий же, як у магазинах та кур’єрів. Прошивка терміналу не модифікована. У нашому випадку — Ingenico iWL250. Це портативний POS-термінал з GPRS модемом, який підтримує безконтактну оплату, працює від батарейки і повністю мобільний.
  • Шахрай не використовує додаткові технічні засоби, тільки POS-термінал
  • Списані кошти зараховуються на розрахунковий рахунок шахрая, за всіма правилами банківських систем

 

Юридична особа

Для початку нам знадобиться юридична особа з розрахунковим рахунком і підключеним еквайрингом. Ми, як справжні шахраї, не будемо нічого оформляти на своє ім’я, а спробуємо купити готове юр. особа на сайті для таких шахраїв. Для цього подивимося оголошення з першої сторінки гугла за запитом «купити іп» і «купити тов».


Пропозиції про продаж готових компаній від шахраїв (кликабельно)

Ціна компанії на чорному ринку з розрахунковим рахунком коливається від 20 до 300 тисяч рублів. Мені вдалося знайти кілька пропозицій ТОВ з POS-терміналом від 200 тисяч рублів. Такі компанії оформлені на підставних осіб, і покупець отримує весь пакет документів, разом з «кеш-картою» — це банківська карта, прив’язана до розрахункового рахунку підставної компанії. З такою картою шахрай може знімати гроші в банкоматі.

Для простоти будемо вважати, що ТОВ + розрахунковий рахунок + еквайринг та POS-термінал обійдуться шахраєві в 100 000 рублів. Насправді більше, але ми спростимо життя нашому гіпотетичному шахраєві, знизивши собівартість атаки. Адже чим нижче собівартість атаки, тим простіше її реалізувати.

Йдемо красти гроші

Отже, шахрай отримав POS-термінал і готовий відправитися в людне місце, щоб притулятися до жертв і красти гроші з кишень. В нашому експерименті всі жертви були попередньо проінструктовані про наші наміри, і всі спроби списання грошей проводилися з їх згоди. У випадках, коли випробовувані не мали власних безконтактних банківських карт, їм пропонувалося покласти в гаманець нашу карту. Попередньо у випробовуваних з’ясовувалося, де саме і як вони зберігають свої карти, тому шахрай заздалегідь знав, де в сумці/кишені знаходиться безконтактна картка.

Your browser does not support HTML5 video.
Відео: шахрай розбушувався в торговому центрі

У разі успішного списання, транзакція скасовувалася через меню терміналу, і гроші поверталися на рахунок випробовуваних. За весь час експерименту ми спробували «вкрасти» гроші у 20 випробовуваних в будівлі торгового центру і на вулиці. Результат випробувань описаний далі.

Проблема: Ліміт на транзакції без PIN-коду
Ліміт на максимальну суму операції без підтвердження ПІН-кодом може бути встановлений як на самому POS-терміналі (CVM Required Limit), так і на стороні банку. У Росії це обмеження одно 1000₽.

UPD У налаштуваннях карти, може бути встановлений тип авторизації Cardholder verification methods (CVMs) у вигляді розпису. В такому випадку, безконтактна транзакція пройде на будь-яку суму без ПІН-коду.

Наш шахрай приймає рішення списувати з 999.99 рублів за раз. Якщо буде запитана повторна спроба списання суми нижче ліміту в короткий часовий проміжок, буде також запропоновано ввести ПІН-коду і, в більшості випадків, не вийде кілька разів поспіль списати за 999.99 рублів. Тому найбільш оптимальною стратегією буде не більше одного списання з однієї карти.


У Росії максимальна сума списання без PIN-коду дорівнює 1000 руб.

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

До речі, у багатьох статтях по даній темі російською мовою говориться, що можна вручну встановити власний ліміт на безконтактні операції без ПІН-коду. Мені не вдалося знайти такої опції в основних російських банках. Може, ви знаєте про таку можливість? Мова саме про безконтактних платежів, а не будь-яких chip&pin-транзакціях.

Проблема: Кілька карт в гаманці

Це важливий момент у даному сценарії атаки, тому що в реальності майже ніхто не носить одну єдину карту в кишені. У більшості випадків, карта зберігається в гаманці разом з іншими безконтактними картками, такими як проїзні квитки або інші банківські карти.


Конкретно мій термінал Igenico iWL250 при виявленні в полі дії більш однієї карти з SAK, що позначає підтримку протоколу 14443-4, повертає помилку: «пред’явіть одну карту».

Але так роблять не всі термінали. Наприклад, ощадбанківські POS-термінали VeriFone вибирають випадкову карту з декількох. Деякі термінали просто ігнорують всі карти, якщо їх більше однієї, не показуючи повідомлень про помилку.

Your browser does not support HTML5 video.
Спроба вважати кілька карт в гаманці. POS-термінал повертає помилку.

Антиколлизии ISO 14443-3

Читання однієї конкретної карти з декількох — непросте завдання на фізичному рівні. Для вирішення цієї проблеми існує механізм антиколлизий. Він дозволяє вибрати одну карту, якщо було отримано відповідь від кількох карт. Це самий перший етап встановлення зв’язку з безконтактною карткою в протоколі ISO-14443A. На даному етапі зчитувач не в змозі з’ясувати, яка з представлених карт банківська. Єдиний варіант — вибрати більш-менш схожу на банківську карту, на підставі відповіді SAK (Select Acknowledge).

Значення біт у відповіді SAK

Так, наприклад, використовувана в московському громадському транспорті карта «Трійка» (стандарту Mifare) має значення SAK=0x08 (b00001000), в якому шостий біт дорівнює нулю. У той час як у всіх банківських карт у відповідях SAK шостий біт дорівнює 1, що означає підтримку протоколу ISO 14443-4.

Тому все, що може зробити термінал при виявленні декількох карт одночасно — виключити карти, не підтримують ISO 14443-4, і вибрати одну із схожих на банківську. Підтримка протоколу ISO 14443-4, до речі, не гарантує, що ця карта буде банківської, однак найімовірніше, в гаманці звичайної людини не буде карт іншого типу, що підтримують ISO 14443-4.


Блок-схема роботи протоколу антиколлизий

З особистого досвіду: незважаючи на наявність протоколу антиколлизий, при наявності в гаманці хоча б трьох безконтактних карт, вважати успішно потрібну карту ВКРАЙ важко. Більшість спроб закінчується помилками читання. Тим більше складно це зробити на бігу, притискаючись до чужих кишенях і сумках.

Однак ми будемо вважати, що нашому шахраєві дуже щастить, і це обмеження його не турбує.

Оффлайн vs Онлайн транзакції

В страхітливих сюжетах новин розповідають про шахраїв з POS-терміналами в вагонах метро, які прямо в дорозі списують у вас з кишень гроші. У цих сюжетах не згадується, звідки у шахрая мобільний інтернет у вагоні метро. Можливо, його термінал підтримує оффлайн-транзакції?

Специфікації EMV допускають оффлайн-транзакції. В такому режимі списання відбувається без онлайн-підтвердження з боку банку-емітента. Це працює, наприклад, у громадському транспорті в Москві і Санкт-Петербурзі. Щоб не займати чергу на вході в автобус, поки термінал виконає онлайн-підтвердження, що вас пропускають відразу, не перевіряючи, чи достатньо у вас грошей на рахунку для оплати проїзду. В кінці дня, коли на терміналі з’являється інтернет, підписані транзакції відправляються в банк-емітент. Якщо виявиться, що в цей момент у вас немає грошей на оплату проїзду, карта буде додана в стоп-лист на всіх терміналах в місті. Борг можна погасити через особистий кабінет по номеру картки. Детальніше про оплату проїзду в автобуса Санкт-Петербурга.

Особисто мені не вдалося отримати POS-термінал, що підтримує таку функцію, тому в сценарії з звичайним «цивільним» POS-терміналом ми не будемо розглядати можливість оффлайн-списань. Це нічого не змінює, крім того, що атакуючому буде потрібно наявність інтернету на терміналі, тому атака, наприклад, в метро, значно ускладнюється.
Існують моделі терміналів, які підтримують WiFi, і в теорії наш шахрай міг би використовувати WiFi в метро, попередньо подбавши про купівлю доступу без реклами для MAC-адреси свого POS-терміналу, щоб не потрібно було виконувати аутентифікацію через captive portal, так як на POS-терміналі це зробити не можна.

Підраховуємо прибуток

У нашому сценарії собівартість атаки була 100 000 рублів. Це означає, що для того, аби хоча б повернути вкладення, нашому герою потрібно виконати мінімум 100 транзакцій по 1 тисячі рублів. Уявімо, що він був досить вправним і весь день бігав по місту, притискаючись до всіх підряд, так, що до кінця для зробив 120 успішних списань. Ми не будемо враховувати комісію еквайрингу (у середньому 2%), комісію на переведення в готівку (4-10%) та інші комісії.

Може він успішно перевести в готівку гроші, використовуючи карту, прив’язану до розрахункового рахунку?

В реальності не все так просто. Зарахування грошей на рахунок шахрая відбудеться тільки через кілька днів! За цей час, наш шахрай повинен сподіватися, що ніхто з ста двадцяти жертв не оскаржить транзакцію, що вкрай малоймовірно. Тому в реальності, рахунок шахрая буде заблокований ще до зарахування на нього грошей.

Якщо чоловік помітив, що у його картці була проведена покупка, яку він не здійснював, йому слід звернутися до банку-емітента і подати претензію. На розгляд спірних операцій на території Росії йде до 30 днів, а за операціями, здійсненими за кордоном — до 60 днів. За цей час банк-емітент направляє запит банку-еквайєру, і якщо банк-еквайєр підтверджує факт здійснення сумнівних операцій, то блокується термінал і кошти на розрахунковому рахунку власника терміналу.

Олександр Падерін, керуючий директор центру інформаційної безпеки Уральського банку реконструкції та розвитку (УБРиР)

Висновок

Собівартість атаки в нашому сценарії — 100 000р. В дійсності, вона буде в кілька разів вище, тому шахраєві буде потрібно набагато більше зусиль для того, щоб отримати прибуток.

У нашому сценарії шахрай завжди списує за 999.99 рублів, що, найімовірніше, спричинить за собою спрацювання системи антифрода на стороні банку-еквайра. В реальності шахраєві потрібно списувати менші суми.

Щоб хоча б окупити вкладення, шахраю потрібно обробити кілька сотень жертв. Якщо навіть десяток з них звернеться банк-емітент і оскаржить транзакцію, рахунок шахрая, швидше за все, буде заблокований. Сценарій, в якому банк-еквайєр знаходиться в змові з шахраєм малоймовірний, бо ліцензія для роботи з МПС варто сильно більше, ніж будь-які потенційні прибутки від такого виду шахрайства.

З 20 піддослідних тільки у трьох вдалося списати гроші з карти, що становить 15% успіху від всіх спроб. Це були ті штучні випадки, коли в кишені була одна єдина карта. У випадках же з гаманцем і декількома картами, термінал повертав помилку. У сценарії з терміналом, який використовує модифіковану прошивку і реалізує механізм антиколлизий, відсоток успішних списань, можливо, буде вище. Проте, навіть у разі використання антиколлизий, в реальних умовах на бігу, вважати одну карту з декількох настільки складно, що успішне списання в таких умовах можна вважати везінням. У реальності, частка успішних списань буде ледве вище 10% від числа спроб.

Отже, незважаючи на те, що в теорії така атака можлива, на практиці вона виявляється невигідний і вкрай важко здійсненна. Шанс отримати хоч яку-небудь прибуток настільки малий, що позбавляє сенсу всю затію.

Сценарій 2 — злий POS-термінал

Припустимо, наш шахрай працює на касі в магазині або кур’єром із мобільним POS-терміналом. В такому разі, у нього з’являється можливість виловлювати дані карти, яких, в деякому випадку, може бути достатньо для оплати в інтернеті.

Для початку розберемося, як саме виглядає безконтактна транзакція, і якими обмінюється даними карта з POS-терміналом. Так як нам лінь читати тисячі сторінок документації EMV Contactless Specifications , ми просто перехватим обмін на фізичному рівні з допомогою сніфер HydraNFC.

Є деяка різниця між EMV-специфікацією для MasterCard PayPass і Visa payWave. Це різниця у форматі підпису та деяких даних. Але для нас це несуттєво.

NFC-сніффер


HydraNFC — повністю опенсорсний автономний сніффер ISO-14443A, який зберігає перехоплені APDU-команди на SD-карту. Антена сніфер розміщується між терміналом і картою, і пасивно захоплює всю передану інформацію.

→ Сайт про HydraBus і шилде HydraNFC
→ Вихідні коди прошивки

Your browser does not support HTML5 video.
Демонстрація перехоплення обміну між POS-терміналом і телефоном з Apple Pay

Забігаючи вперед, треба сказати, що на цьому рівні оплата телефоном і звичайною пластиковою карткою не відрізняється. Для POS-термінала це звичайна карта VISA. Однак, оплата телефоном набагато безпечніше, ніж фізичною картою, і далі ми розберемо, чому.

Розбір протоколу EMV

Ось як виглядає записаний дамп при оплаті шоколадки і пляшки води загальною вартістю 142.98 рублів з допомогою Apple Pay:

Сирі дані, отримані з сніфер (розкрити спойлер)
Касовий чек і сліп від транзакції (кликабельно)

R (READER) — POS-термінал
T (TAG) — карта (в нашому випадку телефон)
R>> 52
R>> 52
R>> 52
R>> 52
R>> 52
R>> 52
R>> 52
T<< 04 00
R>> 93 20
T<< 08 fe e4 ec fe
R>> 93 70 08 fe e4 ec fe dd 6e
T<< 20 fc 70
R>> 50 00 57 cd
R>> 26
R>> 52
T<< 04 00
R>> 93 70 08 fe e4 ec fe dd 6e
T<< 20 fc 70
R>> e0 80 31 73
T<< 05 78 80 70 02 a5 46
R>> 02 00 a4 04 00 0e 32 50 41 59 2e 53 59 53 2e 44 44 46 30 31 00 e0 42
T<< 02 6f 23 84 0e 32 50 41 59 2e 53 59 53 2e 44 44 46 30 31 a5 11 bf 0c 0e 61 0c 4f 07 a0 00 00 00 03 10 10 87 01 01 90 00 4b b3
R>> 03 00 a4 04 00 07 a0 00 00 00 03 10 10 00 bc 41
T<< 03 6f 31 84 07 a0 00 00 00 03 10 10 a5 26 9f 38 18 9f 66 04 9f 02 06 9f 03 06 9f 1a 02 95 05 5f 2a 02 9a 03 9c 01 9f 37 04 bf 0c 08 9f 5a 05 60 08 40 06 43 90 00 1d 66
R>> 02 80 a8 00 00 23 83 21 36 a0 40 00 00 00 00 01 42 98 00 00 00 00 00 00 06 43 00 00 00 00 00 06 43 18 09 18 00 e0 11 01 03 00 f9 14
T<< 02 77 62 82 02 00 40 94 04 18 01 01 00 9f 36 02 02 06 9f 26 08 d6 f5 6b 8a be d7 8f 23 9f 10 20 1f 4a ff 32 a0 00 00 00 00 10 03 02 73 00 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 9f 6c 02 00 80 57 13 48 00 99 72 50 51 17 56 d2 31 22 01 00 00 05 20 99 99 5f 9f 6e 04 23 88 00 00 9f 27 01 80 90 00 af c8
R>> 03 00 b2 01 1c 00 c9 05
T<< 03 70 37 5f 28 02 06 43 9f 07 02 c0 00 9f 19 06 04 00 10 03 02 73 5f 34 01 00 9f 24 1d 56 30 30 31 30 30 31 34 36 31 38 30 34 30 31 37 37 31 30 31 33 39 36 31 36 37 36 32 35 90 00 a7 7b

Розберемо кожну рядок рядок з перехопленого дампа окремо.

R>> — дані, передані POS-терміналом
T>> — дані, передані картою (в нашому випадку телефон з Apple Pay)

14443-A Select

На початку обміну термінал встановлює з’єднання з картою на канальному рівні. Для тих, хто знайомий з мережами і моделлю OSI, буде зручно представити це як рівня L2, а UID (Unique Identifier) карти MAC-адреса вузла.

У термінології стандарту ISO 14443:
PCD (proximity coupling device) — назва зчитувача, в нашому випадку це POS-термінал
PICC (proximity integrated circuit card) — карта, у нашому випадку цю роль виконує телефон

Важлива відмінність звичайної платіжної карти від Apple Pay в тому, що карта завжди доступна для зчитування і ніяк не дозволяє керувати процесом зчитування. Її можна безконтрольно вважати через одяг, в той час як телефон, потрапляючи в поле дії зчитувача, пропонує користувачу активувати віртуальну карту. До підтвердження користувача телефон не передає дані, та зчитувач навіть не знає, що поруч знаходиться віртуальна карта.

R>> 52 // WUPA (wake up)
R>> 52 // WUPA
R>> 52 // WUPA
R>> 52 // WUPA
R>> 52 // WUPA
R>> 52 // WUPA
R>> 52 // WUPA
T<< 04 00 // ATQA (Answer To Request type A) 
R>> 93 20 // Select cascade 1 (Anti Collision CL1 SEL)
T<< 08 fe e4 ec fe // UID (4 байт) + BCC (Bit Count Check)
R>> 93 70 08 fe e4 ec fe dd 6e // SEL (select tag 0x9370) + UID + CRC16
T<< 20 fc 70 // SAK (Select Acknowledge 0x20) + CRC16 
R>> 50 00 57 cd // HALT (Disable communocaion 0x5000) + CRC16
R>> 26 // REQA
R>> 52 // WUPA
T<< 04 00 // ATQA
R>> 93 70 08 fe e4 ec fe dd 6e // SELECT
T<< 20 fc 70 // SAK
R>> e0 80 31 73 // RATS (Request Answer to Select 0xE080) + CRC16
T<< 05 78 80 70 02 a5 46 // ATS (Answer to select response)

Термінал постійно передає команду 0x52 Wake-up (WUPA), і як тільки в полі дії з’являється карта, вона відповідає командою Answer To Request type A (ATQA), в нашому випадку це 0x04 0x00. Відповідь ATQA може відрізнятися в залежності від виробників чіпа.

Отримавши відповідь ATQA, термінал починає процедуру виявлення колізій, щоб визначити, є чи в полі дії більше однієї картки. Команда 0x93 0x20 Select cascade level 1 (SEL CL1) запитує у всіх карт у полі дії повідомити першу частину своїх ідентифікаторів UID.

Карта відповідає 0x08 0xFE 0xE4 0xEC 0xFE, перші чотири байти — UID віртуальної карти Apple Pay і контрольна сума 0xFE Bit Count Check (BCC) в кінці.

Отримавши ідентифікатори карт, зчитувач звертається до конкретної карті командою 0x93 0x70 (SELECT). За командою слід UID карти 0x08 0xfe 0xe4 0xec + 0xfe BCC + 0xdd 0x6e CRC16.

Карта відповідає 0x20 Select Acknowledge (SAK) + 0xfc 0x70 CRC16.

Якщо на цьому кроці отримано кілька відповідей SAK, рідер може зменшити довжину UID в команді SELECT, поки не відповість єдина карта. Однак, як показано вище, деякі POS-термінали відмовляються продовжувати, якщо на цьому етапі виявлені колізії, тобто присутність декількох карт одночасно.

Довжина UID може бути 4, 7 або 10 байт. У всіх банківських карт, що я зустрічав, в тому числі і в Apple Pay, UID дорівнював 4 байтам. Цікаво, що Apple Pay генерує різний UID на кожне зчитування, на відміну від фізичних карт, де UID зазвичай постійний. Впевнений, що це зроблено для того, щоб айфони не використовували як примітивних карт доступу, так як системи СКУД на основі UID до цих пір дуже популярні.

Рідер посилає команду 0x50 0x00 HALT + 0x57 0xcd CRC16. Це команда завершення зв’язку.

Далі процедура повторюється заново, рідер знову пробуджує карту (WUPA), але вже без перевірки колізій, відразу виконується SELECT. Навіщо так зроблено — не знаю, можливо, це якийсь більш надійний спосіб визначення колізій.

Вдруге рідер вже посилає команду 0xE0 0x80 Request Answer to Select (RATS) + 0x31 0x73 CRC16.

Карта відповідає 0x05 0x78 0x80 0x70 0x02 Answer to select response (ATS) + 0xA5 0x46 CRC16.

Answer to select — відповідь аналогічний Answer To Reset (ATR) для контактних карток. У ньому міститься інформація про максимальний розмір кадру параметрах канального рівня.

На цьому етапі «канальний рівень завершено, далі починається обмін на більш высокоуровневом протоколі, в залежності від програми, що міститься на карті. Операція SELECT однакова для всіх стандарту безконтактних карт ISO 14443A, в тому числі NFC-міток, квитків на громадський транспорт, і т. д.

Запит доступних додатків — SELECT PPSE

Офіційне опис: EMV Contactless Specifications — PPSE and Application Management for Secure Element

Початок спілкування з EMV-картою завжди відбувається з читання PPSE (Payment System Environment). Термінал запитує у карти, які платіжні додатки на ній є.

Найчастіше це один додаток, як у нашому прикладі — VISA. Однак бувають карти з кількома платіжними додатками, наприклад, є спеціальні вітчизняні карти СВІТ з двома платіжними додатками всередині. Так як платіжна система СВІТ не працює закордоном, карту інтегрується друге платіжний додаток, по суті друга карта. Це може бути додаток платіжної системи JCB або UnionPay. Такі карти називаються кобейджинговыми.

APDU-команда SELECT PPSE

'00 A4 04 00 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 00'
 00 A4 04 00 // команда select 
 0E // довжина command data (14 байт)
 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 // command data 2PAY.SYS.DDF01
 00 // завершальний маркер

Відповідь на SELECT PPSE

'6F 23 84 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 A5 11 BF 0C 0E 61 0C 4F 07 A0 00 00 00 03 10 10 87 01 01 90 00'

Для зручності проаналізуємо відповідь за допомогою онлайн-парсера формату TVL iso8583.info/lib/EMV/TLVs. Той же відповідь, оброблений парсером:


З усього цього нас цікавить тільки ідентифікатор платіжного додатка (AID). В даному випадку, це значення A0000000031010, що означає Visa International.

AID позначається маркером 4F. Другим бітом після маркера слід довжина даних, що в ньому містяться. Незважаючи на те, що довжина AID може варіюватися від 5 до 16 байт, в більшості випадків вона дорівнює 7 байтам.

Великий список AID: eftlab.co.uk/knowledge base/211-emv-aid-rid-pix

Деякі популярні AID

A0000000031010 Visa International
A0000000032020 Visa International
A0000000041010 Mastercard International
A0000000043060 Mastercard International United States Maestro (Debit)

Application Priority Indicator — вказує пріоритет платіжних додатків. Наприклад, в кобейджинговых картах СВІТ, мають всередині кілька платіжних додатків, це поле вказує, яка з двох додатків пріоритетнішою. Так як у нас тільки один додаток Visa International, воно вказує на нього, і пріоритет відсутня.

Запуск платіжного додатка — SELECT AID

'00 A4 04 00 07 A0 00 00 00 03 10 10'
 00 A4 04 00 // команда select 
 07 // довжина command data (7 байт)
 A0 00 00 00 03 10 10 // AID Visa International

Вибравши потрібний платіжний додаток, термінал запускає його.

PDOL (Processing Options Data Object List)

 

'6f 31 84 07 a0 00 00 00 03 10 10 a5 26 9f 38 18 9f 66 04 9f 02 06 9f 03 06 9f 1a 02 95 05 5f 2a 02 9a 03 9c 01 9f 37 04 bf 0c 08 9f 5a 05 60 08 40 06 43 90 00'

Розберемо відповідь парсером


У відповідь на запуск платіжного додатка карта повідомляє набір параметрів, які очікує отримати від терміналу — PDOL (Processing Options Data Object List). Термінал зобов’язаний відповісти в суворій відповідності з цією послідовністю.

PDOL у різних карт може відрізнятися. Загальне число параметрів PDOL — кілька десятків. Повний список параметрів PDOL можна подивитися тут.

Розберемо PDOL уважніше. Довжина, зазначена після маркера — суворо очікувана довжина відповіді від терміналу на даний запит. Порожній відповідь заповнюється нулями до потрібної довжини.

Розбір запиту PDOL:

9F 38 18 // Маркер початку PDOL. Довжина 18 (24 байта) 
 9F 66 (довжина 04) // Terminal Transaction Qualifiers (TTQ). Набір підтримуваних терміналом протоколів. 
 9F 02 (довжина 06) // Сума списання
 9F 03 (довжина 06) // друга сума
 9F 1A (довжина 02) // Код країни в форматі ISO3166-1
 95 (довжина 05) // Terminal Verification Results
 5F 2A (довжина 02) // Код валюти, у якій працює термінал, у форматі ISO4217
 9A (довжина 03) // Дата у форматі YYMMDD
 9C (довжина 01) // Тип транзакції 
 9F 37 (довжина 04) // Випадкове число 

До цього моменту всі передані дані ідентичні для будь-яких транзакцій по цій карті.

Запит на списання — GET PROCESSING OPTIONS

 

'80A8000023832136A0400000000001429800000000000006430000000000064318091800E011010300'
 80 A8 00 00 // Команда GET PROCESSING OPTIONS (GPO)
 23 // довжина всього запиту (35 байт)
 83 // маркер PDOL-відповідь
 21 // довжина PDOL-відповіді (33 байта)
 36 A0 40 00 // Terminal Transaction Qualifiers (TTQ)
 00 00 00 01 42 98 // Сума списання (142,98 рублів)
 00 00 00 00 00 00 // Друга сума 
 06 43 // Код країни экваера (643 - росія)
 00 00 00 00 00 // Terminal Verification Results (TVR)
 06 43 // Валюта (643 - russian ruble) 
 18 09 18 // дата (18 вересня 2018 року)
 00 // тип транзакції
 E0 11 01 03 // Випадкове число 

У цій відповіді наочно видно, як термінал, який знаходиться в Росії, запитує списання з картки на суму 142,98 рублів. Звертаємо увагу на випадкове число в кінці (E0110103). Це параметр 9F37 Unpredictable Number. Це перша згадка криптографії. Надалі це число разом з даними транзакції карта повинна буде підписати криптографічного підписом. Це дає терміналу контроль над актуальністю підпису від карти і захищає від replay атак.

Відповідь карти на GET PROCESSING OPTIONS

 

'7762820200409404180101009F360202069F2608D6F56B8ABED78F239F10201F4AFF32A00000000010030273000000004000000000000000000000000000009F6C02008057134800997250511756D23122010000052099995F9F6E04238800009F2701809000'

У цій відповіді містяться специфічні для VISA поля даних, тому я використовував парсер c підтримкою VISA Contactless Payment Specification (VCSP).

Application Interchange Profile (AIP) — містить інформацію про параметри платіжного додатка. У нашому випадку AIP дорівнює 00 40. Розглянемо значення даного параметра з EMV 4.3 Book 3.


У нашому випадку встановлений один біт у другому байті, який, якщо вірити цій таблиці, Reserved For Future Use (RFU). Що це значить, і який сенс в це вкладає Apple Pay, я не знаю.

В AIP міститься важлива інформація про підтримуваних методи аутентифікації (SDA,CDA,DDA) платежу. Чому в моєму випадку всі ці прапори дорівнюють нулю — я не розумію.

Application File Locator (AFL) — Містить інформацію про розташування записів (SFI range of records) в конкретному AID. На підставі цієї відповіді термінал сформує запит READ RECORD.

Розберемо відповідь AFL детальніше:

Short File Identifier (SFI) одно 0x18. Цей параметр кодується п’ятьма бітами замість восьми. Відповідно значення 0x18 (b00011000) перетворюємо в b00000011, і отримуємо 0x3.
First record = 1
Last record = 1
Тобто в теці» №3 є записи з 1 по 1, тобто один запис.

Application Transaction Counter (ATC) — інкрементний лічильник транзакцій, який збільшується кожен раз на одиницю при запиті GET PROCESSING OPTIONS. Під досягненню значення 0xFFFF або 0x7FFF, платіжний додаток безповоротно заблокується. Вважаю, що це зроблено для захисту від брутфорса приватного ключа карти. У нашому випадку видно, що даний айфон з Apple Pay використовувався для оплати вже 518 (0x206) разів.

Application Cryptogram (AC) — криптографічний підпис, яка обчислюється картою з використанням її приватного ключа. Дана підпис передається разом з іншими даними банку-емітенту, і на її підставі перевіряється справжність транзакції. Так як приватний ключ карти неможливо (доступними засобами) витягти з карти, це дозволяє виключити можливість копіювання карти.

Issuer Application Data (IAD) — Містить власні дані, специфічні для VISA. Я не подужав розбір цієї структури, допоможіть.

Card Transaction Qualifiers (CTQ) — специфічний для VISA список підтримуваних картою специфікацій. Наприклад, чи можна використовувати цю безконтактну картку для операцій в банкоматі чи ні, і які підтвердження при цьому потрібні.

Track 2 Equivalent Data — Оппа! У цьому полі міститься номер картки і expiration date, детальніше ця інформація буде розібрана далі.

Form Facto Indicator (FFI) — специфічне для VISA полі. Описує форм-фактор і характеристики платіжного пристрою. У нашому випадку видно, що це мобільний телефон.

Cryptogram Information Data (CID) — Я не подужав розбір цієї структури, допоможіть.

Запит READ DATA RECORD

 

'00 b2 01 1c 00'

Термінал посилає запит на читання записів, отриманих з AFL:


В даному випадку, починаючи з байта 0x1C слід читати як два значення, де перші п’ять біт рівні 0x18 (b000011), і складають SFI, а наступні три біти дорівнюють 0x04 (d100), і становлять номер запису.

Відповідь на READ RECORD

 

'70375F280206439F0702C0009F19060400100302735F3401009F241D5630303130303134363138303430313737313031333936313637363235'

Application Usage Control (AUC) — визначає, чи дозволено платити карткою закордоном, та дозволені види операцій.

9F19 — щось незрозуміле, судячи з усього — застарілий Dynamic Data Authentication Data Object List (DDOL)

EMV Tokenisation, Payment Account Reference (PAR) — специфічний для токенезированных (віртуальних) карт параметр. Я не подужав розбір цієї структури, допоможіть.

Що можна витягти з перехваченой транзакції?
Ми розібрали один конкретний приклад перехопленого трафіку безконтактної транзакції Apple Pay c прив’язаною карткою VISA. Протокол MasterCard трохи відрізняється, але в цілому схожий. З аналізу видно, що транзакція захищена криптоподписью, і протокол захищений від replay-атаки. Існує застарілий протокол безконтактної оплати в режимі Magnetic Stripe (MSD), який набагато гірше захищений від replay-атак, але в даній статті я його розбирати не буду, тому що, наскільки мені відомо, він майже не підтримується в СНД, можливо я помиляюся.


З перехоплених даних можна отримати номер картки (PAN) та термін дії (expiration date)

Як видно, з перехопленого трафіку можна отримати повний номер картки і expiration date. Хоч CVV в цьому дампі і немає цих даних достатньо для оплати в деяких інтернет-магазинах. У випадку зі звичайною фізичною пластиковою карткою, перехоплених даних буде міститися той же PAN і термін дії, який вибитий на самій карті!

Оплата в інтернеті без CVV (CNP, MO/TO)

У моїй попередній статті «Використовуємо Apple Pay і карту Трійка в якості пропуску на роботу» про СКУД на базі Apple Pay мене розкритикували в коментарях, розповідаючи, що маючи тільки останні 10 цифр карти можна вкрасти гроші. В дампі вище зазначений не тільки повний номер моєї карти, але також і expiration date. Цих даних достатньо, щоб платити в деяких магазинах в інтернеті. Що ж, спробуємо це зробити.


Форма додавання карти в Amazon не вимагає CVV

Будь це номер фізичної карти, гроші дійсно можна було б вкрасти, але дані сертифіката Apple Pay можна використовувати ТІЛЬКИ для операцій Client Present (CP), коли карта підписує транзакцію криптографічний підписом. Ці дані можна використовувати для оплати в інтернеті та інших операцій типу Card not present (CNP), тобто по телефону чи імейл. То-то ж!

Всім бажаючим переконатися в цьому, повідомляю, що реквізити з перехопленого вище дампа Apple Pay на даний момент актуальні і прив’язані до чинної карті, на якій є гроші. На момент написання статті це 5 тисяч рублів. Пропоную спробувати їх вкрасти 🙂

Чому Apple Pay безпечніше звичайної карти


Apple Pay vs звичайна безконтактна карта

  • Apple Pay вимагає авторизацію (відбиток або пароль) на кожну проведену операцію. Звичайна карта не дозволяє управляти кількістю підписаних транзакцій при піднесенні до POS-термінала. В теорії, «злий» термінал з модифікованою прошивкою може провести одну транзакцію, а поки клієнт тримає карту біля зчитувача, запросити кілька підписань, але не проводити їх відразу, а провести пізніше, коли клієнт піде. З Apple Pay таке неможливо, після проведення транзакції користувач бачить значок успішно виконаної операції і додаток закривається, новий запит потребує повторне введення відбитка пальця.
  • Не дозволяє зчитувати дані авторизації — коли телефон з Apple Pay потрапляє в поле дії зчитувача (13,56 МГц), користувачеві пропонується авторизуватися, і тільки після успішної авторизації телефон починає виявлятися як безконтактна картка. До цього моменту зчитувач не бачить нічого. Саме тому дані з Apple Pay не можна вважати непомітно з кишені, на відміну від звичайної карти.
  • Не можна використовувати перехоплені дані для оплати в інтернеті — звичайна карта може бути використана для операцій типу Card not present (CNP), тобто для оплати в інтернеті, по телефону і т. д. Дані з віртуальної карти Apple Pay можна використовувати подібним чином.
  • Не розкриває дані власника — звичайні безконтактні карти можуть передавати ім’я власника (Cardholder name) і історію останніх покупок. За номером карти, в деяких випадках, можна встановити ПІБ власника. З Apple Pay нічого подібного зробити не можна.

 

Висновок

Безконтактні платіжні системи досить надійно захищені. Незважаючи на теоретичну можливість шахрайства, на практиці вона виявляється нерентабельною і вкрай важко здійсненна. Немає ніякої причини боятися безконтактних карток або намагатися зламати антену в карті.

При інших рівних, Apple Pay буде безпечніше звичайної пластикової карти. Для більшої безпеки можна заблокувати CNP-операції (оплата в інтернеті) за основною безконтактною карткою, і завести другу карту тільки для оплати в інтернеті.

Висловлюю подяку:

  • Компанії tehpos.ru за надане устаткування.
  • Уральського банку реконструкції та розвитку, і особисто Олександру Падерину (керуючому директору центру інформаційної безпеки) за консультації.
  • Магазину aj.ru за надані айфони для тестів.
  • Валерії Aquamine за ілюстрації для статті.
  • Глібу JRun з Digital Security за технічні консультації,
  • Олександру AlexGre за консультації по протоколу EMV.

Related Articles

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Close