Разбор конкурса Leave ATM Alone на PHDays 8

На Positive Hack Days 8 в очередной раз прошел старый добрый конкурс по взлому банкоматов Leave ATM Alone. В распоряжении участников были два банкомата, аппаратная часть была предоставлена нашим партнером по банковской безопасности Альфа-Банком. Специально для соревнования мы настроили банкоматы и заложили в них уязвимости. За 15 минут нужно было обойти средства защиты и извлечь деньги из устройства. Призовой фонд составил 40 000 ₽. Попробовать обойти защиту пришли около 40 участников. Леонид Кролле, организатор конкурса и специалист отдела исследований безопасности банковских систем Positive Technologies, рассказал, как это было, и подробно разобрал задания.

luc9cf7_e31tyqi6v7ejrodfxly.png

Участники конкурса Leave ATM Alone

В распоряжении участников было два банкомата. На одном из них установлено программное обеспечение аpplication сontrol от наших партнеров, предотвращающее запуск недоверенных приложений. Оно не дает запустить ни одно приложение, которое требуется для снятия наличности (привет, Cutlet Maker, BubbleMaker и nemagiya!).

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

Кабели подключения от банкомата и тестового процессинга находятся снаружи, с возможностью подключиться к ним с помощью сетевого шнура (LAN).

Все уведенные из системы деньги игроки забирали себе.

vhg8iogibjgk2plut3n6lmlxywu.png

Банкоматы за два дня форума: им было грустно и одиноко

Application control


Существует несколько способов проверить соответствие приложения заданному белому списку — от проверки пути к исполняемому файлу или его хеша до анализа цифровой подписи и расширения. Средства application control чаще всего применяются для дополнительной защиты клиентских компьютеров (запрещают запуск софта не из белого списка) и обеспечивают безопасность изолированных систем, например банкоматов, не подразумевающих постоянного оперативного вмешательства.

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

За последние несколько лет было описано множество методов обхода application control с помощью средств Microsoft Windows (например, «rundll32», «regsvr32»), простая блокировка которых нарушает нормальную работу ОС. Поэтому тонкая настройка application control — сложная и кропотливая работа, результат которой и был отдан участникам конкурса на растерзание. Отметим, что в реальном мире у злоумышленников нет столько времени на обход application control.

Первый день соревнования


xtt6f3h0h1wgy5oy1ccte4rbqri.png

Правда жизни :)

Начало первого дня конкурса ознаменовалось плотным потоком участников форума, которые пришли попробовать свои силы в обходе application control и подмене ответа процессинга, — всего более 40 человек.

yltq96ue_yjtqhenqxfjvzweoic.png

Первые участники

Всего на обход защиты на банкомате с application control отводилось 15 минут: за это время нужно было успеть запустить свой код. К сожалению, в первый день все попытки участников запустить свой эксплойт проваливались. Однако одному участнику удалось обнаружить странное устройство, установленное на банкомате. Это был скиммер — миниатюрное считывающее переносное устройство, которое может крепиться к банкомату. Такие приспособления помогают мошенникам воровать данные банковских карт: реквизиты, ПИН-код — всю информацию, записанную на магнитной полосе.

szkdskly0ge1n-elb3hiaz5d3ku.png

Скиммер

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

Расскажем немного про подготовку скиммера для соревнования.
Скиммер состоит из магнитной головки для считывания и устройства для записи аудиодорожки (бывает с Wi-Fi или Bluetooth). Данный экземпляр может быть сделан на основе плеера-рекордера Explay или аналогичного USB-диктофона. Примеры тут. По размерам они как раз влезают в накладку на антискиммер и еще остается место для аккумулятора, поскольку нужно было подготовиться и оживить мини Франкенштейна: тест на работоспособность был проведен на аналогичном устройстве от другой модели банкомата. Для экономии места площадка крепления USB-порта обрезается, поэтому нужный переходник пришлось сделать самостоятельно.

e7euux45y66_irhfyfm6te8sphy.png

Делаем переходник

Мы протестировали корректность включения плеера-скиммера по инструкции от плеера из интернета (на кнопках не было обозначений, так как они остались на корпусе) и записали карту и номер, который необходимо было извлечь участникам из скиммера.

vwcco7dgqrukqqn6gvzkty9x-14.png

Примерно так выглядит карта с нанесенным на нее магнитным порошком


Информация на магнитной полосе карты записана с помощью F/2F-частотного кодирования (с чем это едят и как можно декодировать — читаем вот здесь) и представляет собой алфавитно-цифровые символы в 7-битной кодировке или цифровые символы в 5-битной кодировке. Для определения ошибок считывания применяются контроль четности и продольный контроль по избыточности (или продольный резервный контроль — LRC).

Данные на любой дорожке должны начинаться со служебного символа start и заканчиваться служебным символом end. Эти символы выбраны таким образом, что позволяют определить начало блока полезной информации, определить направление считывания карты и даже формат кодировки информации (5 бит или 7 бит).

Управляющие символы предназначены для управления аппаратными средствами и не могут быть использованы для передачи информации (содержания данных). Разделители используются для отделения полей данных на карте.

В 7-битной кодировке символы [ \ ] зарезервированы для дополнительных национальных символов и не должны применяться в рамках международного обмена информацией, символ # зарезервирован для произвольных дополнительных графических символов.
Вот пример, как это может выглядеть:

— стандартная дорожка ISO 2:

; XXXXXXXXXXXXXXXX=YYYYYYYYYYYYYYYYY? Z — 37 символов

X…X — номер карты, Z — LRC (данные начинаются с символа start и заканчиваются символом end, номер карты 16-значный, присутствует LRC)

ztl7tmpmtzjao3ulrofqqbnlv80.png

Момент тестирования и записи дампа

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

Например:

  • SWipe is an application for reading magnetic stripe cards over an audio port.
  • Magnetic Stripe Decoder. A program to decode a magnetic stripe card, receiving the raw data from the magnetic stripe via the sound card.


Они позволяют с большей или меньшей точностью преобразовать данные аудиодорожки в ASCII (расшифрованные данные).

Примерно через час данные карты, записанной в скиммер, были предоставлены. Заслуженный приз «Зрительских симпатий» нашёл своего владельца. Поздравляем Максима Вихлянцева!

Остальные участники продолжили бороться за основные призы, загруженные в банкоматы :) Кто-то пытался хакнуть защиту, но были и те, кто устал и потерял надежду на быстрое обогащение. Тем не менее первый день прошел бурно, хотя основной куш так и оставался у организаторов…

a7jvqksrhcpyx7mhu-l7uzuy1_m.png

Второй день


6tstepatpvygffsz1gjbyaxk6x0.png

Остались самые настойчивые

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

sn9swddlya06o70a50iycymfvkg.png

Демонстрация успешно выполненного задания

Суть сетевой атаки на второй банкомат сводилась к следующему: в банкомате находился ноутбук с установленным программным обеспечением, эмулирующим работу процессинга.

c2rk_ihnvcu7psjkghgf_srh6iw.png

Эмулятор процессинга

Эмулятор был настроен на выдачу денежных средств с любой вставленной картой, без пин-кода, но та кассета, команду которой в ответе на запрос присылал эмулятор, — была пуста. Для решения данной задачи было необходимо:

  • перехватить пакет ответа процессингового эмулятора;
  • разобрать пакет и сформировать свой — только с корректно установленным номером кассеты;
  • вставить карту и во время посылки запроса на процессинг ответить банкомату измененными данными;
  • с помощью инструментов tcpdump, wireshark, scapy или ettercap осуществить replay-атаку или спуфинг-атаку с измененными данными для того, чтобы ответить банкомату.


tcpdump— UNIX-утилита, имеющая клон для Windows и позволяющая перехватывать и анализировать сетевой трафик, проходящий через компьютер, на котором запущена данная программа.

wireshark — аналогичная утилита, только более «заряженная», имеющая GUI.

scapy — интерактивная оболочка и программная библиотека для манипулирования сетевыми пакетами на языке программирования Python. 

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

4_zfgqlxjev9u55wt0dz4tojhz0.png

Собственно, ничего не меняется

С таким непростым подходом у участников возникли сложности, но и их они преодолели. Приз за подделку ответа от процессинга на втором банкомате разделили сразу три команды — Information & Public, Security Center и Uzbekistan. С чем мы их и поздравляем! Полный список победителей — на странице конкурса.

© Habrahabr.ru