Pereiti prie turinio
Nulaužta? Skubi pagalba Pasirinkti planą

Antivirusas rado 0 pakeistų failų, o pirkėjų kortelių duomenys vis tiek nutekėjo

Petras Pauliūnas4 min. skaitymo

0 pakeistų failų: skimeris gyveno duomenų bazėje. Antivirusas rodė, kad švaru, o analitikos lauke buvo kortelių duomenis vagiantis kodas.

Neseniai mums paskambino el. parduotuvės savininkas. Hostingo tiekėjas jam persiuntė įspėjimą: kažkas pranešė, kad parduotuvės atsiskaitymo puslapyje yra kodas, kuris vagia pirkėjų mokėjimo duomenis.

Savininkas nesuprato, kaip taip gali būti. Serveryje veikė antivirusas, ir jis nieko nerado.

Antivirusas neklydo. Jis patikrino visus svetainės failus ir nė vieno pakeisto nerado, nes kenkėjiškas kodas buvo įrašytas duomenų bazėje.

Žemiau aprašome, kaip tas kodas ten pateko, kodėl jo niekas nepastebėjo ir ką galite patikrinti savo parduotuvėje.

Kas yra skimeris

Skimeriu vadinamas nedidelis JavaScript kodo gabalas, įterptas į parduotuvės puslapį. Pirkėjas mato įprastą atsiskaitymo puslapį ir suveda savo duomenis. Kodas tuos duomenis nusiunčia dar ir užpuolikui.

Parduotuvei tai niekaip nekenkia: užsakymai ateina, mokėjimai praeina, klaidų nėra. Todėl skimeris gali veikti mėnesius, kol kuris nors pirkėjas pastebi keistų operacijų savo kortelėje ir pradeda aiškintis, kur jos duomenys galėjo nutekėti.

Kaip tai veikė

Kaip veikė skimeris, keturi žingsniai: seno partnerio slaptažodis (darbai seniai baigti, paskyra liko aktyvi), nauja „sisteminė“ administratoriaus paskyra, kodas įrašytas į analitikos lauką duomenų bazėje, veikia tik atsiskaitymo puslapyje. Failų skeneris rado 0 pakeitimų, duomenų bazėje užteko vieno lauko.
Atidaryti didesnį vaizdą

Užpuolikas prie administravimo skydelio prisijungė tikru vartotojo vardu ir slaptažodžiu. Paskyra priklausė išoriniam partneriui, kuris kažkada dirbo su svetaine. Darbai buvo seniai baigti, bet paskyros niekas neišjungė.

Prisijungęs jis susikūrė dar vieną administratoriaus paskyrą ir pavadino ją taip, kad atrodytų sisteminė, maždaug „Built-in account“. Peržiūrint vartotojų sąrašą tokią paskyrą lengva praleisti.

Tada jis atsidarė parduotuvės nustatymus ir įklijavo savo kodą į lauką, skirtą Google Analytics kodui. Viskas, kas įrašyta tame lauke, rodoma kiekviename svetainės puslapyje. Užpuolikui nereikėjo nieko laužti, jis tiesiog pasinaudojo standartine funkcija.

Kodas buvo parašytas taip, kad atrodytų kaip senas Google Analytics fragmentas, ir įsijungdavo tik tada, kai puslapio adrese yra žodis „checkout“. Pagrindiniame puslapyje, kategorijose ir prekių puslapiuose jo nebuvo. Savininkas, kasdien užeinantis į savo parduotuvę, nieko nepastebėtų, kaip ir dauguma išorinių skenerių, kurie tikrina tik pagrindinį puslapį.

Kaip atrodė kodas

Techniniams skaitytojams — štai kaip tas laukas atrodė iš tikrųjų (domeną ir identifikatorius pakeitėme). Tarp dviejų tikrų Google eilučių įterptas vienas papildomas blokas:

Anonimizuota analitikos kodo lauko kopija: tarp tikrų Google Analytics eilučių įterptas užmaskuotas JavaScript blokas. Pažymėta: suskaidytas kintamojo vardas, base64 užkoduotas skimerio adresas, po raidę suskaidytas žodis „checkout“ ir tikra Google nuoroda pabaigoje.
Atidaryti didesnį vaizdą

Keli dalykai, kuriuos verta pastebėti. Kintamasis vadinamas GoogleAnalyticsObject, bet sujungtas iš dalių, kad jo nerastų paieška. Adresas, iš kurio kraunamas skimeris, užkoduotas base64, todėl akimi jo nesimato. Žodis „checkout“ irgi užkoduotas ir dar suskaidytas po vieną raidę. Pabaigoje palikta nuoroda į tikrą analytics.js, kad visas blokas atrodytų patikimai.

Kodėl antivirusas nieko nerado

Dauguma hostingo antivirusų ir saugumo įskiepių skenuoja serverio failus. Jie ieško žinomų kenkėjiško kodo požymių arba failų, kurie pasikeitė.

Šiuo atveju pasikeitusių failų nebuvo. Kodas buvo duomenų bazėje, kur saugomos prekės, užsakymai ir parduotuvės nustatymai, o failų skeneris jos netikrina.

Ši problema būdinga ne vienai platformai. OpenCart turi analitikos kodo lauką. WordPress ir WooCommerce svetainėse tą patį daro „Header / Footer“ kodo įskiepiai ir temų nustatymai. Beveik kiekvienoje sistemoje yra vieta, kur administratorius gali įklijuoti skriptą, ir kiekvienoje tokioje vietoje galima paslėpti skimerį.

Iš kur užpuolikas gavo slaptažodį

Be serverio prieigos žurnalų to tiksliai nustatyti neįmanoma, bet labiausiai tikėtinas atsakymas yra infostealeris. Taip vadinamos kenkėjiškos programos, kurios užkrėstame kompiuteryje surenka visus naršyklėje išsaugotus slaptažodžius. Surinkti duomenys parduodami, o vėliau perparduodami dar daug kartų.

Viešose nutekėjusių duomenų bazėse radome, kad prieš kelerius metus buvo užkrėstas vieno su svetaine dirbusio žmogaus kompiuteris. Tarp pavogtų duomenų buvo ir šios parduotuvės administravimo adresas. Jei slaptažodis nuo to laiko nepakeistas, jį galima panaudoti ir po ketverių metų.

Vadinasi, parduotuvės saugumas priklauso ir nuo kiekvieno kompiuterio, iš kurio kas nors kada nors prie jos jungėsi.

Ką patikrinti savo parduotuvėje

Tam užteks penkių minučių, specialisto nereikia.

  1. Administratorių sąrašas. Atsidarykite vartotojų sąrašą administravimo skydelyje ir įsitikinkite, kad pažįstate kiekvieną paskyrą. Atidžiau pažiūrėkite į paskyras, kurių pavadinimai atrodo sisteminiai, ir į tas, kurios niekada nebuvo prisijungusios.
  2. Kodo laukai. Peržiūrėkite visas vietas, kur įklijuojamas kodas: OpenCart analitikos nustatymus (Plėtiniai → Analitika), WordPress „Header / Footer“ įskiepius ir temos nustatymus. Ten turėtų būti tik tai, ką atpažįstate, pavyzdžiui, Google Tag Manager, Analytics ar Meta Pixel.
  3. Atsiskaitymo puslapis. Įsidėkite prekę į krepšelį, eikite į atsiskaitymo puslapį ir paspauskite Ctrl+U, kad pamatytumėte puslapio kodą. Tada paspauskite Ctrl+F ir paieškokite „atob“. Jei rasite jį šalia ilgos nesuprantamų raidžių eilutės, parodykite tai programuotojui.
  4. Išoriniai partneriai. Surašykite, kas turi prieigą prie parduotuvės: agentūros, SEO specialistai, buvę programuotojai. Išjunkite paskyras tų, kurių darbai baigti.

Ką padarėme, kad tai nepasikartotų

Pašalinę kodą ir užblokavę paskyras, įdiegėme dar kelis dalykus.

Administravimo skydelį perkėlėme kitu adresu ir apsaugojome papildomu slaptažodžiu. Dabar net turint pavogtus prisijungimo duomenis į jį nepateksi.

Kiekvienas partneris gauna atskirą paskyrą, kuri išjungiama, kai darbai baigiami.

Kasdien tikriname pakeitimus ne tik failuose, bet ir duomenų bazėje: administratorių paskyras, kodo laukus ir parduotuvės nustatymus. Jei per naktį atsiranda naujas administratorius arba pasikeičia analitikos laukas, savininkas ryte gauna laišką, kuriame parodyta, kas tiksliai pasikeitė. Jei toks stebėjimas būtų veikęs anksčiau, šis įsilaužimas būtų pastebėtas kitą rytą, o ne po kelių savaičių.

Kiek tai kainuoja

Kortelių duomenų nutekėjimas yra asmens duomenų saugumo pažeidimas. Pagal BDAR, apie jį sužinoję turite 72 valandas įvertinti riziką ir prireikus pranešti Valstybinei duomenų apsaugos inspekcijai. Apie incidentą turėtų sužinoti ir mokėjimų partneris.

Be to, reikės laiko tyrimui, galbūt patikrinimų, o labiausiai nukentės pirkėjų pasitikėjimas. Jį atkurti sunkiau nei išvalyti kodą.

Antivirusas yra reikalingas, bet jis tikrina tik failus. Todėl verta žinoti, kas praneš, jei per naktį parduotuvėje atsiras naujas administratorius ar pasikeis nustatymai.

Ar žinote, kiek administratorių paskyrų šiandien yra jūsų parduotuvėje ir kam priklauso kiekviena? Jei nesate tikri, parašykite mums, padėsime išsiaiškinti.