Практически каждый из нас пользуется услугами онлайн-магазинов, а значит, рано или поздно рискует стать жертвой JavaScript-снифферов — специального кода, который злоумышленники внедряют на сайт для кражи данных банковских карт, адресов, логинов и паролей пользователей.
От снифферов уже пострадали почти 400 000 пользователей сайта и мобильного приложения авиакомпании British Airways, а также посетители британского сайта спортивного гиганта FILA и американского дистрибьютора билетов Ticketmaster.
Аналитик Threat Intelligence Group-IB Виктор Окороков рассказывает о том, как снифферы внедряются в код сайта и крадут платежную информацию, а также о том, какие CRM они атакуют.
«Скрытая угроза»
Так вышло, что долгое время JS-снифферы оставались вне поля зрения антивирусных аналитиков, а банки и платежные системы не видели в них серьезной угрозы. И совершенно напрасно. Эксперты Group-IB проанализировали 2440 зараженных онлайн-магазинов, посетители которых — суммарно около 1,5 миллионов человек в день — подвергались риску компрометации. Среди пострадавших — не только пользователи, но и онлайн-магазины, платежные системы и банки, выпустившие скомпрометированные карты.
Отчет Group-IB стал первым исследованием даркнет-рынка снифферов, их инфраструктуры и способов монетизации, приносящей их создателям миллионы долларов. Мы выявили 38 семейств снифферов, из которых лишь 12 ранее были известны исследователям.
Остановимся подробно на четырех семействах снифферов, изученных в ходе исследования.
Семейство ReactGet
Снифферы семейства ReactGet применяются для кражи данных банковских карт на сайтах онлайн-магазинов. Сниффер может работать с большим количеством разных платежных систем, использующихся на сайте: одно значение параметра соответствует одной платежной системе, а отдельные обнаруженные версии сниффера могут использоваться для кражи учетных данных, а также для кражи данных банковских карт из платежных форм сразу нескольких платежных систем, как так называемый универсальный сниффер. Было установлено, что в некоторых случаях атакующие проводят фишинговые атаки на администраторов онлайн-магазинов с целью получения доступа в административную панель сайта.
Кампания с применением этого семейства снифферов началась в мае 2017 года, атаке подверглись сайты под управлением CMS и платформ Magento, Bigcommerce, Shopify.
Как ReactGet внедряется в код онлайн-магазина
Кроме «классического» внедрения скрипта по ссылке, операторы снифферов семейства ReactGet используют особую технику: при помощи JavaScript-кода проверяется, соответствует ли текущий адрес, на котором находится пользователь, определенным критериям. Вредоносный код будет запущен только в том случае, если в текущем URL-адресе присутствует подстрока checkout или onestepcheckout, onepage/, out/onepag, checkout/one, ckout/one. Таким образом, код сниффера исполнится именно в тот момент, когда пользователь перейдет к оплате покупок и введет платежную информацию в форму на сайте.
Этот сниффер использует нестандартную технику. Платежные и персональные данные жертвы собираются вместе, кодируются при помощи base64, а затем полученная строка используется как параметр для отправки запроса на сайт злоумышленников. Чаще всего путь до гейта имитирует JavaScript-файл, к примеру resp.js, data.js и так далее, но также используются ссылки на файлы изображений, GIF и JPG. Особенность в том, что сниффер создает объект изображения размером 1 на 1 пиксель и использует полученную ранее ссылку как параметр src изображения. То есть для пользователя такой запрос в трафике будет выглядеть как запрос обычной картинки. Похожая техника была использована в снифферах семейства ImageID. Кроме того, техника с использованием изображения размером 1 на 1 пиксель применяется во многих легитимных скриптах онлайн-аналитики, что также может ввести пользователя в заблуждение.
Анализ версий
Анализ активных доменов, используемых операторами снифферов ReactGet, позволил обнаружить много разных версий снифферов этого семейства. Версии отличаются наличием или отсутствием обфускации, а кроме того, каждый сниффер предназначен для определенной платежной системы, обрабатывающей платежи по банковским картам для онлайн-магазинов. Перебрав значение параметра, соответствующего номеру версии, специалисты Group-IB получили полный список доступных вариаций снифферов, а по названиям полей форм, которые каждый сниффер ищет в коде страницы, определили платежные системы, на которые нацелен сниффер.
Сниффер паролей
Одним из преимуществ JavaScript-снифферов, работающих на клиентской стороне сайта, является универсальность: внедренный на сайт вредоносный код способен похитить данные любого типа, будь то платежные данные или логин и пароль от пользовательского аккаунта. Специалисты Group-IB обнаружили образец сниффера, относящегося к семейству ReactGet, предназначенный для кражи адресов электронной почты и паролей пользователей сайта.
Пересечение со сниффером ImageID
В ходе анализа одного из зараженных магазинов было установлено, что его сайт подвергся заражению дважды: помимо вредоносного кода сниффера семейства ReactGet, был обнаружен код сниффера семейства ImageID. Данное пересечение может быть свидетельством того, что операторы, стоящие за использованием обоих снифферов, применяют схожие техники для внедрения вредоносного кода.
Универсальный сниффер
В ходе анализа одного из доменных имен, относящихся к инфраструктуре снифферов ReactGet, было установлено, что тот же пользователь зарегистрировал три других доменных имени. Эти три домена имитировали домены реально существующих сайтов и ранее использовались для размещения снифферов. При анализе кода трех легитимных сайтов был обнаружен неизвестный сниффер, а дальнейший анализ показал, что это усовершенствованная версия сниффера ReactGet. Все ранее отслеженные версии снифферов этого семейства были нацелены на какую-то одну платежную систему, то есть для каждой платежной системы требовалась специальная версия сниффера. Однако в данном случае была обнаружена универсальная версия сниффера, способная похищать информацию из форм, относящихся к 15 разным платежным системам и модулям ecommerce-сайтов для проведения онлайн-платежей.
Итак, в начале работы сниффер осуществлял поиск базовых полей формы, содержащих персональную информацию жертвы: полное имя, физический адрес, номер телефона.
Затем сниффер осуществлял поиск более чем по 15 разным префиксам, соответствующим разным платежным системам и модулям для онлайн-платежей.
Далее персональные данные жертвы и платежная информация собирались воедино и отправлялись на подконтрольный злоумышленнику сайт: в этом конкретном случае были обнаружены две версии универсального сниффера ReactGet, расположенные на двух разных взломанных сайтах. Однако обе версии отправляли украденные данные на один и тот же взломанный сайт zoobashop.com.
Анализ префиксов, которые использовались сниффером для поиска полей, содержащих платежную информацию жертвы, позволил определить, что этот образец сниффера был нацелен на следующие платежные системы:
- Authorize.Net
- Verisign
- First Data
- USAePay
- Stripe
- PayPal
- ANZ eGate
- Braintree
- DataCash (MasterCard)
- Realex Payments
- PsiGate
- Heartland Payment Systems
Какие инструменты используются для кражи платежной информации
Первый инструмент, обнаруженный в ходе анализа инфраструктуры атакующих, служит для обфускации вредоносных скриптов, отвечающих за кражу банковских карт. На одном из хостов атакующих был обнаружен bash-скрипт, использующий CLI проекта javascript-obfuscator для автоматизации обфускации кода снифферов.
Второй обнаруженный инструмент предназначен для генерации кода, отвечающего за подгрузку основного сниффера. Данный инструмент генерирует JavaScript-код, который проверяет, находится ли пользователь на странице оплаты, путем поиска в текущем адресе пользователя строк checkout, cart и так далее, и если результат положительный, то код подгружает основной сниффер с сервера злоумышленников. Для сокрытия вредоносной активности все строки, включая тестовые строки для определения платежной страницы, а также ссылку на сниффер, закодированы при помощи base64.
Фишинговые атаки
В ходе анализа сетевой инфраструктуры атакующих было установлено, что зачастую для получения доступа в административную панель целевого онлайн-магазина преступная группа использует фишинг. Атакующие регистрируют домен, визуально похожий на домен магазина, а затем разворачивают на нем поддельную форму входа административной панели Magento. В случае успеха атакующие получат доступ в административную панель CMS Magento, что дает им возможность редактировать компоненты сайта и внедрить сниффер для кражи данных кредитных карт.
Домен |
Дата обнаружения/появления |
---|---|
mediapack.info | 04.05.2017 |
adsgetapi.com | 15.06.2017 |
simcounter.com | 14.08.2017 |
mageanalytics.com | 22.12.2017 |
maxstatics.com | 16.01.2018 |
reactjsapi.com | 19.01.2018 |
mxcounter.com | 02.02.2018 |
apitstatus.com | 01.03.2018 |
orderracker.com | 20.04.2018 |
tagstracking.com | 25.06.2018 |
adsapigate.com | 12.07.2018 |
trust-tracker.com | 15.07.2018 |
fbstatspartner.com | 02.10.2018 |
billgetstatus.com | 12.10.2018 |
aldenmlilhouse.com | 20.10.2018 |
balletbeautlful.com | 20.10.2018 |
bargalnjunkie.com | 20.10.2018 |
payselector.com | 21.10.2018 |
tagsmediaget.com | 02.11.2018 |
hs-payments.com | 16.11.2018 |
ordercheckpays.com | 19.11.2018 |
geisseie.com | 24.11.2018 |
gtmproc.com | 29.11.2018 |
livegetpay.com | 18.12.2018 |
sydneysalonsupplies.com | 18.12.2018 |
newrelicnet.com |
19.12.2018 |
nr-public.com | 03.01.2019 |
cloudodesc.com | 04.01.2019 |
ajaxstatic.com | 11.01.2019 |
livecheckpay.com | 21.01.2019 |
asianfoodgracer.com | 25.01.2019 |
Семейство G-Analytics
Это семейство снифферов используется для кражи карт клиентов онлайн-магазинов. Самое первое доменное имя, используемое группой, было зарегистрировано в апреле 2016 года, что может свидетельствовать о начале активности группы в середине 2016 года.
В текущей кампании группа использует доменные имена, имитирующие реально существующие сервисы, такие как Google Analytics и jQuery, маскируя активность снифферов легитимными скриптами и похожими на легитимные доменными именами. Атаке подверглись сайты, работающие под управлением CMS Magento.
Как G-Analytics внедряется в код онлайн-магазина
Отличительная особенность этого семейства — использование различных способов похищения платежной информации пользователя. Помимо классического внедрения JavaScript-кода в клиентскую часть сайта, преступная группа также применяла технику внедрения кода в серверную часть сайта, а именно PHP-скрипты, обрабатывающие введенные пользователем данные. Эта техника опасна тем, что затрудняет обнаружение вредоносного кода сторонними исследователями. Специалистами Group-IB была обнаружена версия сниффера, внедренного в PHP-код сайта, использующая в качестве гейта домен dittm.org.
Также была обнаружена ранняя версия сниффера, использующего для сбора украденных данных тот же домен dittm.org, но эта версия предназначена уже для установки на клиентской стороне онлайн-магазина.
Позднее группа изменила свою тактику и начала уделять больше внимания сокрытию вредоносной активности и маскировке.
В начале 2017 года группа стала использовать домен jquery-js.com, маскирующийся под CDN для jQuery: при переходе на сайт злоумышленников пользователя перенаправляет на легитимный сайт jquery.com.
А в середине 2018 года группа взяла на вооружение доменное имя g-analytics.com и начала маскировать деятельность сниффера под легитимный сервис Google Analytics.
Анализ версий
В ходе анализа доменов, используемых для хранения кода снифферов, было установлено, что на сайте располагается большое количество версий, которые различаются наличием обфускации, а также наличием или отсутствием недостижимого кода, добавленного в файл для отвлечения внимания и сокрытия вредоносного кода.
Всего на сайте jquery-js.com было выявлено шесть версий снифферов. Украденные данные эти снифферы отправляют на адрес, расположенный на том же сайте, что и сам сниффер: hxxps://jquery-js[.]com/latest/jquery.min.js:
- hxxps://jquery-js[.]com/jquery.min.js
- hxxps://jquery-js[.]com/jquery.2.2.4.min.js
- hxxps://jquery-js[.]com/jquery.1.8.3.min.js
- hxxps://jquery-js[.]com/jquery.1.6.4.min.js
- hxxps://jquery-js[.]com/jquery.1.4.4.min.js
- hxxps://jquery-js[.]com/jquery.1.12.4.min.js
Более поздний домен g-analytics.com, используемый группой в атаках с середины 2018 года, служит хранилищем для большего числа снифферов. Всего было обнаружено 16 разных версий сниффера. В этом случае гейт для отправки украденных данных был замаскирован под ссылку на изображение формата GIF: hxxp://g-analytics[.]com/__utm.gif?v=1&_v=j68&a=98811130&t=pageview&_s=1&sd=24-bit&sr=2560x1440&vp=2145x371&je=0&_u=AACAAEAB~&jid=1841704724&gjid=877686936&cid
=1283183910.1527732071:
- hxxps://g-analytics[.]com/libs/1.0.1/analytics.js
- hxxps://g-analytics[.]com/libs/1.0.10/analytics.js
- hxxps://g-analytics[.]com/libs/1.0.11/analytics.js
- hxxps://g-analytics[.]com/libs/1.0.12/analytics.js
- hxxps://g-analytics[.]com/libs/1.0.13/analytics.js
- hxxps://g-analytics[.]com/libs/1.0.14/analytics.js
- hxxps://g-analytics[.]com/libs/1.0.15/analytics.js
- hxxps://g-analytics[.]com/libs/1.0.16/analytics.js
- hxxps://g-analytics[.]com/libs/1.0.3/analytics.js
- hxxps://g-analytics[.]com/libs/1.0.4/analytics.js
- hxxps://g-analytics[.]com/libs/1.0.5/analytics.js
- hxxps://g-analytics[.]com/libs/1.0.6/analytics.js
- hxxps://g-analytics[.]com/libs/1.0.7/analytics.js
- hxxps://g-analytics[.]com/libs/1.0.8/analytics.js
- hxxps://g-analytics[.]com/libs/1.0.9/analytics.js
- hxxps://g-analytics[.]com/libs/analytics.js
Монетизация украденных данных
Преступная группа монетизирует украденные данные, продавая карты через специально созданный подпольный магазин, оказывающий услуги кардерам. Анализ доменов, используемых атакующими, позволил определить, что google-analytics.cm был зарегистрирован тем же пользователем, что и домен cardz.vc. Домен cardz.vc относится к магазину по продаже украденных банковских карт Cardsurfs (Flysurfs), который обрел популярность еще во времена активности подпольной торговой площадки AlphaBay как магазин по продаже банковских карт, украденных при помощи сниффера.
Анализируя домен analytic.is, расположенный на том же сервере, что и домены, используемые снифферами для сбора украденных данных, специалисты Group-IB обнаружили файл, содержащий логи Cookie-стиллера, который, похоже, позднее был заброшен разработчиком. Одна из записей в логе содержала домен iozoz.com, который ранее был использован в одном из снифферов, активных в 2016 году. Предположительно, этот домен ранее использовался злоумышленником для сбора украденных при помощи сниффера карт. Этот домен был зарегистрирован на email-адрес kts241@gmail.com, который также был использован для регистрации доменов cardz.su и cardz.vc, относящихся к кардинговому магазину Cardsurfs.
Исходя из полученных даннных, можно сделать предположение, что семейство снифферов G-Analytics и подпольный магазин по продаже банковских карт Cardsurfs управляются одними и теми же людьми, а магазин используется для реализации банковских карт, украденных при помощи сниффера.
Домен |
Дата обнаружения/появления |
---|---|
iozoz.com | 08.04.2016 |
dittm.org | 10.09.2016 |
jquery-js.com | 02.01.2017 |
g-analytics.com | 31.05.2018 |
google-analytics.is | 21.11.2018 |
analytic.to | 04.12.2018 |
google-analytics.to | 06.12.2018 |
google-analytics.cm | 28.12.2018 |
analytic.is | 28.12.2018 |
googlc-analytics.cm | 17.01.2019 |
Семейство Illum
Illum — семейство снифферов, применяемое для атак на онлайн-магазины, работающие под управлением CMS Magento. Помимо внедрения вредоносного кода, операторы этого сниффера также используют внедрение полноценных поддельных форм оплаты, которые отправляют данные на подконтрольные злоумышленникам гейты.
При анализе сетевой инфраструктуры, которую используют операторы этого сниффера, было отмечено большое количество вредоносных скриптов, эксплойтов, поддельных платежных форм, а также сборник примеров с вредоносными снифферами конкурентов. Исходя из информации о датах появления доменных имен, используемых группой, можно предположить, что начало кампании приходится на конец 2016 года.
Как Illum внедряется в код онлайн-магазина
Первые обнаруженные версии сниффера внедрялись прямо в код скомпрометированного сайта. Украденные данные отправлялись по адресу cdn.illum[.]pw/records.php, гейт же был закодирован при помощи base64.
Позднее была обнаружена упакованная версия сниффера, использующая другой гейт — records.nstatistics[.]com/records.php.
Согласно отчету Willem de Groot, такой же хост использовался в сниффере, который был внедрен на сайт магазина, принадлежащего немецкой политической партии CSU.
Анализ сайта злоумышленников
Специалисты Group-IB обнаружили и проанализировали сайт, используемый данной преступной группой для хранения инструментов и сбора украденной информации.
Среди инструментов, обнаруженных на сервере злоумышленников, были найдены скрипты и эксплойты для повышения привилегий в ОС Linux: к примеру, Linux Privilege Escalation Check Script, разработанный Майком Чумаком (Mike Czumak), а также эксплойт для CVE-2009-1185.
Непосредственно для атак на онлайн-магазины злоумышленники использовали два эксплойта: первый способен внедрить вредоносный код в core_config_data при помощи эксплуатации CVE-2016-4010, второй эксплуатирует уязвимость типа RCE в плагинах для CMS Magento, позволяя выполнить произвольный код на уязвимом веб-сервере.
Также в ходе анализа сервера были обнаружены различные образцы снифферов и фальшивых платежных форм, используемых злоумышленниками для сбора платежной информации со взломанных сайтов. Как можно заметить из списка ниже, некоторые скрипты создавались индивидуально для каждого взломанного сайта, в то время как для определенных CMS и платежных шлюзов использовалось универсальное решение. К примеру, скрипты segapay_standart.js и segapay_onpage.js предназначены для внедрения на сайты, использующие платежный шлюз Sage Pay.
Скрипт | Платежный шлюз |
---|---|
sr.illum[.]pw/mjs_special/visiondirect.co.uk.js | //request.payrightnow[.]cf/checkpayment.php |
sr.illum[.]pw/mjs_special/topdierenshop.nl.js | //request.payrightnow[.]cf/alldata.php |
sr.illum[.]pw/mjs_special/tiendalenovo.es.js | //request.payrightnow[.]cf/alldata.php |
sr.illum[.]pw/mjs_special/pro-bolt.com.js | //request.payrightnow[.]cf/alldata.php |
sr.illum[.]pw/mjs_special/plae.co.js | //request.payrightnow[.]cf/alldata.php |
sr.illum[.]pw/mjs_special/ottolenghi.co.uk.js | //request.payrightnow[.]cf/alldata.php |
sr.illum[.]pw/mjs_special/oldtimecandy.com.js | //request.payrightnow[.]cf/checkpayment.php |
sr.illum[.]pw/mjs_special/mylook.ee.js | //cdn.illum[.]pw/records.php |
sr.illum[.]pw/mjs_special/luluandsky.com.js | //request.payrightnow[.]cf/checkpayment.php |
sr.illum[.]pw/mjs_special/julep.com.js | //cdn.illum[.]pw/records.php |
sr.illum[.]pw/mjs_special/gymcompany.es.js | //request.payrightnow[.]cf/alldata.php |
sr.illum[.]pw/mjs_special/grotekadoshop.nl.js | //request.payrightnow[.]cf/alldata.php |
sr.illum[.]pw/mjs_special/fushi.co.uk.js | //request.payrightnow[.]cf/checkpayment.php |
sr.illum[.]pw/mjs_special/fareastflora.com.js | //request.payrightnow[.]cf/checkpayment.php |
sr.illum[.]pw/mjs_special/compuindia.com.js | //request.payrightnow[.]cf/alldata.php |
sr.illum[.]pw/mjs/segapay_standart.js | //cdn.illum[.]pw/records.php |
sr.illum[.]pw/mjs/segapay_onpage.js | //cdn.illum[.]pw/records.php |
sr.illum[.]pw/mjs/replace_standart.js | //request.payrightnow[.]cf/checkpayment.php |
sr.illum[.]pw/mjs/all_inputs.js | //cdn.illum[.]pw/records.php |
sr.illum[.]pw/mjs/add_inputs_standart.js | //request.payrightnow[.]cf/checkpayment.php |
sr.illum[.]pw/magento/payment_standart.js | //cdn.illum[.]pw/records.php |
sr.illum[.]pw/magento/payment_redirect.js | //payrightnow[.]cf/?payment= |
sr.illum[.]pw/magento/payment_redcrypt.js | //payrightnow[.]cf/?payment= |
sr.illum[.]pw/magento/payment_forminsite.js | //paymentnow[.]tk/?payment= |
Хост paymentnow[.]tk, используемый как гейт в скрипте payment_forminsite.js, был обнаружен как subjectAltName в нескольких сертификатах, относящихся к сервису CloudFlare. Помимо этого, на хосте располагался скрипт evil.js. Судя по имени скрипта, он мог быть использован в рамках эксплуатации CVE-2016-4010, благодаря которой можно внедрить вредоносный код в footer сайта под управлением CMS Magento. В качестве гейта этот скрипт применил хост request.requestnet[.]tk, использующий тот же сертификат, что и хост paymentnow[.]tk.
Поддельные платежные формы
Ниже на рисунке показан пример формы для ввода данных карты. Эта форма использовалась для внедрения на сайт онлайн-магазина и кражи данных карт.
На следующем рисунке — пример поддельной платежной формы PayPal, которую использовали злоумышленники для внедрения на сайты с этим методом оплаты.
Домен |
Дата обнаружения/появления |
---|---|
cdn.illum.pw | 27/11/2016 |
records.nstatistics.com | 06/09/2018 |
request.payrightnow.cf | 25/05/2018 |
paymentnow.tk | 16/07/2017 |
payment-line.tk | 01/03/2018 |
paymentpal.cf | 04/09/2017 |
requestnet.tk | 28/06/2017 |
Семейство CoffeMokko
Семейство снифферов CoffeMokko, предназначенных для кражи банковских карт пользователей интернет-магазинов, используется как минимум с мая 2017 года. Предположительно, операторами данного семейства снифферов является преступная группа Group 1, описанная специалистами RiskIQ в 2016 году. Атакам подверглись сайты под управлением таких CMS, как Magento, OpenCart, WordPress, osCommerce, Shopify.
Как CoffeMokko внедряется в код онлайн-магазина
Операторы этого семейства создают уникальные снифферы для каждого заражения: файл сниффера располагается в директории 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
В ходе анализа одного из доменов, используемых группой в качестве гейта для сбора украденных данных, было установлено, что на этом домене развернута инфраструктура для кражи кредитных карт, идентичная той, которая использовалась Group 1 — одной из первых групп, обнаруженных специалистами RiskIQ.
На хосте семейства снифферов CoffeMokko были обнаружены два файла:
- mage.js — файл, содержащий код сниффера Group 1 с адресом гейта js-cdn.link
- mag.php — PHP-скрипт, отвечающий за сбор украденных сниффером данных
Также было установлено, что самые ранние домены, используемые группой, стоящей за семейством снифферов 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. После публикации первого отчета о деятельности преступной группы все их доменные имена были заблокированы, а инструменты подробно изучены и описаны. Группа была вынуждена взять перерыв, доработать свои внутренние инструменты и переписать код снифферов для того, чтобы продолжить свои атаки и оставаться незамеченными.
Домен | Дата обнаружения/появления |
---|---|
link-js.link | 17.05.2017 |
info-js.link | 17.05.2017 |
track-js.link | 17.05.2017 |
map-js.link | 17.05.2017 |
smart-js.link | 17.05.2017 |
adorebeauty.org | 03.09.2017 |
security-payment.su | 03.09.2017 |
braincdn.org | 04.09.2017 |
sagecdn.org | 04.09.2017 |
slickjs.org | 04.09.2017 |
oakandfort.org | 10.09.2017 |
citywlnery.org | 15.09.2017 |
dobell.su | 04.10.2017 |
childsplayclothing.org | 31.10.2017 |
jewsondirect.com | 05.11.2017 |
shop-rnib.org | 15.11.2017 |
closetlondon.org | 16.11.2017 |
misshaus.org | 28.11.2017 |
battery-force.org | 01.12.2017 |
kik-vape.org | 01.12.2017 |
greatfurnituretradingco.org | 02.12.2017 |
etradesupply.org | 04.12.2017 |
replacemyremote.org | 04.12.2017 |
all-about-sneakers.org | 05.12.2017 |
mage-checkout.org | 05.12.2017 |
nililotan.org | 07.12.2017 |
lamoodbighats.net | 08.12.2017 |
walletgear.org | 10.12.2017 |
dahlie.org | 12.12.2017 |
davidsfootwear.org | 20.12.2017 |
blackriverimaging.org | 23.12.2017 |
exrpesso.org | 02.01.2018 |
parks.su | 09.01.2018 |
pmtonline.su | 12.01.2018 |
ottocap.org | 15.01.2018 |
christohperward.org | 27.01.2018 |
coffetea.org | 31.01.2018 |
energycoffe.org | 31.01.2018 |
energytea.org | 31.01.2018 |
teacoffe.net | 31.01.2018 |
adaptivecss.org | 01.03.2018 |
coffemokko.com | 01.03.2018 |
londontea.net | 01.03.2018 |
ukcoffe.com | 01.03.2018 |
labbe.biz | 20.03.2018 |
batterynart.com | 03.04.2018 |
btosports.net | 09.04.2018 |
chicksaddlery.net | 16.04.2018 |
paypaypay.org | 11.05.2018 |
ar500arnor.com | 26.05.2018 |
authorizecdn.com | 28.05.2018 |
slickmin.com | 28.05.2018 |
bannerbuzz.info | 03.06.2018 |
kandypens.net | 08.06.2018 |
mylrendyphone.com | 15.06.2018 |
freshchat.info | 01.07.2018 |
3lift.org | 02.07.2018 |
abtasty.net | 02.07.2018 |
mechat.info | 02.07.2018 |
zoplm.com | 02.07.2018 |
zapaljs.com | 02.09.2018 |
foodandcot.com | 15.09.2018 |
freshdepor.com | 15.09.2018 |
swappastore.com | 15.09.2018 |
verywellfitnesse.com | 15.09.2018 |
elegrina.com | 18.11.2018 |
majsurplus.com | 19.11.2018 |
top5value.com | 19.11.2018 |
Комментарии (9)
Mikluho
14.05.2019 19:37Может я что-то упустил, но ни в одном примере не увидел ответа на вопрос «Как *** внедряется в код онлайн-магазина». То есть, написано, куда внедряется, но не написано, как.
И да, что пользователям делать, тоже не ясно. Разве только использовать виртуальные карты на каждый платёж или использовать только доверенные платёжные шлюзы…EditorGIB Автор
14.05.2019 19:59Зачастую установить способ заражения сайта без проведения криминалистической экспертизы почти невозможно. Как было описано в части «Анализ сайта злоумышленников» для сниффера Illum, на их сайте мы обнаружили два эксплоита, которые могут применяться для внедрения вредоносного кода в Magento-сайты. Также, помимо эксплоитов, злоумышленники используют брутфорс-атаки на phpMyAdmin и административные панели Magento.
К сожалению, пользователь перед этой угрозой почти беззащитен, вы правы. Мы рекомендуем для платежей в Интернете использовать либо виртуальную карту, либо отдельную карту для онлайн-платежей, на которой всегда будет только та сумма, которая необходима для конкретного онлайн-платежа.Mikluho
15.05.2019 00:02Это всё очевидно. По крайней мере тем, кто хоть немного сечёт в сайтостроительстве и хостинге.
Но вот в статье заголовки не сходятся с содержанием. Под тот набор информации, который выложен тут, годнее были бы советы пользователям, кроме очевидных про карты, как, например, настроить какой-нибудь адблок для фильтрации сомнительных скриптов… Или ещё что придумать в том же роде.
А саму статью назвать бы в духе «подробный анализ самых популярных снифферов в зарубежных онлайн-магазинах» :)remzalp
15.05.2019 08:13учитывая, что заражается и серверный скрипт, со стороны клиента вообще ничего не увидеть.
uBlock с блокировкой по умолчанию всех скриптов и изображений и ручным разрешением только минимально необходимого конкретному сайту — немного повысит шансы уцелетьMikluho
15.05.2019 13:02Все эти снифферы должны куда-то отправлять данные, много загружаются с внешних сайтов. Эту вот деятельность как-то пресечь бы…
IgosYee
14.05.2019 19:39Работаю с магазинами на Magento 1/2. Так вот был клиент из Дании, ему пришел эмайл от гугл что у него на сайте был, как они написали, «Unwanted script». Линк у него был такой: api.ustore.pw/statistics.js
На сайте у клиента была открыта страница PhpMyAdmin и у кого-то, судя по всему, был к ней логин и пароль. Через базу данных они просто вставили код <script src="…
Клиент сказал что вообще не знал про ПхпМайАдмин и просто попросил его удалить. На мои предложения потратить пару часов на более глубоке изучение того что еще могло быть украденно клиент просто проигнорировал сказав сухое «Сэнкс». Хозяин барин.
Но из логов было видно что там далеко не один запрос к базе данных был. Каждый день. В течении несольких месяцов.
Скрипт был на половину обфусцирован. Все что я смог разобрать это, что скрипт реагировал на input'ы паролей, инфорцации кредитной карты и т.д.EditorGIB Автор
15.05.2019 12:18Вы правы, этот скрипт — представитель одного из семейств JS-снифферов. Брутфорс-атаки на административные панели CMS и веб-интерфейсы систем управления БД (phpMyAdmin) являются одним из способов установки снифферов на целевой сайт, это достигается за счет того, что многие структурные элементы сайта хранятся именно в БД, к примеру, нам известны случаи, когда атакующие перезаписывали в базе данных сайта элемент, соответствующий footer-у и внедряли в него вредоносный скрипт для кражи карт. Именно поэтому так важно использовать стойкие пароли, регулярно ставить обновления и ответственно относиться к безопасности, особенно когда пользователи доверяют магазину свои платежные данные.
vesper-bot
И как это всё ловить со стороны пользователя? Скажем, есть условная моя мама, которая где-то на сайте что-то пытается купить. Как ей понять, что её кредитку на этой платежной форме никто не свистнет?
Anthony_K
Завести виртуальную карту и платить только с неё.