
Привет, Хабр! На связи Иван Глинкин, специалист по аппаратному реверс-инжинирингу из команды Бастиона. Сегодня поделюсь интересным кейсом разбора платежного POS-терминала. Когда-то эти маленькие черные коробочки были крепким орешком для хакеров. Однако отвертка, паяльный фен, логический анализатор и, конечно же, пытливый ум исследователя творят чудеса. К тому же сами разработчики и даже регуляторы порой дают в руки исследователям все козыри, будто только и ждут успешного взлома устройств.
Эта статья — не просто очередной «сказ про то, как железку взломали», а попытка вывести универсальную методологию аппаратного реверс-инжиниринга на основе исследования конкретного устройства. Мы пошагово пройдем весь путь: от сбора информации в открытых источниках до физического вскрытия, обхода защиты и перехвата «секретных переговоров» между чипами.
Итак, часть первая: вскрытие и разведка боем. Поехали!
Маленькая коробочка для больших денег
Оплата курьерской доставки, заказа в кофейне, покупки в супермаркете: мы, не задумываясь, доверяем POS-терминалам свои деньги каждый день. Но насколько безопасны транзакции и хорошо ли защищены эти устройства?
В информационном поле то и дело встречаются новости об очередных опасных уязвимостях в подобных терминалах. Например, в 2024 году группа польских исследователей нашла в терминалах известной китайской фирмы шесть уязвимостей, через которые можно было поднять привилегии до root, обойти защиту песочницы и получить полный доступ к выполнению операций. И это только один пример. Так что команда Бастиона не могла обойти вниманием эти маленькие коробочки, в которых оборачиваются большие деньги.
На сей раз ко мне в руки попал карманный мобильный POS-центр QPOS Mini. Устройство было нерабочим и, судя по всему, давно выведенным из эксплуатации. При включении всплывало уведомление «Защищенный режим», а соединение со смартфоном не устанавливалось.

На вид терминал напоминает обычный калькулятор. Его длина — 89,7 мм, вес — всего 75г. На сайте вендора можно найти характеристики устройства — вот самые важные:
Операционная система: RTOS;
Процессор: 32-bit ARM 108MHz;
Память: 256KB RAM, 1MB Flash;
Батарея: 3.7V/250mAh;
Коммуникация: Bluetooth 3.0 & 4.2;
Поддерживаемые карты: контактные и бесконтактные EMV-карты, карты с магнитной лентой, NFC (включая Mifare).
Впрочем, нас больше интересует богатый внутренний мир терминала — платы, основные компоненты и их расположение.
Шаг 1: разведка на диване, или Всё уже вскрыли до нас
Как говорится, удача любит подготовленных. 90% работы можно сделать, не доставая паяльник и отвертку и даже не вставая с дивана. Первый шаг в рамках нашей методологии — тщательное изучение открытых источников и сбор информации об устройстве.
Представленная в интернете техническая документация буквально разбирает до винтика тестируемое устройство. Эти разведданные помогают еще до физического взлома определиться с подходящими методами и средствами атаки, подобрать инструментарий. Словом, OSINT, OSINT и еще раз OSINT!
Американский аттракцион щедрости для аппаратного хакера
Куда же стоит заглянуть при сборе информации для аппаратного реверс-инжиниринга платежного POS-терминала? Для начала зайдите на официальный сайт американской FCC (Federal Communication Commission) — Федеральной комиссии по связи. FCC — это своеобразный аналог российского ФСТЭК. В США любое электронное устройство, которое передает радиоволны, должно пройти сертификацию FCC перед выводом на рынок. Правда, сайт госоргана довольно неудобный и к тому же не работает в России без VPN. Гораздо проще доставать нужную информацию через созданное энтузиастами зеркало.
Сайт FCC — клондайк полезной информации для аппаратного хакера. Здесь вам и характеристики платежного терминала, и отчеты по испытаниям и замерам, и, наконец, самое интересное — детальные фото и схемы «интерьера» и «экстерьера» устройства. Даже не нужно разбирать сам терминал, чтобы понять, как он устроен. Это всё равно что производитель сейфов, обязанный публиковать в открытом доступе изображения внутренностей своей продукции — взламывайте на здоровье! В результате у нас есть фотографии платы в высоком разрешении, понимание всех компонентов терминала (NFC, Bluetooth-антенна и т. д.) и их расположения.

Собираем анамнез
Переходим от общего устройства терминала к конкретным компонентам. После сбора информации с сайта FCC я отправился искать в сети даташиты на ключевые чипы, а также сведения о приложении и прошивке. Вот самые полезные находки:
Даташит на модуль YC1021, передающий данные по Bluetooth с устройства на смартфон. В документации подробно описаны характеристики и устройство микросхем Bluetooth-модуля.
Даташит на основной чип MAX23550. Это электронный мозг устройства и полноценный SoC (System on Chip). Важно, что чип содержит флеш-память на 1 мегабайт, где хранится вся прошивка устройства. К слову, в планах — вытащить оттуда прошивку. Сложность в том, что в чипе реализован форм-фактор с шарами вместо традиционных пинов. Соответственно, придется выпаивать модуль и искать подходящий адаптер для считывателя. Но когда дополнительные трудности останавливали настоящего аппаратного хакера?
Техническая спецификация на POS-терминал с сайта разработчика. Это подробное досье устройства: как оно выглядит, что содержит, какими обладает характеристиками и какие сертификации имеет. Представлена информация об операционной системе (RTOS — Real Time Operating System), процессоре, оперативной памяти, дисплее и т. д.
Сайт российской локализации мобильного приложения LifePay. Здесь также можно найти сведения об устройстве терминала, принципах работы и установке мобильного приложения. Отдельный раздел сайта содержит инструкции по обновлению прошивки. Правда, самой прошивки здесь нет — её придется запрашивать у разработчика.
GitLab-репозиторий для мобильного приложения на Android. С его помощью можно допиливать приложение, добавлять сертификаты на карты «Мир» и решать другие задачи.
Российский ресурс 2can. Там лежат готовая прошивка для мобильного приложения, инструкции по обновлению, драйверы для ОС, сам загрузчик. Это бесценный материал для дальнейшего анализа.
Также кое-какие сведения, а именно название устройства и MAC-адрес, удалось узнать при попытке подключиться к терминалу по Bluetooth еще до вскрытия устройства. Спойлер: эти данные совпадут с теми, что позже выдаст логический анализатор на этапе перехвата переговоров.

Итого: за несколько часов удалось найти фото внутренностей устройства, схемы ключевых чипов и даже образец прошивки — и для этого понадобился лишь компьютер и интернет.
Шаг 2: аккуратное вскрытие
Следующий этап — деликатное вскрытие устройства. Здесь нужно действовать как опытный домушник (уж простите за такое сравнение) — чисто и не оставляя следов. Но обо всем по порядку.
«За четырьмя печатями»
Крышка с задней стороны терминала закрыта на четыре винтика, помеченных защитными гарантийными наклейками. Если они надорваны или отсутствуют — значит, устройство вскрывали, и гарантия на него больше не действует. Вернуть такой терминал уже не получится. Так и напрашивается аналогия с приклеенным к дверному косяку волоском из шпионских фильмов.

«Танцы с паяльным феном»
Как известно, против лома нет приёма. На YouTube я подсмотрел способ, как аккуратно снять гарантийные наклейки: сначала нагреваем их паяльным феном до 80–100 °C, чтобы размягчить клей, затем с помощью шприца впрыскиваем под край изопропиловый спирт.

На видео всё выглядело просто и элегантно, но на практике оказалось сложнее: как видно на фото ниже, из четырех наклеек только две удалось снять без повреждений. Проблема в том, что наклейки утоплены глубоко в пазы корпуса — чтобы извлечь их, не повредив, нужно серьезно изловчиться.

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

Первым делом отпаиваем аккумулятор, чтобы ничего не сломать и не замкнуть контакты.

Далее осторожно открываем верхнюю крышку основной платы, где находятся ключевые компоненты: Bluetooth-модуль, управляющий чип MAX23550 и прочее. Затем отпаиваем NFC-антенну и дополнительную батарею.

Шаг 3: anti-tampering — обход «сигнализации»
Теперь нужно обойти защиту от вскрытия (так называемый anti-tampering), которой оснащается большинство подобных POS-терминалов. При попытке включения вскрытое устройство и вправду впало в панику перешло в защитный режим (Limiting mode) и отказалось работать. Это напоминает датчик вскрытия корпуса на ПК. Но где наша не пропадала? Обойти «сигнализацию» помог старый добрый метод «научного тыка».
Маленькая кнопка — большая победа
Внимательно осмотрев устройство, я обнаружил едва заметный микропереключатель на оборотной стороне платы. На задней крышке видны пластиковые «ноги», которые как раз зажимают данную кнопку. Нажимаешь ее, и терминал больше не считает себя вскрытым и «просыпается». Убираешь палец с переключателя — тревожный сигнал поступает на чип, и снова всплывает надпись «Limiting mode». Бинго!
Хотя нужно еще найти заветный переключатель. Может быть, придется выпаять какой-нибудь резистор или другой компонент, перекрывающий доступ к кнопке.

Другой вопрос: как зафиксировать переключатель в нажатом состоянии? Можно, конечно, постоянно давить на него пальцем, но есть способ удобнее. Достаточно демонтировать кнопку и аккуратно запаять ведущие к ней два контакта перемычкой из припоя. Всё гениальное просто: защита от вскрытия обойдена легким движением руки паяльника.

Шаг 4: перехват переговоров — подслушиваем UART
Теперь переходим к следующему этапу нашего взлома — прослушиванию UART и перехвату «переговоров». Спойлер: всё самое интересное происходит не в радиоэфире, а на самой плате. Но не будем забегать вперед.
Ищем RX/TX, или Где у чипов «уши» и «рот»?
Прежде всего возвращаемся к технической документации на Bluetooth-чип и находим выводы RX (Receive — прием) и TX (Transmit — передача): этот интерфейс UART служит «прямой линией» для обмена информацией с главным процессором. Рассматриваем под микроскопом плату и сам чип, сверяем всё с микросхемой из документации… Вот они — «уши» и «рот» чипа (те самые RX и TX).

По идее именно к этим выводам нужно подключить логический анализатор для перехвата сигналов. Вот только, как видно на фото, подобраться с паяльником непосредственно к ножкам чипа — всё равно что «подковать блоху». Придется действовать ювелирно, и есть риск повредить плату.

Никаких проблем! Прослеживаем дорожки от ножек чипа к более удобным для соединения контактным площадкам и действуем дальше. В качестве механизма соединения используем PCBite probes, так как они позволяют достаточно точно установить контакты без пайки в ограниченном рабочем пространстве. А с помощью специальной программы для перепрошивки можно узнать baud rate для подключения через UART. Программа выдала два показателя: 115 200 и 3 686 400. Оказалось, что нам нужен первый из них (115 200).

Подключаем анализатор и видим всё
Теперь подключаем к найденным точкам на плате UART-адаптер, а потом — логический анализатор, и наблюдаем поток данных между чипом SoC и Вluetooth-модулем (частично в зашифрованном, а частично в открытом виде).

Как видно, зашифрованные «крокозябры» соседствуют с читаемыми комбинациями: CFF, CMF, ATNM, ASTL, E-Mouse и т. д. Чип SOC отправляет AT-команды на Bluetooth-модуль, а тот, в свою очередь, незатейливо отвечает «ОК». Вот соединение и перехвачено.
Правда, неясно, шифруется ли трафик при проведении транзакций и рабочем чипе. В таком случае Bluetooth-модуль передает информацию в мобильное приложение, которое потом направляет данные по HTTPS. Не исключено, что такая передача тоже осуществляется в незашифрованном, читаемом виде. Но это нам еще предстоит выяснить в следующей части исследования.
Загадка AT+NVRAM — ключ шифрования на ладони?
Как выявил дальнейший анализ, иногда критическая уязвимость — это не баг, а фича или, точнее говоря, архитектурное решение. Но обо всем по порядку.
AT-команды в прямом эфире
Итак, берем логический анализатор и передаем вывод в программу Logic 2 (PC-клиент для логического анализатора). Очевидно, что в незащищенном виде на микросхему передаются AT-команды. Чип задает Bluetooth-модулю его имя (AT+NAME), MAC-адрес (AT+ADDRESS) и т. д.

Перечень основных AT-команд:
AT+NAME— имя устройства;AT+ADSS— MAC-адрес;AT+BLEADSS— Bluetooth Low Energy (BLE) адрес;AT+BLENAME— BLE-имя;AT+UARTC=1— предположительно, эта команда означает, что используется вывод 1 коммуникации UART.
Следы неудачной авторизации
В одном из ответов всплыл код: 0хС5 0х01 0х80 0х44. Незамысловатая проверка (перевод последовательности в формат HEX и поиск в Google) показала, что такая комбинация используется системой Windows в уведомлениях о неудачных попытках авторизации. Или это совпадение, или кто-то решил унифицировать в терминале ошибки, сделав их такими же, как в Windows. С этим еще будем разбираться.

«Тайна третьего байта»
И��ак, главный чип передает зашифрованную информацию на Bluetooth-модуль, который тоже отвечает что-то непонятное. Интересно, что все ответы практически однотипные: 040Е 0401 03FC и т. д.
Различия в ответах прослеживаются только в третьем байте: либо 01, либо 03, либо 10. От чего это зависит, опять же, нам еще предстоит выяснить.

Загадочная «посылка» AT+NVRAM
Среди передаваемых AT-команд бросается в глаза интересная последовательность: AT+NVRAM — и далее длинный набор зашифрованных данных. Как известно, NVRAM означает энергонезависимую память с произвольным доступом, которая сохраняет данные даже при отключении питания. Вluetooth-модуль же по обыкновению отвечает на команду лаконичным «ОК». А что, если в этой шифрованной «абракадабре» (переведенной в формат HEX) и кроется сеансовый ключ шифрования?

Если гипотеза верна, то защищенный процессор передает ключ по открытому каналу на Bluetooth-чип для дальнейшей работы — вот это поворот! С таким же успехом можно отправить получателю ключ от сейфа в обычном почтовом конверте с курьером.
Если это смелое предположение подтвердится, то загадочную последовательность получится использовать для расшифровки памяти, где хранятся все данные. Возможно, именно этим мы и займемся в первую очередь в следующей части исследования.
Вместо заключения: что в сухом остатке и куда копать дальше?
Что можно вынести из первой части исследования? Перечислим по пунктам.
Методология аппаратного реверс-инжиниринга платежного POS-терминала верхнеуровнево делится на несколько основных этапов:
разведка и OSINT;
деликатное вскрытие устройства;
обход защиты против вскрытия;
перехват и прослушивание сигнала;
проверка гипотез и получение доступа к данным;
перепрошивка устройства.
Пока что два последних этапа остались за рамками исследования — так что работы еще непочатый край.
Тщательный OSINT — залог успешного взлома. В открытых источниках хранится масса ценной информации об общем устройстве терминала, его компонентах и характеристиках. Это позволяет сэкономить время при взломе и заранее определиться с техниками и инструментарием.
Anti-tampering (защита от вскрытия) также нельзя назвать броней. Система защиты оказалась бессильной перед простой перемычкой из припоя. Главное — хорошенько осмотреть плату, поэкспериментировать и найти нужный переключатель. Словом, метод «научного тыка» никто не отменял.
Внутренний обмен данными между чипами — вот главная «ахиллесова пята» подобных терминалов. Только часть отправляемой по UART информации шифруется, к тому же передача осуществляется по открытому каналу. Это открывает не простое, а прямо-таки панорамное окно возможностей для успешного взлома.
Выдвигайте критические гипотезы. Для этого нужно обращать внимание на странные закономерности и непонятные зашифрованные фрагменты, наподобие нашей загадочной команды AT+NVRAM. Если предположение о передаче сессионного ключа шифрования по открытому каналу подтвердится, то налицо фатальная угроза безопасности.
Дайте знать в комментариях, интересно ли вам продолжение этой истории «препарирования» POS-терминала. Если интерес окажется высоким, вот чем займемся в следующий раз:
будем выпаивать чип памяти;
проанализируем полную прошивку в поисках криптоконтейнеров;
пытаться расшифровать прошивку с помощью перехваченного ключа;
попробуем перепрошить устройство, чтобы вернуть его к жизни.
Оставайтесь на связи — впереди много интересного.
Еще приглашаю всех в свой телеграм-канал: http://t.me/glinkinivan. Там вы найдете массу интересного по теме реверс-инжиниринга.

Бастион — защищаем бизнес от киберугроз
t.me/bastiontech — делимся собственным опытом, экспертизой, результатами исследований и прогнозами
