
Praticamente ognuno di noi utilizza i servizi dei negozi online, il che significa che, prima o poi, rischiamo di diventare vittime di sniffatori JavaScript: un codice speciale che i malintenzionati integrano nei siti per rubare i dati delle carte di credito, indirizzi, nomi utente e password degli utenti.
Quasi 400.000 utenti del sito e dell'app mobile della compagnia aerea British Airways hanno già subito danni dagli sniffatori, così come i visitatori del sito britannico del gigante sportivo FILA e del distributore americano di biglietti Ticketmaster. PayPal, Chase Paymenttech, USAePay, Moneris: questi e molti altri sistemi di pagamento sono stati compromessi.
L'analista del gruppo Threat Intelligence Group-IB, Viktor Okorokov, spiega come gli sniffatori siano integrati nel codice dei siti e come rubino le informazioni sui pagamenti, oltre a quali CRM attaccano.

«Minaccia nascosta»
È capitato che, per lungo tempo, gli sniffatori JS siano rimasti al di fuori dell'attenzione degli analisti antivirus, e le banche e i sistemi di pagamento non li consideravano una minaccia seria. E a ragione. Gli esperti di Group-IB 2.440 negozi online compromessi, i cui visitatori – per un totale di circa 1,5 milioni di persone al giorno – erano a rischio di compromissione. Tra le vittime ci sono non solo gli utenti, ma anche i negozi online, i sistemi di pagamento e le banche che hanno emesso carte compromesse.
Group-IB è stato il primo a studiare il mercato darknet degli sniffatori, la loro infrastruttura e i metodi di monetizzazione che portano ai loro creatori milioni di dollari. Abbiamo identificato 38 famiglie di sniffatori, di cui solo 12 erano già noti ai ricercatori.
Esaminiamo in dettaglio quattro famiglie di sniffatori studiate durante la ricerca.
Famiglia ReactGet
I sniffatori della famiglia ReactGet vengono utilizzati per rubare dati di carte di credito sui siti di negozi online. Lo sniffatore può operare con un gran numero di diversi sistemi di pagamento utilizzati sul sito: un valore del parametro corrisponde a un sistema di pagamento, mentre versioni specifiche dello sniffatore possono essere utilizzate per rubare credenziali e dati di carte di credito dai moduli di pagamento di più sistemi di pagamento, come un cosiddetto sniffatore universale. È stato stabilito che, in alcuni casi, gli aggressori eseguono attacchi di phishing sui responsabili dei negozi online al fine di ottenere accesso al pannello di amministrazione del sito.
La campagna che utilizza questa famiglia di sniffatori è iniziata a maggio 2017, subendo attacchi siti gestiti da CMS e piattaforme Magento, Bigcommerce, Shopify.
Come ReactGet si integra nel codice del negozio online
Oltre all'integrazione "classica" dello script tramite link, gli operatori degli sniffatori della famiglia ReactGet utilizzano una tecnica particolare: tramite codice JavaScript viene controllato se l'indirizzo attuale, in cui si trova l'utente, soddisfa determinati criteri. Il codice malevolo verrà eseguito solo se nella URL attuale è presente la sottostringa checkout o onestepcheckout, onepage/, out/onepag, checkout/one, ckout/one. In questo modo, il codice dello sniffatore verrà eseguito proprio nel momento in cui l'utente procederà al pagamento e inserirà le informazioni di pagamento nel modulo sul sito.

Questo sniffatore utilizza una tecnica non convenzionale. I dati di pagamento e personali della vittima vengono raccolti insieme, codificati tramite base64, e la stringa risultante viene utilizzata come parametro per inviare una richiesta al sito degli aggressori. Nella maggior parte dei casi, il percorso verso il gateway imita un file JavaScript, ad esempio resp.js, data.js e così via, ma vengono anche utilizzati link a file immagine, GIF e JPG. La peculiarità è che lo sniffatore crea un oggetto immagine delle dimensioni di 1 su 1 pixel e utilizza il link precedentemente ottenuto come parametro src immagini. Cioè, per l'utente, tale richiesta nel traffico apparirà come una richiesta di un'immagine normale. Una tecnica simile è stata utilizzata negli sniffer della famiglia ImageID. Inoltre, la tecnica che utilizza un'immagine di dimensione 1 per 1 pixel è applicata in molti script legittimi di analisi online, il che può anche confondere l'utente.

Analisi delle versioni
L'analisi dei domini attivi utilizzati dagli operatori degli sniffer ReactGet ha permesso di scoprire molte versioni diverse di sniffer di questa famiglia. Le versioni si differenziano per la presenza o meno di offuscamento e, inoltre, ogni sniffer è destinato a un determinato sistema di pagamento che gestisce i pagamenti con carta di credito per gli e-commerce. Esaminando il valore del parametro corrispondente al numero di versione, gli esperti di Group-IB hanno ottenuto un elenco completo delle variazioni disponibili degli sniffer e, in base ai nomi dei campi del modulo che ogni sniffer cerca nel codice della pagina, hanno identificato i sistemi di pagamento a cui il sniffer è destinato.
Elenco degli sniffer e dei sistemi di pagamento corrispondenti
| URL dello sniffer | Sistema di pagamento |
|---|---|
| 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 delle password
Uno dei vantaggi degli sniffer JavaScript, che operano sul lato client del sito, è la loro versatilità: il codice malevolo integrato nel sito è in grado di rubare dati di qualsiasi tipo, sia che si tratti di dati di pagamento o di login e password per l'account dell'utente. Gli esperti di Group-IB hanno scoperto un campione di sniffer appartenente alla famiglia ReactGet, destinato a rubare indirizzi email e password degli utenti del sito.

Intersezione con lo sniffer ImageID
Durante l'analisi di uno dei negozi infettati, è stato stabilito che il suo sito era stato infettato due volte: oltre al codice malevolo dello sniffer della famiglia ReactGet, è stato trovato anche il codice dello sniffer della famiglia ImageID. Questa intersezione potrebbe essere una prova del fatto che gli operatori che si trovano dietro l'uso di entrambi gli sniffer applicano tecniche simili per integrare codice malevolo.

Sniffer universale
Durante l'analisi di uno dei nomi di dominio appartenenti all'infrastruttura di sniffing di ReactGet, è stato stabilito che lo stesso utente aveva registrato altri tre nomi di dominio. Questi tre domini imitavano i nomi di dominio di siti web realmente esistenti e in precedenza erano stati utilizzati per ospitare sniffers. Durante l'analisi del codice di tre siti web legittimi è stato individuato uno sniffer sconosciuto, e ulteriori analisi hanno mostrato che si trattava di una versione avanzata dello sniffer ReactGet. Tutte le versioni precedentemente tracciate degli sniffer di questa famiglia erano mirate a un'unica piattaforma di pagamento, il che significava che per ogni sistema di pagamento era necessaria una versione speciale dello sniffer. Tuttavia, in questo caso è stata trovata una versione universale dello sniffer, in grado di rubare informazioni dai moduli relativi a 15 diversi sistemi di pagamento e moduli di siti e-commerce per l'elaborazione di pagamenti online.
Quindi, all'inizio del suo funzionamento, lo sniffer cercava i campi di base del modulo contenenti le informazioni personali della vittima: nome completo, indirizzo fisico, numero di telefono.

Successivamente, lo sniffer cercava attraverso più di 15 diversi prefissi, corrispondenti a vari sistemi di pagamento e moduli per pagamenti online.

Successivamente, i dati personali della vittima e le informazioni di pagamento venivano raccolti insieme e inviati a un sito controllato dal criminale: in questo caso specifico sono state identificate due versioni dello sniffer universale ReactGet, alloggiate su due diversi siti compromessi. Tuttavia, entrambe le versioni inviavano i dati rubati allo stesso sito compromesso. zoobashop.com.

L'analisi dei prefissi utilizzati dallo sniffer per cercare i campi contenenti le informazioni di pagamento della vittima ha consentito di determinare che questo campione di sniffer era mirato ai seguenti sistemi di pagamento:
- Authorize.Net
- Verisign
- First Data
- USAePay
- Stripe
- PayPal
- ANZ eGate
- Braintree
- DataCash (MasterCard)
- Realex Payments
- PsiGate
- Heartland Payment Systems
Quali strumenti vengono utilizzati per rubare le informazioni di pagamento
Il primo strumento scoperto durante l'analisi dell'infrastruttura degli aggressori serve per offuscare gli script dannosi responsabili del furto di carte di credito. Su uno degli host degli aggressori è stato trovato uno script bash che utilizza il CLI del progetto per automatizzare l'offuscamento del codice degli sniffer.
![]()
Il secondo strumento rilevato è progettato per generare codice responsabile del caricamento del sniffatore principale. Questo strumento genera codice JavaScript che verifica se l'utente si trova sulla pagina di pagamento, cercando nella stringa dell'indirizzo attuale dell'utente checkout, carrello e così via, e se il risultato è positivo, il codice carica lo sniffatore principale dal server degli aggressori. Per nascondere l'attività dannosa, tutte le stringhe, comprese le stringhe di test per determinare la pagina di pagamento, così come il link allo sniffatore, sono codificate utilizzando base64.

Attacchi di phishing
Durante l'analisi dell'infrastruttura di rete degli aggressori è stato stabilito che spesso per ottenere accesso al pannello di amministrazione del negozio online target, il gruppo criminale utilizza il phishing. Gli aggressori registrano un dominio visivamente simile a quello del negozio, e poi distribuiscono su di esso un modulo di accesso fasullo al pannello di amministrazione di Magento. In caso di successo, gli aggressori otterranno accesso al pannello di amministrazione CMS Magento, il che permette loro di modificare i componenti del sito e inserire uno sniffatore per rubare i dati delle carte di credito.

Infrastruttura
| Dominio | Data di rilevamento/apparizione |
|---|---|
| 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 |
Famiglia G-Analytics
Questa famiglia di sniffatori è utilizzata per rubare le carte dei clienti dei negozi online. Il primo nome di dominio utilizzato dal gruppo è stato registrato nell'aprile 2016, il che potrebbe indicare l'inizio dell'attività del gruppo a metà del 2016.
Nell'attuale campagna, il gruppo utilizza nomi di dominio che imitano servizi realmente esistenti, come Google Analytics e jQuery, mascherando l'attività degli sniffatori con script legittimi e nomi di dominio simili a quelli legittimi. I siti colpiti sono quelli che operano sotto il CMS Magento.
Come G-Analytics viene integrato nel codice del negozio online
La caratteristica distintiva di questa famiglia è l'uso di diversi metodi per rubare le informazioni di pagamento dell'utente. Oltre all'implementazione classica di codice JavaScript nella parte client del sito, il gruppo criminoso ha anche utilizzato la tecnica di iniettare codice nella parte server del sito, cioè negli script PHP che elaborano i dati forniti dall'utente. Questa tecnica è pericolosa perché rende difficile il rilevamento del codice malevolo da parte di ricercatori esterni. Gli specialisti di Group-IB hanno scoperto una versione dello sniffer iniettato nel codice PHP del sito, che utilizza come gateway il dominio dittm.org.

È stata anche scoperta una versione precedente dello sniffer che utilizza lo stesso dominio per raccogliere dati rubati, dittm.orgma questa versione è già destinata all'installazione sul lato client del negozio online.

In seguito, il gruppo ha cambiato la sua tattica, iniziando a concentrarsi maggiormente sulla mascheratura delle attività malevole.
All'inizio del 2017, il gruppo ha iniziato a utilizzare il dominio jquery-js.com, che si maschera da CDN per jQuery: navigando verso il sito degli aggressori, l'utente viene reindirizzato a un sito legittimo, jquery.com.
E a metà del 2018, il gruppo ha adottato il nome di dominio g-analytics.com e ha iniziato a mascherare l'attività dello sniffer come un servizio legittimo di Google Analytics.


Analisi delle versioni
Durante l'analisi dei domini utilizzati per ospitare il codice degli sniffer, è stato stabilito che sul sito sono presenti numerose versioni che variano per la presenza di offuscamento e per la presenza o assenza di codice inaccessibile, aggiunto al file per deviare l'attenzione e nascondere il codice malevolo.
In totale, sul sito jquery-js.com sono state identificate sei versioni di sniffer. I dati rubati da questi sniffer vengono inviati a un indirizzo situato sullo stesso sito dello sniffer stesso: 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
Un dominio più recente g-analytics.com, utilizzato dal gruppo negli attacchi dalla metà del 2018, funge da archivio per un numero maggiore di sniffer. Sono state scoperte 16 diverse versioni dello sniffer. In questo caso, il gateway per inviare i dati rubati era mascherato come un link a un'immagine di formato 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
Monetizzazione dei dati rubati
Il gruppo criminoso monetizza i dati rubati vendendo carte attraverso un negozio sotterraneo appositamente creato che offre servizi ai carder. L'analisi dei domini utilizzati dagli aggressori ha permesso di determinare che google-analytics.cm è stato registrato dallo stesso utente che ha registrato il dominio cardz.vc. Il dominio cardz.vc si riferisce a un negozio di vendita di carte bancarie rubate, Cardsurfs (Flysurfs), che ha guadagnato popolarità già ai tempi dell'attività del mercato nero AlphaBay come negozio di vendita di carte bancarie rubate tramite sniffer.

Analizzando il dominio analytic.is, situato sullo stesso server di domini utilizzati da sniffer per la raccolta di dati rubati, gli esperti di Group-IB hanno scoperto un file contenente log di Cookie-stiller, che sembra essere stato successivamente abbandonato dallo sviluppatore. Una delle voci nel log conteneva il dominio iozoz.com, che era stato precedentemente utilizzato in uno degli sniffer attivi nel 2016. Si presume che questo dominio fosse stato utilizzato in precedenza da un malintenzionato per raccogliere carte rubate tramite sniffer. Questo dominio è stato registrato con l'indirizzo email kts241@gmail.com, che è stato utilizzato anche per registrare i domini cardz.su e cardz.vc, relativi al negozio di carte Cardsurfs.
Dai dati ottenuti, si può ipotizzare che la famiglia di sniffer G-Analytics e il mercato nero di carte bancarie Cardsurfs siano gestiti dalle stesse persone, e che il negozio venga utilizzato per realizzare carte bancarie rubate tramite sniffer.
Infrastruttura
| Dominio | Data di rilevamento/apparizione |
|---|---|
| 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 |
Famiglia Illum
Illum è una famiglia di sniffer utilizzata per attacchi a negozi online che operano sotto CMS Magento. Oltre a iniettare codice malevolo, gli operatori di questo sniffer utilizzano anche l'inserimento di moduli di pagamento falsi che inviano dati a gate controllati dai malintenzionati.
Nell'analizzare l'infrastruttura di rete utilizzata dagli operatori di questo sniffer, è stato notato un grande numero di script dannosi, exploit, moduli di pagamento falsi, e una raccolta di esempi di sniffer malevoli concorrenti. Dalle informazioni sulle date di registrazione dei nomi di dominio utilizzati dal gruppo, si può supporre che l'inizio della campagna risalga alla fine del 2016.
Come Illum viene inserito nel codice del negozio online
Le prime versioni scoperte di questo sniffer venivano inserite direttamente nel codice del sito compromesso. I dati rubati venivano inviati a cdn.illum[.]pw/records.php, il gate era codificato utilizzando base64.

In seguito è stata trovata una versione confezionata dello sniffer, che utilizza un altro gateway — records.nstatistics[.]com/records.php.

Secondo Willem de Groot, lo stesso host è stato utilizzato nello sniffer, che è stato inserito su , di proprietà del partito politico tedesco CSU.
Analisi del sito degli aggressori
Gli specialisti di Group-IB hanno scoperto e analizzato un sito utilizzato da questo gruppo criminale per archiviare strumenti e raccogliere informazioni rubate.

Tra gli strumenti trovati sul server degli aggressori, sono stati rinvenuti script ed exploit per l'escalation dei privilegi nel sistema operativo Linux: ad esempio, lo script per il controllo dell'escalation dei privilegi di Linux, sviluppato da Mike Czumak, così come un exploit per CVE-2009-1185.
In particolare, per attacchi ai negozi online, gli aggressori hanno utilizzato due exploit: capace di inserire codice dannoso in core_config_data attraverso l'esploitazione di CVE-2016-4010, sfrutta una vulnerabilità di tipo RCE nei plugin per CMS Magento, permettendo di eseguire codice arbitrario su un server web vulnerabile.

Durante l'analisi del server sono stati trovati diversi campioni di sniffer e moduli di pagamento falsi utilizzati dagli aggressori per raccogliere informazioni sui pagamenti dai siti compromessi. Come si può notare dall'elenco qui sotto, alcuni script sono stati creati individualmente per ciascun sito compromesso, mentre per determinati CMS e gateway di pagamento è stata utilizzata una soluzione universale. Ad esempio, gli script segapay_standart.js e segapay_onpage.js sono progettati per essere inseriti su siti che utilizzano il gateway di pagamento Sage Pay.
Elenco degli script per diversi gateway di pagamento
| Script | Gateway di pagamento |
|---|---|
| [.]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, utilizzato come gateway nello script payment_forminsite.js, è stato trovato come subjectAltName in diversi certificati relativi al servizio CloudFlare. Inoltre, sul host era presente uno script evil.js. Judicando dal nome dello script, poteva essere utilizzato nell'ambito dell'esploitazione di CVE-2016-4010, grazie al quale è possibile inserire codice dannoso nel footer di un sito gestito da CMS Magento. Come gateway, questo script ha utilizzato l'host request.requestnet[.]tk, che utilizza lo stesso certificato dell'host paymentnow[.]tk.
Moduli di pagamento falsi
Di seguito, un esempio di modulo per l'inserimento dei dati della carta. Questo modulo è stato utilizzato per l'inserimento su un sito di un negozio online e per il furto dei dati della carta.

Nell'immagine seguente è un esempio di un modulo di pagamento PayPal falso, utilizzato dai criminali per infiltrarsi nei siti che adottano questo metodo di pagamento.

Infrastruttura
| Dominio | Data di rilevamento/apparizione |
|---|---|
| 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 |
Famiglia CoffeMokko
La famiglia di sniffer CoffeMokko, destinata a rubare carte di credito degli utenti dei negozi online, è in uso almeno dal maggio 2017. Si ipotizza che gli operatori di questa famiglia di sniffer siano un gruppo criminale noto come Group 1, descritto dagli esperti di RiskIQ nel 2016. Gli attacchi hanno colpito siti gestiti da CMS come Magento, OpenCart, WordPress, osCommerce, Shopify.
Come CoffeMokko si infiltra nel codice del negozio online
Gli operatori di questa famiglia creano sniffer unici per ogni infezione: il file sniffer si trova nella directory src o js sul server dei criminali. L'infiltrazione nel codice del sito avviene attraverso un link diretto al sniffer.

Nel codice dello sniffer sono hardcoded i nomi dei campi del modulo da cui è necessario rubare i dati. Inoltre, lo sniffer verifica se l'utente si trova sulla pagina di pagamento confrontando un elenco di parole chiave con l'indirizzo attuale dell'utente.

Alcune versioni dello sniffer individuate erano offuscate e contenevano una stringa crittografata in cui era memorizzato il principale array di risorse: in esso c'erano i nomi dei campi dei moduli per vari sistemi di pagamento, così come l'indirizzo del gateway a cui inviare i dati rubati.

Le informazioni di pagamento rubate venivano inviate a uno script sul server dei criminali tramite il percorso /savePayment/index.php или /tr/index.php. Questo script, si presume, funge da intermediario per inviare i dati dal gateway al server principale che consolida i dati da tutti gli sniffer. Per nascondere i dati trasferiti, tutte le informazioni di pagamento della vittima vengono codificate utilizzando base64, e poi si eseguono diverse sostituzioni di caratteri:
- il carattere "e" viene sostituito con ":"
- il carattere "w" viene sostituito con " + "
- il carattere "o" viene sostituito con "%"
- il carattere "d" viene sostituito con "#"
- il carattere "a" viene sostituito con "-"
- il carattere "7" viene sostituito con "^"
- il carattere "h" viene sostituito con "_"
- il carattere "T" viene sostituito con "@"
- il carattere "0" viene sostituito con " / "
- il carattere "Y" viene sostituito con "*"
Di conseguenza, i dati codificati usando base64 non possono essere decodificati senza effettuare una trasformazione inversa.
Ecco come appare un frammento di codice di uno sniffer non offuscato:

Analisi dell'infrastruttura
Nelle prime campagne, i criminali registravano nomi di dominio simili a quelli dei legittimi siti di negozi online. Il loro dominio poteva differire da quello legittimo per un solo carattere o un altro TLD. I nomi di dominio registrati venivano utilizzati per ospitare il codice dello sniffer, di cui il link veniva inserito nel codice del negozio.
Inoltre, questo gruppo utilizzava nomi di dominio che ricordavano i nomi di popolari plugin per jQuery (slickjs[.]org per siti che utilizzano il plugin slick.js), gateway di pagamento (sagecdn[.]org per siti che utilizzano il sistema di pagamento Sage Pay).
Successivamente, il gruppo ha iniziato a creare domini i cui nomi non avevano nulla a che fare né con il dominio del negozio né con la tematica del negozio.

Ogni dominio corrispondeva a un sito, su cui veniva creata una directory /js o /src. In questa directory venivano memorizzati gli script degli sniffer: uno sniffer per ogni nuova infezione. Lo sniffer veniva inserito nel codice del sito tramite un link diretto, ma in rari casi i criminali modificavano uno dei file del sito e vi aggiungevano codice dannoso.
Analisi del codice
Primo algoritmo di offuscamento
In alcuni campioni rilevati di sniffer di questa famiglia, il codice era offuscato e conteneva dati criptati necessari per il funzionamento dello sniffer: in particolare, l'indirizzo del gateway dello sniffer, l'elenco dei campi del modulo di pagamento, e in alcuni casi — il codice di un modulo di pagamento falso. Nel codice all'interno della funzione, le risorse erano criptate tramite XOR con una chiave che veniva passata come argomento di questa stessa funzione.

Decriptando la stringa con la chiave appropriata, unica per ogni campione, si può ottenere una stringa che contiene tutte le stringhe del codice dello sniffer separate da un carattere delimitatore.

Secondo algoritmo di offuscamento
In campioni più recenti di sniffer di questa famiglia è stato utilizzato un altro meccanismo di offuscamento: in questo caso i dati erano criptati tramite un algoritmo autoprodotto. La stringa contenente i dati criptati, necessari per il funzionamento dello sniffer, veniva passata come argomento della funzione di decrittazione.

Utilizzando la console del browser, è possibile decriptare i dati criptati e ottenere un array contenente le risorse dello sniffer.

Collegamento con i primi attacchi MageCart
Durante l'analisi di uno dei domini utilizzati dal gruppo come gateway per raccogliere dati rubati, è emerso che su questo dominio era stata implementata un'infrastruttura per il furto di carte di credito, identica a quella utilizzata dal Gruppo 1 — uno dei primi gruppi, dagli specialisti di RiskIQ.
Sull'host della famiglia di sniffers CoffeMokko sono stati trovati due file:
- mage.js — un file contenente il codice dello sniffer del Gruppo 1 con l'indirizzo del gateway js-cdn.link
- mag.php — uno script PHP responsabile della raccolta dei dati rubati dallo sniffer
Содержимое файла mage.js 
È stato inoltre stabilito che i domini più antichi utilizzati dal gruppo alla base della famiglia di sniffers CoffeMokko sono stati registrati il 17 maggio 2017:
- link-js[.]link
- info-js[.]link
- track-js[.]link
- map-js[.]link
- smart-js[.]link
Il formato di questi nomi di dominio corrisponde a quelli del Gruppo 1, che erano stati utilizzati negli attacchi del 2016.
Sulla base dei fatti riscontrati, si può ipotizzare che ci sia un collegamento tra gli operatori degli sniffer CoffeMokko e il gruppo criminale Gruppo 1. È probabile che gli operatori di CoffeMokko abbiano mutuato dai loro predecessori strumenti e software per il furto di carte. Tuttavia, è più probabile che il gruppo criminale responsabile dell'uso degli sniffer della famiglia CoffeMokko sia composto dalle stesse persone che hanno effettuato gli attacchi nel contesto delle attività del Gruppo 1. Dopo la pubblicazione del primo rapporto sulle attività del gruppo criminale, tutti i loro nomi di dominio sono stati bloccati e gli strumenti sono stati analizzati e descritti in dettaglio. Il gruppo è stato costretto a prendersi una pausa, a rivedere i propri strumenti interni e a riscrivere il codice degli sniffer per poter continuare i propri attacchi e rimanere non notati.
Infrastruttura
| Dominio | Data di rilevamento/apparizione |
|---|---|
| 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 |
Fonte: habr.com
