РУССКИЙ
РУССКИЙ
ENGLISH
29.04.2019

Знакомство со снифферами-4:
CoffeMokko

Виктор Окороков
Аналитик Threat Intelligence GROUP-IB
В аналитическом отчете Group-IB о JavaScript-снифферах, их инфраструктуре и способах монетизации, мы выявили 38 семейств снифферов, из которых лишь 12 ранее были известны исследователям. В прошлых публикациях мы анализировали семейства ReactGet, G-Analytics и Illum, сейчас руки дошли до CoffeMokko.
Встречайте: CoffeMokko
Вредоносная кампания с применением этого семейства снифферов началась в мае 2017 года. Атакам подверглись сайты под управлением таких CMS, как Magento, OpenCart, WordPress, osCommerce, Shopify.

Предположительно, операторами этого семейства снифферов является преступная группа Group 1, описанная специалистами RiskIQ в 2016 году. Эта преступная группа создает уникальные снифферы для каждого заражения: файл сниффера располагается в директории src или js на сервере злоумышленников. Внедрение в код сайта осуществляется по прямой ссылке на сниффер.
В коде сниффера жестко закодированы названия полей формы, из которых необходимо украсть данные. Также сниффер проверяет, находится ли пользователь на странице оплаты, сверяя список ключевых слов с текущим адресом пользователя.
Некоторые обнаруженные версии сниффера были обфусцированы и содержали зашифрованную строку, в которой хранился основной массив ресурсов: именно в нем были имена полей форм для различных платежных систем, а также адрес гейта, на который необходимо отправлять украденные данные.
Украденная платежная информация отправлялась скрипту на сервере злоумышленников по пути /savePayment/index.php или /tr/index.php. Предположительно, этот скрипт служит для отправки данных с гейта на основной сервер, консолидирующий данные со всех снифферов. Для сокрытия передаваемых данных вся платежная информация жертвы кодируется при помощи base64, а затем происходит несколько замен символов:


  • Символ "e" менялся на ":"
  • Символ "w" менялся на "+"
  • Символ "o"менялся на "%"
  • Символ "d" менялся на "#"
  • Символ "a" менялся на "-"
  • Символ "7" менялся на "^"
  • Символ "h"менялся на"_"
  • Символ "T" менялся на "@"
  • Символ "0"менялся на"/"
  • Символ "Y" менялся на "*"
В результате замен символов закодированные base64 данные невозможно декодировать, не проведя обратного преобразования.

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

Также данная группа использовала доменные имена, напоминающие название популярных плагинов для jQuery (slickjs[.]org для сайтов, использующих плагин slick.js), платежных шлюзов (sagecdn[.]org для сайтов, использующих платежную систему Sage Pay).

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

Каждому домену соответствовал сайт, на котором создавалась директория /js или /src. В этой директории хранились скрипты снифферов, по одному снифферу на каждое новое заражение. Сниффер внедрялся в код сайта по прямой ссылке, но в редких случаях злоумышленники модифицировали один из файлов сайта и добавляли в него вредоносный код.
Анализ кода
Первый алгоритм обфускации
В некоторых обнаруженных образцах снифферов этого семейства код был обфусцирован и содержал зашифрованные данные, необходимые для работы сниффера, в частности, адрес гейта сниффера, список полей платежной формы, а в некоторых случаях код поддельной формы оплаты. В коде внутри функции ресурсы были зашифрованы при помощи XOR по ключу, который передавался аргументом этой же функции.
Расшифровав строку соответствующим ключом, уникальным для каждого образца, можно получить строку, содержащую все строки из кода сниффера через символ-разделитель.
Второй алгоритм обфускации
В более поздних образцах снифферов этого семейства был использован другой механизм обфускации: в этом случае данные были зашифрованы при помощи самописного алгоритма. Строка, содержащая зашифрованные данные, необходимые для работы сниффера, передавалась аргументом функции расшифрования.
При помощи консоли браузера можно расшифровать зашифрованные данные и получить массив, содержащий ресурсы сниффера.
Связь с ранними атаками MageCart
В ходе анализа одного из доменов, используемых группой в качестве гейта для сбора украденных данных, было установлено, что на этом домене развернута инфраструктура для кражи кредитных карт, идентичная той, которая использовалась одной из первых групп, обнаруженных специалистами RiskIQ, получившей название Group 1 (https://www.riskiq.com/blog/labs/magecart-keylogger-injection/).

На хосте семейства снифферов CoffeMokko были обнаружены два файла:

  • mage.js – файл, содержащий код сниффера Group 1 с адресом гейта js-cdn.link
  • mag.php – PHP-скрипт, отвечающий за сбор украденных сниффером данных
Содержимое файла mage.js представлено ниже.
Также было установлено, что самые ранние домены, используемые группой, стоящей за семейством снифферов CoffeMokko, были зарегистрированы 17 мая 2017 года:

  • link-js[.]link
  • info-js[.]link
  • track-js[.]link
  • map-js[.]link
  • smart-js[.]link
Формат этих доменных имен совпадает с доменными именами Group 1, которые были использованы в атаках 2016 года.

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

После публикации первого отчета о деятельности преступной группы все их доменные имена были заблокированы, а инструменты подробно изучены и описаны, группа была вынуждена взять перерыв, чтобы доработать свои внутренние инструменты и переписать код снифферов для того, чтобы продолжить свои атаки и оставаться незамеченными.
Инфраструктура
Преступление без наказания: анализ семейств js-снифферов
Атаки снифферов на онлайн-магазины продолжают расти, а в цепочку пострадавших оказываются вовлечены различные аудитории — зараженный магазин, его клиенты, платежная система, банки-эмитенты скомпрометированных карт. Эксперты Group-IB проанализировали известные типы снифферов, выявили их инфраструктуру и обнаружили 38 различных семейств (ранее было известно 12 групп).