Prawie każdy z nas korzysta z usług sklepów internetowych, co oznacza, że prędzej czy później narażamy się na ryzyko, że staniemy się ofiarą snifferów JavaScript – specjalnego kodu, który napastnicy wdrażają na stronie internetowej w celu kradzieży danych kart bankowych, adresów, loginów i haseł użytkowników .
Sniffery dotknęły już prawie 400 000 użytkowników strony internetowej i aplikacji mobilnej British Airways, a także odwiedzających brytyjską stronę internetową giganta sportowego 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, Viktor Okorokov, opowiada o tym, jak sniffery infiltrują kod strony internetowej i kradną informacje o płatnościach, a także o tym, jakie systemy CRM atakują.
„Ukryte zagrożenie”
Tak się złożyło, że przez długi czas sniffery JS pozostawały poza zasięgiem wzroku analityków antywirusowych, a banki i systemy płatnicze nie postrzegały ich jako poważnego zagrożenia. I zupełnie na próżno. Eksperci grupy IB
Zatrzymajmy się szczegółowo na czterech rodzinach snifferów badanych podczas badania.
Reaguj na rodzinę
Sniffery z rodziny ReactGet służą do kradzieży danych kart bankowych w witrynach zakupów online. Sniffer może współpracować z dużą liczbą różnych systemów płatności używanych na stronie: jedna wartość parametru odpowiada jednemu systemowi płatności, a poszczególne wykryte wersje sniffera mogą zostać wykorzystane do kradzieży danych uwierzytelniających, a także danych karty bankowej z płatności formy kilku systemów płatności jednocześnie, jak tzw. uniwersalny sniffer. Stwierdzono, że w niektórych przypadkach napastnicy przeprowadzają ataki phishingowe na administratorów sklepów internetowych w celu uzyskania dostępu do panelu administracyjnego witryny.
Kampania wykorzystująca tę rodzinę snifferów rozpoczęła się w maju 2017 r.; zaatakowano witryny z systemem CMS oraz platformami Magento, Bigcommerce i Shopify.
Jak zaimplementowano ReactGet w kodzie sklepu internetowego
Oprócz „klasycznej” implementacji skryptu poprzez link, operatorzy rodziny snifferów ReactGet stosują specjalną technikę: za pomocą kodu JavaScript sprawdzają, czy aktualny adres, pod którym znajduje się użytkownik, spełnia określone kryteria. Szkodliwy kod zostanie wykonany tylko wtedy, gdy w bieżącym adresie URL występuje podciąg checkout lub Onestepcheckout, jedna strona/, wyjście/jedna strona, kasa/jeden, koniec/jeden. Tym samym kod sniffera zostanie wykonany dokładnie w momencie, gdy użytkownik przystąpi do płacenia za zakupy i wprowadzi informację o płatności do formularza na stronie.
Ten sniffer wykorzystuje niestandardową technikę. Dane płatnicze i osobowe ofiary są gromadzone i szyfrowane za pomocą base64, a następnie powstały ciąg znaków służy jako parametr do wysłania żądania do witryny osoby atakującej. Najczęściej ścieżka do bramki imituje np. plik JavaScript odpowiednio.js, dane.js i tak dalej, ale używane są także linki do plików graficznych, GIF и JPG. Osobliwością jest to, że sniffer tworzy obiekt obrazu o wymiarach 1 na 1 piksel i wykorzystuje otrzymany wcześniej link jako parametr src Obrazy. Oznacza to, że dla użytkownika takie żądanie w ruchu będzie wyglądać jak żądanie zwykłego zdjęcia. Podobną technikę zastosowano w rodzinie snifferów ImageID. Ponadto w wielu legalnych skryptach analitycznych online stosowana jest technika wykorzystania obrazu o wymiarach 1 na 1 piksel, co również 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 tej rodziny snifferów. Wersje różnią się obecnością lub brakiem zaciemniania, a ponadto każdy sniffer jest zaprojektowany dla konkretnego systemu płatności, który przetwarza płatności kartami bankowymi w sklepach internetowych. Po posortowaniu wartości parametru odpowiadającego numerowi wersji specjaliści Group-IB otrzymali pełną listę dostępnych odmian sniffera i według nazw pól formularza, których każdy sniff szuka w kodzie strony, zidentyfikowali systemy płatności do którego skierowany jest sniffer.
Lista snifferów i odpowiadających im systemów płatności
Adres URL sniffera | System płatności |
---|---|
|
Authorize.Net |
Zapisywanie kart | |
|
Authorize.Net |
Authorize.Net | |
|
eWAY Szybki |
Authorize.Net | |
Adyen | |
|
USAePay |
Authorize.Net | |
USAePay | |
|
Authorize.Net |
Monerys | |
USAePay | |
PayPal | |
Mędrzec Płać | |
Verisign | |
PayPal | |
Naszywka | |
|
Realex |
PayPal | |
Punkt połączenia | |
PayPal | |
PayPal | |
DataGotówka | |
|
PayPal |
|
Authorize.Net |
|
Authorize.Net |
Authorize.Net | |
Authorize.Net | |
|
Verisign |
|
Authorize.Net |
Monerys | |
|
Mędrzec Płać |
|
USAePay |
|
Authorize.Net |
|
Authorize.Net |
|
Brama ANZ |
|
Authorize.Net |
|
Monerys |
|
Mędrzec Płać |
Mędrzec Płać | |
|
Ścigaj Paymentecha |
|
Authorize.Net |
|
Adyen |
PsiGate | |
Cyberźródło | |
Brama ANZ | |
Realex | |
|
USAePay |
|
Authorize.Net |
|
Authorize.Net |
|
Brama ANZ |
|
PayPal |
|
PayPal |
Realex | |
|
Mędrzec Płać |
|
PayPal |
|
Verisign |
Authorize.Net | |
|
Verisign |
Authorize.Net | |
|
Brama ANZ |
PayPal | |
Cyberźródło | |
|
Authorize.Net |
|
Mędrzec Płać |
Realex | |
|
Cyberźródło |
PayPal | |
PayPal | |
|
PayPal |
|
Verisign |
|
eWAY Szybki |
|
Mędrzec Płać |
Mędrzec Płać | |
|
Verisign |
Authorize.Net | |
Authorize.Net | |
|
Pierwsza globalna brama danych |
Authorize.Net | |
Authorize.Net | |
Monerys | |
|
Authorize.Net |
|
PayPal |
|
Verisign |
|
USAePay |
USAePay | |
Authorize.Net | |
Verisign | |
PayPal | |
|
Authorize.Net |
Naszywka | |
|
Authorize.Net |
eWAY Szybki | |
|
Mędrzec Płać |
Authorize.Net | |
|
Braintree |
|
Braintree |
|
PayPal |
|
Mędrzec Płać |
|
Mędrzec Płać |
|
Authorize.Net |
|
PayPal |
|
Authorize.Net |
Verisign | |
|
PayPal |
|
Authorize.Net |
|
Naszywka |
|
Authorize.Net |
eWAY Szybki | |
Mędrzec Płać | |
|
Authorize.Net |
Braintree | |
|
PayPal |
|
Mędrzec Płać |
Mędrzec Płać | |
|
Authorize.Net |
PayPal | |
Authorize.Net | |
|
Verisign |
|
Authorize.Net |
|
Authorize.Net |
|
Authorize.Net |
|
Authorize.Net |
|
Mędrzec Płać |
Mędrzec Płać | |
|
Płatność Westpac |
|
PayFort |
|
PayPal |
|
Authorize.Net |
|
Naszywka |
|
Pierwsza globalna brama danych |
|
PsiGate |
Authorize.Net | |
Authorize.Net | |
|
Monerys |
|
Authorize.Net |
Mędrzec Płać | |
|
Verisign |
Monerys | |
PayPal | |
|
Punkt połączenia |
|
Płatność Westpac |
Authorize.Net | |
|
Monerys |
|
PayPal |
Adyen | |
PayPal | |
Authorize.Net | |
USAePay | |
EBizCharge | |
|
Authorize.Net |
|
Verisign |
Verisign | |
Authorize.Net | |
|
PayPal |
|
Monerys |
Authorize.Net | |
|
PayPal |
PayPal | |
Płatność Westpac | |
Authorize.Net | |
|
Authorize.Net |
Mędrzec Płać | |
|
Verisign |
|
Authorize.Net |
|
PayPal |
|
PayFort |
Cyberźródło | |
PayPal Payflow Pro | |
|
Authorize.Net |
|
Authorize.Net |
Verisign | |
|
Authorize.Net |
|
Authorize.Net |
Mędrzec Płać | |
Authorize.Net | |
|
Naszywka |
|
Authorize.Net |
Authorize.Net | |
Verisign | |
|
PayPal |
Authorize.Net | |
|
Authorize.Net |
Mędrzec Płać | |
|
Authorize.Net |
|
Authorize.Net |
|
PayPal |
|
Krzemień |
|
PayPal |
Mędrzec Płać | |
Verisign | |
|
Authorize.Net |
|
Authorize.Net |
|
Naszywka |
|
Gruba zebra |
Mędrzec Płać | |
|
Authorize.Net |
Pierwsza globalna brama danych | |
|
Authorize.Net |
|
eWAY Szybki |
Adyen | |
|
PayPal |
Usługi handlowe QuickBooks | |
Verisign | |
|
Mędrzec Płać |
Verisign | |
|
Authorize.Net |
|
Authorize.Net |
Mędrzec Płać | |
|
Authorize.Net |
|
eWAY Szybki |
Authorize.Net | |
|
Brama ANZ |
|
PayPal |
Cyberźródło | |
|
Authorize.Net |
Mędrzec Płać | |
|
Realex |
Cyberźródło | |
|
PayPal |
|
PayPal |
|
PayPal |
|
Verisign |
eWAY Szybki | |
|
Mędrzec Płać |
|
Mędrzec Płać |
|
Verisign |
Authorize.Net | |
|
Authorize.Net |
|
Pierwsza globalna brama danych |
Authorize.Net | |
Authorize.Net | |
|
Monerys |
|
Authorize.Net |
|
PayPal |
Skaner haseł
Jedną z zalet snifferów JavaScript działających po stronie klienta witryny jest ich wszechstronność: złośliwy kod osadzony na stronie może ukraść dowolny rodzaj danych, czy to dane dotyczące płatności, czy login i hasło do konta użytkownika. Specjaliści z Group-IB odkryli próbkę sniffera należącego do rodziny ReactGet, którego zadaniem jest kradzież adresów e-mail i haseł użytkowników serwisu.
Przecięcie ze snifferem ImageID
Podczas analizy jednego z zainfekowanych sklepów stwierdzono, że jego witryna internetowa została zainfekowana dwukrotnie: oprócz szkodliwego kodu sniffera z rodziny ReactGet wykryty został kod sniffera z rodziny ImageID. To nakładanie się może świadczyć o tym, że operatorzy obu snifferów używają podobnych technik do wstrzykiwania złośliwego kodu.
Uniwersalny sniffer
Analiza jednej z nazw domen powiązanych z infrastrukturą sniffera ReactGet ujawniła, że ten sam użytkownik zarejestrował trzy inne nazwy domen. Te trzy domeny imitowały domeny prawdziwych witryn internetowych i były wcześniej używane do hostowania snifferów. Analizując kod trzech legalnych stron, wykryto nieznanego sniffera, a dalsza analiza wykazała, że była to ulepszona wersja sniffera ReactGet. Wszystkie wcześniej monitorowane wersje tej rodziny snifferów były przeznaczone dla jednego systemu płatności, co oznacza, że każdy system płatności wymagał specjalnej wersji sniffera. Jednak w tym przypadku odkryto uniwersalną wersję sniffera, która jest w stanie kraść informacje z formularzy powiązanych z 15 różnymi systemami płatności i modułami witryn e-commerce służącymi do dokonywania płatności online.
Zatem na początku pracy sniffer szukał podstawowych pól formularza zawierających dane osobowe ofiary: imię i nazwisko, adres fizyczny, numer telefonu.
Następnie sniffer przeszukał ponad 15 różnych prefiksów odpowiadających różnym systemom płatności i modułom płatności online.
Następnie dane osobowe ofiary oraz informacje o płatności zostały zebrane i przesłane do witryny kontrolowanej przez atakującego: w tym konkretnym przypadku odkryto dwie wersje uniwersalnego sniffera ReactGet, zlokalizowane na dwóch różnych zhakowanych stronach. Jednak obie wersje wysłały skradzione dane do tej samej zaatakowanej witryny zoobashop.pl.
Analiza przedrostków używanych przez sniffer do wyszukiwania pól zawierających informacje o płatności ofiary pozwoliła nam ustalić, że ta próbka sniffera była skierowana do następujących systemów płatności:
- Authorize.Net
- Verisign
- Pierwsze dane
- USAePay
- Naszywka
- PayPal
- Brama ANZ
- Braintree
- DataCash (MasterCard)
- Płatności Realex
- PsiGate
- Systemy płatności Heartland
Jakie narzędzia są używane do kradzieży informacji o płatnościach?
Pierwsze narzędzie, wykryte podczas analizy infrastruktury atakujących, służy do zaciemniania szkodliwych skryptów odpowiedzialnych za kradzież kart bankowych. Na jednym z hostów atakującego wykryto skrypt bash korzystający z interfejsu CLI projektu
Drugie odkryte narzędzie ma na celu wygenerowanie kodu odpowiedzialnego za załadowanie głównego sniffera. Narzędzie to generuje kod JavaScript, który sprawdza, czy użytkownik znajduje się na stronie płatności, wyszukując ciągi znaków w bieżącym adresie użytkownika checkout, wózek i tak dalej, a jeśli wynik będzie pozytywny, kod ładuje głównego sniffera z serwera atakującego. Aby ukryć złośliwą aktywność, wszystkie linie, w tym linie testowe służące do określenia strony płatności, a także link do sniffera, są kodowane przy użyciu base64.
Ataki phishingowe
Analiza infrastruktury sieciowej atakujących wykazała, że grupa przestępcza często wykorzystuje phishing w celu uzyskania dostępu do panelu administracyjnego docelowego sklepu internetowego. Atakujący rejestrują domenę wizualnie podobną do domeny sklepu, a następnie wdrażają na niej fałszywy formularz logowania do panelu administracyjnego Magento. Jeśli się powiedzie, atakujący uzyskają dostęp do panelu administracyjnego Magento CMS, który daje im możliwość edycji komponentów strony internetowej oraz wdrożenia sniffera w celu kradzieży danych karty kredytowej.
Infrastruktura
Домен | 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 |
Reagjsapi.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 |
www.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 |
zamówcheckpays.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 służy do kradzieży kart klientów ze sklepów internetowych. Pierwsza nazwa domeny używana przez grupę została zarejestrowana w kwietniu 2016 roku, co może wskazywać, że grupa rozpoczęła działalność w połowie 2016 roku.
W bieżącej kampanii grupa wykorzystuje nazwy domen imitujące rzeczywiste usługi, takie jak Google Analytics i jQuery, maskując aktywność snifferów legalnymi skryptami i nazwami domen podobnymi do legalnych. Zaatakowano witryny z systemem Magento CMS.
Jak zaimplementowano G-Analytics w kodzie sklepu internetowego
Charakterystyczną cechą tej rodziny jest wykorzystanie różnych metod kradzieży informacji o płatnościach użytkowników. Oprócz klasycznego wstrzykiwania kodu JavaScript po stronie klienta witryny, grupa przestępcza stosowała również techniki wstrzykiwania kodu po stronie serwera, a mianowicie skrypty PHP przetwarzające dane wprowadzone przez użytkownika. Technika ta jest niebezpieczna, ponieważ utrudnia zewnętrznym badaczom wykrycie złośliwego kodu. Specjaliści Group-IB odkryli wersję sniffera osadzonego w kodzie PHP witryny, wykorzystującego domenę jako bramę dittm.org.
Odkryto również wczesną wersję sniffera, który wykorzystuje tę samą domenę do gromadzenia skradzionych danych dittm.org, ale ta wersja przeznaczona jest do instalacji po stronie klienta sklepu internetowego.
Grupa zmieniła później taktykę i zaczęła bardziej skupiać się na ukrywaniu szkodliwej aktywności i kamuflażu.
Z początkiem 2017 roku grupa zaczęła korzystać z domeny jquery-js.com, udający CDN dla jQuery: wchodząc na stronę atakujących, użytkownik zostaje przekierowany na legalną stronę jquery.com.
W połowie 2018 roku grupa przyjęła nazwę domeny g-analytics.com i zaczął maskować działania sniffera jako legalną usługę Google Analytics.
Analiza wersji
Podczas analizy domen służących do przechowywania kodu sniffera stwierdzono, że witryna zawiera dużą liczbę wersji, które różnią się obecnością zaciemnień, a także obecnością lub brakiem nieosiągalnego kodu dodanego do pliku w celu odwrócenia uwagi i ukryj złośliwy kod.
Razem na stronie jquery-js.com Zidentyfikowano sześć wersji snifferów. Te sniffery wysyłają skradzione dane na adres znajdujący się na tej samej stronie internetowej, 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żywany przez tę grupę w atakach od połowy 2018 r., służy jako repozytorium większej liczby snifferów. W sumie odkryto 16 różnych wersji sniffera. W tym przypadku bramka do wysyłania skradzionych danych była zamaskowana jako łącze do formatu obrazu 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 zarabia na skradzionych danych, sprzedając karty za pośrednictwem specjalnie utworzonego podziemnego sklepu obsługującego karterów. Analiza domen wykorzystywanych przez atakujących pozwoliła nam to ustalić google-analytics.cm została zarejestrowana przez tego samego użytkownika co domena cardz.vc. Domena cardz.vc odnosi się do sklepu sprzedającego kradzione karty bankowe Cardsurfs (Flysurfs), który zyskał popularność już w czasach działalności podziemnej platformy handlowej AlphaBay jako sklep sprzedający karty bankowe skradzione za pomocą sniffera.
Analiza domeny analityczne.is, znajdujący się na tym samym serwerze, co domeny używane przez sniffery do gromadzenia skradzionych danych, specjaliści Group-IB odkryli plik zawierający dzienniki kradzieży plików cookie, który prawdopodobnie został później porzucony przez programistę. Jeden z wpisów w logu zawierał domenę iozoz.com, który był wcześniej używany w jednym z aktywnych w 2016 roku snifferów. Prawdopodobnie domena ta była wcześniej wykorzystywana przez osobę atakującą do zbierania kart skradzionych za pomocą sniffera. Ta domena została zarejestrowana na adres e-mail [email chroniony], który był również używany do rejestracji domen cardz.su и cardz.vc, związany ze sklepem z kartami Cardsurfs.
Na podstawie uzyskanych danych można założyć, że rodzina snifferów G-Analytics oraz podziemny sklep sprzedający karty bankowe Cardsurfs zarządzane są przez te same osoby, a sklep służy do sprzedaży kart bankowych skradzionych za pomocą sniffera.
Infrastruktura
Домен | 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 |
analityczne.do | 04.12.2018 |
google-analytics.to | 06.12.2018 |
google-analytics.cm | 28.12.2018 |
analityczne.is | 28.12.2018 |
googlc-analytics.cm | 17.01.2019 |
Rodzina Illumów
Illum to rodzina snifferów używanych do ataków na sklepy internetowe z systemem Magento CMS. Oprócz wprowadzania złośliwego kodu operatorzy tego sniffera wykorzystują również wprowadzenie pełnoprawnych fałszywych formularzy płatności, które wysyłają dane do bram kontrolowanych przez atakujących.
Analizując infrastrukturę sieciową wykorzystywaną przez operatorów tego sniffera, odnotowano dużą liczbę złośliwych skryptów, exploitów, fałszywych formularzy płatności, a także zbiór przykładów ze złośliwymi snifferami konkurencji. Na podstawie informacji o datach pojawienia się nazw domen wykorzystywanych przez grupę można przypuszczać, że kampania rozpoczęła się pod koniec 2016 roku.
Jak zaimplementować Illum w kodzie sklepu internetowego
Pierwsze wykryte wersje sniffera zostały osadzone bezpośrednio w kodzie zaatakowanej witryny. Skradzione dane zostały wysłane do cdn.illum[.]pw/records.php, brama została zakodowana przy użyciu base64.
Później odkryto spakowaną wersję sniffera, która wykorzystuje inną bramkę - record.nstatistics[.]com/records.php.
Według
Analiza strony internetowej atakujących
Specjaliści Group-IB odkryli i przeanalizowali stronę internetową wykorzystywaną przez tę grupę przestępczą do przechowywania narzędzi i gromadzenia skradzionych informacji.
Wśród narzędzi znalezionych na serwerze atakujących znalazły się skrypty i exploity służące do eskalacji uprawnień w systemie operacyjnym Linux: na przykład skrypt sprawdzania eskalacji uprawnień w systemie Linux opracowany przez Mike'a Czumaka, a także exploit dla CVE-2009-1185.
Do bezpośredniego ataku na sklepy internetowe atakujący wykorzystali dwa exploity:
Ponadto podczas analizy serwera odkryto różne próbki snifferów i fałszywych form płatności, wykorzystywanych przez osoby atakujące do zbierania informacji o płatnościach ze zhakowanych witryn. Jak widać z poniższej listy, część skryptów została stworzona indywidualnie dla każdej zaatakowanej witryny, natomiast dla niektórych CMS-ów i bramek płatniczych zastosowano uniwersalne rozwiązanie. Na przykład skrypty segapay_standart.js и segapay_onpage.js przeznaczony do wdrożenia na stronach korzystających z bramki płatniczej Sage Pay.
Lista skryptów dla różnych bramek płatniczych
Scenariusz | Bramki płatności |
---|---|
|
//request.payrightnow[.]cf/checkpayment.php |
|
//request.payrightnow[.]cf/alldata.php |
|
//request.payrightnow[.]cf/alldata.php |
|
//request.payrightnow[.]cf/alldata.php |
|
//request.payrightnow[.]cf/alldata.php |
|
//request.payrightnow[.]cf/alldata.php |
|
//request.payrightnow[.]cf/checkpayment.php |
|
//cdn.illum[.]pw/records.php |
|
//request.payrightnow[.]cf/checkpayment.php |
|
//cdn.illum[.]pw/records.php |
|
//request.payrightnow[.]cf/alldata.php |
|
//request.payrightnow[.]cf/alldata.php |
//request.payrightnow[.]cf/checkpayment.php | |
|
//request.payrightnow[.]cf/checkpayment.php |
|
//request.payrightnow[.]cf/alldata.php |
|
//cdn.illum[.]pw/records.php |
|
//cdn.illum[.]pw/records.php |
|
//request.payrightnow[.]cf/checkpayment.php |
|
//cdn.illum[.]pw/records.php |
//request.payrightnow[.]cf/checkpayment.php | |
|
//cdn.illum[.]pw/records.php |
//payrightnow[.]cf/?payment= | |
|
//payrightnow[.]cf/?payment= |
|
//paymentnow[.]tk/?payment= |
Gospodarz płatność teraz[.]tk, używany jako bramka w skrypcie Payment_forminsite.js, odkryto jako podmiotAltNazwa w kilku certyfikatach związanych z usługą CloudFlare. Ponadto host zawierał skrypt zło.js. Sądząc po nazwie skryptu, można go wykorzystać w ramach exploita CVE-2016-4010, dzięki któremu możliwe jest wstrzyknięcie szkodliwego kodu do stopki strony internetowej, na której działa CMS Magento. Gospodarz użył tego skryptu jako bramy request.requestnet[.]tkużywając tego samego certyfikatu co host płatność teraz[.]tk.
Fałszywe formy płatności
Poniższy rysunek przedstawia przykładowy formularz służący do wprowadzania danych karty. Formularz ten został wykorzystany do infiltracji sklepu internetowego i kradzieży danych karty.
Poniższy rysunek przedstawia przykład fałszywego formularza płatności PayPal, który został wykorzystany przez osoby atakujące do infiltracji witryn korzystających z tej metody płatności.
Infrastruktura
Домен | Data odkrycia/pojawienia się |
---|---|
cdn.illum.pw | 27/11/2016 |
record.nstatistics.com | 06/09/2018 |
request.payrightnow.cf | 25/05/2018 |
Paymentnow.tk | 16/07/2017 |
linia-płatnicza.tk | 01/03/2018 |
Paymentpal.cf | 04/09/2017 |
requestnet.tk | 28/06/2017 |
Rodzina CoffeeMokko
Rodzina snifferów CoffeMokko, których zadaniem jest kradzież kart bankowych użytkownikom sklepów internetowych, jest w użyciu co najmniej od maja 2017 roku. Przypuszczalnie operatorami tej rodziny snifferów jest grupa przestępcza Grupa 1, opisana przez specjalistów RiskIQ w 2016 roku. Zaatakowano witryny z systemami CMS, takimi jak Magento, OpenCart, WordPress, osCommerce i Shopify.
Jak zaimplementowano CoffeMokko w kodzie sklepu internetowego
Operatorzy tej rodziny tworzą unikalne sniffery dla każdej infekcji: plik sniffera znajduje się w katalogu src lub js na serwerze atakującego. Włączenie do kodu witryny odbywa się poprzez bezpośrednie łącze do sniffera.
Kod sniffera koduje na stałe nazwy pól formularza, z których dane mają zostać skradzione. Sniffer sprawdza także, czy użytkownik znajduje się na stronie płatności, sprawdzając listę słów kluczowych z aktualnym adresem użytkownika.
Niektóre odkryte wersje sniffera były zaciemniane i zawierały zaszyfrowany ciąg znaków, w którym przechowywana była główna tablica zasobów: zawierał on nazwy pól formularzy dla różnych systemów płatności, a także adres bramki, na który powinny zostać wysłane skradzione dane.
Po drodze skradzione informacje o płatności zostały wysłane do skryptu na serwerze atakujących /savePayment/index.php lub /tr/index.php. Prawdopodobnie ten skrypt służy do wysyłania danych z bramki do głównego serwera, który konsoliduje dane ze wszystkich snifferów. Aby ukryć przesyłane dane, wszystkie informacje o płatnościach ofiary są szyfrowane base64, a następnie następuje kilka podstawień znaków:
- znak „e” zostaje zastąpiony przez „:”
- symbol „w” zastępuje się symbolem „+”
- znak „o” zostaje zastąpiony przez „%”
- znak „d” zastępuje się znakiem „#”
- znak „a” zastępuje się „-”
- symbol „7” zastępuje się „^”
- znak „h” zastępuje się „_”
- symbol „T” zastępuje się symbolem „@”
- znak „0” zastępuje się znakiem „/”
- znak „Y” zastępuje się znakiem „*”
W wyniku podstawień znaków zakodowanych przy użyciu base64 Dane nie mogą zostać zdekodowane bez przeprowadzenia konwersji odwrotnej.
Tak wygląda fragment kodu sniffera, który nie został zaciemniony:
Analiza infrastruktury
We wczesnych kampaniach napastnicy rejestrowali nazwy domen podobne do nazw domen legalnych witryn zakupów online. Ich domena może różnić się od legalnej symbolem lub inną TLD. W zarejestrowanych domenach przechowywany był kod sniffera, do którego link został osadzony w kodzie sklepu.
Grupa ta korzystała także z nazw domen nawiązujących do popularnych wtyczek jQuery (slickjs[.]org dla witryn korzystających z wtyczki slick.js), Bramy płatnicze (sagecdn[.]org dla witryn korzystających z systemu płatności Sage Pay).
Później grupa zaczęła tworzyć domeny, których nazwy nie miały nic wspólnego z domeną sklepu ani tematyką sklepu.
Każda domena odpowiadała witrynie, na której utworzono katalog /js lub / src. W tym katalogu przechowywane były skrypty sniffera: jeden sniffer na każdą nową infekcję. Sniffer został osadzony w kodzie strony internetowej poprzez bezpośredni link, jednak w rzadkich przypadkach napastnicy modyfikowali jeden z plików witryny i dodawali do niego szkodliwy kod.
Analiza kodu
Pierwszy algorytm zaciemniania
W niektórych wykrytych próbkach snifferów z tej rodziny kod był zaciemniony i zawierał zaszyfrowane dane niezbędne do działania sniffera: w szczególności adres bramki sniffera, listę pól formularzy płatności, a w niektórych przypadkach kod fałszywego formularz płatności. W kodzie funkcji zasoby zostały zaszyfrowane przy użyciu XOR przez klucz, który został przekazany jako argument tej samej funkcji.
Odszyfrowując ciąg odpowiednim kluczem, unikalnym dla każdej próbki, można otrzymać ciąg zawierający wszystkie ciągi z kodu sniffera oddzielone znakiem separatora.
Drugi algorytm zaciemniania
W późniejszych próbkach snifferów z tej rodziny zastosowano inny mechanizm zaciemniania: w tym przypadku dane zostały zaszyfrowane przy użyciu samodzielnie napisanego algorytmu. Jako argument do funkcji deszyfrującej przekazany został ciąg zawierający zaszyfrowane dane niezbędne do działania sniffera.
Korzystając z konsoli przeglądarki, możesz odszyfrować zaszyfrowane dane i uzyskać tablicę zawierającą zasoby sniffera.
Połączenie z wczesnymi atakami MageCart
Podczas analizy jednej z domen wykorzystywanych przez grupę jako brama do gromadzenia skradzionych danych ustalono, że w domenie tej znajdowała się infrastruktura służąca do kradzieży kart kredytowych, identyczna z tą wykorzystywaną przez Grupę 1, jedną z pierwszych grup,
Na hoście rodziny snifferów CoffeMokko znaleziono dwa pliki:
- mag.js — plik zawierający kod sniffera grupy 1 z adresem bramki js-cdn.link
- mag.php — Skrypt PHP odpowiedzialny za zbieranie danych skradzionych przez sniffera
Zawartość pliku mage.js
Ustalono również, że najwcześniejsze domeny używane przez grupę stojącą za rodziną snifferów CoffeMokko zostały zarejestrowane 17 maja 2017 r.:
- link-js[.]link
- info-js[.]link
- utwór-js[.]link
- map-js[.]link
- smart-js[.]link
Format tych nazw domen odpowiada nazwom domen Grupy 1, które zostały użyte w atakach w 2016 roku.
Na podstawie odkrytych faktów można założyć, że istnieje powiązanie pomiędzy operatorami snifferów CoffeMokko a grupą przestępczą Grupa 1. Prawdopodobnie operatorzy CoffeMokko mogli pożyczać narzędzia i oprogramowanie od swoich poprzedników, aby kraść karty. Bardziej prawdopodobne jest jednak, że grupą przestępczą stojącą za wykorzystaniem rodziny snifferów CoffeMokko są te same osoby, które przeprowadziły ataki Grupy 1. Po opublikowaniu pierwszego raportu z działalności tej grupy przestępczej wszystkie jej nazwy domen zostały zablokowano, a narzędzia szczegółowo zbadano i opisano. Grupa była zmuszona zrobić sobie przerwę, udoskonalić swoje wewnętrzne narzędzia i napisać na nowo kod sniffera, aby kontynuować ataki i pozostać niewykrytym.
Infrastruktura
Домен | 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 |
kidssplayclothing.org | 31.10.2017 |
jewsondirect.com | 05.11.2017 |
shop-rnib.org | 15.11.2017 |
szafalondon.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 |
zamieńmyremote.org | 04.12.2017 |
all-about-sneakers.org | 05.12.2017 |
mage-checkout.org | 05.12.2017 |
nililotan.org | 07.12.2017 |
lamoodbighat.net | 08.12.2017 |
portfel.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 |
otocap.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 |
autoryzowacdn.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 |
bardzowellfitnesse.com | 15.09.2018 |
elegrina.com | 18.11.2018 |
Majsurplus.com | 19.11.2018 |
top5value.com | 19.11.2018 |
Źródło: www.habr.com