
Practic aproape fiecare dintre noi folosește serviciile magazinelor online, ceea ce înseamnă că, mai devreme sau mai târziu, riscă să devină victima sniffer-elor JavaScript - un cod special pe care infractorii cibernetici îl integrează în site-uri pentru a fura datele cardurilor bancare, adresele, numele de utilizator și parolele utilizatorilor.
Aproape 400.000 de utilizatori ai site-ului și aplicației mobile a companiei aeriene British Airways au fost afectați de sniffer-e, precum și vizitatorii site-ului britanic al gigantului sportiv FILA și ai distribuitorului american de bilete Ticketmaster. PayPal, Chase Paymenttech, USAePay, Moneris - aceste și multe alte sisteme de plată au fost compromise.
Analistul Threat Intelligence Group-IB, Viktor Okorokov, explică modul în care sniffer-ele sunt integrate în codul site-ului și fură informații despre plăți, cât și despre CRM-urile pe care le atacă.

„Amenințarea ascunsă”
Din păcate, sniffer-ele JS au rămas mult timp în afara atenției analiștilor antivirus, iar băncile și sistemele de plată nu le-au considerat o amenințare serioasă. Și pe bună dreptate, expertiza Group-IB 2440 de magazine online infectate, vizitate de aproximativ 1,5 milioane de persoane pe zi, au fost expuse riscului de compromitere. Printre victime se numără nu doar utilizatorii, ci și magazinele online, sistemele de plată și băncile care au emis carduri compromise.
Group-IB a fost prima cercetare a pieței darknet a sniffer-elor, infrastructurii acestora și modurilor de monetizare care le aduc creatorilor milioane de dolari. Am identificat 38 de familii de sniffer-e, dintre care doar 12 erau cunoscute anterior cercetătorilor.
Vom detalia patru familii de sniffer-e studiate în cadrul cercetării.
Familia ReactGet
Snifferii din familia ReactGet sunt utilizati pentru furtul datelor de carduri bancare pe site-urile magazinelor online. Un sniffer poate lucra cu un număr mare de sisteme de plată diferite utilizate pe site: o valoare a parametrului corespunde unui singur sistem de plată, iar versiunile detectate ale snifferului pot fi folosite pentru a fura datele de autentificare, precum și pentru a fura informațiile cardurilor bancare din formularele de plată ale mai multor sisteme de plată, ca un așa-numit sniffer universal. S-a constatat că în unele cazuri, atacatorii desfășoară atacuri de phishing asupra administratorilor magazinelor online, cu scopul de a obține acces la panoul de administrare al site-ului.
Campania care folosește această familie de snifferi a început în mai 2017, atacurile vizând site-uri gestionate de CMS și platforme precum Magento, Bigcommerce, Shopify.
Cum se integrează ReactGet în codul magazinului online
Pe lângă integrarea „clasică” a scriptului prin link, operatorii snifferilor din familia ReactGet folosesc o tehnică specială: prin intermediul codului JavaScript se verifică dacă adresa curentă, pe care se află utilizatorul, corespunde anumitor criterii. Codul malițios va fi executat doar dacă în URL-ul curent se găsește subșirul checkout sau onestepcheckout, onepage/, out/onepag, checkout/one, ckout/one. Astfel, codul snifferului se va executa exact în momentul în care utilizatorul trece la plata achizițiilor și introduce informațiile de plată în formularul de pe site.

Acest sniffer folosește o tehnică neobișnuită. Datele de plată și informațiile personale ale victimei sunt colectate împreună, codificate prin intermediul base64, iar apoi șirul obținut este utilizat ca parametru pentru a trimite o cerere către site-ul atacatorilor. Cel mai adesea, calea către poarta imită un fișier JavaScript, de exemplu resp.js, data.js și așa mai departe, dar sunt folosite și linkuri către fișiere de imagini, GIF și JPG. Caracteristica este că snifferul creează un obiect de imagine de dimensiuni 1 pe 1 pixel și folosește linkul obținut anterior ca parametru. src imagini. Asta înseamnă că pentru utilizator, o astfel de cerere în trafic va arăta ca o cerere normală de imagine. O tehnică similară a fost folosită în sniferele din familia ImageID. În plus, tehnica de utilizare a unei imagini de 1 pe 1 pixel este aplicată în multe scripturi legitime de analiză online, ceea ce poate induce, de asemenea, utilizatorul în eroare.

Analiza versiunilor
Analiza domeniilor active folosite de operatorii snifferelor ReactGet a permis descoperirea multor versiuni diferite ale acestui tip de sniffer. Versiunile diferă prin prezența sau absența obfuscării, iar fiecare sniffer este destinat unui sistem de plată specific care procesează plăți cu carduri bancare pentru magazinele online. Evaluând valoarea parametrului corespunzător numărului versiunii, specialiștii de la Group-IB au obținut o listă completă de variații disponibile ale snifferelor, iar prin denumirile câmpurilor de formulare pe care fiecare sniffer le caută în codul paginii, au identificat sistemele de plată cărora snifferul le este destinat.
Lista snifferelor și sistemelor de plată corespunzătoare
| URL-ul snifferului | Sistem de plată |
|---|---|
| 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 de parole
Unul dintre avantajele snifferelor JavaScript care funcționează pe partea clientului este versatilitatea: codul malițios încorporat pe site poate fura date de orice tip, fie că sunt date de plată sau un nume de utilizator și parola unui cont de utilizator. Specialiștii de la Group-IB au descoperit un exemplu de sniffer din familia ReactGet destinat furtului adreselor de e-mail și parolilor utilizatorilor site-ului.

Intersecția cu snifferul ImageID
În timpul analizei unuia dintre magazinele infectate, s-a stabilit că site-ul său a fost infectat de două ori: pe lângă codul malițios al snifferului din familia ReactGet, a fost descoperit și codul snifferului din familia ImageID. Această intersecție poate fi o dovadă că operatorii care stau în spatele utilizării ambelor snifferi aplică tehnici similare pentru a introduce cod malițios.

Sniffer universal
În analiza uneia dintre numele de domeniu asociate infrastructurii snifferelor ReactGet, s-a constatat că același utilizator a înregistrat alte trei nume de domeniu. Aceste trei domenii imită domeniile unor site-uri reale și au fost folosite anterior pentru găzduirea snifferelor. Analizând codul celor trei site-uri legitime, a fost descoperit un sniffer necunoscut, iar o analiză ulterioară a arătat că este o versiune îmbunătățită a snifferului ReactGet. Toate versiunile anterior urmărite ale snifferelor din această familie erau țintite spre un anumit sistem de plată, ceea ce înseamnă că pentru fiecare sistem de plată era necesară o versiune specială a snifferului. Totuși, în acest caz, a fost descoperită o versiune universală a snifferului, capabilă să fure informații din formulare aparținând a 15 sisteme de plată diferite și modulelor e-commerce pentru efectuarea plăților online.
Așadar, la începutul activității, snifferul căuta câmpurile de bază ale formularului care conțin informațiile personale ale victimei: numele complet, adresa fizică, numărul de telefon.

Apoi, snifferul căuta printre mai mult de 15 prefixe diferite, corespunzătoare diferitelor sisteme de plată și module pentru plăți online.

Ulterior, datele personale ale victimei și informațiile de plată erau adunate la un loc și trimise pe un site controlat de atacator: în acest caz specific, au fost descoperite două versiuni ale snifferului universal ReactGet, situate pe două site-uri hack-uite diferite. Totuși, ambele versiuni trimiteau datele furate pe același site hack-uit. zoobashop.com.

Analiza prefixelor utilizate de sniffer pentru căutarea câmpurilor care conțin informații de plată ale victimei a permis determinarea faptului că acest exemplar de sniffer a fost țintit spre următoarele sisteme de plată:
- Authorize.Net
- Verisign
- First Data
- USAePay
- Stripe
- PayPal
- ANZ eGate
- Braintree
- DataCash (MasterCard)
- Realex Payments
- PsiGate
- Heartland Payment Systems
Ce instrumente sunt folosite pentru a fura informațiile de plată
Primul instrument descoperit în timpul analizei infrastructurii atacatorilor este destinat obfuscării scripturilor malițioase, responsabil pentru furtul cardurilor bancare. Pe unul dintre serverele atacatorilor a fost descoperit un script bash, care utilizează CLI-ul proiectului pentru automatizarea obfuscației codului snifferelor.
![]()
Al doilea instrument descoperit este destinat generării codului responsabil pentru încărcarea sniff-ului principal. Acest instrument generează cod JavaScript care verifică dacă utilizatorul se află pe pagina de plată, căutând în adresa curentă a utilizatorului fragmente checkout, cumpărătură și așa mai departe, iar dacă rezultatul este pozitiv, codul încarcă sniff-ul principal de pe serverul atacatorilor. Pentru a ascunde activitatea dăunătoare, toate fragmentele, inclusiv cele pentru identificarea paginii de plată, precum și linkul la sniff-er, sunt codificate folosind base64.

Atacuri de phishing
În timpul analizei infrastructurii de rețea a atacatorilor, s-a constatat că, adesea, pentru a obține acces la panoul de administrare al magazinului online țintă, grupul criminal utilizează phishing. Atacatorii înregistrează un domeniu care seamănă vizual cu domeniul magazinului și apoi desfășoară o formă falsă de autentificare a panoului de administrare Magento. În cazul unui succes, atacatorii vor obține acces la panoul de administrare CMS Magento, ceea ce le permite să modifice componentele site-ului și să implementeze un sniff-er pentru a fura datele cardurilor de credit.

Infrastructură
| Domeniu | Data descoperirii/apariției |
|---|---|
| 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 |
Familia G-Analytics
Această familie de sniff-eri este utilizată pentru a fura cardurile clienților din magazinele online. Primul nume de domeniu utilizat de grup a fost înregistrat în aprilie 2016, ceea ce poate indica începerea activității grupului în mijlocul anului 2016.
În campania curentă, grupul folosește nume de domenii care imită servicii reale, cum ar fi Google Analytics și jQuery, mascând activitatea sniff-erilor cu scripturi legitime și nume de domenii asemănătoare cu cele legitime. Au fost compromise site-uri care funcționează pe baza CMS Magento.
Cum se integrează G-Analytics în codul magazinului online
Caracteristica distinctivă a acestei familii este utilizarea diferitelor metode de sustragere a informațiilor de plată ale utilizatorului. Pe lângă implementarea clasică a codului JavaScript în partea de client a site-ului, grupul criminal a aplicat, de asemenea, tehnica de inserare a codului în partea serverului site-ului, și anume a scripturilor PHP care procesează datele introduse de utilizatori. Această tehnică este periculoasă deoarece îngreunează descoperirea codului malițios de către cercetătorii externi. Specialiștii de la Group-IB au descoperit o versiune a sniffer-ului, inserat în codul PHP al site-ului, care utiliza ca gateway domeniul dittm.org.

De asemenea, a fost descoperită o versiune anterioară a sniffer-ului, care folosea același domeniu pentru a colecta datele furate dittm.org, dar această versiune era destinată deja instalării pe partea clientului al magazinului online.

Ulterior, grupul și-a schimbat tactica și a început să acorde mai multă atenție ascunderii activității malițioase și camuflării.
La începutul anului 2017, grupul a început să utilizeze domeniul jquery-js.com, care se masca sub un CDN pentru jQuery: atunci când utilizatorul accesează site-ul infractorilor, este redirecționat către site-ul legitim jquery.com.
Și în mijlocul anului 2018, grupul a adoptat numele de domeniu g-analytics.com și a început să mascheze activitățile sniffer-ului sub un serviciu legitim Google Analytics.


Analiza versiunilor
În urma analizei domeniilor utilizate pentru stocarea codului sniffer-elor, s-a stabilit că pe site se află un număr mare de versiuni, care diferă prin prezența obfuscării, precum și prin prezența sau absența codului inaccesibil, adăugat în fișier pentru a distrage atenția și a ascunde codul malițios.
În total, pe site jquery-js.com au fost identificate șase versiuni ale sniffer-elor. Datele furate sunt trimise de aceste sniffer-e la o adresă situată pe același site cu sniffer-ul însuși: 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
Domeniul mai recent g-analytics.com, utilizat de grup în atacuri din mijlocul anului 2018, servește ca depozit pentru un număr mai mare de sniffer-e. În total au fost descoperite 16 versiuni diferite ale sniffer-ului. În acest caz, gateway-ul pentru trimiterea datelor furate a fost mascat sub un link către o imagine de format 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
Monetizarea datelor furate
Grupul criminal monetizează datele furate, vânzând carduri printr-un magazin subteran special creat, care oferă servicii carder-ilor. Analiza domeniilor utilizate de atacatori a permis identificarea faptului că google-analytics.cm a fost înregistrat de același utilizator care a înregistrat domeniul cardz.vc. Domeniul cardz.vc se referă la magazinul de vânzare a cardurilor bancare furate Cardsurfs (Flysurfs), care a câștigat popularitate în timpul activității pieței subterane AlphaBay ca magazin de vânzare a cardurilor bancare furate prin intermediul sniffer-elor.

Analizând domeniul analytic.is, situat pe același server cu domeniile utilizate de sniffer-e pentru colectarea datelor furate, specialiștii de la Group-IB au descoperit un fișier conținând jurnale ale Cookie-stiller-ului, care, după cum pare, a fost ulterior abandonat de dezvoltator. Una dintre înregistrările din jurnal conținea domeniul iozoz.com, care a fost anterior utilizat într-unul dintre sniffer-ele active în 2016. Se presupune că acest domeniu a fost folosit anterior de atacator pentru a colecta carduri furate prin intermediul sniffer-ului. Acest domeniu a fost înregistrat pe o adresă de email kts241@gmail.com, care a fost, de asemenea, utilizată pentru înregistrarea domeniilor cardz.su și cardz.vc, legate de magazinul de carduri Cardsurfs.
Pe baza datelor obținute, se poate face presupunerea că familia de sniffer-e G-Analytics și magazinul subteran de vânzare a cardurilor bancare Cardsurfs sunt gestionate de aceleași persoane, iar magazinul este folosit pentru comercializarea cardurilor furate prin intermediul sniffer-ului.
Infrastructură
| Domeniu | Data descoperirii/apariției |
|---|---|
| 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 |
Familia Illum
Illum este o familie de sniffer-e utilizate pentru atacuri asupra magazinelor online ce funcționează pe baza CMS Magento. Pe lângă injectarea de cod malițios, operatorii acestui sniffer utilizează, de asemenea, forme de plată false care trimit date către porți controlate de atacatori.
În analiza infrastructurii de rețea utilizate de operatorii acestui sniffer, a fost observată o mare cantitate de scripturi malițioase, exploatări, forme de plată false, precum și o colecție de exemple de sniffer-e malițioase concurente. Pe baza informațiilor legate de datele apariției numelui de domeniu utilizat de grup, se poate presupune că începutul campaniei coincide cu sfârșitul anului 2016.
Cum se integrează Illum în codul magazinului online
Primele versiuni detectate ale sniffer-ului au fost injectate direct în codul site-ului compromis. Datele furate erau trimise la adresa cdn.illum[.]pw/records.php, iar poarta a fost codificată folosind base64.

O versiune ambalată a sniffer-ului a fost descoperită ulterior, utilizând o altă poartă — records.nstatistics[.]com/records.php.

Conform Willem de Groot, același host a fost utilizat în sniffer-ul care a fost implantat pe , aparținând partidului politic german CSU.
Analiza site-ului infractorilor
Specialiștii Group-IB au descoperit și analizat site-ul folosit de acest grup infracțional pentru stocarea uneltelor și colectarea informațiilor furate.

Printre uneltele descoperite pe serverul infractorilor, au fost găsite scripturi și exploatări pentru creșterea privilegiilor în sistemul de operare Linux: de exemplu, Linux Privilege Escalation Check Script, dezvoltat de Mike Czumak, precum și un exploit pentru CVE-2009-1185.
În mod direct pentru atacurile asupra magazinelor online, infractorii au folosit două exploatări: capabil să injecteze cod malițios în core_config_data folosind exploatarea CVE-2016-4010, exploatează o vulnerabilitate de tip RCE în pluginurile pentru CMS Magento, permițând executarea de cod arbitrar pe serverul web vulnerabil.

De asemenea, în timpul analizei serverului au fost descoperite diverse mostre de sniffer-e și formulare de plată false, folosite de infractori pentru a colecta informații de plată de pe site-urile compromise. Așa cum se poate observa din lista de mai jos, unele scripturi au fost create individual pentru fiecare site compromis, în timp ce pentru anumite CMS-uri și gateway-uri de plată a fost utilizată o soluție comună. De exemplu, scripturile segapay_standart.js și segapay_onpage.js sunt destinate injectării pe site-uri care folosesc gateway-ul de plată Sage Pay.
Lista scripturilor pentru diferite gateway-uri de plată
| Script | Gateway de plată |
|---|---|
| [.]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= |
Gazdă paymentnow[.]tk, utilizat ca poartă în script payment_forminsite.js, a fost descoperit ca subjectAltName în mai multe certificate asociate serviciului CloudFlare. Pe lângă aceasta, pe host se afla un script evil.js. Judecând după numele scriptului, acesta ar fi putut fi folosit în cadrul exploatării CVE-2016-4010, care permite injectarea de cod malițios în footer-ul site-ului gestionat de CMS Magento. Ca poartă, acest script a folosit host-ul request.requestnet[.]tk, utilizând același certificat ca și host-ul paymentnow[.]tk.
Formulare de plată false
Mai jos, în imagine, este prezentat un exemplu de formular pentru introducerea datelor cardului. Acest formular a fost folosit pentru a fi injectat pe site-ul magazinului online și pentru furtul datelor cardurilor.

Următoarea ilustrație este un exemplu de formular de plată PayPal fals, utilizat de infractori pentru a se integra pe site-uri care folosesc această metodă de plată.

Infrastructură
| Domeniu | Data descoperirii/apariției |
|---|---|
| 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 |
Familia CoffeMokko
Familia sniffer-ilor CoffeMokko, destinată furtului cardurilor bancare ale utilizatorilor magazinelor online, este utilizată cel puțin din mai 2017. Se presupune că operatorii acestei familii de snifferi sunt un grup criminal numit Group 1, descris de specialiștii RiskIQ în 2016. Atacurile au vizat site-uri gestionate de diverse CMS-uri, precum Magento, OpenCart, WordPress, osCommerce, Shopify.
Cum este integrat CoffeMokko în codul magazinului online
Operatorii acestei familii creează snifferi unici pentru fiecare infecție: fișierul sniffer-ului se află în directorul src sau js de pe serverul infractorilor. Integrarea în codul site-ului se realizează printr-un link direct către sniffer.

În codul sniffer-ului sunt codificate din start denumirile câmpurilor formularului din care trebuie furate datele. De asemenea, sniffer-ul verifică dacă utilizatorul se află pe pagina de plată, comparând lista cuvintele cheie cu adresa curentă a utilizatorului.

Unele versiuni ale sniffer-ului descoperite au fost obfuscate și conțineau un șir criptat, în care era stocat array-ul principal de resurse: exact acolo erau numele câmpurilor formularelor pentru diversele metode de plată, precum și adresa gateway-ului, la care trebuie trimise datele furate.

Informațiile de plată furate erau trimise scriptului de pe serverul infractorilor pe parcursul /savePayment/index.php или /tr/index.php. Se presupune că acest script servește pentru a trimite date de la gateway la serverul principal, care consolidează datele de la toți snifferii. Pentru a ascunde datele transmise, toată informația de plată a victimei este codificată prin base64, iar apoi au loc mai multe înlocuiri de caractere:
- caracterul „e” este înlocuit cu „:”
- caracterul „w” este înlocuit cu „+”
- caracterul „o” este înlocuit cu „%”
- caracterul „d” este înlocuit cu „#”
- caracterul „a” este înlocuit cu „-”
- caracterul „7” este înlocuit cu „^”
- caracterul „h” este înlocuit cu „_”
- caracterul „T” este înlocuit cu „@”
- caracterul „0” este înlocuit cu „/”
- caracterul „Y” este înlocuit cu „*”
Ca rezultat al înlocuirilor de caractere, datele codificate cu ajutorul base64 nu pot fi decodificate fără a efectua o inversare a transformării.
Iată cum arată un fragment de cod al unui sniffer, care nu a fost obfuscate:

Analiza infrastructurii
În campaniile anterioare, atacatorii înregistrau nume de domenii care semănau cu cele ale site-urilor legitime de comerț online. Domeniul lor putea diferi de cel legitim printr-un singur caracter sau un alt TLD. Domeniile înregistrate erau utilizate pentru a găzdui codul sniffer-ului, iar linkul către acesta era injectat în codul magazinului.
De asemenea, acest grup folosea nume de domenii care aminteau de denumirile popularilor pluginuri pentru jQuery (slickjs[.]org pentru site-urile care foloseau pluginul slick.js), gateway-uri de plată (sagecdn[.]org pentru site-urile care foloseau sistemul de plată Sage Pay).
Ulterior, grupul a început să creeze domenii, al căror nume nu avea nimic comun cu domeniul magazinului sau cu tema acestuia.

Fiecărui domeniu îi corespundea un site, pe care se crea un director /js sau /src. În acest director erau stocate scripturi sniffer: câte unul pentru fiecare nouă infectare. Sniffer-ul era injectat în codul site-ului printr-un link direct, dar în cazuri rare atacatorii modificau unul dintre fișierele site-ului și adăugau în el cod malițios.
Analiza codului
Primul algoritm de obfuscare
În unele mostre descoperite ale acestui tip de sniffer, codul era obfuscate și conținea date criptate necesare pentru funcționarea sniffer-ului: în special, adresa gateway-ului sniffer-ului, lista câmpurilor din formularul de plată, iar în unele cazuri — codul unui formular de plată fals. În codul din interiorul funcției, resursele erau criptate folosind XOR pe baza unei chei, care era transmisă ca argument al aceleași funcții.

Dezvăluind șirul cu cheia corespunzătoare, unică pentru fiecare mostră, se poate obține un șir care conține toate șirurile din codul sniffer-ului separate printr-un caracter delimitator.

Al doilea algoritm de obfuscare
În mostrele mai recente ale acestui tip de sniffer, a fost utilizat un alt mecanism de obfuscare: în acest caz, datele erau criptate folosind un algoritm propriu. Șirul care conținea datele criptate necesare pentru funcționarea sniffer-ului era transmis ca argument al funcției de decriptare.

Folosind consola browser-ului, se pot decripta datele criptate și se poate obține un array care conține resursele sniffer-ului.

Legătura cu atacurile timpurii MageCart
În timpul analizei unuia dintre domeniile folosite de grup ca poartă pentru colectarea de date furate, s-a constatat că pe acest domeniu a fost desfășurată o infrastructură pentru furtul de carduri de credit, similară cu cea utilizată de Group 1 — unul dintre primele grupuri, de specialiștii RiskIQ.
Pe gazda familiei de sniffere CoffeMokko au fost descoperite două fișiere:
- mage.js — un fișier care conține codul snifferului Group 1 cu adresa porții js-cdn.link
- mag.php — script PHP responsabil pentru colectarea datelor furate de sniffer
Содержимое файла mage.js 
De asemenea, s-a stabilit că cele mai vechi domenii folosite de grupul din spatele familiilor de sniffere CoffeMokko au fost înregistrate pe 17 mai 2017:
- link-js[.]link
- info-js[.]link
- track-js[.]link
- map-js[.]link
- smart-js[.]link
Formatul acestor nume de domenii corespunde cu numele de domenii ale Group 1, care au fost utilizate în atacurile din 2016.
Pe baza faptelor descoperite, se poate face o presupunere că între operatorii snifferelor CoffeMokko și grupul criminal Group 1 există o legătură. Se presupune că operatorii CoffeMokko ar fi putut împrumuta instrumentele și software-ul pentru furtul de carduri de la predecesorii lor. Totuși, este mai probabil ca grupul criminal din spatele utilizării snifferelor familiei CoffeMokko să fie aceleași persoane care au efectuat atacurile în cadrul activității Group 1. După publicarea primului raport privind activitatea grupului criminal, toate numele lor de domenii au fost blocate, iar instrumentele au fost studiate și descrise în detaliu. Grupul a fost obligat să facă o pauză, să-și îmbunătățească instrumentele interne și să rescrie codul snifferelor pentru a-și continua atacurile și a rămâne neobservați.
Infrastructură
| Domeniu | Data descoperirii/apariției |
|---|---|
| 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 |
Sursa: habr.com
