Карты на стол! Проводим пентест POS-терминалов

В этой статье мы рас­смот­рим упро­щен­ную схе­му инфраструк­туры POS‑сис­тем, а затем раз­берем пару кей­сов из пен­тестов пла­теж­ных при­ложе­ний и инфраструк­туры POS‑тер­миналов. Hardware‑аспекты и безопас­ность аппа­рат­ной час­ти POS мы зат­рагивать не будем.

warning

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

 

Основные компоненты инфраструктуры POS-терминалов

Что­бы луч­ше понять, как устро­ена инфраструк­тура, в которой работа­ет POS-тер­минал, рас­смот­рим упро­щен­ную модель его вза­имо­дей­ствия с дру­гими ком­понен­тами. Эта схе­ма может быть слож­нее, в нее мож­но добавить дру­гие эле­мен­ты, такие как банк‑эквай­ер и банк‑эми­тент, сер­вер обновле­ний и так далее. Одна­ко в этой статье мы раз­берем уяз­вимос­ти, отно­сящи­еся преж­де все­го к пла­теж­ному при­ложе­нию и инфраструк­туре, в которой тер­миналы работа­ют.

Итак, по поряд­ку. TMS (Terminal Management System) — это сер­вер управле­ния пар­ком POS-тер­миналов. Через него на тер­миналы рас­простра­няет­ся кон­фигура­ция (нап­ример, фор­мат чеков и логотип), уста­нав­лива­ются и обновля­ются при­ложе­ния, а так­же он управля­ет клю­чами шиф­рования и логиро­вани­ем. Кро­ме того, TMS собира­ет логи с тер­миналов. Дос­туп к TMS пре­дос­тавля­ется, как пра­вило, через веб‑интерфейс адми­нис­тра­тив­ной панели, в которой мож­но делать все, что перечис­лено выше.

Фун­кци­ональ­ность решений для управле­ния тер­минала­ми силь­но раз­лича­ется, поэто­му наряду с TMS-сер­вером мы рас­смот­рим и MDM (Mobile Device Management): сов­ремен­ные POS-тер­миналы все чаще пос­тро­ены на Android. Схе­му вза­имо­дей­ствия мы, как и преж­де, намерен­но упростим.

За­дача MDM сво­дит­ся к управле­нию POS-тер­минала­ми — от вклю­чения до бло­киров­ки устрой­ства. При­мер­но по такой схе­ме MDM занима­ется сбо­ром информа­ции с конеч­ных устрой­ств. В самом прос­том вари­анте собира­ется прос­то информа­ция о ста­тусе работы тер­минала, нап­ример deviceoffline = <SN>.

И пожалуй, один из клю­чевых ком­понен­тов — пла­теж­ное при­ложе­ние. Свя­зующее зве­но, которое счи­тыва­ет и при­нима­ет дан­ные пла­теж­ных карт с помощью Card Reader, а затем отправ­ляет эти дан­ные в TMS для пос­леду­ющей обра­бот­ки.

 

Ближе к делу. Кейс № 1

Мы рас­смот­рели основные ком­понен­ты инфраструк­туры POS-сис­тем. Теперь мож­но перей­ти к одно­му из кей­сов, с которым мы стол­кну­лись на пен­тесте реаль­ного при­ложе­ния.

Итак, у нас есть пач­ка POS-тер­миналов, пла­теж­ное при­ложе­ние, которое уста­нов­лено на эти самые тер­миналы, и дос­туп к тес­товому веб‑при­ложе­нию TMS.

Из­началь­но тер­минал работал в киоск‑режиме, поэто­му мы мог­ли поль­зовать­ся толь­ко целевым при­ложе­нием, выпол­няя фун­кции кас­сира. Более того, из‑за это­го у нас отсутс­тво­вал дос­туп к сетевым нас­трой­кам и мы не мог­ли нас­тро­ить MitM для ана­лиза тра­фика. При этом в меню при­ложе­ния есть панель «Адми­нис­тра­тор», но дос­туп к ней откры­вает­ся толь­ко пос­ле вво­да шес­тизнач­ного пароля, сос­тояще­го из цифр. Мы сра­зу для себя опре­дели­ли нес­коль­ко вари­антов, как и где его най­ти:

  • по­искать докумен­тацию или форумы с отве­тами на воп­росы от тех­поддер­жки или какие‑то гай­ды от ком­паний по нас­трой­ке тер­миналов;
  • поп­робовать прос­тые вари­анты с кли­ками по глав­ному экра­ну при­ложе­ния или попере­бирать ком­бинации с кноп­ками гром­кости;
  • по­искать захар­дко­жен­ные сек­реты в самом при­ложе­нии;
  • за­пус­тить пол­ный перебор руч­ным спо­собом или с помощью Flipper.

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

info

Сто­ит отме­тить: по опы­ту изу­чения докумен­тации раз­ных про­изво­дите­лей выход из киоск‑режима неред­ко реали­зован через ком­бинации кно­пок гром­кости, тапы по опре­делен­ным углам экра­на или логоти­пу и свай­пы.

Даль­ше мы откры­ли нас­трой­ки, но они ока­зались под паролем, который нам тоже был неиз­вестен. Тер­миналов у нас было нес­коль­ко, поэто­му мы ста­ли искать зацеп­ки на дру­гих устрой­ствах: под­клю­чали тер­минал к ноут­буку по USB, по воз­можнос­ти про­веря­ли содер­жимое внеш­него хра­нили­ща и сно­ва иска­ли информа­цию в сети, но без­резуль­тат­но. На одном из устрой­ств нас­трой­ки Android ока­зались без пароля — и мы сра­зу под­няли точ­ку дос­тупа Wi-Fi на ноут­буке.

Но­утбук был под­клю­чен Ethernet-кабелем нап­рямую к роуте­ру, POS-тер­минал нап­рямую под­клю­чает­ся к Wi-Fi-точ­ке, раз­верну­той на ноут­буке. Это поз­волило пол­ноцен­но перех­ватывать тра­фик.

Ана­лизи­руя сетевой тра­фик POS-тер­минала, мы замети­ли, что он пос­тоян­но обра­щает­ся к одно­му и тому же IP-адре­су и переда­ет прак­тичес­ки одно­тип­ные дан­ные по про­токо­лу MQTT. В них содер­жались наз­вание вен­дора, SerialNumber и информа­ция о сос­тоянии устрой­ства (deviceoffline/deviceonline).

Дамп трафика с перехваченной MQTT-сессией
Дамп тра­фика с перех­вачен­ной MQTT-сес­сией

Мы пред­положи­ли, что на тер­минале уста­нов­лен MDM, и вско­ре это под­твер­дилось: сре­ди при­ложе­ний нашел­ся скры­тый активный про­цесс MDM-аген­та. В его фай­лах на внеш­нем хра­нили­ще обна­ружи­лась дирек­тория с логами, которые агент туда записы­вал.

Директория с лог-файлами MDM
Ди­рек­тория с лог‑фай­лами MDM

В одном из этих логов в откры­том виде были ука­заны логин, пароль и URL, на который тер­минал отправ­ляет информа­цию о сво­ей работос­пособ­ности, а так­же учет­ная запись для под­клю­чения к MQTT-бро­керу. По сути, агент логиру­ет собс­твен­ные учет­ные дан­ные для дос­тупа к панели управле­ния. Оста­ется ими вос­поль­зовать­ся.

Содержимое лог-файла на POS-терминале: в URL логина открытым текстом передаются login и password (критичные данные скрыты)
Со­дер­жимое лог‑фай­ла на POS-тер­минале: в URL логина откры­тым тек­стом переда­ются login и password (кри­тич­ные дан­ные скры­ты)
 

Заходим в панель MDM

С добытой связ­кой логин/пароль мы смог­ли аутен­тифици­ровать­ся в веб‑при­ложе­нии MDM — как под учет­ной записью вен­дора, так и под учет­ной записью кли­ента, раз­вернув­шего MDM на сво­ем сер­вере.

Успешная аутентификация в веб-панели MDM
Ус­пешная аутен­тифика­ция в веб‑панели MDM

Ин­терес­ным показа­лось, что эта учет­ная запись не задоку­мен­тирова­на и исполь­зует­ся вен­дором для акти­вации POS-тер­миналов по SerialNumber или для работы MQTT-бро­кера, пос­коль­ку ее даже нет в спис­ке сре­ди осталь­ных поль­зовате­лей раз­верну­той плат­формы у кли­ента.

Внут­ри панели открыл­ся пол­ный набор воз­можнос­тей для управле­ния пар­ком тер­миналов кли­ента.

Панель управления парком терминалов
Па­нель управле­ния пар­ком тер­миналов

Осо­бое вни­мание прив­лекла воз­можность заг­ружать на тер­миналы при­ложе­ния.

Свидетельство возможности загружать приложения на POS-терминалы (раздел Private Apps)
Сви­детель­ство воз­можнос­ти заг­ружать при­ложе­ния на POS-тер­миналы (раз­дел Private Apps)

На вклад­ке Private Apps мы наш­ли целевое пла­теж­ное при­ложе­ние в нес­коль­ких вер­сиях, под раз­ные плат­формы, а так­же сам MDM‑кли­ент. В исто­рии заг­рузок мы замети­ли, что на часть тер­миналов уста­нав­ливали при­ложе­ние PWDGenerator. Оно генери­рует пароль для вхо­да в нас­трой­ки Android сог­ласно докумен­тации кли­ента, поэто­му мы его выг­рузили для пос­леду­юще­го ана­лиза.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Наши продукты

Все выпуски в PDF →
  • Годовая подписка на Xakep.ru

    Все статьи, PDF-архив, скидки и другие бонусы

    6000₽ в год

    Подписаться
  • Ежеквартальный «Хакер» #4

    Печатный выпуск за август–ноябрь 2026 года

    2000₽

    Заказать
  • Ежеквартальный «Хакер» #3

    Печатный выпуск за май–июль 2026 года

    2000₽

    Заказать
  • Спецвыпуск «Хакера» #4

    Избранные материалы 2021–2022 годов на бумаге

    2000₽

    Заказать
Подписаться
Уведомить о
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии