Pereiti prie turinio
UNIPARK smishing: nuo vienos SMS iki 126 phishing hostų

UNIPARK smishing: nuo vienos SMS iki 126 phishing hostų

Pilnas UNIPARK vardu siųstos smishing žinutės CTI tyrimas: domeno rotacija, exact-hash pivotai, 126 susiję hostai, kortelės bei PIN rinkimas ir NKSC sinkhole.

UNIPARK smishing: nuo vienos SMS iki 126 phishing hostų

Analitinė santrauka

Esminės išvados

  • fmqr.ink buvo registruotas likus mažiau nei parai iki SMS, o tyrimo metu UNIPARK hostas jau buvo nukreiptas į siena.nksc.lt.
  • Statinis kodas rodo visą credential theft flow: automobilio numerį, asmens duomenis, kortelę, CVV, OTP ir net keturių skaitmenų banko kortelės PIN.
  • Kortelės numerio, vardo, galiojimo datos ir CVV pakanka rimtam card-not-present sukčiavimui. EMV lusto klonavimui papildomai reikėtų track duomenų, kurių ši forma nerinko.
  • Keturi pagrindiniai JS ir CSS failai exact-hash sutampa su ankstesniu unipark.fxqro.xin deployment'u.
  • Bendras core bundle hash URLScan duomenyse matytas 163 skenuose ir 126 unikaliuose hostuose, apsimetusiuose RingGo, EyeParking, UNIPARK, EasyPark, Q-Park ir kitais parkingo brand'ais.
  • Iš 163 susietų skenų 121 puslapis buvo pateiktas per Cloudflare, o 42 tiesiogiai iš 12 AS132203 Aceville/Tencent Cloud IP. Visuose 163 matytas /console ryšys.
  • +63 numeris rodo Filipinų numeracijos planą, bet nėra patikimas operatoriaus lokacijos ar tapatybės įrodymas.
  • Cisco Talos aprašytas JWR framework'as labai panašus veikimo modeliu, tačiau JWR-specific protokolas, endpoint'ai, session ID, šifravimas ir publikuoti IOC nesutampa su UNIPARK rinkiniu. To nepakanka tai pačiai kampanijai ar operatoriui teigti.
Apimtis
2026 m. rugpjūčio 11 d. gautos UNIPARK vardu siųstos SMS analizė, statinis phishing puslapio kodo tyrimas, domenų, sertifikatų ir viešų URLScan duomenų pivotai.
Apribojimai
Kenkėjiškas JavaScript nebuvo vykdomas, formos nebuvo pildomos, o backend nebuvo testuojamas. Tyrimas nepatvirtina konkretaus operatoriaus, sėkmingai apgautų žmonių skaičiaus ar telefono numerio tikrojo naudotojo.

Tyrimo paketas

Publikacijos įrašas ir medžiaga

v1.0
Stabilus ID
HX-unipark-smishing-campaign-infrastructure
Klasė
Pirminis tyrimas
Būsena
Publikuota
Pasitikėjimas
Aukštas
Publikuota
Peržiūrėta
Detalus tipas
Tyrimas
TLP
CLEAR
Įrodymų pagrindas

Autoriaus surinkti ir išanalizuoti duomenys, papildyti cituojamais viešais šaltiniais.

Metodai
  • šaltinių tikrinimas
  • infrastruktūros pivoting
  • analitinis vertinimas
Visada pateikiama
  • Pagrindinės išvados
  • Apimtis ir apribojimai
  • Metodai ir įrodymų pagrindas
  • Šaltiniai ir citavimo įrašas
  • Versija ir atnaujinimų istorija

Atverti tyrimo medžiagos paketą →

Trumpai: viena SMS, bet tikrai ne vienas domenas

2026 m. rugpjūčio 11 d. 11:01 gavau SMS iš +63 951 976 1812. Žinutė apsimetė UNIPARK, pranešė apie neva neapmokėtą parkavimą ir siuntė į unipark.fmqr[.]ink/com. Dar pridėjo instrukciją atsakyti raide “T”, jeigu nuoroda neatsidaro, o tada ją iš naujo atidaryti arba įklijuoti į Safari. Ankstesniame užraše domeno galūnę buvau įvedęs su typo. Ekrano nuotraukoje ir visame tyrime naudojamas tik čia matomas .ink adresas.

Kas gi gali būti oficialiau už lietuviško parkingo pranešimą iš Filipinų numerio, naują .ink domeną ir prašymą pirmiausia atrašyti sukčiui.

Bet įdomesnė dalis prasidėjo ne SMS tekste. fmqr[.]ink buvo užregistruotas 2026 m. rugpjūčio 10 d. 13:08 UTC, mažiau nei para prieš žinutę. Puslapio kodas rinko ne tik automobilio numerį ar tariamą 3,75 Eur mokėjimą. Jame buvo pilnas flow nuo asmens duomenų ir kortelės iki OTP, banko programėlės patvirtinimo ir keturių skaitmenų kortelės PIN, naudojamo bankomate ar mokėjimo terminale.

Toliau gavosi dar smagiau. Keturi pagrindiniai statiniai failai exact-hash sutapo su ankstesniu unipark.fxqro[.]xin puslapiu. Bendras core bundle viešuose URLScan duomenyse pasirodė 163 skenuose ir 126 unikaliuose hostuose. Tie hostai apsimetinėjo RingGo, EyeParking, UNIPARK, EasyPark, Q-Park, NCP ir kitomis parkavimo paslaugomis.

Šitam analitiniam cluster’iui naudosiu laikiną pavadinimą HCVX-PARKING-KIT-2026. Tai ne threat actor vardas. Nereikia iš vieno JavaScript failo išauginti naujos grupuotės su gyvūno logotipu ir Wikipedia puslapiu.

Verdiktas: confidence yra high, kad tai UNIPARK brandą naudojanti smishing ir payment phishing kampanija bei pakartotinai deploy’inamas parkingo phishing kit’as. Confidence yra tik medium, kad visi susiję domenai valdomi vieno operatoriaus, ir low bet kokiai geografinei ar asmens attribution.

Atnaujinimas 2026-08-14: ar tai Cisco Talos aprašytas JWR?

2026 m. rugpjūčio 13 d. Cisco Talos publikavo JWR phishing framework analizę. Skaitant jų techninį aprašymą buvo sunku nepastebėti paralelių su šituo UNIPARK atveju.

Abu framework’ai:

  • platinami per SMS su kelių, parkingo, toll ar nedidelio administracinio mokesčio lure
  • turi Vue pagrindu veikiančią daugelio ekranų victim aplikaciją
  • renka kortelės numerį, galiojimą, CVV, PIN, OTP ir device fingerprint duomenis
  • palaiko bidirectional WebSocket ryšį, per kurį operatorius realiu laiku parenka kitą aukos ekraną
  • gali rodyti neteisingo kodo, atmestos kortelės ar pakartotinio bandymo būsenas
  • naudoja vieną bendrą engine ir keičiamus brand’o sluoksnius
  • turi kinų kalbos developer arba operator-facing string’ų
  • dalį deployment’ų laiko Aceville ir Tencent Cloud infrastruktūroje
  • naudoja /com/ kelią ar po juo esančius statinius failus.

Iš pirmo žvilgsnio atrodo labai arti. Beveik taip arti, kad norisi jau rašyti “radom JWR Lietuvoje”. Būtent čia reikia sustoti ir palyginti ne temą, o implementation.

Kas techniškai nesutampa

PožymisHCVX-PARKING-KIT-2026 / UNIPARKCisco Talos JWRVertinimas
client frameworkVue, Vite-style hashed bundle’ai, Socket.IO ir Engine.IOVue 2.x, Host Bridge ir Content Modebendras frontend pasirinkimas, ne unikalus code ryšys
real-time channelsame-origin Socket.IO per /consolebinary WebSocket per webSocket/QT/{sessionId}/khkjsahfjkwhakjlsdwdddddd88skirtingas protocol ir path
session identityquery uuid ir shopHostJWRCID bei JWRCVV-{timestamp}-{random}-{random}JWR-specific marker’ių UNIPARK IOC rinkinyje nėra
client → serverchangleField, submitData, noticeJWR message envelope, instruction acknowledgements ir cvvformskirtinga event schema
server → clientconfig, operation ir UNIPARK būsenų pavadinimaidaugiau nei 40 to_*, tip_* bei updata_* komandųfunkcija panaši, command vocabulary skiriasi
REST fallbackšiame tyrime nedokumentuotasapi/open/addClick, getSyncSettings, pollInstruction, addCvv, the_final_interfacestiprūs JWR marker’iai UNIPARK tyrime nebuvo rasti
worker ir iframeUNIPARK bundle’uose nedokumentuotas JWR Host Bridge modelisstatic/js/ws-worker.js, parent bridge ir phishing iframearchitektūra skiriasi
šifravimasAES-CBC su statine client-side rakto medžiagaAES-CTR su JwrCrypto ir nauju session keyskirtinga implementation
anti-analysisplatus headless score, isSpider threshold 0,31self-referential regex execution guard ir decoy variableabi turi anti-analysis, bet ne tą patį
exact client hashUNIPARK core 7068d7b0... ir kiti bundle hash’aiketuri Talos publikuoti JWR SHA-256exact sutapimų nėra

IOC ir infrastruktūros palyginimas

Palyginau Talos publikuotą JWR IOC rinkinį su šiame tyrime dokumentuotais hash, domenais ir IP:

1
2
3
exact SHA-256 overlap: 0
exact domain overlap:  0
exact IP overlap:      0

Tai nėra įrodymas, kad ryšio negali būti. IOC sąrašai nėra pilna infrastruktūra. Bet tai tikrai nėra pagrindas sakyti, kad exact overlap jau rastas.

Infrastruktūros pusėje yra vienas įdomus supporting signal. Du Talos JWR IP, 43.156.227[.]15 ir 43.160.241[.]151, priklauso ACEVILLEPTELTD-SG blokams 43.156.0.0/16 ir 43.160.0.0/16. UNIPARK exact-hash cluster’yje irgi buvo hostų tuose pačiuose provider blokuose, pavyzdžiui 43.156.224[.]182, 43.160.226[.]55 ir 43.160.238[.]159.

Tai bendras cloud provider ir netblock kontekstas. Ne bendras IP, ne bendras serveris ir ne bendras operatorius. Alibaba bei Tencent infrastruktūra šiame kriminaliniame ecosystem’e populiari ne dėl to, kad visi klientai sėdi viename Telegram chat’e.

Ką galima teigti dabar

TeiginysConfidenceKodėl
UNIPARK ir JWR priklauso tam pačiam real-time operator-driven payment phishing tradecraft tipuihighSMS lure, Vue, live WebSocket control, multi-step card, PIN ir OTP flow, fingerprinting
abu gali būti tos pačios platesnės Chinese-language PhaaS ekosistemos produktaimoderatepanašus veikimo modelis, kinų kalbos pėdsakai, multi-brand architektūra ir dalinai tas pats cloud provider kontekstas
UNIPARK kit’as yra JWR variantas arba turi bendrą code lineagelownėra exact hash ar JWR-specific protocol marker’ių, o pagrindinė implementation skiriasi
UNIPARK ir Talos kampaniją valdo tas pats operatoriuslownėra bendro domeno, IP, account, session marker, backend endpoint ar kito control artefakto

Talos patys pažymi, kad JWR elgesiu panašus į kelias kitas kinų kalba veikiančias PhaaS šeimas, nors su Lucid, Darcula ir Lighthouse neturi code-level implementation overlap. Tai labai tinkama pamoka ir šitam atvejui: behavioral convergence nėra code lineage, o code lineage dar nėra tas pats operatorius.

Kol neturime bendro JWR-specific client marker, exact asset, backend endpoint, operator account ar kito retesnio control artefakto, HCVX-PARKING-KIT-2026 palieku atskiru analitiniu cluster’iu. JWR dabar yra svarbi comparison ir hunting hipotezė, bet ne naujas šio cluster’io vardas.

Pati SMS

Atkurtas gautos UNIPARK smishing žinutės vaizdas Tai sutrumpintas perpiešimas pagal pateiktą ekrano nuotrauką. URL sąmoningai defangintas, o ne naujas “tikras SMS screenshot’as”.

SMS naudojo kelis normalius social engineering kabliukus vienu metu:

  1. pažįstamas vietinis brand’as
  2. neapibrėžta skola, kurios žmogus negali iškart patikrinti iš žinutės
  3. skubinimas ir papildomų mokesčių grėsmė
  4. prašymas įvesti automobilio numerį, kuris atrodo kaip nekaltas pradinis patikrinimas
  5. instrukcija atsakyti siuntėjui ir ranka atidaryti nuorodą Safari.

Paskutinis punktas nėra vien UX pagalba. Atsakymas patvirtina, kad numeris aktyvus. Be to, Apple nurodo, kad atrašius į žinutę jos jau nebegalima pateikti per “Report Spam” funkciją. Ar konkrečioje iOS ir operatoriaus kombinacijoje atsakymas dar ir aktyvintų nuorodą, iš vienos ekrano nuotraukos neįrodysiu. Bet pačiam sukčiui atsakymas tikrai nėra bloga žinia.

Tyrimo metodika ir ribos

Praktinis tęsinys: atskirame infrastruktūros pivoting 101 vadove parodau visą šio case workflow, naudotus PowerShell ir URLScan query pavyzdžius, evidence grading ir kelią nuo vieno URL iki 126 hostų cluster’io.

Šį kartą nedariau “pažiūrėkim, kas bus paspaudus Submit” eksperimento. Kenkėjiškas JavaScript nebuvo paleistas nei naršyklėje, nei headless aplinkoje, nei su Node. Formos nebuvo pildomos, WebSocket ryšys nebuvo inicijuotas, į backend nesiunčiau nei testinių kortelių, nei šiukšlių.

Nesiunčiau ir “random” duomenų vien tam, kad pažiūrėčiau, kur jie išlįs. Toks testas galėtų užteršti panelės duomenis, perspėti operatorių, sukurti nereikalingą sąveiką su svetima sistema ir vis tiek neįrodytų, kad kiti įrašai priklauso realioms aukoms. Collection kelią galima atkurti iš kliento kodo ir viešų network artefaktų jo neliečiant.

Atlikau:

  • pateiktos SMS transkripciją ir lure analizę
  • RDAP, DNS, Certificate Transparency ir pasyvių šaltinių patikrą
  • raw HTML, JavaScript ir CSS parsisiuntimą kaip baitus
  • statinį obfuskuotų string lentelių dekodavimą, nevykdant aplikacijos
  • SHA-256 skaičiavimą ir exact-hash paiešką URLScan
  • pivotus pagal asset vardus, hash, brandą, URL struktūrą, registrarą ir vardų serverius
  • viešą telefono numerio paiešką bei numeracijos plano patikrą.

Tyrimo snapshot’as yra 2026 m. rugpjūčio 11 d. apie 08:10 UTC. Infrastruktūra keitėsi realiu laiku, todėl po kelių valandų DNS vaizdas jau gali būti kitas.

Laiko juosta

Laikas UTCĮvykisKą tai reiškia
2026-06-30 09:27URLScan pirmą kartą mato bendrą core bundle hashviešai matoma kit’o šeimos pradžios riba, ne būtinai tikroji pradžia
2026-07-16 15:36nuskenuotas unipark.cxmpvqtr[.]club/com/pirmas mano rastas ankstesnis UNIPARK deployment’as
2026-08-03 13:59nuskenuotas unipark.novorb[.]xyz/com/kitas to paties core kit’o UNIPARK hostas
2026-08-04 07:00nuskenuotas unipark.fxqro[.]xin/com/vėliau exact-hash sutapęs su dabartiniu puslapiu
2026-08-10 13:08užregistruotas fmqr[.]inknaujas root domainas
2026-08-11 05:11 ir 05:58išduoti wildcard sertifikatai *.fmqr.inkinfrastruktūra paruošta Cloudflare krašte
2026-08-11 06:03pakeistas RDAP įrašassutampa su greitu infrastruktūros pokyčiu ir containment langu
apie 2026-08-11 08:01gauta SMS, pagal pateiktą 11:01 vietos laikąrealus lure pristatymas Lietuvoje
apie 2026-08-11 08:10unipark.fmqr[.]ink jau rodo į siena.nksc.lthostas jau sinkholintas arba neutralizuotas

Sertifikatų laikai gaunami iš Certificate Transparency, o ne iš serverio pasakojimo apie save. fmqr[.]ink gavo wildcard sertifikatą, todėl vien CT logas neatskleidžia visų subdomenų. Jis tik parodo, kad operatorius galėjo greitai kurti skirtingus brandinius hostus po tuo pačiu root’u.

Domeno ir infrastruktūros anatomija

fmqr[.]ink registracijos duomenys:

LaukasReikšmėVertinimas
registruotas2026-08-10 13:08:18 UTCmažiau nei para prieš SMS
galiojimasiki 2027-08-10standartinis vienerių metų registravimas
registrarasDominet (HK) Limitedtas pats ir kituose UNIPARK cluster’io domenuose
vardų serveriaitrevor.ns.cloudflare.com, paris.ns.cloudflare.comCloudflare slepia origin ir suteikia greitą edge deployment’ą
TLSwildcard *.fmqr.ink ir fmqr.inktinkamas daugeliui brandinių subdomenų
dabartinis CNAMEsiena.nksc.ltLietuvos NKSC valdomo domeno kryptis, ne attacker origin

Google viešas DNS dar turėjo ankstesnius Cloudflare edge adresus 104.21.54[.]13 ir 172.67.222[.]52. Tai nėra naudingi blocklist IOC, nes tie IP yra bendra Cloudflare infrastruktūra. Lygiai taip pat 195.182.64[.]102, į kurį rezolvinosi siena.nksc.lt, nėra kenkėjiškas adresas ir jo blokuoti nereikia.

Origin serverio iš viešų duomenų patikimai nenustačiau. MX ir prasmingų TXT įrašų taip pat nebuvo. Kitaip tariant, Cloudflare savo darbą atliko, o spėlioti origin pagal bendrus edge IP būtų tiesiog triukšmas.

Ką darė phishing puslapis

HTML atrodė mažas, tik 2 553 baitai. Visa logika buvo trijuose JavaScript bundle’uose. Pagrindinis puslapis papildomai hotlinkino oficialiame unipark.lt esančius fontus bei chevron paveikslą. Tai geras brand cloning įrodymas, bet ne UNIPARK infrastruktūros kompromitavimo įrodymas. Sukčius gali hotlinkinti viešą failą lygiai taip pat, kaip bet kuris kitas lankytojas.

Ankstesnio exact-hash sutampančio UNIPARK phishing puslapio URLScan ekrano nuotrauka Vieša URLScan ekrano nuotrauka iš 2026 m. rugpjūčio 4 d. unipark.fxqro[.]xin skeno. Tai ankstesnis exact-hash sutampantis deployment’as, o ne mano užpildyta forma ar aktyvi sesija su operatoriumi.

Statinis dekodavimas atkūrė tokią aukos kelionę:

Atkurtas duomenų rinkimo flow nuo SMS iki kortelės PIN

  1. Automobilio numeris. Pirmas puslapis prašo valstybinio numerio ir išsaugo jį naršyklėje.
  2. Tariama skola. Rodoma 3,75 Eur suma ir fiksuotas reference 4947295570.
  3. Asmens duomenys. Vardas, adresas, miestas, regionas, pašto kodas, telefonas ir el. paštas.
  4. Kortelė. Kortelės turėtojas, numeris, galiojimas ir CVV.
  5. Patvirtinimas. Kit’as turi atskirus flow telefono OTP, el. pašto kodo, banko programėlės patvirtinimo ir custom code užklausoms.
  6. Kortelės PIN. Puslapis tiesiai prašo keturių skaitmenų PIN ir meluoja, kad tai yra 3D Secure proceso dalis.

Vienas deobfuskuotas tekstas sako:

1
2
Jūsų PIN kodas yra tas pats, kurį naudojate bankomatuose
ar mokėjimo terminaluose.

Tai pašalina bet kokią abejonę, ar “pin” kintamasis galėjo reikšti kokį nors vidinį kodą. Ne, kit’as prašo tikro kortelės PIN. Yra ir klaidos būsena “Įvestas PIN kodas neteisingas. Bandykite dar kartą”, todėl operatorius gali bandyti surinkti daugiau nei vieną variantą.

Ką realiai galima padaryti su surinktais kortelės duomenimis

Jeigu operatorius gauna kortelės numerį, vardą ir pavardę, galiojimo datą bei CVV, jis turi praktiškai pilną statinių duomenų rinkinį card-not-present mokėjimams. Visa card-not-present sukčiavimą apibrėžia kaip situaciją, kai pirkimui fizinės kortelės nereikia. Todėl pirmas ir realiausias monetizavimo kelias čia yra internetiniai pirkimai, kortelės patikrinimai maža suma ir bandymai apeiti arba social engineering būdu išvilioti papildomą banko patvirtinimą.

PIN šį rinkinį padaro dar pavojingesnį, bet čia svarbu neperšokti per techniką. Vien kortelės numerio, vardo, galiojimo datos, CVV ir PIN neužtenka nukopijuoti EMV lusto. EMVCo paaiškina, kad lustas kiekvienai operacijai naudoja dinaminius kriptografinius duomenis ir yra labai sunkiai padirbamas.

Fizinei counterfeit kortelei paprastai reikia magnetic-stripe arba pilnų track duomenų. PCI SSC atskirai skiria kortelės turėtojo duomenis nuo sensitive authentication data, kur patenka CVV, pilni track duomenys ir PIN. Europol aprašytuose skimming atvejuose klonuotos kortelės buvo gaminamos būtent iš nukopijuotos magnetinės juostos, o PIN naudotas išgryninimui ar mokėjimams terminaluose.

Šiame puslapyje nemačiau track duomenų rinkimo, todėl teiginys “sukčius gali nuklonuoti tavo EMV kortelę vien iš formos” būtų per stiprus. Tikslus verdict’as toks: surinktų duomenų pakanka rimtam internetinio mokėjimo sukčiavimui. Jeigu tas pats operatorius track duomenis gauna kitu kanalu, PIN gali padėti panaudoti counterfeit kortelę ten, kur dar priimama magnetinė juosta arba veikia fallback scenarijus.

Phishing kit’o reverse engineering

Čia jau nebeužteko strings ir kelių grep. Abu obfuskuotus aplikacijos bundle’us išskleidžiau, atkūriau jų custom Base64 lookup lenteles ir statiškai pakeičiau 19 075 string lookup iškvietimus. Iš viso gavau 3 495 iškoduotas reikšmes. Bundle’ų neimportavau ir nevykdžiau. Kitaip tariant, perskaičiau mechanizmą jo neįjungdamas.

Reverse engineered parking phishing kit architecture

Architektūra susideda iš trijų aiškių sluoksnių:

FailasDydisKą jis daro
CMjzun1n.js53 382 Bplonas UNIPARK brand’o sluoksnis su tekstais, 3,75 Eur suma, puslapiais ir renkamų asmens laukų sąrašu
BD53Kn13.js684 970 Bbendras phishing engine su formomis, validacija, kortelių logotipais, saugojimu, operatoriaus state machine ir anti-analysis
DDXZMe5D.js182 967 BVue runtime ir Socket.IO bei Engine.IO klientas

Tai svarbus skirtumas. Čia ne vienkartinis UNIPARK puslapis, kurį kažkas sulipdė per vakarą. UNIPARK dalis yra skin’as ant bendro engine. Serveris dar gali atsiųsti userSiteConfig, pakeisti nustatymus ir nurodyti kitą backUrl. Tas pats pagrindas todėl gana pigiai perrengiamas RingGo, EasyPark ar kitu brand’u.

Ką tikrina ir saugo klientas

Kortelės numeriui taikomas Luhn patikrinimas, leidžiama 15 arba 16 skaitmenų, o brand’as parenkamas pagal BIN pradžią. Galiojimo data turi būti MM/YY formato ir nepasibaigusi. CVV laukas priima tris arba keturis skaitmenis. Formose yra browser autocomplete reikšmės cc-number, cc-exp ir cc-csc.

Renkami duomenys laikomi reaktyviame bendrame objekte ir periodiškai išsaugomi naršyklėje. localStorage ir sessionStorage reikšmės užšifruojamos AES-CBC, o saugojimo raktų pavadinimai pakeičiami MD5 reikšmėmis. Tam naudojama statinė, tiesiai klientui atiduodama rakto medžiaga. Tai nėra reali apsauga nuo tyrėjo, bet paprastam vartotojui DevTools lange duomenys neatrodo kaip aiškus JSON.

Įdomus reuse indikatorius yra ir tai, ko UNIPARK flow nenaudoja. Bendrame engine likę banko sąskaitos, filialo numerio, SSN, American Express papildomo CVV ir custom code komponentai. Vadinasi, framework’as kurtas daugiau nei vienam parkingo scenarijui.

Operatorius renkasi kitą ekraną

Kai auka pateikia duomenis, frontend nelaukia vieno galutinio success. Jis priima operation būseną ir pagal ją perjungia puslapį:

Serverio būsenaAukos ekrane
rejectedkortelės klaida ir grįžimas į mokėjimą
rejectedCodeneteisingo kodo klaida
waitVerificationPhonetelefono OTP
waitVerificationEmailel. pašto kodas
waitVerificationPinkortelės PIN
waitVerificationExpressCvvpapildomas American Express CVV
waitVerificationAppbanko programėlės patvirtinimas
waitVerificationCustomCodeoperatoriaus aprašytas papildomas kodas
completedsėkmės puslapis

resendCode, confirmedApp ir notReceivedApp pranešimai leidžia operatoriui matyti, ką auka daro tarp ekranų. Tai ne automatinis checkout’as. Tai interaktyvus credential harvesting flow.

Anti-analysis nėra dekoracija

Engine skaičiuoja headless riziką pagal navigator.webdriver, ChromeDriver ir CDP artefaktus, Playwright bei Puppeteer požymius, User-Agent, WebGL renderer’į, plugin’us, kalbas, worker neatitikimus, canvas, audio, WebRTC, media devices, permissions, battery ir lango matmenis.

Svarbiausia radinio dalis yra ne pats signalų sąrašas. Kai galutinis score pasiekia 0,31, aplikacija pažymi lankytoją kaip isSpider ir praleidžia normalų konfigūracijos bei Socket.IO inicializavimą. Taigi automatinis scanner’is gali gauti puslapio failus, bet nepamatyti tokio pat backend flow kaip realus mobilus lankytojas. Ankstesnį atsargesnį vertinimą čia galiu pataisyti: šiame build’e anti-analysis rezultatas tikrai daro įtaką vykdymo keliui.

Tai taip pat paaiškina, kodėl vien screenshot’u ar DOM snapshot’u pasikliauti negalima. Static bundle analizė šiuo atveju davė daugiau nei bandymas apsimesti naršykle.

Backend ir operatoriaus valdomas flow

Frontend jungiasi prie to paties hosto per Socket.IO, naudodamas WebSocket arba polling transportą ir kelią /console. Default adresas surenkamas iš window.location.protocol ir window.location.host, todėl kode nėra atskiro hardcoded C2 domeno. Prisijungimo query turi uuid ir shopHost, o klientas siunčia changleField, submitData bei notice tipo įvykius. Taip, changleField parašytas būtent taip. Net phishing panelė turi savo typo.

Pranešimų turinys šifruojamas AES-CBC su statiniais raktų duomenimis, įrašytais pačiame bundle’e. Serverio config atsakymas gali pateikti userSiteConfig ir backUrl, todėl backend adresas teoriškai gali būti pakeistas dinamiškai, nors šiame statiniame deployment’e atskiros reikšmės nebuvo.

Šifravimas čia nepadaro puslapio saugaus. Jis tik apsunkina network telemetry analizę, nors raktas vis tiek atiduodamas kiekvienam lankytojui kartu su JavaScript.

Kodas siunčia laukų pakeitimus backend’ui ir priima operatoriaus operation pranešimus. Pagal juos auka gali būti perjungiama į:

  • telefono OTP
  • el. pašto OTP
  • banko programėlės patvirtinimą
  • kortelės PIN
  • CVV ar kitą custom code
  • klaidos ir pakartotinio bandymo būseną.

Tai labiau panašu į operatoriaus prižiūrimą phishing panelę nei į vieną statišką HTML formą. Galutinis tikslas gali keistis pagal tai, kokią kortelę ar banką įveda auka.

Čia svarbus skirtumas tarp inference ir fakto. Victim bundle’e nėra operatoriaus dashboard URL, prisijungimo formos ar admin panelės kodo. Panelės egzistavimą vertinu pagal abipusį operation flow, būsenų valdymą ir operatoriaus galimybę parinkti kitą aukos ekraną. /console yra Socket.IO collection ir control kelias, o ne įrodytas viešas admin puslapis.

URLScan padėjo patikrinti, ar /console tebuvo nenaudojamas kodas. Paieška filename:console AND filename:DDXZMe5D.js grąžino visus 163 su core hash susietus skenus. Vadinasi, scan’ų metu naršyklės realiai kreipėsi į šį kelią.

Anti-analysis modulio vieta vykdymo grandinėje aprašyta aukščiau. Jis ne tik renka signalus. Jo rezultatas sprendžia, ar bus inicijuota normali konfigūracija ir /console ryšys.

Telegram patikra

Dviejuose obfuskuotuose aplikacijos bundle’uose iškodavau 3 495 string’us. Tarp jų nebuvo api.telegram.org, bot token, chat_id, sendMessage, Telegram kanalo, admin URL ar dashboard kelio. URLScan kombinacijos su api.telegram.org, telegram.org, sendMessage ir bot taip pat grąžino nulį.

Taigi client-side Telegram integracijos įrodymų nėra. Tai nereiškia, kad operatorius negalėjo iš serverio persiųsti įrašų į Telegram ar kitą platformą. Backend kodo nematome, todėl toks teiginys liktų spėjimas. Publikacijoje jo kaip fakto nededu.

Ar /console leidžia rasti visą infrastruktūrą?

Vien /console nėra pakankamai unikalus IOC. Tokį kelią gali naudoti ir teisėtos aplikacijos, todėl akla paieška prigamintų false positives. Naudingas rezultatas gavosi tik sujungus kelią su kit’o artefaktu:

1
filename:console AND filename:DDXZMe5D.js

Ši URLScan užklausa grąžino 163 įrašus. Tai buvo tas pats 163 skenų rinkinys, kurį gavau pagal core bundle hash. Toks sutapimas patvirtina, kad /console yra aktyvus šios kit’o šeimos network požymis, bet ne atskiras būdas stebuklingai pamatyti visą backend.

Praktiškas hunting derinys yra /console, core response hash, statinių failų vardai, changleField typo, URL keliai, brand’o šablonas, serverio header ir laiko langas. Taip galima rasti viešai nuskenuotus deployment’us ir sekti naujus. Negalima garantuoti, kad radome “visą infrastruktūrą”. URLScan nemato privačių hostų, nenuskenuotų domenų, Cloudflare paslėpto origin, server-side relay ar operatoriaus dashboard, jeigu jis laikomas kitame tinkle.

Kaip vienas domenas tapo 126 hostais

Čia buvo svarbiausias pivotas. Dabartinių failų raw SHA-256 palyginau su URLScan response hash indeksu.

FailasSHA-256Viešas sutapimas
CMjzun1n.js8d5e6597ebac3ca5419ad4fe5c422fb59f98948d5fa32365b1730bdd06f005dcunipark.fxqro[.]xin
BD53Kn13.js0bdd6862589aeb9603ba1d3a8f3efe85ed987f16a954816ad85debd13c39919aunipark.fxqro[.]xin
BbPeY660.css34008efeed81b1f951e7ce4e95760293729ae1e84affe5115570317d3f2d4c26unipark.fxqro[.]xin
C6NDXE1b.cssb38ea1ff18118191c1ccdd92a882ac5d2132e2393fddb4c2132476b25924e922unipark.fxqro[.]xin
DDXZMe5D.js7068d7b09a8afb99b051847dd65602e054f69c33d0cd8161ab986eae71538a2b163 URLScan įrašai

Pirmi keturi exact hash sutapimai rodo, kad unipark.fmqr[.]ink ir unipark.fxqro[.]xin yra praktiškai tas pats frontend deployment’as. Penktas bundle’as yra bendras platesnei kit’o šeimai.

UNIPARK domeno ir platesnio parkingo phishing kit'o pivotas

To paties core kit'o RingGo varianto vieša URLScan ekrano nuotrauka 2026 m. rugpjūčio 11 d. URLScan užfiksuotas ringgo.zqmk[.]cloud/com variantas. Struktūra liko ta pati. Pasikeitė brand’as, spalvos ir tekstas.

URLScan paieška pagal bendrą DDXZMe5D.js hash nuo 2026 m. birželio 30 d. iki rugpjūčio 11 d. grąžino:

Brandinis hostname prefiksasSkenų skaičiusPavyzdžiai
RingGo59ringgo.zqmk[.]cloud, ringgo.mqrka[.]ink
EyeParking55eyeparking.nqzro[.]ink, eyeparking.mxwle[.]club
UNIPARK3 ankstesnicxmpvqtr[.]club, novorb[.]xyz, fxqro[.]xin
kiti parkingo brand’ai46EasyPark, Q-Park, NCP ir generiniai parkingo hostai

Iš viso tai buvo 163 scan records ir 126 unikalūs hostname’ai. Dabartinis unipark.fmqr[.]ink į tą skaičių neįtrauktas, nes URLScan jo dar nebuvo indeksavęs.

Ankstesni UNIPARK hostai:

1
2
3
4
hxxps://unipark[.]cxmpvqtr[.]club/com/
hxxps://unipark[.]novorb[.]xyz/com/
hxxps://unipark[.]fxqro[.]xin/com/
hxxps://unipark[.]fmqr[.]ink/com/      # šiame incidente

Visi keturi root domenai registruoti per Dominet (HK) Limited, naudojo Cloudflare vardų serverius, atsitiktinai atrodančius vardus, brandą subdomene ir tą patį /com/ kelią. Trys naujausi hostai dabar rodo į siena.nksc.lt. Seniausias neberezolvina.

Dar viena graži kodo liekana yra localStorage raktas:

1
uk_ringgo_fine_plate

UNIPARK puslapyje paliktas RingGo vardas bei angliški RingGo fallback tekstai rodo, kad lietuviška versija nebuvo kurta nuo nulio. Brandas pakeistas, parkingo kit’as paliktas. Kinų kalbos developer label’iai, tokie kaip PIN验证页, irgi liko bundle’e, bet tai nėra attribution Kinijai. Tai gali būti builder’io, autoriaus, vertėjo ar nukopijuoto komponento pėdsakas.

Svarbiausia analitinė riba: exact hash patikimai sieja programinį artefaktą. Jis savaime neįrodo, kad visus 126 hostus valdė tas pats žmogus. Kit’as gali būti nuomojamas, parduodamas arba kopijuojamas. Todėl “same kit family” confidence yra high, o “same operator” lieka medium.

IP pivotas: už Cloudflare buvo ir tiesioginis sluoksnis

Vien hash rezultatų domenų sąrašas neparodo, kaip kit’as buvo hostinamas. Suskirsčius visus 163 URLScan įrašus pagal ASN ir web serverį gavosi du aiškūs modeliai:

Delivery modelisSkenaiUnikalūs hostaiMatoma infrastruktūra
Cloudflare121101AS13335, bendri Cloudflare edge IP
tiesioginis OpenResty4124AS132203 Aceville/Tencent Cloud
tiesioginis nginx11AS132203 Aceville/Tencent Cloud

Parking phishing kit'o Cloudflare ir tiesioginio hostingo sluoksniai

AS132203 adresų RDAP objektai priklauso ACEVILLEPTELTD-SG. Tencent Cloud dokumentuose Aceville Pte Limited nurodoma kaip Tencent Cloud grupės paslaugų subjektas. Tai hosting provider kontekstas, ne operatoriaus attribution Kinijai ar Singapūrui.

Hash susietoje imtyje buvo 12 tiesioginių IP:

1
2
3
4
43.153.54[.]89      43.135.161[.]140    170.106.154[.]69
43.157.97[.]37      101.32.47[.]254     43.160.226[.]55
43.165.174[.]107    43.172.91[.]66      43.162.121[.]115
43.160.238[.]159    43.156.224[.]182    43.162.103[.]2

Keli IP buvo naudojami labai kryptingoms domenų grupėms:

Tiesioginis IPHash susieti skenaiVisi vieši kaimyniniai domenaiRyškiausias pattern’as
43.153.54[.]891130parkingas, DPD, Australia Post, SingPost, government ir traffic lure’ai
170.106.154[.]69573didelė RingGo vardų rotacija, taip pat Evri ir Royal Mail
43.172.91[.]66253beveik vien RingGo typo domenai
43.135.161[.]14075EasyPark variantai
43.157.97[.]3747Q-Park variantai
43.165.174[.]10736Q-Park variantai
101.32.47[.]254310EasyPark, GLS ir mokesčių tarnybos imitacijos
43.156.224[.]182133RingGo ir DPD Local imitacijos

Paieška per visus 12 IP grąžino 402 viešus skenus ir 249 unikalius kaimyninius domenus. Pagal vardus 121 buvo RingGo, 29 Q-Park, 13 kitų parkingo brand’ų, 27 delivery, 13 government, tax ar police lure’ai, o 46 liko kitose kategorijose.

Šitie 249 nėra “249 patvirtinti tos pačios kampanijos domenai”. IP kaimynystė yra silpnesnis ryšys nei exact hash, ypač public cloud aplinkoje. Vis dėlto daug vienodo formato brand typo domenų tame pačiame tiesioginiame IP, tuo pačiu metu ir su tuo pačiu OpenResty stack’u yra geras kandidatų sąrašas tolesniam hunting’ui.

URL struktūra ir DNS modeliai

Kit’as nebuvo pririštas prie vieno kelio. Viešuose įrašuose matėsi /com/, /uk/, /dk/, /cz/, /pay/, /d/ ir root variantai. UNIPARK, RingGo bei EyeParking dažnai naudojo brandą subdomene ir atsitiktinį root domeną. Kiti deployment’ai dėjo brandą tiesiai į root, pavyzdžiui ringgo??-co[.]shop ar q-park??[.]top.

Tiesioginiai AS132203 hostai dažnai naudojo ns7.alidns.com ir ns8.alidns.com arba HiChina DNS poras. Cloudflare-fronted grupėje dažniau matėsi Dominet registraras ir Cloudflare vardų serveriai. Tai du naudingi infrastruktūros šablonai, tačiau ne unikalūs actor fingerprint’ai.

Telefono numerio pivotas

+63 pagal ITU numeracijos planą yra Filipinų šalies kodas, o po jo einantis 9 atitinka mobiliojo numerio formatą. Viešoje paieškoje tiksliam +639519761812 numeriui neradau ankstesnių pranešimų, profilių ar patikimo subscriber įrašo.

Iš to galima pasakyti tik tiek:

  • ekrane rodomas numeris atitinka Filipinų mobiliojo numerio formatą
  • numeris galėjo būti reali SIM, SMS gateway, roaming numeris arba spoofintas sender ID
  • numerio prefiksas neparodo dabartinio operatoriaus dėl numerių perkėlimo
  • jis neįrodo, kad kampanijos operatorius yra Filipinuose.

Telefono numerį laikau delivery IOC, bet ne attribution IOC. Blokuoti ir raportuoti verta. Kurti iš jo operatoriaus biografiją neverta.

Attribution ir ką galime pasakyti sąžiningai

TeiginysConfidenceKodėl
SMS ir puslapis yra phishinghighbrand mismatch, naujas domenas, credential flow, kortelės PIN rinkimas
fmqr ir fxqro yra tas pats frontend buildhighketuri exact JS/CSS hash sutapimai
visi 126 hostai priklauso tai pačiai kit’o šeimaihighidentiškas core bundle hash ir bendra aplikacijos struktūra
UNIPARK domenai yra koordinuotos rotacijos dalismedium-hightas pats brandas, kelias, registraras, Cloudflare ir bundle
viską valdo vienas operatoriusmediumįmanomas bendras panelės operatorius, bet kit’as gali būti perparduodamas
operatorius yra Filipinuose arba Kinijojelowtelefono ir developer string pėdsakai nėra patikima geografija
buvo sėkmingai pavogti pinigaiunknownneturime aukų, bankų ar backend logų

IOC ir tyrimo pivotai

Kenkėjiškus URL palieku defangintus. Šaltinių ir oficialių institucijų URL žemiau yra normaliai paspaudžiami.

TipasReikšmėPastaba
SMS siuntėjas+63 951 976 1812stebėtas šiame incidente. Nuosavybė nepatvirtinta
URLhxxps://unipark[.]fmqr[.]ink/compateiktas SMS
ankstesnis URLhxxps://unipark[.]fxqro[.]xin/com/full frontend exact-hash clone
ankstesni URLunipark[.]novorb[.]xyz/com/, unipark[.]cxmpvqtr[.]club/com/tas pats core kit’as
Socket.IO path/consolesame-origin C2 kanalas
klientas → serverischangleField, submitData, noticeduomenų ir būsenos įvykiai
serveris → klientasconfig, operationkonfigūracija ir operatoriaus valdomi ekranai
localStorageuk_ringgo_fine_plateRingGo kit’o reuse pėdsakas
HTML markerAff2dfwOEgleoYXZnKahKIPfXahqbYL3ErZahQ27wc00bAjzpaslėptas puslapio elementas
core SHA-2567068d7b09a8afb99b051847dd65602e054f69c33d0cd8161ab986eae71538a2bplačiausias kit’o pivotas
tiesioginis hostingas12 aukščiau išvardytų AS132203 IPtikrinti kartu su domenu, SNI ir laiku

Cloudflare edge IP ir siena.nksc.lt adresų į blocklist nedėčiau. Pirmi yra shared infrastruktūra. Antras yra containment kryptis.

Šaltiniai

  1. Pirminis šaltinis: 2026 m. rugpjūčio 11 d. gautos SMS ekrano nuotrauka, pateikta šiam tyrimui.
  2. fmqr.ink RDAP registracijos įrašas
  3. fxqro.xin RDAP registracijos įrašas
  4. novorb.xyz RDAP registracijos įrašas
  5. Certificate Transparency įrašai per Cert Spotter
  6. URLScan exact core hash paieška
  7. Ankstesnio unipark.fxqro.xin deployment’o URLScan įrašas
  8. Ankstesnio unipark.novorb.xyz deployment’o URLScan įrašas
  9. URLScan paieška, jungianti core bundle ir /console request’ą
  10. URLScan vieši įrašai IP 43.153.54.89
  11. APNIC RDAP objektas IP 43.153.54.89
  12. Tencent Cloud dokumentai, nurodantys Aceville Pte Limited
  13. NKSC forma pranešti apie sukčiavimo svetainę
  14. UNIPARK kontaktai ir oficialūs mokėjimo kanalai
  15. Apple: kaip atpažinti phishing žinutes
  16. Apple: kaip pranešti apie spam ir blokuoti siuntėją
  17. ITU nacionalinių numeracijos planų sąrašas
  18. PCI SSC mokėjimo kortelių duomenų terminų žodynas
  19. Visa apie card-not-present sukčiavimą
  20. EMVCo apie EMV lusto apsaugą nuo counterfeit kortelių
  21. Europol apie card-not-present sukčiavimą, skimming ir counterfeit korteles
  22. RingGo varianto ringgo.zqmk.cloud URLScan įrašas
  23. Cisco Talos: Dissecting the JWR phishing framework
  24. Cisco Talos publikuotas JWR IOC rinkinys
  25. APNIC RDAP objektas Talos JWR IP 43.156.227.15
  26. APNIC RDAP objektas Talos JWR IP 43.160.241.151

Šis tyrimas dokumentuoja nusikalstamos infrastruktūros požymius ir gynybinius pivotus. UNIPARK, RingGo, EyeParking, EasyPark, Q-Park, NCP, Cloudflare ir kiti paminėti teisėti paslaugų teikėjai nėra laikomi kampanijos dalyviais vien todėl, kad jų vardai ar infrastruktūra buvo panaudoti arba imituoti.

Versija 1.0

Atnaujinimų istorija

  1. Pirmoji publikacija.

Paskutinė redakcinė peržiūra: . Po dabartinės versijos esminių pataisymų neužregistruota.

Sekite tyrimus

Nauji tyrimai be sekimo technologijų

Prenumeruokite kalbos RSS srautą arba sekite Deividą „LinkedIn“. HECAVEX nenaudoja reklamos sekiklių ar rinkodaros pikselių.

This post is licensed under CC BY 4.0 by the author.