Содержание статьи
Анализируем малварь, созданную для POS-терминалов
Авторы малвари не стоят на месте, а постоянно выдумывают новые схемы для пополнения своих кошельков. В этой статье мы рассмотрим новый тренд в сфере вирусописательства — вредоносное ПО для POS-терминалов.
Что такое POS-терминал?
POS переводится как точка продажи (point of sale), то есть место, где клиент расплачивается за товар или услуги. POS-терминалы представляют собой широкий класс устройств, и реализация его зависит только от фантазии производителей. К примеру, существуют POS-терминалы, созданные на базе планшета iPad. Пока вирусописатели для POS-терминалов освоили только одну платформу — Windows, так что речь в данной статье пойдет о вредоносном ПО именно для нее.
Чем же интересны POS-терминалы злоумышленникам? Ответ прост — эквайрингом, то есть оплатой пластиковой картой. Несмотря на то что стандарты безопасности данных индустрии платежных карт запрещают хранить полные данные карты после успешной транзакции, вирусописатели все же нашли способ получить их в свои руки. Дело в том, что для авторизации покупки POS-терминалу необходимо каким-либо образом связаться с процессинговым центром, а все это время данные карты находятся в памяти POS-терминала. Этим и решили воспользоваться злоумышленники. Еще раз повторюсь, что реализаций POS-терминалов огромное множество и данная атака будет успешна не на всех устройствах.
Злоумышленников интересуют track1 и track2 — данные, записанные на магнитную ленту. В этих данных содержатся имя владельца, код карты, срок окончания и прочая интимная информация. Обладание track1/track2 достаточно для того, чтобы изготовить клон пластиковой карты.
Dexter
В декабре 2012 года израильская компания Seculert сообщила о новой вредоносной программе, обнаруженной ею на сотнях POS-систем в различных странах мира. Одна из интересных подробностей — среди зараженных систем оказалось свыше 30% серверных версий ОС Windows . Эта компания предоставляет облачный сервис, помогающий выявить вредоносную активность в сети предприятия, анализируя лог-файлы, созданные различными программными или аппаратными прокси-серверами (Blue Coat, Squid и другими). Неудивительно, что именно она первой обнаружила эту угрозу.
Рассмотрим файлы, хеши которых опубликовала Seculert. Файлы запакованы довольно популярным криптором, который в процессе распаковки использует сигнатуру XPXAXCXK. Этот криптор широко используется для сокрытия от сигнатурного детекта. А поэтому и изучен он тоже неплохо, для него даже написан статический распаковщик.
Впрочем, для распаковки вручную достаточно поставить брейкпоинт на WinAPI-функции VirtualAlloc и протрейсить код до тех пор, пока в одном из выделенных регионов памяти не окажется распакованный PE-файл.
После снятия криптора мы обнаружим, что три из четырех файлов полностью идентичны. Размер первого варианта составляет всего 24 Кб, файл скомпилирован с помощью Visual Studio, дата компиляции 30 августа 2012 года, согласно данным из PE-заголовка. Второй, более поздний вариант скомпилирован 16 октября 2012 года, а его размер 44 Кб.
Теперь поближе к самому функционалу. Первым делом Dexter пытается внедрить свое тело и создать поток в процессе Internet Explorer. Далее вредонос копирует себя в %APPDATA%, используя случайное имя, а также прописывается в ключе реестра для автозагрузки. Dexter запускает свои потоки, которые отвечают за сохранность ключа автозапуска в реестре, поиск данных и внедрение в процесс IE. В заключение управление передается коду, устанавливающему соединение и передающему собранные данные на сервер.
Для связи с сервером Dexter использует HTTP-протокол, данные передаются с помощью POST-запроса. Прежде чем отправить данные на сервер, Dexter шифрует их с помощью XOR-операции и алгоритма base64. На сервер посылается следующая информация:
- page — идентификатор бота;
- ump — собранные track-данные;
- unm — имя пользователя;
- cnm — имя компьютера;
- query — версия операционной системы;
- spec — «битность» операционной системы (32 vs 64);
- opt — время, прошедшее от предыдущего ввода пользователем информации. Получено с помощью WinAPI-функции GetLastInputInfo;
- view — список всех процессов, запущенных на зараженной системе;
- var — уникальная строка для каждого билда;
- val — случайная строка, используется как ключ для расшифровки.
На этот POST-запрос сервер высылает ответ, в хидере которого содержатся cookie с командой на выполнение для клиента. Команда зашифрована тем же алгоритмом, что и запрос. Ранняя версия Dexter поддерживает всего две команды:
- checkin — установка периода задержки между запросами к серверу;
- scanin — установка периода задержки между попытками найти track-данные в памяти. В поздней версии к этим двум командам были добавлены еще три:
- update — обновление с указанного URL;
- uninstall — удаление себя с зараженного компьютера;
- download — скачивание и запуск файла с указанного в команде URL.
В целом Dexter обладает классическим набором функционала для троянца. Единственное, что делает его уникальным среди множества похожих вредоносных программ, — это направленность на кражу данных о пластиковых картах. Поиск track2 идет по такой последовательности:
- Составляется список процессов. Из списка исключаются системные и 64-битные процессы.
- С помощью WinAPI-функции VirtualQueryEx проверяется доступность регионов памяти.
- Происходит попытка чтения памяти из доступных регионов с помощью WinAPI-функции ReadProcessMemory.
- В прочитанном буфере ищется символ =, а также проверяется, чтобы справа и слева от символа была строка определенной длины, состоящая из цифр. Учитывается возможность хранения строки как в ANSI, так и в Unicode.
- Цифры слева от символа = проверяются с помощью алгоритма Луна. Если проверка пройдена, данные копируются в специальный буфер, откуда позже будут посланы на сервер.
- Через определенный период все шаги повторяются, данный период может быть задан командой с сервера.
В более поздней версии Dexter поиск track1 ведется по схожему алгоритму.
vSkimmer
Эту малварь принято считать последователем Dexter. В vSkimmer добавили простой антидебаг, выполненный посредством стандартных WinAPI-функций, и запись своего собственного процесса в доверенные процессы Windows-файрвола. VSkimmer ищет процессы примерно по такому же алгоритму, что и Dexter, однако автор не стал изобретать велосипед и для поиска использовал регулярные выражения.
Однако помимо всего прочего есть в vSkimmer и интересный функционал. Очевидно, что основная трудность для злоумышленников — заразить компьютер, который используется в POS-терминале. С такого компьютера обычно не ходят по сайтам, а иногда на нем и вовсе нет интернета. В таком случае заразить компьютер можно с помощью инсайдера в организации. Именно такой режим работы был добавлен в vSkimmer. Если у зараженного компьютера отсутствует интернет-соединение, то все накопленные данные вредонос записывает в специальный файл. Когда же к компьютеру подключается USB-накопитель с меткой тома KARTOXA007, то vSkimmer копирует всю собранную информацию на накопитель в файл dmpz.log.
У автора данной малвари хорошее чувство юмора — видимо, этим можно объяснить, что в качестве User-Agent’а при подключению к серверу используется значение PCICompliant/3.33. PCI Compliant — именно так называют терминал, который полностью соответствует стандартам безопасности данных индустрии платежных карт.
Так ли новы идеи этих вирусов?
Несмотря на весь шум, поднятый в СМИ и интернете в начале 2013 года, похожая схема атаки была продемонстрирована в 2010 году сотрудниками компании Trustwave на конференции DEF CON 18. В своем докладе «Malware Freakshow 2» сотрудники Trustwave продемонстрировали малварь, способную извлекать из памяти приложений track1/track2. Слайды презентации доступны по ссылке.
Заключение
Несмотря на свою примитивность, рассмотренные вредоносные программы успешно справляются с возложенными на них задачами. Однако в будущем мы можем стать свидетелями использования более изощренного ПО, направленного на хищение данных с POS-терминалов.
История успеха
В мае 2011 года было выдвинуто официальное обвинение четырем гражданам Румынии в том, что они похищали данные о пластиковых картах жителей США, используя POS-терминалы. Согласно обвинению, с 2008 года по май 2011-го румынские злоумышленники проникли на более чем 150 POS-терминалов одной из сетей ресторанов быстрого питания, а также на POS-терминалы других компаний. Всего хакерам удалось похитить более 80 тысяч данных о пластиковых картах. Для того чтобы установить свое вредоносное ПО на POS-терминалы, хакеры подбирали пароли к pcAnywhere — программе, использующейся для удаленного управления компьютером.