Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах

Практично кожен з нас користується послугами онлайн-магазинів, а отже, рано чи пізно ризикує стати жертвою JavaScript-сніферів - спеціального коду, який зловмисники впроваджують на сайт для крадіжки даних банківських карток, адрес, логінів та паролів користувачів.

Від сніферів вже постраждали майже 400 000 користувачів сайту та мобільного додатку авіакомпанії British Airways, а також відвідувачі британського сайту спортивного гіганта FILA та американського дистриб'ютора квитків Ticketmaster. PayPal, Chase Paymenttech, USAePay, Moneris — ці та багато інших платіжних систем було заражено.

Аналітик Threat Intelligence Group-IB Віктор Окороков розповідає про те, як сніфери впроваджуються в код сайту та крадуть платіжну інформацію, а також про те, які CRM вони атакують.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах

"Прихована загроза"

Так вийшло, що довгий час JS-сніфери залишалися поза увагою антивірусних аналітиків, а банки та платіжні системи не бачили в них серйозної загрози. І даремно. Експерти Group-IB проаналізували 2440 заражених онлайн-магазинів, відвідувачі яких - сумарно близько 1,5 мільйонів людей на день - наражалися на ризик компрометації. Серед постраждалих — не лише користувачі, а й онлайн-магазини, платіжні системи та банки, які випустили компрометовані карти.

Звіт Group-IB став першим дослідженням даркнет-ринку сніфферів, їхньої інфраструктури та способів монетизації, що приносить їх творцям мільйони доларів. Ми виявили 38 сімейств сніфферів, з яких лише 12 раніше були відомі дослідникам.

Зупинимося докладно на чотирьох сімействах сніфферів, вивчених у ході дослідження.

Сімейство ReactGet

Сніфери сімейства ReactGet застосовуються для крадіжки даних банківських карток на сайтах онлайн-магазинів. Сніффер може працювати з великою кількістю різних платіжних систем, що використовуються на сайті: одне значення параметра відповідає одній платіжній системі, а окремі виявлені версії сніфера можуть використовуватися для крадіжки облікових даних, а також для крадіжки даних банківських карток з платіжних форм відразу кількох платіжних систем, як так званий універсальний сніффер. У деяких випадках атакуючі проводять фішингові атаки на адміністраторів онлайн-магазинів з метою отримання доступу до адміністративної панелі сайту.

Кампанія із застосуванням цього сімейства сніферів розпочалася у травні 2017 року, атаку зазнали сайти під управлінням CMS та платформ Magento, Bigcommerce, Shopify.

Як ReactGet впроваджується у код онлайн-магазину

Окрім «класичного» впровадження скрипту за посиланням, оператори сніферів сімейства ReactGet використовують особливу техніку: за допомогою JavaScript-коду перевіряється, чи відповідає поточна адреса, на якій знаходиться користувач, певним критеріям. Шкідливий код буде запущено лише в тому випадку, якщо в поточній URL-адресі є підрядок контроль або onestepcheckout, onepage/, out/onepag, checkout/one, ckout/one. Таким чином, код сніфера виповниться саме в той момент, коли користувач перейде до оплати покупок та введе платіжну інформацію у форму на сайті.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах
Цей сніффер використовує нестандартну техніку. Платіжні та персональні дані жертви збираються разом, кодуються за допомогою base64, а потім отриманий рядок використовується як параметр для надсилання запиту на сайт зловмисників. Найчастіше шлях до гейту імітує JavaScript-файл, наприклад resp.js, data.js і так далі, але також використовуються посилання на файли зображень, GIF и JPG. Особливість у тому, що сніффер створює об'єкт зображення розміром 1 на 1 піксель і використовує отримане посилання як параметр SRC зображення. Тобто для користувача такий запит у трафіку виглядатиме як запит звичайної картинки. Схожа техніка була використана у сніфферах сімейства ImageID. Крім того, техніка з використанням зображення розміром 1 на 1 піксель застосовується в багатьох легітимних скриптах онлайн-аналітики, що також може ввести в оману користувача.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах

Аналіз версій

Аналіз активних доменів, які використовуються операторами сніферів ReactGet, дозволив виявити багато різних версій сніферів цього сімейства. Версії відрізняються наявністю або відсутністю обфускації, а також кожен сніффер призначений для певної платіжної системи, що обробляє платежі за банківськими картками для онлайн-магазинів. Перебравши значення параметра, що відповідає номеру версії, фахівці Group-IB отримали повний список доступних варіацій сніферів, а за назвами полів форм, які кожен сніффер шукає в коді сторінки, визначили платіжні системи, на які націлений сніффер.

Список сніферів та відповідних їм платіжних систем

URL сніфера Платіжна система
reactjsapi.com/react.js Authorize.Net
ajaxstatic.com/api.js?v=2.1.1 Cardsave
ajaxstatic.com/api.js?v=2.1.2 Authorize.Net
ajaxstatic.com/api.js?v=2.1.3 Authorize.Net
ajaxstatic.com/api.js?v=2.1.4 eWAY Rapid
ajaxstatic.com/api.js?v=2.1.5 Authorize.Net
ajaxstatic.com/api.js?v=2.1.6 Адієн
ajaxstatic.com/api.js?v=2.1.7 USAePay
ajaxstatic.com/api.js?v=2.1.9 Authorize.Net
apitstatus.com/api.js?v=2.1.1 USAePay
apitstatus.com/api.js?v=2.1.2 Authorize.Net
apitstatus.com/api.js?v=2.1.3 Монеріс
apitstatus.com/api.js?v=2.1.5 USAePay
apitstatus.com/api.js?v=2.1.6 PayPal
apitstatus.com/api.js?v=2.1.7 Шавлія Оплата
apitstatus.com/api.js?v=2.1.8 Verisign
apitstatus.com/api.js?v=2.1.9 PayPal
apitstatus.com/api.js?v=2.3.0 Смуга
apitstatus.com/api.js?v=3.0.2 Realex
apitstatus.com/api.js?v=3.0.3 PayPal
apitstatus.com/api.js?v=3.0.4 LinkPoint
apitstatus.com/api.js?v=3.0.5 PayPal
apitstatus.com/api.js?v=3.0.7 PayPal
apitstatus.com/api.js?v=3.0.8 DataCash
apitstatus.com/api.js?v=3.0.9 PayPal
asianfoodgracer.com/footer.js Authorize.Net
billgetstatus.com/api.js?v=1.2 Authorize.Net
billgetstatus.com/api.js?v=1.3 Authorize.Net
billgetstatus.com/api.js?v=1.4 Authorize.Net
billgetstatus.com/api.js?v=1.5 Verisign
billgetstatus.com/api.js?v=1.6 Authorize.Net
billgetstatus.com/api.js?v=1.7 Монеріс
billgetstatus.com/api.js?v=1.8 Шавлія Оплата
billgetstatus.com/api.js?v=2.0 USAePay
billgetstatus.com/react.js Authorize.Net
cloudodesc.com/gtm.js?v=1.2 Authorize.Net
cloudodesc.com/gtm.js?v=1.3 ANZ eGate
cloudodesc.com/gtm.js?v=2.3 Authorize.Net
cloudodesc.com/gtm.js?v=2.4 Монеріс
cloudodesc.com/gtm.js?v=2.6 Шавлія Оплата
cloudodesc.com/gtm.js?v=2.7 Шавлія Оплата
cloudodesc.com/gtm.js?v=2.8 Чейз Пейментек
cloudodesc.com/gtm.js?v=2.9 Authorize.Net
cloudodesc.com/gtm.js?v=2.91 Адієн
cloudodesc.com/gtm.js?v=2.92 PsiGate
cloudodesc.com/gtm.js?v=2.93 Cyber ​​​​Source
cloudodesc.com/gtm.js?v=2.95 ANZ eGate
cloudodesc.com/gtm.js?v=2.97 Realex
geisseie.com/gs.js USAePay
gtmproc.com/age.js Authorize.Net
gtmproc.com/gtm.js?v=1.2 Authorize.Net
gtmproc.com/gtm.js?v=1.3 ANZ eGate
gtmproc.com/gtm.js?v=1.5 PayPal
gtmproc.com/gtm.js?v=1.6 PayPal
gtmproc.com/gtm.js?v=1.7 Realex
livecheckpay.com/api.js?v=2.0 Шавлія Оплата
livecheckpay.com/api.js?v=2.1 PayPal
livecheckpay.com/api.js?v=2.2 Verisign
livecheckpay.com/api.js?v=2.3 Authorize.Net
livecheckpay.com/api.js?v=2.4 Verisign
livecheckpay.com/react.js Authorize.Net
livegetpay.com/pay.js?v=2.1.2 ANZ eGate
livegetpay.com/pay.js?v=2.1.3 PayPal
livegetpay.com/pay.js?v=2.1.5 Cyber ​​​​Source
livegetpay.com/pay.js?v=2.1.7 Authorize.Net
livegetpay.com/pay.js?v=2.1.8 Шавлія Оплата
livegetpay.com/pay.js?v=2.1.9 Realex
livegetpay.com/pay.js?v=2.2.0 Cyber ​​​​Source
livegetpay.com/pay.js?v=2.2.1 PayPal
livegetpay.com/pay.js?v=2.2.2 PayPal
livegetpay.com/pay.js?v=2.2.3 PayPal
livegetpay.com/pay.js?v=2.2.4 Verisign
livegetpay.com/pay.js?v=2.2.5 eWAY Rapid
livegetpay.com/pay.js?v=2.2.7 Шавлія Оплата
livegetpay.com/pay.js?v=2.2.8 Шавлія Оплата
livegetpay.com/pay.js?v=2.2.9 Verisign
livegetpay.com/pay.js?v=2.3.0 Authorize.Net
livegetpay.com/pay.js?v=2.3.1 Authorize.Net
livegetpay.com/pay.js?v=2.3.2 First Data Global Gateway
livegetpay.com/pay.js?v=2.3.3 Authorize.Net
livegetpay.com/pay.js?v=2.3.4 Authorize.Net
livegetpay.com/pay.js?v=2.3.5 Монеріс
livegetpay.com/pay.js?v=2.3.6 Authorize.Net
livegetpay.com/pay.js?v=2.3.8 PayPal
livegetpay.com/pay.js?v=2.4.0 Verisign
maxstatics.com/site.js USAePay
mediapack.info/track.js?d=funlove.com USAePay
mediapack.info/track.js?d=qbedding.com Authorize.Net
mediapack.info/track.js?d=vseyewear.com Verisign
mxcounter.com/c.js?v=1.2 PayPal
mxcounter.com/c.js?v=1.3 Authorize.Net
mxcounter.com/c.js?v=1.4 Смуга
mxcounter.com/c.js?v=1.6 Authorize.Net
mxcounter.com/c.js?v=1.7 eWAY Rapid
mxcounter.com/c.js?v=1.8 Шавлія Оплата
mxcounter.com/c.js?v=2.0 Authorize.Net
mxcounter.com/c.js?v=2.1 Braintree
mxcounter.com/c.js?v=2.10 Braintree
mxcounter.com/c.js?v=2.2 PayPal
mxcounter.com/c.js?v=2.3 Шавлія Оплата
mxcounter.com/c.js?v=2.31 Шавлія Оплата
mxcounter.com/c.js?v=2.32 Authorize.Net
mxcounter.com/c.js?v=2.33 PayPal
mxcounter.com/c.js?v=2.34 Authorize.Net
mxcounter.com/c.js?v=2.35 Verisign
mxcounter.com/click.js?v=1.2 PayPal
mxcounter.com/click.js?v=1.3 Authorize.Net
mxcounter.com/click.js?v=1.4 Смуга
mxcounter.com/click.js?v=1.6 Authorize.Net
mxcounter.com/click.js?v=1.7 eWAY Rapid
mxcounter.com/click.js?v=1.8 Шавлія Оплата
mxcounter.com/click.js?v=2.0 Authorize.Net
mxcounter.com/click.js?v=2.1 Braintree
mxcounter.com/click.js?v=2.2 PayPal
mxcounter.com/click.js?v=2.3 Шавлія Оплата
mxcounter.com/click.js?v=2.31 Шавлія Оплата
mxcounter.com/click.js?v=2.32 Authorize.Net
mxcounter.com/click.js?v=2.33 PayPal
mxcounter.com/click.js?v=2.34 Authorize.Net
mxcounter.com/click.js?v=2.35 Verisign
mxcounter.com/cnt.js Authorize.Net
mxcounter.com/j.js Authorize.Net
newrelicnet.com/api.js?v=1.2 Authorize.Net
newrelicnet.com/api.js?v=1.4 Authorize.Net
newrelicnet.com/api.js?v=1.8 Шавлія Оплата
newrelicnet.com/api.js?v=4.5 Шавлія Оплата
newrelicnet.com/api.js?v=4.6 Westpac PayWay
nr-public.com/api.js?v=2.0 PayFort
nr-public.com/api.js?v=2.1 PayPal
nr-public.com/api.js?v=2.2 Authorize.Net
nr-public.com/api.js?v=2.3 Смуга
nr-public.com/api.js?v=2.4 First Data Global Gateway
nr-public.com/api.js?v=2.5 PsiGate
nr-public.com/api.js?v=2.6 Authorize.Net
nr-public.com/api.js?v=2.7 Authorize.Net
nr-public.com/api.js?v=2.8 Монеріс
nr-public.com/api.js?v=2.9 Authorize.Net
nr-public.com/api.js?v=3.1 Шавлія Оплата
nr-public.com/api.js?v=3.2 Verisign
nr-public.com/api.js?v=3.3 Монеріс
nr-public.com/api.js?v=3.5 PayPal
nr-public.com/api.js?v=3.6 LinkPoint
nr-public.com/api.js?v=3.7 Westpac PayWay
nr-public.com/api.js?v=3.8 Authorize.Net
nr-public.com/api.js?v=4.0 Монеріс
nr-public.com/api.js?v=4.0.2 PayPal
nr-public.com/api.js?v=4.0.3 Адієн
nr-public.com/api.js?v=4.0.4 PayPal
nr-public.com/api.js?v=4.0.5 Authorize.Net
nr-public.com/api.js?v=4.0.6 USAePay
nr-public.com/api.js?v=4.0.7 EBizCharge
nr-public.com/api.js?v=4.0.8 Authorize.Net
nr-public.com/api.js?v=4.0.9 Verisign
nr-public.com/api.js?v=4.1.2 Verisign
ordercheckpays.com/api.js?v=2.11 Authorize.Net
ordercheckpays.com/api.js?v=2.12 PayPal
ordercheckpays.com/api.js?v=2.13 Монеріс
ordercheckpays.com/api.js?v=2.14 Authorize.Net
ordercheckpays.com/api.js?v=2.15 PayPal
ordercheckpays.com/api.js?v=2.16 PayPal
ordercheckpays.com/api.js?v=2.17 Westpac PayWay
ordercheckpays.com/api.js?v=2.18 Authorize.Net
ordercheckpays.com/api.js?v=2.19 Authorize.Net
ordercheckpays.com/api.js?v=2.21 Шавлія Оплата
ordercheckpays.com/api.js?v=2.22 Verisign
ordercheckpays.com/api.js?v=2.23 Authorize.Net
ordercheckpays.com/api.js?v=2.24 PayPal
ordercheckpays.com/api.js?v=2.25 PayFort
ordercheckpays.com/api.js?v=2.29 Cyber ​​​​Source
ordercheckpays.com/api.js?v=2.4 PayPal Payflow Pro
ordercheckpays.com/api.js?v=2.7 Authorize.Net
ordercheckpays.com/api.js?v=2.8 Authorize.Net
ordercheckpays.com/api.js?v=2.9 Verisign
ordercheckpays.com/api.js?v=3.1 Authorize.Net
ordercheckpays.com/api.js?v=3.2 Authorize.Net
ordercheckpays.com/api.js?v=3.3 Шавлія Оплата
ordercheckpays.com/api.js?v=3.4 Authorize.Net
ordercheckpays.com/api.js?v=3.5 Смуга
ordercheckpays.com/api.js?v=3.6 Authorize.Net
ordercheckpays.com/api.js?v=3.7 Authorize.Net
ordercheckpays.com/api.js?v=3.8 Verisign
ordercheckpays.com/api.js?v=3.9 PayPal
ordercheckpays.com/api.js?v=4.0 Authorize.Net
ordercheckpays.com/api.js?v=4.1 Authorize.Net
ordercheckpays.com/api.js?v=4.2 Шавлія Оплата
ordercheckpays.com/api.js?v=4.3 Authorize.Net
reactjsapi.com/api.js?v=0.1.0 Authorize.Net
reactjsapi.com/api.js?v=0.1.1 PayPal
reactjsapi.com/api.js?v=4.1.2 Кремень
reactjsapi.com/api.js?v=4.1.4 PayPal
reactjsapi.com/api.js?v=4.1.5 Шавлія Оплата
reactjsapi.com/api.js?v=4.1.51 Verisign
reactjsapi.com/api.js?v=4.1.6 Authorize.Net
reactjsapi.com/api.js?v=4.1.7 Authorize.Net
reactjsapi.com/api.js?v=4.1.8 Смуга
reactjsapi.com/api.js?v=4.1.9 Товста зебра
reactjsapi.com/api.js?v=4.2.0 Шавлія Оплата
reactjsapi.com/api.js?v=4.2.1 Authorize.Net
reactjsapi.com/api.js?v=4.2.2 First Data Global Gateway
reactjsapi.com/api.js?v=4.2.3 Authorize.Net
reactjsapi.com/api.js?v=4.2.4 eWAY Rapid
reactjsapi.com/api.js?v=4.2.5 Адієн
reactjsapi.com/api.js?v=4.2.7 PayPal
reactjsapi.com/api.js?v=4.2.8 Послуги продавців QuickBooks
reactjsapi.com/api.js?v=4.2.9 Verisign
reactjsapi.com/api.js?v=4.2.91 Шавлія Оплата
reactjsapi.com/api.js?v=4.2.92 Verisign
reactjsapi.com/api.js?v=4.2.94 Authorize.Net
reactjsapi.com/api.js?v=4.3.97 Authorize.Net
reactjsapi.com/api.js?v=4.5 Шавлія Оплата
reactjsapi.com/react.js Authorize.Net
sydneysalonsupplies.com/gtm.js eWAY Rapid
tagsmediaget.com/react.js Authorize.Net
tagstracking.com/tag.js?v=2.1.2 ANZ eGate
tagstracking.com/tag.js?v=2.1.3 PayPal
tagstracking.com/tag.js?v=2.1.5 Cyber ​​​​Source
tagstracking.com/tag.js?v=2.1.7 Authorize.Net
tagstracking.com/tag.js?v=2.1.8 Шавлія Оплата
tagstracking.com/tag.js?v=2.1.9 Realex
tagstracking.com/tag.js?v=2.2.0 Cyber ​​​​Source
tagstracking.com/tag.js?v=2.2.1 PayPal
tagstracking.com/tag.js?v=2.2.2 PayPal
tagstracking.com/tag.js?v=2.2.3 PayPal
tagstracking.com/tag.js?v=2.2.4 Verisign
tagstracking.com/tag.js?v=2.2.5 eWAY Rapid
tagstracking.com/tag.js?v=2.2.7 Шавлія Оплата
tagstracking.com/tag.js?v=2.2.8 Шавлія Оплата
tagstracking.com/tag.js?v=2.2.9 Verisign
tagstracking.com/tag.js?v=2.3.0 Authorize.Net
tagstracking.com/tag.js?v=2.3.1 Authorize.Net
tagstracking.com/tag.js?v=2.3.2 First Data Global Gateway
tagstracking.com/tag.js?v=2.3.3 Authorize.Net
tagstracking.com/tag.js?v=2.3.4 Authorize.Net
tagstracking.com/tag.js?v=2.3.5 Монеріс
tagstracking.com/tag.js?v=2.3.6 Authorize.Net
tagstracking.com/tag.js?v=2.3.8 PayPal

Сніффер паролів

Однією з переваг JavaScript-сніферів, що працюють на клієнтській стороні сайту, є універсальність: впроваджений на сайт шкідливий код здатний викрасти дані будь-якого типу, будь то платіжні дані або логін і пароль від облікового запису користувача. Фахівці Group-IB виявили зразок сніффера, що відноситься до сімейства ReactGet, призначений для крадіжки адрес електронної пошти та паролів користувачів сайту.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах

Перетин зі сніффером ImageID

Під час аналізу одного із заражених магазинів було встановлено, що його сайт зазнав зараження двічі: крім шкідливого коду сніффера сімейства ReactGet, було виявлено код сніффера сімейства ImageID. Дане перетин може бути свідченням того, що оператори, що стоять за використанням обох сніфферів, використовують подібні техніки для застосування шкідливого коду.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах

Універсальний сніффер

У ході аналізу одного з доменних імен, які стосуються інфраструктури сніферів ReactGet, було встановлено, що той самий користувач зареєстрував три інші доменні імені. Ці три домени імітували домени реально існуючих сайтів і раніше використовувалися для розміщення сніфферів. При аналізі коду трьох легітимних сайтів виявили невідомий сніффер, а подальший аналіз показав, що це вдосконалена версія сніфера ReactGet. Усі раніше відстежені версії сніферів цього сімейства були націлені на якусь одну платіжну систему, тобто для кожної платіжної системи була потрібна спеціальна версія сніффера. Однак у цьому випадку було виявлено універсальну версію сніфера, здатну викрадати інформацію з форм, що належать до 15 різних платіжних систем і модулів ecommerce-сайтів для проведення онлайн-платежів.

Отже, на початку роботи сніфер здійснював пошук базових полів форми, що містять персональну інформацію жертви: повне ім'я, фізичну адресу, номер телефону.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах
Потім сніффер здійснював пошук більш ніж за 15 різними префіксами, що відповідають різним платіжним системам та модулям для онлайн-платежів.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах
Далі персональні дані жертви та платіжна інформація збиралися воєдино і відправлялися на підконтрольний зловмиснику сайт: у цьому конкретному випадку було виявлено дві версії універсального сніфера ReactGet, розташовані на двох різних зламаних сайтах. Проте обидві версії відправляли вкрадені дані на той самий зламаний сайт zoobashop.com.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах
Аналіз префіксів, які використовували сніффер для пошуку полів, що містять платіжну інформацію жертви, дозволив визначити, що цей зразок сніфера був націлений на такі платіжні системи:

  • Authorize.Net
  • Verisign
  • First Data
  • USAePay
  • Смуга
  • PayPal
  • ANZ eGate
  • Braintree
  • DataCash (MasterCard)
  • Realex Payments
  • PsiGate
  • Heartland Платіжні системи

Які інструменти використовуються для крадіжки платіжної інформації

Перший інструмент, виявлений під час аналізу інфраструктури атакуючих, служить для обфускації шкідливих скриптів, які відповідають за крадіжку банківських карток. На одному з хостів атакуючих було виявлено bash-скрипт, який використовує CLI проекту javascript-obfuscator для автоматизації обфускування коду сніфферів.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах
Другий виявлений інструмент призначений для генерації коду, який відповідає за підвантаження основного сніфера. Даний інструмент генерує JavaScript-код, який перевіряє, чи користувач на сторінці оплати, шляхом пошуку в поточній адресі користувача рядків контроль, cart і так далі, і якщо результат позитивний, код підвантажує основний сніффер з сервера зловмисників. Для приховання шкідливої ​​активності всі рядки, включаючи тестові рядки для визначення платіжної сторінки, а також посилання на сніффер, закодовані за допомогою base64.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах

Фішингові атаки

В ході аналізу мережної інфраструктури атакуючих було встановлено, що найчастіше для отримання доступу до адміністративної панелі цільового онлайн-магазину злочинна група використовує фішинг. Атакуючі реєструють домен, що візуально схожий на домен магазину, а потім розгортають на ньому підроблену форму входу адміністративної панелі Magento. У разі успіху атакуючі отримають доступ до адміністративної панелі CMS Magento, що дає їм можливість редагувати компоненти сайту та впровадити сніффер для крадіжки даних кредитних карток.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах
Інфраструктура

домен Дата виявлення/появи
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.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах
Також була виявлена ​​рання версія сніффера, який використовує для збору вкрадених даних той самий домен dittm.org, але ця версія призначена для установки на клієнтській стороні онлайн-магазину.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах
Пізніше група змінила свою тактику і почала приділяти більше уваги приховування шкідливої ​​активності та маскування.

На початку 2017 року група почала використовувати домен jquery-js.com, що маскується під CDN для jQuery: при переході на сайт зловмисників користувача перенаправляє на легітимний сайт jquery.com.

А в середині 2018 року група взяла на озброєння доменне ім'я. g-analytics.com та почала маскувати діяльність сніфера під легітимний сервіс Google Analytics.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах
Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах

Аналіз версій

У ході аналізу доменів, що використовуються для зберігання коду сніферів, було встановлено, що на сайті розміщується велика кількість версій, які відрізняються наявністю обфускації, а також наявністю або відсутністю недосяжного коду, доданого до файлу для відволікання уваги та приховування шкідливого коду.

Всього на сайті 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=2560×1440&vp=2145×371&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 як магазин з продажу банківських карток, вкрадених за допомогою сніффера.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах
Аналізуючи домен analytic.is, розташований на тому ж сервері, що і домени, які використовуються сніфферами для збору вкрадених даних, фахівці Group-IB виявили файл, що містить логи Cookie-стилера, який, схоже, пізніше був покинутий розробником. Один із записів у лозі містив домен iozoz.com, який раніше був використаний в одному із сніфферів, активних у 2016 році. Імовірно, цей домен раніше використовувався зловмисником для збору вкрадених за допомогою сніффера карт. Цей домен був зареєстрований на email-адресу [захищено електронною поштою], який також був використаний для реєстрації доменів 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.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах
Пізніше було виявлено упаковану версію сніффера, яка використовує інший гейт. records.nstatistics[.]com/records.php.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах
Згідно з звітом Willem de Groot, такий самий хост використовувався у сніффері, який був впроваджений на сайт магазину, що належить німецькій політичній партії CSU

Аналіз сайту зловмисників

Фахівці Group-IB виявили та проаналізували сайт, який використовується цією злочинною групою для зберігання інструментів та збору вкраденої інформації.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах
Серед інструментів, виявлених на сервері зловмисників, було знайдено скрипти та експлойти для підвищення привілеїв в ОС Linux: наприклад, Linux Privilege Escalation Check Script, розроблений Майком Чумаком (Mike Czumak), а також експлойт для CVE-2009-1185.

Безпосередньо для атак на онлайн-магазини зловмисники використали два експлойти: перший здатний впровадити шкідливий код у core_config_data за допомогою експлуатації CVE-2016-4010, друга експлуатує вразливість типу RCE у плагінах для CMS Magento, дозволяючи виконати довільний код на вразливому веб-сервері.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах
Також в ході аналізу сервера були виявлені різні зразки сніферів та фальшивих платіжних форм, які використовуються зловмисниками для збору платіжної інформації зі зламаних сайтів. Як можна помітити зі списку нижче, деякі скрипти створювалися індивідуально для кожного зламаного сайту, тоді як для певних 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.

Підроблені платіжні форми

Нижче на малюнку показано приклад форми для введення даних картки. Ця форма використовувалася для впровадження на сайт онлайн-магазину та крадіжки даних карток.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах
На наступному малюнку приклад підробленої платіжної форми PayPal, яку використовували зловмисники для впровадження на сайти з цим методом оплати.
Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах
Інфраструктура

домен Дата виявлення/появи
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 на сервері зловмисників. Впровадження в код сайту здійснюється за прямим посиланням на сніффер.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах
У коді сніфера жорстко закодовані назви полів форми, з яких необхідно вкрасти дані. Також сніффер перевіряє, чи користувач на сторінці оплати, звіряючи список ключових слів з поточною адресою користувача.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах
Деякі знайдені версії сніфера були обфусцовані і містили зашифрований рядок, в якому зберігався основний масив ресурсів: саме в ньому були імена полів форм для різних платіжних систем, а також адреса гейту, на яку необхідно надсилати вкрадені дані.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах
Вкрадена платіжна інформація надсилалася скрипту на сервері зловмисників по дорозі /savePayment/index.php або /tr/index.php. Імовірно, цей скрипт служить для відправлення даних з гейту на основний сервер, що консолідує дані з усіх сніферів. Для приховування даних вся платіжна інформація жертви кодується за допомогою base64, а потім відбувається кілька замін символів:

  • символ "e" замінюється на ":"
  • символ "w" замінюється на "+"
  • символ "o" замінюється на "%"
  • символ "d" замінюється на "#"
  • символ «a» замінюється на «-»
  • символ "7" замінюється на "^"
  • символ "h" замінюється на "_"
  • символ «T» замінюється на «@»
  • символ "0" замінюється на "/"
  • символ «Y» замінюється на «*»

В результаті замін символів закодовані за допомогою base64 дані неможливо декодувати, не провівши зворотного перетворення.

Так виглядає фрагмент коду сніффера, що не зазнавав обфускації:

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах

Аналіз інфраструктури

У ранніх кампаніях зловмисники реєстрували доменні імена, схожі на домени легітимних сайтів онлайн-магазинів. Їхній домен міг відрізнятися від легітимного одним символом або іншим TLD. Зареєстровані домени використовувалися для зберігання коду сніфера, посилання на який впроваджувалося в код магазину.

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

Пізніше група почала створювати домени, назва яких мала нічого спільного ні з доменом магазину, ні з тематикою магазину.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах
Кожному домену відповідав сайт, на якому створювалася директорія / js або / src. У цій директорії зберігалися скрипти сніфферів: по одному сніффер на кожне нове зараження. Сніффер впроваджувався в код сайту за прямим посиланням, але в окремих випадках зловмисники модифікували один із файлів сайту і додавали в нього шкідливий код.

Аналіз коду

Перший алгоритм обфускації

У деяких виявлених зразках сніфферів цього сімейства код був обфусцований і містив зашифровані дані, необхідні для роботи сніфера: зокрема, адреса гейта сніфера, список полів платіжної форми, а в деяких випадках код підробленої форми оплати. У коді всередині функції ресурси були зашифровані за допомогою XOR за ключом, який передавався аргументом цієї функції.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах
Розшифрувавши рядок відповідним ключем, унікальним для кожного зразка, можна отримати рядок, який містить усі рядки з коду сніфера через символ-розділювач.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах

Другий алгоритм обфускації

У пізніших зразках сніферів цього сімейства використали інший механізм обфускації: у разі дані були зашифровані з допомогою самописного алгоритму. Рядок, що містить зашифровані дані, необхідні для роботи сніффера, передавався аргументом функції розшифрування.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах
За допомогою консолі браузера можна розшифрувати зашифровані дані та отримати масив, що містить ресурси сніфера.

Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах

Зв'язок із ранніми атаками MageCart

У ході аналізу одного з доменів, що використовуються групою як гейт для збору вкрадених даних, було встановлено, що на цьому домені розгорнуто інфраструктуру для крадіжки кредитних карт, ідентичну тій, яка використовувалася Group 1 — однією з перших груп, виявлених спеціалістами RiskIQ.

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

  • mage.js - файл, що містить код сніфера Group 1 з адресою гейту js-cdn.link
  • mag.php - PHP-скрипт, який відповідає за збір вкрадених сніффером даних

Вміст файлу mage.js Чотири JavaScript-сніфери, які чатують на вас в інтернет-магазинах
Також було встановлено, що ранні домени, що використовуються групою, що стоїть за сімейством сніферів 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

Джерело: habr.com

Додати коментар або відгук