На прошлой неделе объектом внимания исследователей из антивирусных компаний стала новая вредоносная программа Dexter, которая заражает торговые терминалы под Windows. Программа обнаружена в крупных торговых сетях, гостиницах, ресторанах и других организациях 40 стран, в том числе России и Латвии. Впрочем, 42% зарегистрированных случаев заражения Dexter относится к странам Северной Америки. По мнению экспертов, программа Dexter активно используется злоумышленниками уже несколько месяцев, как минимум с сентября 2012 года.
Dexter работает как программный эквивалент физического скиммера — устройства, которое прикрепляется к банкомату и производит физическое копирование магнитного слоя на пластиковой карте. Dexter тоже делает такую копию, только снимая данные не с кард-ридера, а из памяти торгового терминала. Поскольку через крупный магазин ежесуточно проходит тысячи покупателей, такой способ гораздо эффективнее, чем установка скиммера на отдельный банкомат.
Сложная программа интересна по нескольким причинам, в том числе и потому, что отдельные исследователи видят связь между авторами Dexter и авторами известнейшего банковского трояна Zeus.
Кроме этого, интересны некоторые аспекты функциональности Dexter. Программа внедряет свой код в процесс iexplore.exe, парсит оперативную память POS-терминала и копирует данные пластиковых карт. Более того, она как обычный бот способна не только отправлять данные на удалённый командный сервер, но и получать с него команды. Коммуникации осуществляются по HTTP, через запросы POST. Трафик выглядит примерно таким образом.
Как можно видеть на скриншоте, используется десять переменных, значения которых закодированы в Base64:
- page
- ump
- unm
- cnm
- query
- spec
- opt
- view
- var
- val
Например, переменная val имеет значение ZnJ0a2o= (Base64), то есть frtkj
. Исследователи выяснили, что это ключ, который используется для шифрования всего остального текста через XOR.
“A”.xor(“f”).xor(“r”).xor(“t”).xor(“k”).xor(“j”)
Применив ключ, мы можем получить оригинальный текст шифрограммы:
По нему уже понятно, что означает каждая переменная:
- page: строка mutex;
- ump: данные с карты;
- unm: имя пользователя;
- cnm: имя хоста;
- query: операционная система жертвы;
- spec: тип процессора;
- opt: неизвестно;
- view: список всех запущенных процессов в системе;
- var: некая уникальная строка, которая является константой на данном конкретном экземпляре заражённого устройства;
- val: случайный ключ, который генерируется при каждом запуске программы.
Но это только половина головоломки. Каким же образом бот в торговом терминале получает команды? Ответ находится в получаемом от хоста файле cookie. Он зашифрован таким же способом, с помощью XOR, ключом из предыдущего запроса и трансляцией в Base64. Этот файл содержит следующие переменные:
- update-: обновление программы с соответствующим аргументом;
- checkin: изменение задержки между сеансами связи с удалённым сервером;
- scanin: изменение задержки между считыванием памяти и копированием данных пластиковых карт;
- uninstall: полное удаление программы;
- download-: скачивание и исполнение кода, указанного через аргумент.
Специалистам удалось получить доступ к административной панели Dexter на одном из серверов.
Полученную с терминалов копию магнитной носителя карты можно использовать для изготовления клона этой карты. Процесс клонирования карт показан на видео.