Detekcija Magecart napada: Kako pronaći nevidljivi skimer
Magecart predstavlja jednu od najopasnijih pretnji za modernu e-trgovinu. Za razliku od klasičnih hakerskih napada koji obaraju sajt ili kradu bazu podataka, Magecart deluje tiho. On ne krade od vas – on krade direktno od vaših kupaca u trenutku kada oni imaju najviše poverenja u vaš brend: na stranici za plaćanje.
Pre nego što počnete: Procena ozbiljnosti situacije
- Usamljeni slučaj (jedan klijent): Ukoliko je HOLEST DYNAMIC DOM GUARDIAN prijavio upozorenje samo za jednog klijenta, postoji velika verovatnoća da je maliciozni kod umetnut na njegovom računaru ili uređaju (npr. lokalni malver, kompromitovan browser). U tom slučaju vaš sajt je najverovatnije u redu i preporučuje se da klijent proveri sopstveni uređaj.
- Višestruki slučajevi – hitno reagovanje: Ukoliko HOLEST DYNAMIC DOM GUARDIAN prijavljuje upozorenja za više klijenata, ili se problem javlja i kada vi lično probate da obavite transakciju – to je alarm koji zahteva hitno pristupanje otklanjanju. Svaki minut kašnjenja znači da se podaci vaših kupaca aktivno kradu.
- Pažnja – pretnja se može sakrivati: U nekim slučajevima pretnje ovog tipa imaju ugrađenu zaštitu od otkrivanja: maliciozni kod se automatski skriva ili deaktivira kada detektuje da sajtu pristupa administrator (na osnovu kolačića sesije, URL parametara ili specifičnih zaglavlja zahteva). Zbog toga je preporučljivo testirati sajt iz anonimnog/inkognito prozora, bez prijavljivanja na admin nalog.
U nastavku je opisan način kako se, u stvarnom slučaju, locira tačan skript iz kojeg dolazi maliciozni kod.
Pre istrage: Obavezna priprema sajta
- Uključite maintenance mode (mod održavanja): Dok vi istražujete, novi posetioci ne smeju dolaziti na checkout i unositi podatke kartice. Uključite maintenance mode putem vašeg WP plugina za održavanje – posetiocima će biti prikazana stranica „Sajt je trenutno u održavanju“, dok vi kao administrator i dalje vidite sajt normalno.
- Isključite HolestPay ili drugi platni modul: Da biste mogli slobodno da ispitujete checkout stranicu bez uplitanja HOLEST DYNAMIC DOM GUARDIAN sistema, morate privremeno deaktivirati HolestPay plugin u WordPress admin panelu (Dodaci → Holest Pay → Deaktiviraj). Deaktivacijom plugina automatski se deaktivira i D-DOM Guardian zaštita, što vam omogućava da vidite malicioznu formu i pratite njen izvor bez ometanja.
Faza 0: Uočavanje anomalija
Većina vlasnika prodavnica sazna za napad tek kada ih banka ili kupci obaveste o sumnjivim transakcijama. Međutim, postoje vizuelni indikatori koje možete primetiti sami:
- Jezička barijera: Ako je vaš sajt na srpskom, a polja za karticu su odjednom na engleskom (npr. „Card Number“ umesto „Broj kartice“), to je crvena zastavica.
- Zakašnjelo učitavanje: Skimeri često čekaju da se svi legitimni skriptovi učitaju pre nego što „ubrizgaju“ svoju lažnu formu. Ako vidite da se forma za plaćanje promeni ili trepne par sekundi nakon učitavanja – verovatno ste pod napadom.
Uočavanje i analiza lažne forme (Forenzika elemenata)
Napad počinje time što na checkout stranici primetite formu za unos kartice koja nije deo vašeg originalnog dizajna. Najčešći znak je da su labele i polja na engleskom jeziku, dok je ostatak sajta na drugom jeziku.

Slika 1 – Lažna kartična forma napadača pojavila se na checkout strani pored legitimne forme procesora plaćanja.
Uradite Desni klik → Inspect direktno na sumnjivo polje. U panelu Elements pronađite karakteristične atribute tog elementa: id, name ili placeholder. Oni su „potpis“ napadača i poslužiće nam kao okidač za zamku.

Slika 2 – Kroz Inspect biramo karakteristične nizove (sq-pf-unq i card_number) na čiju pojavu ćemo aktivirati breakpoint.
Malver je konstruisao kompletnu lažnu formu (imitacija Square sistema) koja je sadržala polja za broj kartice, datum isteka, CVV i opciju čuvanja kartice. Važno je da se ovaj HTML ne nalazi statički u izvornom kodu stranice – malver ga kreira dinamički kroz JavaScript, u trenutku učitavanja. To potvrđujemo pretragom DOM-a (npr. trazimo prefiks sq-pf-unq) :

Slika 2-2 – Pretragom izvornog koda po ključnim rečima (sq-pf-unq, card_number) ne pronalazimo ništa – forma se konstruiše dinamički kroz JavaScript.
Upravo zbog toga što je forma dinamička, standardna pretraga koda ne pomaže. Moramo uhvatiti JavaScript u trenutku kada pravi tu formu.
Postavljanje digitalne zamke (Trap Script)
Pošto se maliciozni kod izvršava dinamički i kratkotrajno, moramo naterati browser da automatski pauzira izvršavanje u trenutku kada se sumnjivi HTML pojavi u DOM-u. Za to koristimo MutationObserver kombinovan sa nativnim debugger naredbama.
Pripremite kod zamke poput ovog tako da aktivira breakpoint (debugger) kada detektuje kreiranje karakterističnih delova maliciozne forme:
(function magecartGlobalSniffer() {
console.log("Sniffer aktivan. Pratim svaku promenu u DOM-u...");
// 1. MutationObserver - hvata apsolutno sve što uđe u HTML
const observer = new MutationObserver(function observerCallback(mutations) {
mutations.forEach(function mutationHandler(mutation) {
mutation.addedNodes.forEach(function nodeHandler(node) {
if (node.nodeType === 1) {
const htmlContent = node.outerHTML || "";
if (htmlContent.includes('sq-pf-unq') || htmlContent.includes('card_number')) {
console.warn("DETEKTOVANO UBACIVANJE ČVORA!");
console.log("Element:", node);
debugger; // Ovde gledaj Call Stack!
}
}
});
});
});
observer.observe(document.documentElement, {
childList: true,
subtree: true
});
// 2. Presretanje document.write (čest metod starijih skimera)
const originalWrite = document.write;
document.write = function interceptedWrite(content) {
if (content && (content.includes('sq-pf-unq') || content.includes('card_number'))) {
console.warn("DETEKTOVAN document.write!");
debugger;
}
return originalWrite.apply(this, arguments);
};
// 3. Pomoćna funkcija za ručnu proveru Stack-a u konzoli
window.getMalwareStack = function() {
try {
throw new Error("Manual Stack Trace");
} catch (e) {
return e.stack;
}
};
console.log("Sistem je spreman. Ako se forma pojavi, debugger će se aktivirati.");
})();
'sq-pf-unq' i 'card_number' zamenite nizovima koje ste pronašli u Koraku 1 – to su okidači specifični za vaš napad.
Pre nego što nalepite zamku, u DevTools-u otvorite tab Sources i postavite generalni breakpoint što ranije u toku učitavanja stranice. Na taj način browser će stati pre nego što malver dobije šansu da postavi bilo šta, a vi ćete imati prostor da ubacite zamku kroz konzolu. Kada browser stane na tom breakpointu, u tabu Console nalepite gornji kod zamke i pokrenite ga. Od tog trenutka zamka je aktivna i čeka malver:

Slika 4 – Zamka je ubačena kroz konzolu dok je browser pauziran. Čim malver pokuša da konstruiše lažnu formu, automatski će se aktivirati breakpoint.
Hvatanje izvora (Call Stack analiza)
Nastavite učitavanje stranice. Kada malver pokuša da konstruiše lažnu formu, naša zamka će ga uhvatiti i browser će automatski pauzirati izvršavanje. Ekran postaje sivkast, a DevTools otvara tab Sources.

Slika 5 – Zamka je proradila: breakpoint se aktivirao u trenutku kada je malver pokušao da ubaci lažnu formu u DOM.
Ključ je u panelu Call Stack (desna strana u Sources tabu). On prikazuje hronološki lanac funkcija koje su dovele do kreiranja lažne forme. Pratite ga unazad – preskočite prvu stavku (to je naša zamka) i fokusirajte se na drugu ili treću.

Slika 6 – Prateći Call Stack unazad, lociramo tačan JavaScript fajl koji je pokrenuo ubacivanje lažne forme. U našem slučaju to je skript sa eksternog domena cms-manager.net.
cms-manager.net) ili ima nasumično ime poput ae83f2.js – pronašli ste napadača.
Pronalaženje „ulaza“ – kako se malver učitava na vaš sajt
Sada kada znamo URL malicioznog skripta, moramo pronaći gde i kako je ubačen na vaš sajt. Uradite View Page Source (Ctrl + U) i pretražite (Ctrl + F) pronađeni domen ili URL.
Magecart se obično učitava kao naizgled bezazlen script tag u zaglavlju ili podnožju sajta. Naša istraga je otkrila da je u HTML ubačen eksterni skript sa adrese: https://cms-manager.net/script.js

Slika 7 – U izvornom kodu stranice pronalazimo script tag koji učitava maliciozni skript sa eksternog domena. Ovo je „ulaz“ koji je napadač ostavio na serveru.
Ova linija nije deo vašeg originalnog koda – napadač ju je ubacio direktno u fajlove na serveru (najčešće kroz kompromitovan FTP/SSH nalog ili ranjivost u CMS pluginu).
Šta uraditi nakon detekcije?
grep -r "cms-manager.net" . ili find . -name "*.php" | xargs grep "cms-manager" gotovo sigurno neće dati nikakve rezultate – zaraženi PHP fajl postoji na serveru, ali string koji tražimo u njemu ne postoji u čitljivom obliku. Maliciozni URL je sakriven iza enkodovanja kao što su base64, gzip kompresija ili višestruka obfuskacija, pa ga pretraga ne može direktno prepoznati.
Kako locirati zaraženi fajl na serveru
Pošto znamo koji skript u browseru generiše problem, možemo metodom eliminacije pronaći koji modul ili fajl na serveru ga ubacuje:
- Gašenje modula jedan po jedan: Kroz admin panel postepeno deaktivirajte module/plugine i nakon svakog gašenja osvežite checkout stranicu. Kada se maliciozni skript prestane učitavati – poslednji isključeni modul je odgovoran.
- Pregled fajlova tog modula: Kada znamo koji modul je „krivac“, pregledamo njegove fajlove. Ono što tražimo su PHP fajlovi koji izgledaju sumnjivo – sadrže ogromne blokove enkodovanog sadržaja: dugačke stringove nasumičnih karaktera koji nemaju smisla na prvi pogled. Tipični obrasci su
eval(base64_decode(...)),eval(gzinflate(...)),eval(str_rot13(...))ili višestruko ugnežđeno dekodovanje. Legitimni moduli ne bi trebalo da imaju ovakve konstrukcije – ako pronađete PHP fajl sa stotinama ili hiljadama karaktera enkodovanog stringa, to je gotovo sigurno maliciozni kod. - Praćenje toka učitavanja: U DevTools-u, tab Network, filtriramo po tipu JS i pratimo koji fajl sa servera inicira zahtev prema
cms-manager.net. To nam direktno pokazuje koji fajl na sajtu poziva maliciozni eksterni skript.
Nakon što pronađete zaraženi fajl
- Promenite sve lozinke: FTP, SSH, WP-Admin, i bazu podataka – napadač je morao nekako da dođe do pristupa.
- Pregledajte ostale fajlove: Proverite
wp-config.phpi.htaccessza dodatne sumnjive izmene – često ima više od jednog zaraženog mesta. - Logovi servera: Proverite pristupne logove da vidite ko je i kada menjao fajlove u periodu kada se skimer pojavio.
- Obavestite procesora plaćanja: Ako je skimer bio aktivan, obavezno obavestite banku i procesora plaćanja radi zaštite kupaca koji su mogli biti pogođeni.
Ovaj vodič je kreiran u edukativne svrhe na osnovu stvarne forenzičke analize Magecart varijante.
Budite oprezni – bezbednost vaših kupaca je vaš prioritet.









