Наколол терминал. Разбираемся.

Сегодняшним нашим пациентом стал один из платежных терминалов, который посмел меня наколоть, сожрал пятихатку, как вы, наверное, успели заметить, расплодилось в наше время превеликое множество. Они стоят в каждом магазине, учреждении и метро. Наверняка ваш пытливый ум не раз посещала мысль о том, как он устроен, можно ли его взломать, не имея под рукой каких-то специальных устройств. Ну что, читаем «Инсайд», возможно, это натолкнет вас на нужные мысли…
Технические данные
Железо:
процессор: Intel Celeron 310 (2130 MHz, 533 MHz FSB) 256 Kb BOX w/cooler (Socket 478)
материнская плата: ECS P4M800-M (VIA P4M800) SVGA, Sound, LAN, 3 PCI, 2 DDR 3200, mATX (Retail)
модуль памяти: DDR SDRAM 256 Mb PC-3200 Hynix-1 Original
контроллер: ST-Lab I-152 PCI 2 port fast serial + 1 port EPP combo (Retail)
блок питания: InWin 300W ATX (P4)
накопитель: HDD Western Digital 40 Gb WD400BB 7200rpm 2 Mb
дополнительная видеокарта: MSI RX 250
Экран:
вандалостойкий сенсорный монитор TFT 17" LG L1750S, либо ACER AL1716 As
Шкура:
основа – корпус терминала самообслуживания Есо
блок питания (250 Вт)
источник бесперебойного питания Powerman BackPro 600
активные колонки Microlab B55 USB, плоские, белые
замок высокой степени защиты Аbloу
замок для наружного включения/выключения питания
электрический запор
коннектор для электрического запора
сирена сигнализации
Девайсы:
купюроприемник CashCode SM (стекер на 1500 купюр)
встроенный термопринтер (Ppu 700, либо EPSON 422)
Связь:
беспроводной GPRS/GSM-модем Siemens MC-35i (рабочий стандарт GSM 900/1800)
антенна GSM
Функциональные части

Автомат оказался очень тяжелым - его вес составляет 85 кг! И это единственная защита от его физического переноса. Собственно, в состав системы входит всего 6 элементов: мониторная сборка, компьютерный отсек, купюроприемник, принтер, электромеханический замок включения/выключения питания и дополнительный монитор. Мониторная сборка является обязательным элементом всех автоматов самообслуживания и предназначена для отображения информации и организации функционального интерфейса. Она состоит из специального встраиваемого монитора и вандалостойкого сенсорного экрана. Иногда на автомат устанавливается дополнительный монитор. Располагается он над основным и служит исключительно в рекламных целях.

Компьютерный отсек представляет собой компьютерную часть автомата и узел объединения всех устройств в единую систему. В него входит IBM-PC-совместимый компьютер, расположенный на специальном шасси. Конфигурируют терминалы на удивление мощными системами - это как минимум 2-ГГц процессоры. Но, судя по установленному на терминале ПО, вся эта мощь не используется на 100%.

Купюроприемник предназначен для приема наличных денег при оплате товаров или услуг. Он определяет номинал принимаемой купюры и проверяет ее на предмет подделки. Купюроприемник рассчитан на прием российских денег номиналом в 10, 50, 100, 500 и 1000 рублей. Хранение принятых купюр осуществляется в специальном ящике – денежном стекере, который снимается при инкассации автомата. Купюроприемник открывается с помощью специального ключа и подключается через компьютерный отсек.

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

GPRS-/GSM-модем с антенной используется для организации обмена информацией между автоматом и удаленным компьютером по технологии беспроводной связи GPRS или GSM. Для работы модема в него устанавливается специальная SIM-карта соответствующего оператора сотовой связи, предоставляющего услуги по передаче данных в месте установки автомата.

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

Каждая компания предоставляет свои услуги. Это и оплата сотовой связи, и погашение кредитов, и оплата ЖКХ. Наличие тех или иных доступных сервисов зависит от твоего выбора платежного терминала. Давай рассмотрим организацию работы системы. К примеру, нам необходимо пополнить баланс на сотовом телефоне. Мы выбираем на терминале нужного нам оператора сотовой связи, вводим телефонный номер, скармливаем купюроприемнику наши кровно заработанные денежки и жмем «Оплатить». Терминал с помощью GRPS-модема связывается с сервером и отсылает ему введенные данные. Обработав их, сервер посылает данные на шлюз сервера оператора сотовой связи. В случае удачно проведенной транзакции твои кровные поступят на счет. В случае неудачи сервер сообщит об этом системному администратору, контролирующему работу сервера, и ошибка будет в кротчайшие сроки устранена. Как показывает практика, все системы имеют тенденцию к сбоям, поэтому, мой тебе совет, всегда сохраняй чек до поступления денег на твой счет.
Программная начинка

Клиент-серверные приложения, а также ядро системы каждая организация разрабатывает самостоятельно. На данный момент не существует унифицированной системы осуществления платежей. ОСь, под которую пишется все ПО, также выбирается организацией. Большинство фирм, как ни странно, работает на Windows-системах. Именно из-за этого и возникает большинство сбоев в работе терминалов. Единицы предприятий выбирают в качестве операционки *nix-системы. Клиентская часть приложения делится на web-модуль, в основном разрабатываемый на PHP, и модуль операционной системы, написанный на CPP, Delphi. Web-модуль отвечает за транзакции и связь с сервером, а Win-модуль - за обработку входящих данных на стороне терминала. Но терминалы - не единственный способ взаимодействия с сервером. Клиент-серверное приложение (или агентское, как его называют) можно устанавливать и на КПК, коммуникаторах и сотовых телефонах. Это ПО в основном разрабатывается на Java и способно полноценно взаимодействовать с сервером.
Безопасность

Безопасность аппарата обеспечивают не только его бронированная шкура и солидный вес, но одно интересное устройство. Этот девайс называется сторожевой таймер (WachDog) и располагается в компьютерном отсеке. Он предназначен для контроля состояния компьютера, формирования сигнала на его перезапуск, сбора данных о состоянии датчиков, коммутации силовой нагрузки. Сторожевой таймер выполняет следующие функции:
перезагрузка компьютера в случае длительного отсутствия сигнала от компьютера
перезагрузка модема в случае длительного отсутствия сигнала от модема
включение сигнализации при открытии двери
включение сигнализации при ударе
контроль линии сети 220 В
контроль линии сети 12 В
режим включения/выключения автомата по расписанию
авторизация электронных ключей
контроль температуры внешней среды

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

В дежурном режиме таймер от компьютера по каналу связи USB получает (передает) данные о требуемом состоянии портов коммутации силовых нагрузок (данные о текущем состоянии портов) не менее одного раза в секунду. В случае задержки данных от компьютера на 2 секунды таймер формирует сигнал инициализации контроллеру USB FT245BM. Если в течение 7 минут сеанс связи не восстановится, он замыкает цепь RESET на одну секунду. Сторожевой контроллер ждет завершения перезагрузки компьютера в течение 7 минут и повторяет цикл сначала. Цепи коммутации силовых нагрузок находятся в нормальном состоянии - питание включено. Текущее состояние цепей силовых нагрузок сохраняется в случае формирования сигнала RESET по отсутствию сеанса связи с компьютером до поступления соответствующей команды от компьютера.

Взлом :smile:

Как все начинаем

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

Признаюсь честно, для досконального изучения платежных систем и их протоколов оплаты мне потребовалось немало времени. Покопавшись в результатах поиска гугла, я получил увесистый список web-адресов. После подробного изучения их содержимого, передо мной вырисовывалась довольно четкая картина, точнее схема, по которой проходит платеж от клиента до оператора сотовой связи или поставщика коммунальных услуг (далее всех буду называть просто "Поставщик услуг").
Общий расклад.

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

Искать баги в ресурсах поставщиков было бы бессмысленно. Времени уходит уйма, а результат можно получить более простым способом. Доверяя проведение платежей на плечи платежных систем, поставщик не рискует абсолютно ничем. Живые деньги поступят ему в любом случае, а ошибки и возможность взлома – это уже проблемы посредников. Таким образом, для того, чтобы, например, пополнить баланс на сотовом телефоне, совсем не обязательно иметь доступ к оператору связи. Достаточно получить доступ к одной из платежных систем, которые позволяют совершить платеж в пользу этого оператора.



Как правило, начинающие платежные системы подходят к вопросу безопасности в последнюю очередь, делая акцент на скорости и удобстве сервиса. Поэтому, при выборе жертвы, стоит в первую очередь обратить внимание на молодые компании. Хотя никто не говорил, что Гиганты платежной индустрии не содержат ошибок в системах безопасности. Очень часто происходит как раз наоборот... Возьмем, к примеру, недавний случай с небезызвестной конторой «ОСМП» (Объединенная Система Моментальных Платежей). Центральный сервер, к которому обращаются тысячи терминалов России, Казахстана, и, возможно, других стран был обезоружен на несколько суток банальной DOS/DDOS-атакой. Я, правда, не в курсе, воспользовался ли кто-нибудь ситуацией в своих корыстных целях или просто похулиганили, но атака была и это остается фактом.

Связь терминала с сервером происходит по GPRS/GSM-каналу и, как правило, посредством технологии XML-RPC. Некоторые даже додумываются навешивать SSL-защиту, но чтобы она действительно оправдывала себя, протокол, во-первых, должен быть закрытым, во-вторых – передаваемый пакет должен шифроваться также средствами программы, а в-третьих, сервер должен не только предоставлять свой корневой сертификат, но также требовать клиентский. Не буду голословным и приведу примеры.

У того же ОСМП протокол передачи открыт, то есть, шифровать пакет на выходе из программы уже не имеет смысла. Получать его реверс-инженерингом будет только извращенец. Но их сервер не требует клиентского сертификата, то есть отправить запрос может любой желающий, правильным образом сформировавший пакет. Да, твой канал при передаче будет защищен, но кого это интересует, если для взлома нужны только идентификационные данные. Ведь получить их при большом желании не составит труда. Здесь и Социальная Инженерия и НЛП и банально Хакинг тебе в помощь.

Еще одну интересную брешь я нашел сразу в двух молодых конторах. В ответ на мой POST-запрос, сервер послал меня в сторону HTTPS явным проявлением в содержимом ошибки IIS-ного акцента. Как известно, по умолчанию IIS-сервер устанавливает центр выдачи сертификатов в каталог /CertSrv/Default.asp, последовав в который, я, в три клика, получил свой собственный клиентский сертификат. Кстати, после этого мне удалось получить доступ даже к ASPX-страница для проведения платежей и их просмотра, правда на одном из ресурсов страница была защищена паролем, получить который мне так и не посчастливилось.

Большинство платежных систем ставят на свои серверы Windows 2000/2003 Server, чем уже совершают большую ошибку. Но те, кто принимает платежи в MySQL-базу на Linux-сервере, при этом, держа на борту Apache+PHP, совершают еще большую ошибку. Не мне тебя учить, как пользоваться SQL-Injection, а ведь это очень простой и верный способ получить огромное количество необходимых данных для проведения платежей, имитируя платежный терминал.
Ищем дыры

При поиске дыр в защите платежной системы- жертвы первое, что стоит сделать – это сканирование портов и web-контента. На открытых портах зачастую можно найти интересные самописные сервисы для проведения платежей, администрирования терминалов. Ведь ни один работник не будет работать круглосуточно вместе с платежными терминалами. Программеры и сисадмины придумывают различные примочки удаленного управления для собственного удобства. Зачастую они даже не задумываются о защите, надеясь, что никто не подумает их ломать.

К некоторым портам можно попробовать ломануться по telnet, но как показывает практика, в основном такие сервисы работают по технологии XML-RPC, а это означает, что порт может только принимать и отправлять POST-запросы. Как узнать структуру запроса и его содержимое? Можно попробовать просканить веб-содержимое на чтение. Многие пишут свои сервисы с использованием asp-страниц, которые требуют своих исходников в тех же каталогах. Если администратор в последнюю очередь думает о правах доступа, есть большая вероятность прочитать исходники asp-сценариев, что при грамотном использовании может помочь составить XML-запрос. Кстати, подобные дыры были зафиксированы даже у достаточно крупных платежных систем!

Web-контент лучше исследовать вручную + сканером. В качестве сканера лично мне больше всего нравится XSpider. Открою секрет, совсем недавно мне по спутниковой рыбалке прилетела бесплатная версия 7.5 от Zeromag Lab, так что ищите да обрящите .
Три реальных взлома
Взлом CyberPlat

Как показало исследование, платежная система CyberPlat принимает платежи во многих странах, и, их сайты хостятся на одном сервере. Проверить это достаточно просто. Достаточно ввести доменное имя или IP-адрес в поисковый запрос на www.domainsdb.net.

Интересная картина получается:

1. cybercheck.ru [whois] IP: 0.0.0.0 dns: ns.cyberplat.ru | proxy.cyberplat.com
2. cyberplat.ru [whois] IP: 213.33.161.9 dns: ns.demos.su | ns.cyberplat.ru
3. cyberpos.ru [whois] IP: 0.0.0.0 dns: ns.cyberplat.ru | proxy.cyberplat.com
4. cybercard.ru [whois] IP: 0.0.0.0 dns: ns.cyberplat.com | ns.cyberplat.ru
5. gribov.ru [whois] IP: 0.0.0.0 dns: ns.cyberplat.com | ns.cyberplat.ru
6. pinsale.ru [whois] IP: 0.0.0.0 dns: ns.cyberplat.com | ns.cyberplat.ru
7. platina.ru [whois] IP: 0.0.0.0 dns: ns.cyberplat.ru | ns.platina.ru
8. rodnoe-pole.ru [whois] IP: 0.0.0.0 dns: ns.demos.su | ns.cyberplat.ru
9. rodnoepole.ru [whois] IP: 0.0.0.0 dns: ns.demos.su | ns.cyberplat.ru

Домены зарегистрированы, но недоступны. Скорее всего, их оставили для личного пользования. Но это не так важно. Остальные сайты в других странах показали в роли первичного DNS – cyberplat.com, а вторичным стоял cyberplat.ru. Это могло означать только то, что центральный сервер один, но на нем хостится несколько CyberPlat-сайтов для разных стран. Пинговались они, кстати, тоже по одному айпишнику.

Сканирование и ручное исследование показало, что лучше оставить эту идею и покопаться в другом месте. Тогда был по-быстрому сгенерирован другой способ.

Нагуглив в кармане немного денежных средств, я дошел до ближайшего CyberPlat-овского терминала, закинул на мобильник чисто символическую сумму и получил квитанцию. Оказалось, что владельцем терминала был далеко не CyberPlat, а совсем левая контора, которая выступала просто-напросто дилером. Дилерские программы – это основа распространения платежных терминалов. Контора покупает автомат, ставит на своей территории и, с проведенных платежей, получает свой процент.

Недолго думая, я позвонил по контактному телефону, указанному на квитанции и попросил их дать свой e-mail, якобы для отправки мифического коммерческого предложения.

Через несколько минут письмо от администрации сервиса CyberPlat полетело жертве на ящик (не для кого ведь не секрет, как подделывается адресат). В письме не было ничего особенного. Стандартная история о смене оборудования на сервере и т.п., в связи с чем, просим выслать ваши регистрационные данные, которые нам просто жизненно необходимы, чтобы ваш терминал не заткнулся .

Послушные овцы прислали мне все свои регистрационные данные через пару часов. После этого был сгенерирован XML-файл, который полетел POST-запросом на сервер платежной системы.

Кстати, на их сайте лежит не только все описание протокола, но и исходники программы устанавливаемой на стороне терминала, а также ее скомпилированная версия.
Взлом QuickPay

Программистам этой конторы я вообще поражаюсь. Сделали красивый дизайн на флеше, а об отладке своей проги по-моему вообще не думают. Открою тебе небольшой секрет – при определенных комбинациях действий на сенсорном экране терминала, программа вылетает, даже не выдав ошибку. Причем здесь интересен еще один момент. Все сенсорные мониторы на сегодняшний день поддерживают несколько режимов:
Click on touch
Click on release
Drag and click
Drag and double click

Это как минимум… То есть, сам понимаешь, что можно отключить все возможности кроме простого нажатия по нарисованным кнопкам. Но ведь нет же! Квалифицированные мастера сервисного обслуживания и не подумали ничего отключать. Наверное, посчитали, что тогда им будет неудобно обслуживать терминалы!

Таким образом, мне удалось на разных терминалах этой конторы получить доступ к рабочему столу (да, не удивляйся, там стоит обычная винда, вопреки тому, что на сайте написано Linux), Моему Компьютеру и, каталогу с программой со всеми вытекающими последствиями.
Взлом ОСМП

С этой конторой пришлось немного попотеть. Просканировав порты, nmap нащупал открытый и нефильтруемый pptpd-демон на стандартном 1723 порту. Так как для подбора пароля у нас существует “THC Hydra”, дело оставалось за именами пользователей. База данных пользователей PPTP очень часто не имеет ничего общего с базой данных пользователей сервера, но далеко не всегда. Зачастую Василий Пупкин создает одного и того же пользователя vasya везде, где только возможно. Поэтому, получив версию Apache-демона, я вспомнил про старую уязвимость с определением имен пользователей через web-доступ. Через несколько минут эксплойт был готов к работе.

Эксплойт отработал удачно и нашел двух пользователей – root и alex. Дальше за дело принялась Hydra. Я зарядил несколько увесистых словарей и подготовил скрипт для генерирования словарей имитирующих посимвольный перебор, но до них дело так и не дошло. Все вышло как нельзя проще. Пароль для alex-а был очень простой и даже находился где-то в начале словаря.

Что было дальше, думаю, не стоит рассказывать. Еще немного поработав, я получил доступ к базе терминалов и успешно слил несколько аккаунтов. Пароли, конечно, были хешированы, но их расшифровывать я не стал.

Естественно, я даже и не рассчитывал остаться незамеченным, но пока страждущие админы несколько дней закрывали дыру, мне удалось провести добрую порцию платежей.
Стоит ли овчинка выделки?

Сам факт получения чего-то нахаляву уже заставляет человека совершать какие-то телодвижения. Главное в этом деле не жадничать и помнить про Уголовный Кодекс. Но зато какой результат... Я думаю, оно стоит того. Подумать только - ты можешь проводить практически любые платежи абсолютно бесплатно нажатием нескольких кнопок в твоей самописной программе.

Хочу сразу предупредить - все вышеописанное в статье было быстро сообщено администраторам платежных систем, которые в свою очередь поспешили прикрыть дыры.

Предоставлено хакерами.