
Bijna iedereen van ons maakt gebruik van online winkels, en dat betekent dat we vroeg of laat het risico lopen slachtoffer te worden van JavaScript-sniffers — speciale code die kwaadwillenden op een site injecteren om gegevens van creditcards, adressen, gebruikersnamen en wachtwoorden te stelen.
Bijna 400.000 gebruikers van de website en mobiele applicatie van British Airways zijn al slachtoffer geworden van deze sniffers, evenals bezoekers van de Britse website van sportgigant FILA en de Amerikaanse ticketdistributeur Ticketmaster. Betalingssystemen zoals PayPal, Chase Paymenttech, USAePay en Moneris zijn ook geïnfecteerd.
Analist bij Threat Intelligence Group-IB Viktor Okorokov vertelt hoe sniffers in de code van een website worden geïnjecteerd om betalingsinformatie te stelen en over welke CRM-systemen ze zich richten.

„Verborgen bedreiging“
Het is zo gegaan dat JS-sniffers lange tijd onder de radar van antivirusanalisten zijn gebleven, terwijl banken en betalingssystemen ze niet als een ernstige dreiging beschouwden. En dat is volkomen onterecht. Experts van Group-IB 2440 geïnfecteerde online winkels, waarvan de bezoekers — in totaal ongeveer 1,5 miljoen mensen per dag — het risico liepen op compromittering. Onder de slachtoffers bevinden zich niet alleen gebruikers, maar ook online winkels, betalingssystemen en banken die gecompromitteerde kaarten hebben uitgegeven.
Group-IB was de eerste studie naar de darknet-markt van sniffers, hun infrastructuur en de monetisatie-methoden die hun makers miljoenen dollars opleveren. We hebben 38 families van sniffers ontdekt, waarvan er slechts 12 eerder bekend waren bij onderzoekers.
Laten we gedetailleerd stilstaan bij vier families van sniffers die tijdens het onderzoek zijn bestudeerd.
Familie ReactGet
Sniffers van de ReactGet-familie worden gebruikt voor het stelen van creditcardgegevens op online winkels. Een sniffer kan werken met een groot aantal verschillende betaalsystemen die op de site worden gebruikt: één waarde van de parameter komt overeen met één betaalsysteem, terwijl afzonderlijke ontdekte versies van de sniffer kunnen worden gebruikt voor het stelen van inloggegevens, evenals voor het stelen van creditcardgegevens uit betalingsformulieren van meerdere betaalsystemen tegelijk, zoals de zogenaamde universele sniffer. Het is vastgesteld dat aanvallers in sommige gevallen phishing-aanvallen uitvoeren op beheerders van online winkels om toegang te krijgen tot het beheerpaneel van de site.
De campagne met dit soort sniffers begon in mei 2017, waarbij sites onder beheer van CMS en platformen zoals Magento, Bigcommerce, Shopify werden aangevallen.
Hoe ReactGet in de code van een online winkel wordt opgenomen
Naast de ‘klassieke’ manier van het inbedden van een script via een link, maken de operators van sniffers uit de ReactGet-familie gebruik van een speciale techniek: met behulp van JavaScript-code wordt gecontroleerd of het huidige adres waar de gebruiker zich bevindt aan bepaalde criteria voldoet. De malware code wordt alleen uitgevoerd als de huidige URL een substring bevat. checkout of onestepcheckout, onepage/, out/onepag, checkout/one, ckout/one. Op deze manier wordt de sniffercode uitgevoerd op het moment dat de gebruiker naar de kassa gaat en betaling informatie in het formulier op de site invoert.

Deze sniffer gebruikt een ongewone techniek. De betalings- en persoonlijke gegevens van het slachtoffer worden samen verzameld, gecodeerd met behulp van base64, en de verkregen string wordt vervolgens als parameter gebruikt voor het verzenden van een verzoek naar de site van de aanvallers. Meestal imiteert het pad naar de gateway een JavaScript-bestand, bijvoorbeeld resp.js, data.js en dergelijke, maar ook links naar afbeeldingsbestanden worden gebruikt. GIF en JPG. Het bijzondere is dat de sniffer een afbeeldingsobject van 1 bij 1 pixel creëert en de eerder verkregen link als parameter gebruikt. src afbeeldingen. Dit betekent dat zo'n verzoek in het verkeer voor de gebruiker eruit zal zien als een verzoek om een gewone afbeelding. Een soortgelijke techniek werd gebruikt in de sniffers van het ImageID-familie. Bovendien wordt de techniek met een afbeelding van 1 bij 1 pixel in veel legitieme online-analysetools toegepast, wat de gebruiker ook kan misleiden.

Versie-analyse
Analyse van actieve domeinen die door ReactGet-sniffers worden gebruikt, heeft veel verschillende versies van deze familie sniffers aan het licht gebracht. De versies verschillen in de aanwezigheid of afwezigheid van obfuscatie, en bovendien is elke sniffer bedoeld voor een specifiek betalingssysteem dat betalingen met creditcards voor online winkels verwerkt. Door de waarde van de parameter die overeenkomt met het versienummer door te nemen, heeft het Group-IB-team een volledige lijst van beschikbare variaties van sniffers verkregen, en door de veldnamen van formulieren die elke sniffer in de paginacode zoekt, zijn de betalingssysteemdoelen van de sniffer bepaald.
Lijst van sniffers en de bijbehorende betalingssysteem
| URL van de sniffer | Betaalsysteem |
|---|---|
| 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 |
Wachtwoord sniffer
Een van de voordelen van JavaScript-sniffers die aan de clientzijde van de site werken, is de veelzijdigheid: de ingebedde schadelijke code is in staat om gegevens van elk type te stelen, of het nu gaat om betalingsgegevens of de gebruikersnaam en wachtwoord van een gebruikersaccount. Specialisten van Group-IB hebben een monster van een sniffer ontdekt die behoort tot de ReactGet-familie, ontworpen om e-mailadressen en wachtwoorden van gebruikers van de site te stelen.

Overlap met de ImageID-sniffer
Tijdens de analyse van een van de geïnfecteerde winkels werd vastgesteld dat de website twee keer was geïnfecteerd: naast de schadelijke code van de ReactGet-sniffer werd ook code van de ImageID-sniffer aangetroffen. Deze overlap kan een aanwijzing zijn dat de operators achter het gebruik van beide sniffers vergelijkbare technieken gebruiken om schadelijke code in te voeren.

Universele sniffer
Tijdens de analyse van een van de domeinnamen die gerelateerd zijn aan de infrastructuur van de ReactGet-sniffers, werd vastgesteld dat dezelfde gebruiker drie andere domeinnamen had geregistreerd. Deze drie domeinen imiteerden domeinen van daadwerkelijk bestaande websites en werden eerder gebruikt voor het hosten van sniffers. Bij de analyse van de code van de drie legitieme websites werd een onbekende sniffer ontdekt, en verdere analyse toonde aan dat dit een geavanceerde versie was van de ReactGet-sniffer. Alle eerder getrackte versies van sniffers uit deze familie waren gericht op één specifieke betalingsmethode, wat betekende dat voor elke betalingsmethode een speciale versie van de sniffer nodig was. In dit geval werd echter een universele versie van de sniffer ontdekt die in staat was om gegevens te stelen uit formulieren gerelateerd aan 15 verschillende betalingssystemen en e-commerce-modules voor het uitvoeren van online betalingen.
In het begin zocht de sniffer naar basisformuliervelden die persoonlijke informatie van het slachtoffer bevatten: volledige naam, fysiek adres, telefoonnummer.

Vervolgens zocht de sniffer naar meer dan 15 verschillende prefixen die corresponderen met verschillende betalingssystemen en modules voor online betalingen.

Daarna werden de persoonlijke gegevens van het slachtoffer en de betalingsinformatie samengevoegd en verzonden naar een door de aanvaller gecontroleerde website: in dit specifieke geval werden twee versies van de universele ReactGet-sniffer aangetroffen op twee verschillende gehackte websites. Beide versies verzonden echter de gestolen gegevens naar dezelfde gehackte website. zoobashop.com.

De analyse van de prefixen die door de sniffer werden gebruikt voor het zoeken naar velden met betalingsinformatie van het slachtoffer, maakte het mogelijk om vast te stellen dat dit monster van de sniffer gericht was op de volgende betalingssystemen:
- Authorize.Net
- Verisign
- First Data
- USAePay
- Stripe
- PayPal
- ANZ eGate
- Braintree
- DataCash (MasterCard)
- Realex Payments
- PsiGate
- Heartland Payment Systems
Welke hulpmiddelen worden gebruikt voor het stelen van betalingsinformatie
Het eerste hulpmiddel dat werd ontdekt tijdens de analyse van de infrastructuur van de aanvallers, is bedoeld voor het obfusceren van kwaadaardige scripts die verantwoordelijk zijn voor het stelen van bankkaarten. Op een van de hosts van de aanvallers werd een bash-script aangetroffen dat gebruikmaakt van de CLI van het project voor de automatisering van de obfuscering van de code van de sniffers.
![]()
De tweede ontdekte tool is bedoeld voor het genereren van de code die verantwoordelijk is voor het laden van de hoofd-sniffer. Deze tool genereert JavaScript-code die controleert of de gebruiker zich op de betalingspagina bevindt door te zoeken naar specifieke teksten in het huidige adres van de gebruiker, checkout, winkelwagentje en zo verder, en als het resultaat positief is, laadt de code de hoofd-sniffer vanaf de servers van de aanvallers. Om schadelijke activiteiten te verbergen, zijn alle teksten, inclusief testteksten om de betalingspagina te identificeren, evenals de link naar de sniffer, gecodeerd met behulp van base64.

Phishingaanvallen
Tijdens de analyse van de netwerkstructuur van de aanvallers werd vastgesteld dat ze vaak phishing gebruiken om toegang te krijgen tot het beheerderspaneel van de doelgerichte online winkel. De aanvallers registreren een domein dat visueel lijkt op het domein van de winkel, en zetten vervolgens een vervalste inlogpagina voor het Magento beheerderspaneel op. Bij een succesvolle aanval krijgen de aanvallers toegang tot het CMS Magento-beheerderspaneel, wat hen in staat stelt om de componenten van de site te bewerken en een sniffer te integreren om kredietkaartgegevens te stelen.

Infrastructuur
| Domein | Datum van ontdekking/v verschijning |
|---|---|
| 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 |
Familie G-Analytics
Deze familie van sniffers wordt gebruikt om de kaarten van klanten van online winkels te stelen. De allereerste domeinnaam die door de groep werd geregistreerd, dateert uit april 2016, wat kan wijzen op het begin van de activiteiten van de groep in het midden van 2016.
In de huidige campagne gebruikt de groep domeinnamen die echte diensten imiteren, zoals Google Analytics en jQuery, waardoor de activiteiten van de sniffers worden gemaskeerd door legitieme scripts en domeinnamen die op legitieme lijken. Websites die draaien op CMS Magento zijn aangevallen.
Hoe G-Analytics wordt geïntegreerd in de code van de online winkel
Kenmerkend voor deze familie is het gebruik van verschillende methoden om de betaalinformatie van de gebruiker te stelen. Naast de klassieke injectie van JavaScript-code in de clientzijde van de website, maakte de criminele groep ook gebruik van de techniek van code-injectie in de serverzijde van de website, met name PHP-scripts die de door de gebruiker ingevoerde gegevens verwerken. Deze techniek is gevaarlijk omdat het de detectie van kwaadaardige code door externe onderzoekers bemoeilijkt. Specialisten van Group-IB ontdekten een versie van de sniffer die in de PHP-code van de website was geïnjecteerd, en die als gateway de domein dittm.org.

ook werd een vroegere versie van de sniffer gevonden, die voor het verzamelen van gestolen gegevens dezelfde domein gebruikte dittm.org, maar deze versie is bedoeld voor installatie aan de clientzijde van de online winkel.

Later veranderde de groep zijn tactiek en begon meer aandacht te besteden aan het verbergen van kwaadaardige activiteiten en camouflage.
Begin 2017 begon de groep het domein jquery-js.com, dat zich voordoet als een CDN voor jQuery: wanneer gebruikers de site van de misdadigers bezoeken, worden ze omgeleid naar de legitieme site jquery.com.
En halfweg 2018 nam de groep de domeinnaam g-analytics.com aan en begon de activiteiten van de sniffer te camoufleren onder de legitieme service van Google Analytics.


Versie-analyse
Bij de analyse van domeinen die werden gebruikt om sniffer-code op te slaan, bleek dat de site een groot aantal versies herbergde, die varieerden op basis van aanwezigheid van obfuscatie, evenals de aanwezigheid of afwezigheid van onbereikbare code die aan het bestand was toegevoegd om af te leiden en kwaadaardige code te verbergen.
In totaal zijn er op de site jquery-js.com zes versies van sniffer aangetroffen. De gestolen gegevens van deze sniffers worden verzonden naar een adres dat zich op dezelfde site bevindt als de sniffer zelf: 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
Een latere domein g-analytics.com, gebruikt door de groep in aanvallen sinds midden 2018, dient als opslagplaats voor een groter aantal sniffers. In totaal zijn er 16 verschillende versies van de sniffer ontdekt. In dit geval was de gateway voor het verzenden van gestolen gegevens gecamoufleerd als een link naar een afbeelding in formaat 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
Monetisatie van gestolen gegevens
De criminele groep maakt gebruik van de gestolen gegevens door kaarten te verkopen via een speciaal opgerichte ondergrondse winkel die diensten verleent aan carders. Analyse van de domeinen die door de aanvallers worden gebruikt, heeft het mogelijk gemaakt om vast te stellen dat google-analytics.cm werd geregistreerd door dezelfde gebruiker als het domein cardz.vc. Domein cardz.vc verwijst naar de winkel voor gestolen bankkaarten Cardsurfs (Flysurfs), die populair werd in de tijd dat de ondergrondse marktplaats AlphaBay actief was als een winkel voor de verkoop van bankkaarten die met een sniffer waren gestolen.

Bij het analyseren van het domein analytic.is, gelegen op dezelfde server als de domeinen die door sniffers worden gebruikt om gestolen gegevens te verzamelen, ontdekten specialisten van Group-IB een bestand dat logboeken van een Cookie-stiller bevatte, dat blijkbaar later door de ontwikkelaar was verlaten. Een van de vermeldingen in het logboek bevatte het domein iozoz.com, dat eerder was gebruikt in een van de sniffers die actief waren in 2016. Het wordt verondersteld dat dit domein eerder door de aanvaller werd gebruikt om gestolen kaarten met een sniffer te verzamelen. Dit domein was geregistreerd op het e-mailadres kts241@gmail.com, dat ook was gebruikt voor de registratie van de domeinen cardz.su en cardz.vc, die verband houden met de carding-winkel Cardsurfs.
Op basis van de verkregen gegevens kan men veronderstellen dat de snifferfamilie G-Analytics en de ondergrondse winkel voor de verkoop van bankkaarten Cardsurfs door dezelfde personen worden beheerd, en dat de winkel wordt gebruikt voor de verkoop van bankkaarten die met een sniffer zijn gestolen.
Infrastructuur
| Domein | Datum van ontdekking/v verschijning |
|---|---|
| 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 |
Familie Illum
Illum is een familie van sniffers die wordt gebruikt voor aanvallen op online winkels die draaien op het CMS Magento. Naast het injecteren van kwaadaardige code gebruiken de operators van deze sniffer ook volledige valse betaalformulieren die gegevens naar door de aanvaller gecontroleerde gateways sturen.
Bij het analyseren van de netwerkstructuur die door de operators van deze sniffer wordt gebruikt, werd een groot aantal kwaadaardige scripts, exploits, valse betalingsformulieren en een verzameling voorbeelden van kwaadaardige concurrent-sniffers opgemerkt. Op basis van de informatie over de data waarop de domeinnamen die door de groep worden gebruikt, verschenen, kan worden aangenomen dat het begin van de campagne rond het einde van 2016 ligt.
Hoe Illum wordt geïmplementeerd in de code van online winkels
De eerste ontdekte versies van de sniffer werden rechtstreeks in de code van de gecompromitteerde site ingebed. De gestolen gegevens werden verzonden naar cdn.illum[.]pw/records.php, terwijl de gateway was gecodeerd met behulp van base64.

Later, a packaged version of the sniffer was discovered using a different gate - records.nstatistics[.]com/records.php.

Volgens Willem de Groot, the same host was used in the sniffer that was deployed on , owned by the German political party CSU.
Analysis of the attackers' website
Group-IB specialists discovered and analyzed a website used by this criminal group for storing tools and collecting stolen information.

Among the tools found on the attackers' server were scripts and exploits for privilege escalation in Linux OS: for example, the Linux Privilege Escalation Check Script, developed by Mike Czumak, as well as an exploit for CVE-2009-1185.
Specifically for attacks on online stores, the attackers used two exploits: is capable of injecting malicious code into core_config_data through the exploitation of CVE-2016-4010, exploits an RCE vulnerability in plugins for the CMS Magento, allowing arbitrary code execution on the vulnerable web server.

Also, during the server analysis, various samples of sniffers and fake payment forms used by the attackers to collect payment information from compromised sites were found. As noted in the list below, some scripts were created individually for each compromised site, while a universal solution was used for certain CMS and payment gateways. For example, the scripts segapay_standart.js en segapay_onpage.js are intended for injection into websites using the Sage Pay payment gateway.
List of scripts for various payment gateways
| Script | Payment gateway |
|---|---|
| [.]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, used as a gate in the script payment_forminsite.js, was discovered as subjectAltName in several certificates related to the CloudFlare service. In addition, a script evil.js. Based on the script's name, it could have been used in the exploitation of CVE-2016-4010, allowing malicious code to be injected into the footer of a website running CMS Magento. As a gate, this script was used by the host request.requestnet[.]tk, which uses the same certificate as the host paymentnow[.]tk.
Fake payment forms
Below is an example of a card data entry form. This form was used to inject into the online store's website and steal card data.

In de volgende afbeelding is een voorbeeld van een valse betalingsformulier van PayPal te zien, die door kwaadwillenden is gebruikt om zich op websites met deze betaalmethode te infiltreren.

Infrastructuur
| Domein | Datum van ontdekking/v verschijning |
|---|---|
| cdn.illum.pw | 27/11/2016 |
| records.nstatistics.com | 06/09/2018 |
| request.payrightnow.cf | 25/05/2018 |
| paymentnow.tk | 16/07/2017 |
| payment-line.tk | 01/03/2018 |
| paymentpal.cf | 04/09/2017 |
| requestnet.tk | 28/06/2017 |
CoffeMokko-familie
De CoffeMokko-sniffers, die zijn ontworpen voor het stelen van bankkaartgegevens van gebruikers van webwinkels, worden sinds mei 2017 minimaal gebruikt. Naar verluidt zijn de operators van deze snifferfamilie een criminele groep genaamd Group 1, die in 2016 door RiskIQ-specialisten is beschreven. Aanvallen hebben zich gericht op sites die worden beheerd door CMS zoals Magento, OpenCart, WordPress, osCommerce, Shopify.
Hoe CoffeMokko in de code van online winkels wordt geïnjecteerd
De operators van deze familie creëren unieke sniffers voor elke infectie: het snifferbestand bevindt zich in de directory src of js op de servers van de aanvallers. De injectie in de websitecode gebeurt via een directe link naar de sniffer.

In de code van de sniffer zijn de veldnamen van het formulier die moeten worden gestolen, hard gecodeerd. Ook controleert de sniffer of de gebruiker zich op de betalingspagina bevindt door de lijst met sleutelwoorden te vergelijken met het huidige adres van de gebruiker.

Sommige ontdekte versies van de sniffer waren obfuscated en bevatten een versleutelde string, waarin de belangrijkste array van bronnen werd opgeslagen: hierin stonden de veldnamen voor verschillende betalingssystemen, evenals het adres van de gate waarheen de gestolen gegevens moesten worden verzonden.

De gestolen betalingsinformatie werd naar een script op de servers van de aanvallers gestuurd via het pad /savePayment/index.php или /tr/index.php. Naar verluidt dient dit script voor het verzenden van gegevens van de gate naar de hoofdserver, die gegevens van alle sniffers consolideert. Om de verzonden gegevens te verbergen, worden alle betalingsinformatie van het slachtoffer gecodeerd met behulp van base64, waarna verschillende substituties van symbolen plaatsvinden:
- het symbool 'e' wordt vervangen door ':'
- het symbool 'w' wordt vervangen door '+'
- het symbool 'o' wordt vervangen door '%'
- het symbool 'd' wordt vervangen door '#'
- het symbool 'a' wordt vervangen door '-'
- het symbool '7' wordt vervangen door '^'
- het symbool 'h' wordt vervangen door '_'
- het symbool 'T' wordt vervangen door '@'
- het symbool '0' wordt vervangen door '/'
- het symbool 'Y' wordt vervangen door '*'
Als gevolg van de symboolvervanging is de gecodeerde data, verkregen met behulp van base64 onmogelijk te decoderen zonder een omgekeerde transformatie uit te voeren.
Dit is een fragment van de code van een sniffer, die niet geobfusceerd is:

Infrastructuuranalyse
In eerdere campagnes registreerden kwaadwillenden domeinnamen die leken op de domeinen van legitieme online winkels. Hun domein kon afwijken van het legitieme enkel door één teken of een andere TLD. Geregistreerde domeinen werden gebruikt om de sniffercode op te slaan, waarvan de link werd geïntegreerd in de code van de winkel.
Deze groep gebruikte ook domeinnamen die leken op de namen van populaire jQuery-plugins (slickjs[.]org voor websites die de plugin gebruiken slick.js), betalingsgateways (sagecdn[.]org voor websites die het betalingsysteem Sage Pay gebruiken).
Later begon de groep domeinen te creëren waarvan de naam niets te maken had met het domein van de winkel of de thematiek ervan.

Elke domein had een website, waarop een directory werd gemaakt /js of /src. In deze directory werden de scripts van de sniffers opgeslagen: één sniffer voor elke nieuwe besmetting. De sniffer werd in de code van de website geïntegreerd via een directe link, maar in zeldzame gevallen modificeerden de kwaadwillenden een van de bestanden van de website en voegden er schadelijke code aan toe.
Code-analyse
De eerste obfusceringsalgoritme
In sommige van de aangetroffen monsters van sniffers uit deze familie was de code geobfusceerd en bevatte deze versleutelde gegevens die noodzakelijk waren voor de werking van de sniffer: in het bijzonder, het adres van de sniffergateway, de lijst met velden van het betalingsformulier, en in sommige gevallen de code van het vervalste betalingsformulier. In de code binnen de functie waren de middelen versleuteld met behulp van XOR met een sleutel die als argument aan dezelfde functie werd doorgegeven.

Door de string met de bijbehorende sleutel, uniek voor elk monster, te ontcijferen, kan je een string krijgen die alle strings uit de sniffercode bevat, gescheiden door een scheidingsteken.

De tweede obfusceringsalgoritme
In latere monsters van deze sniffers werd een ander obfusceringsmechanisme gebruikt: in dit geval waren de gegevens versleuteld met behulp van een zelfgeschreven algoritme. De string die de versleutelde gegevens bevatte die nodig waren voor de werking van de sniffer, werd als argument van de ontcijferfunctie doorgegeven.

Met de browserconsole kunnen de versleutelde gegevens worden ontcijferd en kan een array worden verkregen die de middelen van de sniffer bevat.

Relatie met eerdere MageCart-aanvallen
Tijdens de analyse van een van de domeinen die door de groep werden gebruikt als poort voor het verzamelen van gestolen gegevens, werd vastgesteld dat op dit domein een infrastructuur is opgezet voor het stelen van creditcardgegevens, gelijk aan die welke werd gebruikt door Group 1 — een van de eerste groepen, door de specialisten van RiskIQ.
Op de host van de CoffeMokko-sniffers zijn twee bestanden aangetroffen:
- mage.js — een bestand met de code van de Group 1-sniffer met het poortadres js-cdn.link
- mag.php — een PHP-script dat verantwoordelijk is voor het verzamelen van door de sniffer gestolen gegevens
Содержимое файла mage.js 
Er werd ook vastgesteld dat de vroegste domeinen die door de groep achter de CoffeMokko-sniffers werden gebruikt, zijn geregistreerd op 17 mei 2017:
- link-js[.]link
- info-js[.]link
- track-js[.]link
- map-js[.]link
- smart-js[.]link
Het formaat van deze domeinnamen komt overeen met de domeinnamen van Group 1 die werden gebruikt bij de aanvallen in 2016.
Op basis van de gevonden feiten kan worden vermoed dat er een verbinding bestaat tussen de operators van de CoffeMokko-sniffers en de criminele groep Group 1. Vermoedelijk hebben de operators van CoffeMokko tools en software voor creditcarddiefstal van hun voorgangers geleend. Het is echter waarschijnlijker dat de criminele groep achter het gebruik van de CoffeMokko-sniffers dezelfde mensen zijn die de aanvallen hebben uitgevoerd als onderdeel van de activiteiten van Group 1. Na de publicatie van het eerste rapport over de activiteiten van de criminele groep zijn al hun domeinnamen geblokkeerd en zijn de tools grondig bestudeerd en beschreven. De groep was gedwongen een pauze te nemen om hun interne tools te verbeteren en de code van de sniffers opnieuw te schrijven om hun aanvallen voort te zetten en onopgemerkt te blijven.
Infrastructuur
| Domein | Datum van ontdekking/v verschijning |
|---|---|
| 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 |
Bron: habr.com
