Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker

Næsten hver enkelt af os bruger onlinebutikkernes tjenester, hvilket betyder, at vi før eller siden risikerer at blive ofre for JavaScript-sniffer - en særlig kode, som angribere injicerer på et websted for at stjæle bankkortdata, adresser, brugernavne og adgangskoder .

Næsten 400 brugere af British Airways hjemmeside og mobilapp er allerede blevet ramt af sniffere, samt besøgende på den britiske sportsgigant FILA hjemmeside og den amerikanske billetdistributør Ticketmaster. PayPal, Chase Paymenttech, USAePay, Moneris - disse og mange andre betalingssystemer er blevet inficeret.

Threat Intelligence Group-IB-analytiker Viktor Okorokov taler om, hvordan sniffere infiltrerer hjemmesidekode og stjæler betalingsoplysninger, samt hvilke CRM'er de angriber.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker

"Skjult trussel"

Det skete sådan, at JS-sniffere i lang tid forblev ude af syne af antivirusanalytikere, og banker og betalingssystemer så dem ikke som en alvorlig trussel. Og helt forgæves. Group-IB Eksperter analyseret 2440 inficerede netbutikker, hvis besøgende - i alt omkring 1,5 millioner mennesker om dagen - var i fare for at gå på kompromis. Blandt ofrene er ikke kun brugere, men også netbutikker, betalingssystemer og banker, der har udstedt kompromitterede kort.

Rapport Group-IB blev den første undersøgelse af darknet-markedet for sniffere, deres infrastruktur og måder at tjene penge på, hvilket indbragte deres skabere millioner af dollars. Vi identificerede 38 snifferfamilier, hvoraf kun 12 tidligere var kendt af forskere.

Lad os dvæle i detaljer ved de fire familier af sniffere, der blev undersøgt i løbet af undersøgelsen.

ReactGet familie

Sniffere fra ReactGet-familien bruges til at stjæle bankkortdata på online-shoppingsider. Snifferen kan arbejde med et stort antal forskellige betalingssystemer, der bruges på webstedet: en parameterværdi svarer til et betalingssystem, og individuelle detekterede versioner af snifferen kan bruges til at stjæle legitimationsoplysninger samt til at stjæle bankkortdata fra betalingsformer af flere betalingssystemer på én gang, som den såkaldte universal sniffer. Det blev konstateret, at angribere i nogle tilfælde udfører phishing-angreb på onlinebutiksadministratorer for at få adgang til webstedets administrative panel.

Kampagnen med denne familie af sniffere begyndte i maj 2017. Websteder, der kører CMS og platforme Magento, Bigcommerce, Shopify blev angrebet.

Hvordan ReactGet er indlejret i koden for en online butik

Ud over den "klassiske" script-injektion via link, bruger ReactGet-familiens sniffer-operatører en speciel teknik: ved hjælp af JavaScript-kode tjekker den, om den aktuelle adresse, hvor brugeren befinder sig, opfylder visse kriterier. Den ondsindede kode vil kun køre, hvis den aktuelle URL indeholder en understreng gå til kassen eller et trins udtjekning, én side/, ud/onepag, kasse/en, ckout/en. Således vil snifferkoden blive eksekveret præcis i det øjeblik, hvor brugeren fortsætter med at betale for køb og indtaster betalingsoplysninger i formularen på siden.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker
Denne sniffer bruger en ikke-standard teknik. Offerets betalings- og personlige data indsamles sammen, kodet vha base64, og derefter bruges den resulterende streng som en parameter til at sende en anmodning til det ondsindede websted. Oftest efterligner stien til porten f.eks. en JavaScript-fil hhv.js, data.js og så videre, men links til billedfiler bruges også, GIF и JPG. Det særegne er, at snifferen opretter et billedobjekt med en størrelse på 1 gange 1 pixel og bruger det tidligere opnåede link som en parameter src Billeder. Det vil sige, at for brugeren vil en sådan anmodning i trafikken ligne en anmodning om et almindeligt billede. En lignende teknik blev brugt i ImageID-familien af ​​sniffere. Derudover bruges 1x1 pixel billedteknikken i mange legitime online analysescripts, som også kan vildlede brugeren.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker

Versionsanalyse

En analyse af de aktive domæner brugt af ReactGet sniffer operatører afslørede mange forskellige versioner af denne familie af sniffere. Versioner adskiller sig i tilstedeværelsen eller fraværet af sløring, og desuden er hver sniffer designet til et specifikt betalingssystem, der behandler bankkortbetalinger til netbutikker. Efter at have sorteret værdien af ​​parameteren, der svarer til versionsnummeret, modtog Group-IB-specialister en komplet liste over tilgængelige sniffervarianter, og ved hjælp af navnene på formularfelterne, som hver sniffer kigger efter i sidekoden, bestemte de betalingssystemerne at snifferen retter sig mod.

Liste over sniffere og deres tilsvarende betalingssystemer

Sniffer URL Betalingssystem
reactjsapi.com/react.js Authorize.Net
ajaxstatic.com/api.js?v=2.1.1 Cardsave
ajaxstatic.com/api.js?v=2.1.2 Authorize.Net
ajaxstatic.com/api.js?v=2.1.3 Authorize.Net
ajaxstatic.com/api.js?v=2.1.4 eWAY Hurtig
ajaxstatic.com/api.js?v=2.1.5 Authorize.Net
ajaxstatic.com/api.js?v=2.1.6 Adyen
ajaxstatic.com/api.js?v=2.1.7 USAePay
ajaxstatic.com/api.js?v=2.1.9 Authorize.Net
apitstatus.com/api.js?v=2.1.1 USAePay
apitstatus.com/api.js?v=2.1.2 Authorize.Net
apitstatus.com/api.js?v=2.1.3 Moneris
apitstatus.com/api.js?v=2.1.5 USAePay
apitstatus.com/api.js?v=2.1.6 PayPal
apitstatus.com/api.js?v=2.1.7 Sage Pay
apitstatus.com/api.js?v=2.1.8 Verisign
apitstatus.com/api.js?v=2.1.9 PayPal
apitstatus.com/api.js?v=2.3.0 Stribe
apitstatus.com/api.js?v=3.0.2 REALEX
apitstatus.com/api.js?v=3.0.3 PayPal
apitstatus.com/api.js?v=3.0.4 LinkPoint
apitstatus.com/api.js?v=3.0.5 PayPal
apitstatus.com/api.js?v=3.0.7 PayPal
apitstatus.com/api.js?v=3.0.8 datacash
apitstatus.com/api.js?v=3.0.9 PayPal
asianfoodgracer.com/footer.js Authorize.Net
billgetstatus.com/api.js?v=1.2 Authorize.Net
billgetstatus.com/api.js?v=1.3 Authorize.Net
billgetstatus.com/api.js?v=1.4 Authorize.Net
billgetstatus.com/api.js?v=1.5 Verisign
billgetstatus.com/api.js?v=1.6 Authorize.Net
billgetstatus.com/api.js?v=1.7 Moneris
billgetstatus.com/api.js?v=1.8 Sage Pay
billgetstatus.com/api.js?v=2.0 USAePay
billgetstatus.com/react.js Authorize.Net
cloudodesc.com/gtm.js?v=1.2 Authorize.Net
cloudodesc.com/gtm.js?v=1.3 ANZ eGate
cloudodesc.com/gtm.js?v=2.3 Authorize.Net
cloudodesc.com/gtm.js?v=2.4 Moneris
cloudodesc.com/gtm.js?v=2.6 Sage Pay
cloudodesc.com/gtm.js?v=2.7 Sage Pay
cloudodesc.com/gtm.js?v=2.8 Chase Paymentech
cloudodesc.com/gtm.js?v=2.9 Authorize.Net
cloudodesc.com/gtm.js?v=2.91 Adyen
cloudodesc.com/gtm.js?v=2.92 PsiGate
cloudodesc.com/gtm.js?v=2.93 Cyberkilde
cloudodesc.com/gtm.js?v=2.95 ANZ eGate
cloudodesc.com/gtm.js?v=2.97 REALEX
geisseie.com/gs.js USAePay
gtmproc.com/age.js Authorize.Net
gtmproc.com/gtm.js?v=1.2 Authorize.Net
gtmproc.com/gtm.js?v=1.3 ANZ eGate
gtmproc.com/gtm.js?v=1.5 PayPal
gtmproc.com/gtm.js?v=1.6 PayPal
gtmproc.com/gtm.js?v=1.7 REALEX
livecheckpay.com/api.js?v=2.0 Sage Pay
livecheckpay.com/api.js?v=2.1 PayPal
livecheckpay.com/api.js?v=2.2 Verisign
livecheckpay.com/api.js?v=2.3 Authorize.Net
livecheckpay.com/api.js?v=2.4 Verisign
livecheckpay.com/react.js Authorize.Net
livegetpay.com/pay.js?v=2.1.2 ANZ eGate
livegetpay.com/pay.js?v=2.1.3 PayPal
livegetpay.com/pay.js?v=2.1.5 Cyberkilde
livegetpay.com/pay.js?v=2.1.7 Authorize.Net
livegetpay.com/pay.js?v=2.1.8 Sage Pay
livegetpay.com/pay.js?v=2.1.9 REALEX
livegetpay.com/pay.js?v=2.2.0 Cyberkilde
livegetpay.com/pay.js?v=2.2.1 PayPal
livegetpay.com/pay.js?v=2.2.2 PayPal
livegetpay.com/pay.js?v=2.2.3 PayPal
livegetpay.com/pay.js?v=2.2.4 Verisign
livegetpay.com/pay.js?v=2.2.5 eWAY Hurtig
livegetpay.com/pay.js?v=2.2.7 Sage Pay
livegetpay.com/pay.js?v=2.2.8 Sage Pay
livegetpay.com/pay.js?v=2.2.9 Verisign
livegetpay.com/pay.js?v=2.3.0 Authorize.Net
livegetpay.com/pay.js?v=2.3.1 Authorize.Net
livegetpay.com/pay.js?v=2.3.2 Første globale datagateway
livegetpay.com/pay.js?v=2.3.3 Authorize.Net
livegetpay.com/pay.js?v=2.3.4 Authorize.Net
livegetpay.com/pay.js?v=2.3.5 Moneris
livegetpay.com/pay.js?v=2.3.6 Authorize.Net
livegetpay.com/pay.js?v=2.3.8 PayPal
livegetpay.com/pay.js?v=2.4.0 Verisign
maxstatics.com/site.js USAePay
mediapack.info/track.js?d=funlove.com USAePay
mediapack.info/track.js?d=qbedding.com Authorize.Net
mediapack.info/track.js?d=vseyewear.com Verisign
mxcounter.com/c.js?v=1.2 PayPal
mxcounter.com/c.js?v=1.3 Authorize.Net
mxcounter.com/c.js?v=1.4 Stribe
mxcounter.com/c.js?v=1.6 Authorize.Net
mxcounter.com/c.js?v=1.7 eWAY Hurtig
mxcounter.com/c.js?v=1.8 Sage Pay
mxcounter.com/c.js?v=2.0 Authorize.Net
mxcounter.com/c.js?v=2.1 Braintree
mxcounter.com/c.js?v=2.10 Braintree
mxcounter.com/c.js?v=2.2 PayPal
mxcounter.com/c.js?v=2.3 Sage Pay
mxcounter.com/c.js?v=2.31 Sage Pay
mxcounter.com/c.js?v=2.32 Authorize.Net
mxcounter.com/c.js?v=2.33 PayPal
mxcounter.com/c.js?v=2.34 Authorize.Net
mxcounter.com/c.js?v=2.35 Verisign
mxcounter.com/click.js?v=1.2 PayPal
mxcounter.com/click.js?v=1.3 Authorize.Net
mxcounter.com/click.js?v=1.4 Stribe
mxcounter.com/click.js?v=1.6 Authorize.Net
mxcounter.com/click.js?v=1.7 eWAY Hurtig
mxcounter.com/click.js?v=1.8 Sage Pay
mxcounter.com/click.js?v=2.0 Authorize.Net
mxcounter.com/click.js?v=2.1 Braintree
mxcounter.com/click.js?v=2.2 PayPal
mxcounter.com/click.js?v=2.3 Sage Pay
mxcounter.com/click.js?v=2.31 Sage Pay
mxcounter.com/click.js?v=2.32 Authorize.Net
mxcounter.com/click.js?v=2.33 PayPal
mxcounter.com/click.js?v=2.34 Authorize.Net
mxcounter.com/click.js?v=2.35 Verisign
mxcounter.com/cnt.js Authorize.Net
mxcounter.com/j.js Authorize.Net
newrelicnet.com/api.js?v=1.2 Authorize.Net
newrelicnet.com/api.js?v=1.4 Authorize.Net
newrelicnet.com/api.js?v=1.8 Sage Pay
newrelicnet.com/api.js?v=4.5 Sage Pay
newrelicnet.com/api.js?v=4.6 Westpac PayWay
nr-public.com/api.js?v=2.0 payfort
nr-public.com/api.js?v=2.1 PayPal
nr-public.com/api.js?v=2.2 Authorize.Net
nr-public.com/api.js?v=2.3 Stribe
nr-public.com/api.js?v=2.4 Første globale datagateway
nr-public.com/api.js?v=2.5 PsiGate
nr-public.com/api.js?v=2.6 Authorize.Net
nr-public.com/api.js?v=2.7 Authorize.Net
nr-public.com/api.js?v=2.8 Moneris
nr-public.com/api.js?v=2.9 Authorize.Net
nr-public.com/api.js?v=3.1 Sage Pay
nr-public.com/api.js?v=3.2 Verisign
nr-public.com/api.js?v=3.3 Moneris
nr-public.com/api.js?v=3.5 PayPal
nr-public.com/api.js?v=3.6 LinkPoint
nr-public.com/api.js?v=3.7 Westpac PayWay
nr-public.com/api.js?v=3.8 Authorize.Net
nr-public.com/api.js?v=4.0 Moneris
nr-public.com/api.js?v=4.0.2 PayPal
nr-public.com/api.js?v=4.0.3 Adyen
nr-public.com/api.js?v=4.0.4 PayPal
nr-public.com/api.js?v=4.0.5 Authorize.Net
nr-public.com/api.js?v=4.0.6 USAePay
nr-public.com/api.js?v=4.0.7 EBizCharge
nr-public.com/api.js?v=4.0.8 Authorize.Net
nr-public.com/api.js?v=4.0.9 Verisign
nr-public.com/api.js?v=4.1.2 Verisign
ordercheckpays.com/api.js?v=2.11 Authorize.Net
ordercheckpays.com/api.js?v=2.12 PayPal
ordercheckpays.com/api.js?v=2.13 Moneris
ordercheckpays.com/api.js?v=2.14 Authorize.Net
ordercheckpays.com/api.js?v=2.15 PayPal
ordercheckpays.com/api.js?v=2.16 PayPal
ordercheckpays.com/api.js?v=2.17 Westpac PayWay
ordercheckpays.com/api.js?v=2.18 Authorize.Net
ordercheckpays.com/api.js?v=2.19 Authorize.Net
ordercheckpays.com/api.js?v=2.21 Sage Pay
ordercheckpays.com/api.js?v=2.22 Verisign
ordercheckpays.com/api.js?v=2.23 Authorize.Net
ordercheckpays.com/api.js?v=2.24 PayPal
ordercheckpays.com/api.js?v=2.25 payfort
ordercheckpays.com/api.js?v=2.29 Cyberkilde
ordercheckpays.com/api.js?v=2.4 PayPal PayflowPro
ordercheckpays.com/api.js?v=2.7 Authorize.Net
ordercheckpays.com/api.js?v=2.8 Authorize.Net
ordercheckpays.com/api.js?v=2.9 Verisign
ordercheckpays.com/api.js?v=3.1 Authorize.Net
ordercheckpays.com/api.js?v=3.2 Authorize.Net
ordercheckpays.com/api.js?v=3.3 Sage Pay
ordercheckpays.com/api.js?v=3.4 Authorize.Net
ordercheckpays.com/api.js?v=3.5 Stribe
ordercheckpays.com/api.js?v=3.6 Authorize.Net
ordercheckpays.com/api.js?v=3.7 Authorize.Net
ordercheckpays.com/api.js?v=3.8 Verisign
ordercheckpays.com/api.js?v=3.9 PayPal
ordercheckpays.com/api.js?v=4.0 Authorize.Net
ordercheckpays.com/api.js?v=4.1 Authorize.Net
ordercheckpays.com/api.js?v=4.2 Sage Pay
ordercheckpays.com/api.js?v=4.3 Authorize.Net
reactjsapi.com/api.js?v=0.1.0 Authorize.Net
reactjsapi.com/api.js?v=0.1.1 PayPal
reactjsapi.com/api.js?v=4.1.2 Flint
reactjsapi.com/api.js?v=4.1.4 PayPal
reactjsapi.com/api.js?v=4.1.5 Sage Pay
reactjsapi.com/api.js?v=4.1.51 Verisign
reactjsapi.com/api.js?v=4.1.6 Authorize.Net
reactjsapi.com/api.js?v=4.1.7 Authorize.Net
reactjsapi.com/api.js?v=4.1.8 Stribe
reactjsapi.com/api.js?v=4.1.9 Fed Zebra
reactjsapi.com/api.js?v=4.2.0 Sage Pay
reactjsapi.com/api.js?v=4.2.1 Authorize.Net
reactjsapi.com/api.js?v=4.2.2 Første globale datagateway
reactjsapi.com/api.js?v=4.2.3 Authorize.Net
reactjsapi.com/api.js?v=4.2.4 eWAY Hurtig
reactjsapi.com/api.js?v=4.2.5 Adyen
reactjsapi.com/api.js?v=4.2.7 PayPal
reactjsapi.com/api.js?v=4.2.8 QuickBooks Merchant Services
reactjsapi.com/api.js?v=4.2.9 Verisign
reactjsapi.com/api.js?v=4.2.91 Sage Pay
reactjsapi.com/api.js?v=4.2.92 Verisign
reactjsapi.com/api.js?v=4.2.94 Authorize.Net
reactjsapi.com/api.js?v=4.3.97 Authorize.Net
reactjsapi.com/api.js?v=4.5 Sage Pay
reactjsapi.com/react.js Authorize.Net
sydneysalonsupplies.com/gtm.js eWAY Hurtig
tagsmediaget.com/react.js Authorize.Net
tagstracking.com/tag.js?v=2.1.2 ANZ eGate
tagstracking.com/tag.js?v=2.1.3 PayPal
tagstracking.com/tag.js?v=2.1.5 Cyberkilde
tagstracking.com/tag.js?v=2.1.7 Authorize.Net
tagstracking.com/tag.js?v=2.1.8 Sage Pay
tagstracking.com/tag.js?v=2.1.9 REALEX
tagstracking.com/tag.js?v=2.2.0 Cyberkilde
tagstracking.com/tag.js?v=2.2.1 PayPal
tagstracking.com/tag.js?v=2.2.2 PayPal
tagstracking.com/tag.js?v=2.2.3 PayPal
tagstracking.com/tag.js?v=2.2.4 Verisign
tagstracking.com/tag.js?v=2.2.5 eWAY Hurtig
tagstracking.com/tag.js?v=2.2.7 Sage Pay
tagstracking.com/tag.js?v=2.2.8 Sage Pay
tagstracking.com/tag.js?v=2.2.9 Verisign
tagstracking.com/tag.js?v=2.3.0 Authorize.Net
tagstracking.com/tag.js?v=2.3.1 Authorize.Net
tagstracking.com/tag.js?v=2.3.2 Første globale datagateway
tagstracking.com/tag.js?v=2.3.3 Authorize.Net
tagstracking.com/tag.js?v=2.3.4 Authorize.Net
tagstracking.com/tag.js?v=2.3.5 Moneris
tagstracking.com/tag.js?v=2.3.6 Authorize.Net
tagstracking.com/tag.js?v=2.3.8 PayPal

Adgangskode sniffer

En af fordelene ved JavaScript-sniffere, der fungerer på klientsiden af ​​et websted, er dets alsidighed: ondsindet kode, der er indlejret på et websted, kan stjæle enhver form for data, det være sig betalingsoplysninger eller et login og adgangskode fra en brugerkonto. Group-IB-specialister opdagede et eksempel på en sniffer, der tilhører ReactGet-familien, designet til at stjæle e-mail-adresser og adgangskoder til webstedsbrugere.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker

Skæring med ImageID sniffer

Under analysen af ​​en af ​​de inficerede butikker blev det konstateret, at dens hjemmeside var inficeret to gange: Ud over den ondsindede kode fra ReactGet-familiens sniffer blev koden til ImageID-familiesnifferen fundet. Dette overlap kunne være bevis på, at operatørerne bag begge sniffere bruger lignende teknikker til at injicere ondsindet kode.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker

Universal sniffer

Under analysen af ​​et af domænenavnene relateret til ReactGet sniffer-infrastrukturen, blev det konstateret, at den samme bruger registrerede tre andre domænenavne. Disse tre domæner efterlignede domænerne på virkelige websteder og blev tidligere brugt til at hoste sniffere. Ved analyse af koden på tre legitime websteder blev der fundet en ukendt sniffer, og yderligere analyse viste, at dette er en forbedret version af ReactGet snifferen. Alle tidligere sporede versioner af denne familie af sniffere var målrettet mod et enkelt betalingssystem, det vil sige, at en speciel version af snifferen var påkrævet for hvert betalingssystem. Men i dette tilfælde blev der opdaget en universel version af snifferen, der var i stand til at stjæle information fra formularer relateret til 15 forskellige betalingssystemer og moduler af e-handelssider til onlinebetalinger.

Så i begyndelsen af ​​arbejdet søgte snifferen efter grundlæggende formularfelter, der indeholdt ofrets personlige oplysninger: fulde navn, fysisk adresse, telefonnummer.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker
Snifferen søgte derefter over 15 forskellige præfikser svarende til forskellige betalingssystemer og moduler til online betalinger.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker
Dernæst blev ofrets personlige data og betalingsoplysninger samlet og sendt til et websted kontrolleret af angriberen: i dette særlige tilfælde blev to versioner af ReactGet universal sniffer fundet placeret på to forskellige hackede websteder. Begge versioner sendte dog de stjålne data til det samme hackede websted. zoobashop.com.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker
En analyse af de præfikser, som snifferen brugte til at finde felter, der indeholdt offerets betalingsoplysninger, viste, at denne sniffer-prøve var målrettet mod følgende betalingssystemer:

  • Authorize.Net
  • Verisign
  • First Data
  • USAePay
  • Stribe
  • PayPal
  • ANZ eGate
  • Braintree
  • Datakontanter (MasterCard)
  • Realex Betalinger
  • PsiGate
  • Heartland Payment Systems

Hvilke værktøjer bruges til at stjæle betalingsoplysninger

Det første værktøj, der blev opdaget under analysen af ​​angribernes infrastruktur, tjener til at sløre ondsindede scripts, der er ansvarlige for at stjæle bankkort. Et bash-script ved hjælp af projektets CLI blev fundet på en af ​​angribernes værter. javascript-obfuscator at automatisere sniffer-kode sløring.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker
Det andet opdagede værktøj er designet til at generere koden, der er ansvarlig for at indlæse hovedsnifferen. Dette værktøj genererer en JavaScript-kode, der kontrollerer, om brugeren er på betalingssiden, ved at søge efter strengene på brugerens aktuelle adresse gå til kassen, vogn og så videre, og hvis resultatet er positivt, så indlæser koden hovedsnifferen fra den ubudne gæsters server. For at skjule ondsindet aktivitet er alle linjer, inklusive testlinjer til bestemmelse af betalingssiden, samt et link til snifferen, kodet vha. base64.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker

Phishing-angreb

Under analysen af ​​angribernes netværksinfrastruktur blev det konstateret, at den kriminelle gruppe ofte bruger phishing for at få adgang til det administrative panel i mål-onlinebutikken. Angriberne registrerer et domæne, der ligner et butiksdomæne, og implementerer derefter en falsk Magento-administratorloginformular på det. Hvis det lykkes, vil angriberne få adgang til Magento CMS-administrationspanelet, som giver dem mulighed for at redigere webstedskomponenter og implementere en sniffer til at stjæle kreditkortdata.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker
Infrastruktur

Domænenavn Dato for opdagelse/fremkomst
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
tagtracking.com 25.06.2018
adsapigate.com 12.07.2018
trusttracker.com 15.07.2018
fbstatspartner.com 02.10.2018
billgetstatus.com 12.10.2018
www.aldenmlilhouse.com 20.10.2018
balletbeautlful.com 20.10.2018
bargalnjunkie.com 20.10.2018
payselector.com 21.10.2018
tagsmediaget.com 02.11.2018
hs-payments.com 16.11.2018
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

G-Analytics familie

Denne familie af sniffere bruges til at stjæle kundekort fra onlinebutikker. Det allerførste domænenavn, som gruppen brugte, blev registreret i april 2016, hvilket kan indikere begyndelsen på gruppens aktivitet i midten af ​​2016.

I den nuværende kampagne bruger gruppen domænenavne, der efterligner virkelige tjenester såsom Google Analytics og jQuery, og maskerer sniffer-aktivitet med legitime scripts og domænenavne, der ser legitimt ud. Hjemmesider, der kører under CMS Magento, blev angrebet.

Hvordan G-Analytics implementeres i online butikskoden

Et karakteristisk træk ved denne familie er brugen af ​​forskellige metoder til at stjæle brugerbetalingsoplysninger. Ud over den klassiske JavaScript-indsprøjtning i klientsiden af ​​webstedet, brugte den kriminelle gruppe også teknikken med at indsprøjte kode i serversiden af ​​webstedet, nemlig PHP-scripts, der behandler brugerinput. Denne teknik er farlig, fordi den gør det vanskeligt for tredjepartsforskere at opdage skadelig kode. Group-IB-specialister opdagede en version af snifferen indlejret i webstedets PHP-kode ved at bruge domænet som en gate dittm.org.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker
En tidlig version af en sniffer blev også opdaget, der bruger det samme domæne til at indsamle stjålne data. dittm.org, men denne version er allerede beregnet til installation på klientsiden af ​​netbutikken.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker
Senere ændrede gruppen sin taktik og begyndte at være mere opmærksom på at skjule ondsindet aktivitet og camouflage.

I begyndelsen af ​​2017 begyndte gruppen at bruge domænet jquery-js.commaskering som CDN for jQuery: omdirigerer brugeren til et legitimt websted, når han går til et ondsindet websted jquery.com.

Og i midten af ​​2018 adopterede gruppen et domænenavn g-analytics.com og begyndte at skjule snifferens aktivitet som en legitim Google Analytics-tjeneste.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker
Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker

Versionsanalyse

Under analysen af ​​de domæner, der blev brugt til at gemme snifferkoden, blev det konstateret, at webstedet har et stort antal versioner, der adskiller sig ved tilstedeværelsen af ​​sløring, såvel som tilstedeværelsen eller fraværet af uopnåelig kode tilføjet til filen for at distrahere opmærksomheden og skjul ondsindet kode.

I alt på siden jquery-js.com seks versioner af sniffere blev identificeret. Disse sniffere sender de stjålne data til en adresse, der er placeret på samme sted som snifferen selv: 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

Senere domæne g-analytics.com, brugt af gruppen i angreb siden midten af ​​2018, fungerer som et opbevaringssted for flere sniffere. I alt blev 16 forskellige versioner af snifferen opdaget. I dette tilfælde var porten til at sende de stjålne data forklædt som et link til et billede af formatet 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

Indtægtsgenerering af stjålne data

Den kriminelle gruppe tjener penge på de stjålne data ved at sælge kort gennem en specielt oprettet underjordisk butik, der leverer tjenester til kortere. En analyse af de domæner, som angriberne brugte, gjorde det muligt at fastslå det google-analytics.cm blev registreret af samme bruger som domænet cardz.vc. Domæne cardz.vc refererer til Cardsurfs (Flysurfs), en butik, der sælger stjålne bankkort, som vandt popularitet under AlphaBays underjordiske markedsplads som en butik, der sælger bankkort stjålet ved hjælp af en sniffer.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker
Analyse af domænet analytisk.is, placeret på den samme server som domænerne brugt af sniffere til at indsamle stjålne data, opdagede Group-IB-specialister en fil, der indeholdt Cookie-tyver-logfiler, som det ser ud til, senere blev forladt af udvikleren. En af posterne i loggen indeholdt et domæne iozoz.com, som tidligere blev brugt i en af ​​de sniffere, der var aktive i 2016. Formentlig blev dette domæne tidligere brugt af en angriber til at indsamle kort stjålet ved hjælp af en sniffer. Dette domæne blev registreret til en e-mailadresse [e-mail beskyttet], som også blev brugt til at registrere domæner cardz.su и cardz.vcrelateret til Cardsurfs carding shop.

På baggrund af de indhentede data kan det antages, at G-Analytics snifferfamilien og den underjordiske Cardsurfs bankkortbutik drives af de samme personer, og butikken bruges til at sælge bankkort stjålet ved hjælp af en sniffer.

Infrastruktur

Domænenavn Dato for opdagelse/fremkomst
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
analytisk.til 04.12.2018
google-analytics.to 06.12.2018
google-analytics.cm 28.12.2018
analytisk.is 28.12.2018
googlelc-analytics.cm 17.01.2019

Familien Illum

Illum er en familie af sniffere, der bruges til at angribe onlinebutikker, der kører Magento CMS. Ud over indførelsen af ​​ondsindet kode bruger operatørerne af denne sniffer også indførelsen af ​​fuldgyldige falske betalingsformularer, der sender data til porte, der kontrolleres af angribere.

Ved analyse af netværksinfrastrukturen, der blev brugt af operatørerne af denne sniffer, blev der noteret et stort antal ondsindede scripts, udnyttelser, falske betalingsformularer samt en samling af eksempler med ondsindede sniffer-konkurrenter. Baseret på oplysningerne om datoen for fremkomsten af ​​de domænenavne, som gruppen bruger, kan det antages, at starten af ​​kampagnen falder i slutningen af ​​2016.

Hvordan Illum implementeres i koden til en netbutik

De første opdagede versioner af snifferen blev indlejret direkte i koden på det kompromitterede websted. De stjålne data blev sendt til cdn.illum[.]pw/records.php, blev porten kodet vha base64.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker
Senere blev en pakket version af snifferen opdaget ved hjælp af en anden gate - records.nstatistics[.]com/records.php.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker
Ifølge rapport Willem de Groot, den samme vært blev brugt i snifferen, der blev implementeret på butiks hjemmeside, ejet af det tyske politiske parti CSU.

Analyse af angrebssted

Group-IB-specialister opdagede og analyserede webstedet, der blev brugt af denne kriminelle gruppe til at opbevare værktøjer og indsamle stjålne oplysninger.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker
Blandt de værktøjer, der blev fundet på angriberens server, blev der fundet scripts og udnyttelser til privilegieeskalering i Linux OS: for eksempel Linux Privilege Escalation Check Script, udviklet af Mike Czumak, samt en udnyttelse til CVE-2009-1185.

Angribere brugte to udnyttelser direkte til at angribe onlinebutikker: первый i stand til at injicere ondsindet kode i core_config_data ved at udnytte CVE-2016-4010, sekund udnytter en RCE-sårbarhed i Magento CMS-plugins, hvilket gør det muligt at udføre vilkårlig kode på en sårbar webserver.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker
Under analysen af ​​serveren blev der også fundet forskellige prøver af sniffere og falske betalingsformer, brugt af angribere til at indsamle betalingsoplysninger fra hackede websteder. Som du kan se på listen nedenfor, blev nogle scripts oprettet individuelt for hvert hacket websted, mens en universel løsning blev brugt til visse CMS og betalingsgateways. For eksempel scripts segapay_standard.js и segapay_onpage.js designet til at blive indlejret på websteder ved hjælp af Sage Pay betalingsgateway.

Liste over scripts til forskellige betalingsgateways

Manuskript Payment Gateway
sr.illum[.]pw/mjs_special/visiondirect.co.uk.js //request.payrightnow[.]cf/checkpayment.php
sr.illum[.]pw/mjs_special/topdirenshop.nl.js //request.payrightnow[.]cf/alldata.php
sr.illum[.]pw/mjs_special/tiendalenovo.es.js //request.payrightnow[.]cf/alldata.php
sr.illum[.]pw/mjs_special/pro-bolt.com.js //request.payrightnow[.]cf/alldata.php
sr.illum[.]pw/mjs_special/plae.co.js //request.payrightnow[.]cf/alldata.php
sr.illum[.]pw/mjs_special/ottolenghi.co.uk.js //request.payrightnow[.]cf/alldata.php
sr.illum[.]pw/mjs_special/oldtimecandy.com.js //request.payrightnow[.]cf/checkpayment.php
sr.illum[.]pw/mjs_special/mylook.ee.js //cdn.illum[.]pw/records.php
sr.illum[.]pw/mjs_special/luluandsky.com.js //request.payrightnow[.]cf/checkpayment.php
sr.illum[.]pw/mjs_special/julep.com.js //cdn.illum[.]pw/records.php
sr.illum[.]pw/mjs_special/gymcompany.es.js //request.payrightnow[.]cf/alldata.php
sr.illum[.]pw/mjs_special/grotekadoshop.nl.js //request.payrightnow[.]cf/alldata.php
sr.illum[.]pw/mjs_special/fushi.co.uk.js //request.payrightnow[.]cf/checkpayment.php
sr.illum[.]pw/mjs_special/fareastflora.com.js //request.payrightnow[.]cf/checkpayment.php
sr.illum[.]pw/mjs_special/compuindia.com.js //request.payrightnow[.]cf/alldata.php
sr.illum[.]pw/mjs/segapay_standart.js //cdn.illum[.]pw/records.php
sr.illum[.]pw/mjs/segapay_onpage.js //cdn.illum[.]pw/records.php
sr.illum[.]pw/mjs/erstat_standard.js //request.payrightnow[.]cf/checkpayment.php
sr.illum[.]pw/mjs/all_inputs.js //cdn.illum[.]pw/records.php
sr.illum[.]pw/mjs/add_inputs_standart.js //request.payrightnow[.]cf/checkpayment.php
sr.illum[.]pw/magento/payment_standard.js //cdn.illum[.]pw/records.php
sr.illum[.]pw/magento/payment_redirect.js //payrightnow[.]cf/?payment=
sr.illum[.]pw/magento/payment_redcrypt.js //payrightnow[.]cf/?payment=
sr.illum[.]pw/magento/payment_forminsite.js //paymentnow[.]tk/?payment=

Vært betaling nu[.]tk, brugt som port i et manuskript payment_forminsite.js, blev opdaget som emneAltName i flere certifikater relateret til CloudFlare-tjenesten. Derudover var manuskriptet placeret på værten evil.js. At dømme efter navnet på scriptet kunne det have været brugt som en del af udnyttelsen af ​​CVE-2016-4010, takket være hvilket det er muligt at injicere ondsindet kode i sidefoden på et websted, der kører Magento CMS. Dette script brugte værten som en gate request.requestnet[.]tk, ved hjælp af det samme certifikat som værten betaling nu[.]tk.

Falske betalingsformularer

Nedenstående figur viser et eksempel på en formular til indtastning af kortdata. Denne formular blev brugt til at infiltrere en onlinebutiks hjemmeside og stjæle kortdata.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker
Følgende figur er et eksempel på en falsk PayPal-betalingsform, der blev brugt af angribere til at infiltrere websteder ved hjælp af denne betalingsmetode.
Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker
Infrastruktur

Domænenavn Dato for opdagelse/fremkomst
cdn.illum.pw 27/11/2016
records.nstatistics.com 06/09/2018
request.payrightnow.jf 25/05/2018
paymentnow.tk 16/07/2017
betalingslinje.tk 01/03/2018
paymentpal.jf 04/09/2017
requestnet.tk 28/06/2017

CoffeeMokko familie

CoffeMokko-familien af ​​sniffere designet til at stjæle bankkort fra netbutikbrugere er blevet brugt siden mindst maj 2017. Formentlig er den gruppe 1 kriminelle gruppe beskrevet af RiskIQ-eksperter i 2016 operatøren af ​​denne familie af sniffere. Websteder, der kører CMS som Magento, OpenCart, WordPress, osCommerce, Shopify blev angrebet.

Hvordan CoffeMokko er indlejret i koden for en online butik

Operatører af denne familie opretter unikke sniffere for hver infektion: sniffer-filen er placeret i mappen src eller js på angriberens server. Implementering i webstedskoden udføres ved et direkte link til snifferen.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker
Sniffer-koden hardkoder navnene på de formularfelter, hvorfra du vil stjæle data. Snifferen tjekker også, om brugeren er på betalingssiden, ved at kontrollere listen over søgeord i forhold til brugerens aktuelle adresse.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker
Nogle opdagede versioner af snifferen blev sløret og indeholdt en krypteret streng, der lagrede hovedarrangementet af ressourcer: den indeholdt navnene på formularfelter til forskellige betalingssystemer samt adressen på porten, hvortil de stjålne data skulle sendes.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker
De stjålne betalingsoplysninger blev sendt til et script på angriberens server undervejs. /savePayment/index.php eller /tr/index.php. Formentlig bruges dette script til at sende data fra porten til hovedserveren, som konsoliderer data fra alle sniffere. For at skjule de overførte data, kodes alle betalingsoplysninger om offeret vha base64, og så sker der flere tegnudskiftninger:

  • tegnet "e" erstattes af ":"
  • symbolet "w" erstattes af "+"
  • tegnet "o" erstattes af "%"
  • tegnet "d" erstattes af "#"
  • tegnet "a" erstattes af "-"
  • symbolet "7" erstattes af "^"
  • tegnet "h" erstattes af "_"
  • "T"-symbolet erstattes med "@"
  • tegnet "0" erstattes af "/"
  • tegnet "Y" erstattes af "*"

Som et resultat af tegnsubstitutioner kodet med base64 data kan ikke afkodes uden omvendt transformation.

Sådan ser et fragment af snifferkoden ud, der ikke er blevet sløret:

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker

Infrastrukturanalyse

I de tidlige kampagner registrerede angriberne domænenavne, der ligner dem på lovlige online-shoppingsider. Deres domæne kan adskille sig fra det legitime et efter et tegn eller et andet TLD. Registrerede domæner blev brugt til at gemme snifferkoden, hvortil linket var indlejret i butikskoden.

Denne gruppe brugte også domænenavne, der minder om populære jQuery-plugins (slickjs[.]org for websteder, der bruger pluginnet slick.js), betalingsgateways (sagecdn[.]org for websteder, der bruger betalingssystemet Sage Pay).

Senere begyndte gruppen at skabe domæner, hvis navn ikke havde noget at gøre med hverken butikkens domæne eller butikkens tema.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker
Hvert domæne svarede til det websted, hvor biblioteket blev oprettet /js eller / src. Sniffer-scripts blev gemt i denne mappe: en sniffer for hver ny infektion. Snifferen blev introduceret i webstedskoden via et direkte link, men i sjældne tilfælde ændrede angribere en af ​​webstedets filer og tilføjede ondsindet kode til den.

Kode analyse

Første obfuskationsalgoritme

I nogle sniffer-eksempler af denne familie var koden sløret og indeholdt krypterede data, der er nødvendige for, at snifferen kan fungere: Især snifferens gateadresse, en liste over betalingsformularfelter og i nogle tilfælde en falsk betalingsformularkode. I koden inde i funktionen var ressourcerne krypteret med XOR med nøglen, der blev sendt som et argument til den samme funktion.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker
Ved at dekryptere strengen med den tilsvarende nøgle, unik for hver prøve, kan du få en streng, der indeholder alle linjerne fra snifferkoden adskilt af et skilletegn.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker

Anden sløringsalgoritme

I senere prøver af denne familie af sniffere blev der brugt en anden sløringsmekanisme: i dette tilfælde blev dataene krypteret ved hjælp af en selvskrevet algoritme. En streng, der indeholder krypterede data, der kræves for at snifferen kan fungere, blev sendt som et argument til dekrypteringsfunktionen.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker
Ved hjælp af browserkonsollen kan du dekryptere de krypterede data og få et array, der indeholder sniffer-ressourcerne.

Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker

Link til tidlige MageCart-angreb

I en analyse af et af de domæner, der blev brugt af gruppen som en gate til at indsamle stjålne data, blev det fundet, at infrastrukturen til at stjæle kreditkort blev installeret på dette domæne, identisk med den, der blev brugt af gruppe 1, en af ​​de første grupper, opdaget RiskIQ specialister.

To filer blev fundet på værten for CoffeMokko sniffer-familien:

  • mage.js — fil indeholdende gruppe 1 sniffer kode med gate adresse js-cdn.link
  • mag.php - PHP script ansvarlig for indsamling af data stjålet af snifferen

Indholdet af filen mage.js Fire JavaScript-sniffere, der ligger og venter på dig i netbutikker
Det er også blevet fastslået, at de tidligste domæner brugt af gruppen bag CoffeMokko sniffer-familien blev registreret den 17. maj 2017:

  • link-js[.]link
  • info-js[.]link
  • track-js[.]link
  • map-js[.]link
  • smart-js[.]link

Formatet på disse domænenavne er det samme som gruppe 1-domænenavnene, der blev brugt i 2016-angrebene.

Ud fra de opdagede fakta kan det antages, at der er en sammenhæng mellem CoffeMokko snifferoperatørerne og den kriminelle gruppe Gruppe 1. Formodentlig kan CoffeMokko-operatører have lånt værktøjer og software til at stjæle kort fra deres forgængere. Det er dog mere sandsynligt, at den kriminelle gruppe bag brugen af ​​CoffeMokko familiesniffere er de samme personer, som udførte angrebene som en del af Gruppe 1-aktiviteter. Efter offentliggørelsen af ​​den første rapport om den kriminelle gruppes aktiviteter er alle deres domænenavne blev blokeret, og værktøjerne blev studeret i detaljer og beskrevet. Gruppen blev tvunget til at tage en pause, finjustere deres interne værktøjer og omskrive snifferkoden for at fortsætte deres angreb og forblive ubemærket.

Infrastruktur

Domænenavn Dato for opdagelse/fremkomst
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
børnelegetøj.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
lamoodbighat.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.com 12.01.2018
otocap.org 15.01.2018
christohperward.org 27.01.2018
coffeetea.org 31.01.2018
energycoffe.org 31.01.2018
energytea.org 31.01.2018
teaffe.net 31.01.2018
adaptivecss.org 01.03.2018
kaffemokko.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
verywellfitness.com 15.09.2018
elegrina.com 18.11.2018
majsurplus.com 19.11.2018
top5value.com 19.11.2018

Kilde: www.habr.com

Tilføj en kommentar