
Praktycznie każdy z nas korzysta z usług sklepów internetowych, więc prędzej czy później ryzykujemy, że zostaniemy ofiarą snifferów JavaScript – specjalnego kodu, który przestępcy wprowadzają na stronę w celu kradzieży danych kart bankowych, adresów, loginów i haseł użytkowników.
Sniffery już dotknęły prawie 400 000 użytkowników witryny oraz aplikacji mobilnej linii lotniczych British Airways, a także odwiedzających brytyjską stronę sportowego giganta FILA i amerykańskiego dystrybutora biletów Ticketmaster. PayPal, Chase Paymenttech, USAePay, Moneris – te i wiele innych systemów płatności zostało zainfekowanych.
Analityk Threat Intelligence Group-IB Wiktor Okorokow opowiada o tym, jak sniffery są wprowadzane w kod strony i kradną informacje płatnicze, a także które systemy CRM atakują.

„Ukryte zagrożenie”
Tak się złożyło, że przez długi czas sniffery JS pozostawały poza zasięgiem analityków antywirusowych, a banki i systemy płatności nie postrzegały ich jako poważne zagrożenie. I to zupełnie niesłusznie. Eksperci Group-IB 2440 zainfekowanych sklepów internetowych, których odwiedzający – łącznie około 1,5 miliona ludzi dziennie – byli narażeni na ryzyko kompromitacji. Wśród poszkodowanych znaleźli się nie tylko użytkownicy, ale także sklepy internetowe, systemy płatności i banki, które wydały skompromitowane karty.
Group-IB był pierwszym badaniem rynku snifferów w darknecie, ich infrastruktury i sposobów monetyzacji, które przynoszą ich twórcom miliony dolarów. Zidentyfikowaliśmy 38 rodzin snifferów, z których tylko 12 było wcześniej znanych badaczom.
Szczegółowo omówimy cztery rodziny snifferów, które były badane w trakcie badania.
Rodzina ReactGet
Sniffery z rodziny ReactGet są wykorzystywane do kradzieży danych kart bankowych na stronach internetowych sklepów online. Sniffer może działać z wieloma różnymi systemami płatności używanymi na stronie: jedna wartość parametru odpowiada jednemu systemowi płatności, a poszczególne wykryte wersje sniffera mogą być używane do kradzieży danych logowania oraz danych kart bankowych z formularzy płatniczych kilku różnych systemów płatności, jako tzw. uniwersalny sniffer. Ustalono, że w niektórych przypadkach atakujący przeprowadzają ataki phishingowe na administratorów sklepów online w celu uzyskania dostępu do panelu administracyjnego strony.
Kampania z użyciem tej rodziny snifferów rozpoczęła się w maju 2017 roku, atakowi uległy strony zarządzane przez systemy CMS oraz platformy Magento, Bigcommerce, Shopify.
Jak ReactGet jest wprowadzany do kodu sklepu online
Oprócz «klasycznego» wstrzykiwania skryptu przez link, operatorzy snifferów z rodziny ReactGet używają specjalnej techniki: za pomocą kodu JavaScript sprawdzają, czy aktualny adres, na którym znajduje się użytkownik, odpowiada określonym kryteriom. Złośliwy kod zostanie uruchomiony tylko wtedy, gdy w bieżącym adresie URL znajduje się podciąg checkout lub onestepcheckout, onepage/, out/onepag, checkout/one, ckout/one. W ten sposób kod sniffera zostanie wykonany dokładnie w momencie, gdy użytkownik przechodzi do płatności i wprowadza dane płatnicze w formularzu na stronie.

Ten sniffer wykorzystuje niestandardową technikę. Dane płatnicze i osobowe ofiary są zbierane razem, kodowane za pomocą base64, a następnie uzyskany ciąg jest używany jako parametr do wysłania żądania na stronę przestępców. Najczęściej ścieżka do bramy imituje plik JavaScript, na przykład resp.js, data.js i tym podobnie, ale używane są również linki do plików obrazów, GIF i JPG. Ciekawostką jest to, że sniffer tworzy obiekt obrazu o wymiarach 1 na 1 piksel i wykorzystuje wcześniej uzyskany link jako parametr. src Obrazy. Oznacza to, że dla użytkownika takie zapytanie w ruchu będzie wyglądać jak zapytanie o zwykły obrazek. Podobną technikę zastosowano w snifferach rodziny ImageID. Ponadto technika używająca obrazu o wymiarach 1 na 1 piksel jest stosowana w wielu legalnych skryptach analityki internetowej, co także może wprowadzić użytkownika w błąd.

Analiza wersji
Analiza aktywnych domen używanych przez operatorów snifferów ReactGet ujawniła wiele różnych wersji snifferów tej rodziny. Wersje różnią się obecnością lub brakiem obfuskacji, a każdy sniffer jest zaprojektowany do obsługi określonej systemu płatności, który przetwarza płatności kartą bankową do sklepów internetowych. Przeanalizowawszy wartość parametru odpowiadającego numerowi wersji, specjaliści Group-IB uzyskali pełną listę dostępnych wariacji snifferów, a na podstawie nazw pól formularzy, które każdy sniffer wyszukuje w kodzie strony, określili systemy płatności, na które jest skierowany sniffer.
Lista snifferów i odpowiadających im systemów płatności
| URL sniffera | System płatności |
|---|---|
| Authorize.Net | |
| Cardsave | |
| Authorize.Net | |
| Authorize.Net | |
| eWAY Rapid | |
| Authorize.Net | |
| Adyen | |
| USAePay | |
| Authorize.Net | |
| USAePay | |
| Authorize.Net | |
| Moneris | |
| USAePay | |
| PayPal | |
| Sage Pay | |
| Verisign | |
| PayPal | |
| Stripe | |
| Realex | |
| PayPal | |
| LinkPoint | |
| PayPal | |
| PayPal | |
| DataCash | |
| PayPal | |
| Authorize.Net | |
| Authorize.Net | |
| Authorize.Net | |
| Authorize.Net | |
| Verisign | |
| Authorize.Net | |
| Moneris | |
| Sage Pay | |
| USAePay | |
| Authorize.Net | |
| Authorize.Net | |
| ANZ eGate | |
| Authorize.Net | |
| Moneris | |
| Sage Pay | |
| Sage Pay | |
| Chase Paymentech | |
| Authorize.Net | |
| Adyen | |
| PsiGate | |
| CyberSource | |
| ANZ eGate | |
| Realex | |
| USAePay | |
| Authorize.Net | |
| Authorize.Net | |
| ANZ eGate | |
| PayPal | |
| PayPal | |
| Realex | |
| Sage Pay | |
| PayPal | |
| Verisign | |
| Authorize.Net | |
| Verisign | |
| Authorize.Net | |
| ANZ eGate | |
| PayPal | |
| CyberSource | |
| Authorize.Net | |
| Sage Pay | |
| Realex | |
| CyberSource | |
| PayPal | |
| PayPal | |
| PayPal | |
| Verisign | |
| eWAY Rapid | |
| Sage Pay | |
| Sage Pay | |
| Verisign | |
| Authorize.Net | |
| Authorize.Net | |
| First Data Global Gateway | |
| Authorize.Net | |
| Authorize.Net | |
| Moneris | |
| Authorize.Net | |
| PayPal | |
| Verisign | |
| USAePay | |
| USAePay | |
| Authorize.Net | |
| Verisign | |
| PayPal | |
| Authorize.Net | |
| Stripe | |
| Authorize.Net | |
| eWAY Rapid | |
| Sage Pay | |
| Authorize.Net | |
| Braintree | |
| Braintree | |
| PayPal | |
| Sage Pay | |
| Sage Pay | |
| Authorize.Net | |
| PayPal | |
| Authorize.Net | |
| Verisign | |
| PayPal | |
| Authorize.Net | |
| Stripe | |
| Authorize.Net | |
| eWAY Rapid | |
| Sage Pay | |
| Authorize.Net | |
| Braintree | |
| PayPal | |
| Sage Pay | |
| Sage Pay | |
| Authorize.Net | |
| PayPal | |
| Authorize.Net | |
| Verisign | |
| Authorize.Net | |
| Authorize.Net | |
| Authorize.Net | |
| Authorize.Net | |
| Sage Pay | |
| Sage Pay | |
| Westpac PayWay | |
| PayFort | |
| PayPal | |
| Authorize.Net | |
| Stripe | |
| First Data Global Gateway | |
| PsiGate | |
| Authorize.Net | |
| Authorize.Net | |
| Moneris | |
| Authorize.Net | |
| Sage Pay | |
| Verisign | |
| Moneris | |
| PayPal | |
| LinkPoint | |
| Westpac PayWay | |
| Authorize.Net | |
| Moneris | |
| PayPal | |
| Adyen | |
| PayPal | |
| Authorize.Net | |
| USAePay | |
| EBizCharge | |
| Authorize.Net | |
| Verisign | |
| Verisign | |
| Authorize.Net | |
| PayPal | |
| Moneris | |
| Authorize.Net | |
| PayPal | |
| PayPal | |
| Westpac PayWay | |
| Authorize.Net | |
| Authorize.Net | |
| Sage Pay | |
| Verisign | |
| Authorize.Net | |
| PayPal | |
| PayFort | |
| CyberSource | |
| PayPal Payflow Pro | |
| Authorize.Net | |
| Authorize.Net | |
| Verisign | |
| Authorize.Net | |
| Authorize.Net | |
| Sage Pay | |
| Authorize.Net | |
| Stripe | |
| Authorize.Net | |
| Authorize.Net | |
| Verisign | |
| PayPal | |
| Authorize.Net | |
| Authorize.Net | |
| Sage Pay | |
| Authorize.Net | |
| Authorize.Net | |
| PayPal | |
| Flint | |
| PayPal | |
| Sage Pay | |
| Verisign | |
| Authorize.Net | |
| Authorize.Net | |
| Stripe | |
| Fat Zebra | |
| Sage Pay | |
| Authorize.Net | |
| First Data Global Gateway | |
| Authorize.Net | |
| eWAY Rapid | |
| Adyen | |
| PayPal | |
| QuickBooks Merchant Services | |
| Verisign | |
| Sage Pay | |
| Verisign | |
| Authorize.Net | |
| Authorize.Net | |
| Sage Pay | |
| Authorize.Net | |
| eWAY Rapid | |
| Authorize.Net | |
| ANZ eGate | |
| PayPal | |
| CyberSource | |
| Authorize.Net | |
| Sage Pay | |
| Realex | |
| CyberSource | |
| PayPal | |
| PayPal | |
| PayPal | |
| Verisign | |
| eWAY Rapid | |
| Sage Pay | |
| Sage Pay | |
| Verisign | |
| Authorize.Net | |
| Authorize.Net | |
| First Data Global Gateway | |
| Authorize.Net | |
| Authorize.Net | |
| Moneris | |
| Authorize.Net | |
| PayPal |
Sniffer haseł
Jedną z zalet snifferów JavaScript działających po stronie klienta jest ich uniwersalność: zainstalowany na stronie złośliwy kod może kraść dane każdego rodzaju, zarówno dane płatnicze, jak i login oraz hasło do konta użytkownika. Specjaliści Group-IB odkryli próbkę sniffera z rodziny ReactGet, zaprojektowaną do kradzieży adresów e-mail i haseł użytkowników strony.

Przecięcie z snifferem ImageID
W trakcie analizy jednego z zainfekowanych sklepów ustalono, że jego strona została zainfekowana dwukrotnie: oprócz złośliwego kodu sniffera z rodziny ReactGet, odkryto kod sniffera z rodziny ImageID. To przecięcie może być świadectwem, że operatorzy stojący za wykorzystaniem obu snifferów stosują podobne techniki do wprowadzenia złośliwego kodu.

Uniwersalny sniffer
W trakcie analizy jednej z nazw domen powiązanych z infrastrukturą snifferów ReactGet ustalono, że ta sama osoba zarejestrowała trzy inne nazwy domen. Te trzy domeny imitowały domeny rzeczywiście istniejących stron i wcześniej były wykorzystywane do hostowania snifferów. Analiza kodu trzech legalnych witryn ujawniła nieznany sniffer, a dalsza analiza pokazała, że to ulepszona wersja sniffera ReactGet. Wszystkie wcześniej śledzone wersje snifferów z tej rodziny były skierowane na konkretny system płatności, co oznacza, że dla każdego systemu płatności potrzebna była specjalna wersja sniffera. W tym przypadku jednak odkryto uniwersalną wersję sniffera, zdolną do kradzenia informacji z formularzy związanych z 15 różnymi systemami płatności i modułami ecommerce do przeprowadzania płatności online.
Na początku pracy sniffera poszukiwał podstawowych pól formularza zawierających dane osobowe ofiary: imię i nazwisko, adres fizyczny, numer telefonu.

Następnie sniffer przeszukiwał ponad 15 różnych prefiksów, odpowiadających różnym systemom płatności i modułom do płatności online.

Dane osobowe ofiary oraz informacje o płatnościach były zbierane w całość i wysyłane na kontrolowaną przez przestępcę stronę: w tym konkretnym przypadku odkryto dwie wersje uniwersalnego sniffera ReactGet, umiejscowione na dwóch różnych zhakowanych stronach. Obie wersje wysyłały jednak skradzione dane na tę samą zhakowaną stronę. zoobashop.com.

Analiza prefiksów używanych przez sniffera do wyszukiwania pól zawierających informacje dotyczące płatności ofiary pozwoliła określić, że ten wzór sniffera był skierowany na następujące systemy płatności:
- Authorize.Net
- Verisign
- First Data
- USAePay
- Stripe
- PayPal
- ANZ eGate
- Braintree
- DataCash (MasterCard)
- Realex Payments
- PsiGate
- Heartland Payment Systems
Jakie narzędzia są używane do kradzieży informacji o płatnościach
Pierwszym narzędziem odkrytym w trakcie analizy infrastruktury atakujących jest narzędzie do obfuskacji złośliwych skryptów odpowiedzialnych za kradzież kart bankowych. Na jednym z hostów atakujących znaleziono skrypt bash, który wykorzystuje CLI projektu do automatyzacji obfuskacji kodu snifferów.
![]()
Drugie odkryte narzędzie służy do generowania kodu odpowiedzialnego za załadowanie głównego sniffera. To narzędzie generuje kod JavaScript, który sprawdza, czy użytkownik znajduje się na stronie płatności, poprzez wyszukiwanie w bieżącym adresie URL użytkownika ciągów checkout, cart i tak dalej, a jeśli wynik jest pozytywny, to kod ładuje główny sniffer z serwera przestępców. W celu ukrycia złośliwej aktywności wszystkie ciągi, w tym testowe ciągi do określenia strony płatności, jak również link do sniffera, są kodowane przy użyciu base64.

Ataki phishingowe
Podczas analizy infrastruktury sieciowej atakujących ustalono, że często w celu uzyskania dostępu do panelu administracyjnego docelowego sklepu internetowego, grupa przestępcza wykorzystuje phishing. Atakujący rejestrują domenę wizualnie podobną do domeny sklepu, a następnie uruchamiają na niej fałszywą formę logowania do panelu administracyjnego Magento. W przypadku sukcesu atakujący uzyskają dostęp do panelu administracyjnego CMS Magento, co daje im możliwość edytowania komponentów strony i wprowadzenia sniffera do kradzieży danych kart kredytowych.

Infrastruktura
| Domena | Data odkrycia/pojawienia się |
|---|---|
| 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 |
Rodzina G-Analytics
Ta rodzina snifferów jest wykorzystywana do kradzieży kart klientów sklepów internetowych. Pierwsza domena używana przez grupę została zarejestrowana w kwietniu 2016 roku, co może świadczyć o rozpoczęciu działalności grupy w połowie 2016 roku.
W bieżącej kampanii grupa używa nazw domen imitujących rzeczywiste usługi, takie jak Google Analytics i jQuery, maskując aktywność snifferów legalnymi skryptami oraz podobnymi do legalnych nazwami domen. Atakowane były strony działające na CMS Magento.
Jak G-Analytics jest wdrażany w kodzie sklepu internetowego
Cechą wyróżniającą tej grupy jest wykorzystanie różnych metod kradzieży informacji o płatnościach użytkowników. Oprócz klasycznej techniki wstrzykiwania kodu JavaScript w część klienta strony, grupa przestępcza stosowała również technikę wstrzykiwania kodu w część serwerową strony, mianowicie w skrypty PHP przetwarzające dane wprowadzane przez użytkowników. Ta metoda jest niebezpieczna, ponieważ utrudnia wykrycie złośliwego kodu przez zewnętrznych badaczy. Specjaliści Group-IB odkryli wersję sniffera wstrzykniętego w kod PHP strony, wykorzystującą jako bramę domenę dittm.org.

Została również odkryta wczesna wersja sniffera, wykorzystująca do zbierania skradzionych danych tę samą domenę dittm.org, ale ta wersja jest już przeznaczona do instalacji po stronie klienta sklepu internetowego.

Później grupa zmieniła swoją taktykę i zaczęła zwracać większą uwagę na ukrywanie złośliwej aktywności i maskowanie.
Na początku 2017 roku grupa zaczęła używać domeny jquery-js.com, udającej CDN dla jQuery: po przejściu na stronę przestępców użytkownik jest przekierowywany na legitną stronę jquery.com.
A w połowie 2018 roku grupa przyjęła nazwę domeny g-analytics.com i zaczęła maskować działalność sniffera jako legitimaną usługę Google Analytics.


Analiza wersji
W trakcie analizy domen używanych do przechowywania kodu snifferów ustalono, że na stronie znajduje się wiele wersji, które różnią się obecnością obfuskacji, a także obecnością lub brakiem niedostępnego kodu dodanego do pliku w celu odwrócenia uwagi i ukrycia złośliwego kodu.
Ostatecznie na stronie jquery-js.com zidentyfikowano sześć wersji snifferów. Skradzione dane te sniffery wysyłają na adres znajdujący się na tej samej stronie co sam sniffer: 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
Późniejsza domena g-analytics.com, używana przez grupę w atakach od połowy 2018 roku, służy jako magazyn dla większej liczby snifferów. Ostatecznie wykryto 16 różnych wersji sniffera. W tym przypadku brama do wysyłania skradzionych danych została zamaskowana jako link do obrazu o formacie 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
Monetyzacja skradzionych danych
Grupa przestępcza monetyzuje skradzione dane, sprzedając karty za pośrednictwem specjalnie stworzonego podziemnego sklepu, który świadczy usługi dla koderów. Analiza domen używanych przez atakujących pozwoliła ustalić, że google-analytics.cm został zarejestrowany przez tego samego użytkownika, co domena cardz.vc. Domena cardz.vc dotyczy sklepu sprzedającego skradzione karty bankowe Cardsurfs (Flysurfs), który zyskał popularność jeszcze w czasach aktywności podziemnej giełdy AlphaBay jako sklep sprzedający karty bankowe, skradzione za pomocą sniffera.

Analizując domenę analytic.is, znajdującą się na tym samym serwerze co domeny używane przez sniffery do zbierania skradzionych danych, specjaliści Group-IB odkryli plik zawierający logi Cookie-stealera, który najwyraźniej został później porzucony przez twórcę. Jeden z wpisów w logach zawierał domenę iozoz.com, która wcześniej była używana w jednym z snifferów aktywnych w 2016 roku. Przypuszczalnie ta domena była wcześniej używana przez cyberprzestępcę do zbierania skradzionych danych za pomocą sniffera. Ta domena została zarejestrowana na adres e-mail kts241@gmail.com, który również był używany do rejestracji domen cardz.su i cardz.vc, związanych z kategorią sklepów Cardsurfs.
Na podstawie zebranych danych można przypuszczać, że rodzina snifferów G-Analytics i podziemny sklep ze skradzionymi kartami bankowymi Cardsurfs są zarządzane przez te same osoby, a sklep jest używany do sprzedaży kart bankowych skradzionych za pomocą sniffera.
Infrastruktura
| Domena | Data odkrycia/pojawienia się |
|---|---|
| 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 |
Rodzina Illum
Illum to rodzina snifferów stosowanych do ataków na sklepy internetowe działające na CMS Magento. Oprócz wprowadzania złośliwego kodu, operatorzy tego sniffera również korzystają z wprowadzania pełnych fałszywych formularzy płatności, które wysyłają dane do kontrolowanych przez przestępców bramek.
Podczas analizy infrastruktury sieciowej używanej przez operatorów tego sniffera, zauważono dużą ilość złośliwych skryptów, exploitów, fałszywych formularzy płatności, a także zbiorczek wzorców złośliwych snifferów konkurencji. Z informacji dotyczących dat pojawiania się nazw domen używanych przez grupę można przypuszczać, że początek kampanii przypada na koniec 2016 roku.
Jak Illum wprowadza się w kod sklepu internetowego
Pierwsze wykryte wersje sniffera były wprowadzane bezpośrednio do kodu skompromitowanej strony. Skradzione dane były wysyłane na adres cdn.illum[.]pw/records.php, a brama była zakodowana za pomocą base64.

Później odkryto spakowaną wersję sniffera, używającą innej bramy — records.nstatistics[.]com/records.php.

Zgodnie z Willem de Groot, ten sam host był używany w snifferze, który został wdrożony na , należącego do niemieckiej partii politycznej CSU.
Analiza strony przestępców
Specjaliści Group-IB odkryli i przeanalizowali stronę, używaną przez tę grupę przestępczą do przechowywania narzędzi i zbierania skradzionych informacji.

Wśród narzędzi odkrytych na serwerze przestępców znaleziono skrypty i exploity do podwyższania uprawnień w systemie Linux: na przykład, Linux Privilege Escalation Check Script, opracowany przez Mike'a Czumaka, oraz exploit dla CVE-2009-1185.
Bezpośrednio do ataków na sklepy internetowe przestępcy użyli dwóch exploitów: zdolny do wstrzyknięcia złośliwego kodu w core_config_data przy wykorzystaniu eksploatacji CVE-2016-4010, eksploatuje podatność RCE w wtyczkach CMS Magento, pozwalając na wykonanie dowolnego kodu na podatnym serwerze WWW.

Podczas analizy serwera odkryto również różne próbki snifferów i fałszywych formularzy płatności, używanych przez przestępców do zbierania informacji płatniczych z hakowanych stron. Jak można zauważyć z poniższej listy, niektóre skrypty były indywidualnie tworzone dla każdej hakowanej strony, podczas gdy dla określonych CMS i bramek płatności używano uniwersalnego rozwiązania. Na przykład, skrypty segapay_standart.js i segapay_onpage.js są przeznaczone do wstrzykiwania na strony korzystające z bramki płatności Sage Pay.
Lista skryptów dla różnych bramek płatności
| Skrypt | Bramka płatności |
|---|---|
| [.]pw/mjs_special/visiondirect.co.uk.js | //request.payrightnow[.]cf/checkpayment.php |
| [.]pw/mjs_special/topdierenshop.nl.js | //request.payrightnow[.]cf/alldata.php |
| [.]pw/mjs_special/tiendalenovo.es.js | //request.payrightnow[.]cf/alldata.php |
| [.]pw/mjs_special/pro-bolt.com.js | //request.payrightnow[.]cf/alldata.php |
| [.]pw/mjs_special/plae.co.js | //request.payrightnow[.]cf/alldata.php |
| [.]pw/mjs_special/ottolenghi.co.uk.js | //request.payrightnow[.]cf/alldata.php |
| [.]pw/mjs_special/oldtimecandy.com.js | //request.payrightnow[.]cf/checkpayment.php |
| [.]pw/mjs_special/mylook.ee.js | //cdn.illum[.]pw/records.php |
| [.]pw/mjs_special/luluandsky.com.js | //request.payrightnow[.]cf/checkpayment.php |
| [.]pw/mjs_special/julep.com.js | //cdn.illum[.]pw/records.php |
| [.]pw/mjs_special/gymcompany.es.js | //request.payrightnow[.]cf/alldata.php |
| [.]pw/mjs_special/grotekadoshop.nl.js | //request.payrightnow[.]cf/alldata.php |
| [.]pw/mjs_special/fushi.co.uk.js | //request.payrightnow[.]cf/checkpayment.php |
| [.]pw/mjs_special/fareastflora.com.js | //request.payrightnow[.]cf/checkpayment.php |
| [.]pw/mjs_special/compuindia.com.js | //request.payrightnow[.]cf/alldata.php |
| [.]pw/mjs/segapay_standart.js | //cdn.illum[.]pw/records.php |
| [.]pw/mjs/segapay_onpage.js | //cdn.illum[.]pw/records.php |
| [.]pw/mjs/replace_standart.js | //request.payrightnow[.]cf/checkpayment.php |
| [.]pw/mjs/all_inputs.js | //cdn.illum[.]pw/records.php |
| [.]pw/mjs/add_inputs_standart.js | //request.payrightnow[.]cf/checkpayment.php |
| [.]pw/magento/payment_standart.js | //cdn.illum[.]pw/records.php |
| [.]pw/magento/payment_redirect.js | //payrightnow[.]cf/?payment= |
| [.]pw/magento/payment_redcrypt.js | //payrightnow[.]cf/?payment= |
| [.]pw/magento/payment_forminsite.js | //paymentnow[.]tk/?payment= |
Host paymentnow[.]tk, używana jako brama w skrypcie payment_forminsite.js, została odkryta jako subjectAltName w kilku certyfikatach związanych z usługą CloudFlare. Ponadto na hoście znajdował się skrypt evil.js. Sądząc po nazwie skryptu, mógł on być użyty w ramach eksploatacji CVE-2016-4010, dzięki czemu można wstrzyknąć złośliwy kod do stopki strony zarządzanej przez CMS Magento. Jako bramę ten skrypt wykorzystał host request.requestnet[.]tk, używający tego samego certyfikatu, co host paymentnow[.]tk.
Fałszywe formularze płatności
Poniżej na rysunku pokazano przykład formularza do wprowadzenia danych karty. Ten formularz był używany do wstrzyknięcia na stronę sklepu internetowego i kradzieży danych kart.

Na następnym rysunku znajduje się przykład fałszywego formularza płatności PayPal, który był wykorzystywany przez cyberprzestępców do infiltracji stron korzystających z tej metody płatności.

Infrastruktura
| Domena | Data odkrycia/pojawienia się |
|---|---|
| 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 |
Rodzina CoffeMokko
Rodzina snifferów CoffeMokko, przeznaczonych do kradzieży danych kart bankowych użytkowników sklepów internetowych, jest używana co najmniej od maja 2017 roku. Prawdopodobnie operatorami tej rodziny snifferów jest grupa przestępcza Group 1, opisana przez specjalistów RiskIQ w 2016 roku. Ataki miały miejsce na stronach działających na takich CMS-ach jak Magento, OpenCart, WordPress, osCommerce, Shopify.
Jak CoffeMokko infiltruje kod sklepu internetowego
Operatorzy tej rodziny tworzą unikalne sniffery dla każdego zainfekowania: plik sniffera znajduje się w katalogu src lub js na serwerze cyberprzestępców. Infiltracja kodu strony odbywa się poprzez bezpośredni link do sniffera.

W kodzie sniffera są sztywno zakodowane nazwy pól formularza, z których należy ukraść dane. Sniffer sprawdza również, czy użytkownik znajduje się na stronie płatności, porównując listę słów kluczowych z bieżącym adresem użytkownika.

Niektóre wykryte wersje sniffera były zablokowane i zawierały szyfrowany ciąg, w którym przechowywana była główna tablica zasobów: to w niej znajdowały się nazwy pól formularzy dla różnych systemów płatności, a także adres bramki, na który należało wysyłać skradzione dane.

Skradzione informacje płatnicze były wysyłane do skryptu na serwerze cyberprzestępców przez /savePayment/index.php или /tr/index.php. Prawdopodobnie ten skrypt służy do przekazywania danych z bramki na główny serwer, który konsoliduje dane ze wszystkich snifferów. Aby ukryć przesyłane dane, cała informacja płatnicza ofiary jest szyfrowana przy użyciu base64, a następnie następuje kilka zamian symboli:
- symbol «e» zamieniany jest na «:»
- symbol «w» zamieniany jest na «+»
- symbol «o» zamieniany jest na «%»
- symbol «d» zamieniany jest na «#»
- symbol «a» zamieniany jest na «-»
- symbol «7» zamieniany jest na «^»
- symbol «h» zamieniany jest na «_»
- symbol «T» zamieniany jest na «@»
- symbol «0» zamieniany jest na «/»
- symbol «Y» zamieniany jest na «*»
W wyniku zamian symboli zakodowane przy użyciu base64 dane są niemożliwe do dekodowania, nie przeprowadzając odwrotnej konwersji.
Oto fragment kodu sniffera, który nie był poddany obfuskacji:

Analiza infrastruktury
W wcześniejszych kampaniach przestępcy rejestrowali domeny podobne do domen legitnych stron internetowych sklepów online. Ich domena mogła różnić się od legitnej o jeden znak lub inny TLD. Zarejestrowane domeny były używane do przechowywania kodu sniffera, którego link był osadzony w kodzie sklepu.
Ta grupa również używała domen przypominających nazwy popularnych wtyczek jQuery (slickjs[.]org dla stron korzystających z wtyczki slick.js), bramek płatności (sagecdn[.]org dla stron korzystających z systemu płatności Sage Pay).
Później grupa zaczęła tworzyć domeny, których nazwa nie miała nic wspólnego ani z domeną sklepu, ani z tematyką sklepu.

Każdej domenie odpowiadała strona, na której tworzono katalog /js lub /src. W tym katalogu przechowywane były skrypty snifferów: po jednym snifferze na każde nowe zarażenie. Sniffer był wprowadzany do kodu strony przez bezpośredni link, ale w rzadkich przypadkach przestępcy modyfikowali jeden z plików strony i dodawali do niego złośliwy kod.
Analiza kodu
Pierwszy algorytm obfuskacji
W niektórych wykrytych próbkach snifferów tej rodziny kod był obfuskowany i zawierał zaszyfrowane dane niezbędne do działania sniffera: w szczególności adres bramy sniffera, listę pól formularza płatności, a w niektórych przypadkach – kod fałszywego formularza płatności. W kodzie wewnątrz funkcji zasoby były zaszyfrowane przy pomocy XOR za pomocą klucza, który był przekazywany jako argument tej samej funkcji.

Po odszyfrowaniu ciągu odpowiednim kluczem, unikalnym dla każdej próbki, można uzyskać ciąg zawierający wszystkie ciągi z kodu sniffera oddzielone separatorem.

Drugi algorytm obfuskacji
W nowszych próbkach snifferów tej rodziny zastosowano inny mechanizm obfuskacji: w tym przypadku dane były zaszyfrowane przy pomocy własnego algorytmu. Ciąg zawierający zaszyfrowane dane konieczne do działania sniffera był przekazywany jako argument funkcji deszyfrującej.

Za pomocą konsoli przeglądarki można odszyfrować zaszyfrowane dane i uzyskać tablicę zawierającą zasoby sniffera.

Związek z wcześniejszymi atakami MageCart
W trakcie analizy jednej z domen używanych przez grupę jako brama do zbierania skradzionych danych ustalono, że na tej domenie uruchomiona jest infrastruktura do kradzieży kart kredytowych, identyczna z tą, która była używana przez Grupę 1 — jedną z pierwszych grup, przez specjalistów RiskIQ.
Na hoście rodziny sniffersów CoffeMokko znaleziono dwa pliki:
- mage.js — plik zawierający kod sniffersów Grupy 1 z adresem bramy js-cdn.link
- mag.php — skrypt PHP odpowiedzialny za zbieranie danych skradzionych przez sniffers.
Содержимое файла mage.js 
Ustalono także, że najwcześniejsze domeny używane przez grupę stojącą za rodziną sniffersów CoffeMokko były zarejestrowane 17 maja 2017 roku:
- link-js[.]link
- info-js[.]link
- track-js[.]link
- map-js[.]link
- smart-js[.]link
Format tych nazw domen pokrywa się z nazwami domen Grupy 1, które były używane w atakach w 2016 roku.
Na podstawie odkrytych faktów można wysunąć przypuszczenie, że istnieje związek między operatorami sniffersów CoffeMokko a grupą przestępczą Grupą 1. Przypuszczalnie operatorzy CoffeMokko mogli zapożyczyć od swoich poprzedników narzędzia i oprogramowanie do kradzieży kart. Jest jednak bardziej prawdopodobne, że grupa przestępcza odpowiedzialna za wykorzystanie sniffersów rodziny CoffeMokko to ci sami ludzie, którzy przeprowadzali ataki w ramach działalności Grupy 1. Po publikacji pierwszego raportu dotyczącego działalności grupy przestępczej wszystkie ich nazwy domen zostały zablokowane, a narzędzia dokładnie zbadane i opisane. Grupa była zmuszona do przerwy, aby poprawić swoje wewnętrzne narzędzia i przepisać kod sniffersów, aby kontynuować ataki i pozostać niezauważonymi.
Infrastruktura
| Domena | Data odkrycia/pojawienia się |
|---|---|
| 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 |
Źródło: habr.com
