WordPress backdoor kao rezervni ključ za ulaz na sajt
← Blog

Kako pronaći backdoor na WordPress sajtu i ukloniti ga

Ažurirano Ivan Pantić

Postoji jedan scenario koji se ponavlja toliko često da ga prepoznamo pre nego što nam čovek završi rečenicu. Sajt je bio zaražen. Neko ga je očistio, ili je vlasnik sam obrisao ono što je delovalo sumnjivo. Nedelju ili dve je sve bilo u redu. A onda se sve vratilo, isto kao pre.

Ukratko: ako se infekcija vraća, skoro uvek postoji backdoor ili otvoren ulaz. Nađite rezervni ulaz, zatvorite rupu, pa pratite sajt narednih dana.

Kad se infekcija vraća posle čišćenja, u devet od deset slučajeva razlog je isti: postoji backdoor na WordPress sajtu koji niko nije našao. Čišćenje je uklonilo ono što se videlo, a ostavilo ono što je omogućavalo napadaču da se vrati kad god poželi.

U ovom tekstu objašnjavamo šta backdoor na WordPress sajtu tačno radi, zašto ga je teško primetiti, gde se najčešće krije, kako izgleda kad ga otvorite, i kojim redom ima smisla tražiti ga.

Šta backdoor zapravo radi

Najlakše poređenje je sa ključem. Zamislite da vam neko uzme ključ od stana, napravi kopiju i vrati original tako da nikad ne primetite da je nedostajao. Možete promeniti bravu na ulaznim vratima koliko god puta hoćete. Kopija i dalje otvara sporedna vrata za koja ste zaboravili da postoje.

Sporedna vrata kao slika za nevidljiv ulaz na server

Tehnički gledano, svaki backdoor je fajl koji prima naredbe spolja i izvršava ih na vašem serveru. Neki su bukvalno par redova koda: uzmu sadržaj iz jednog parametra u adresi i izvrše ga. Drugi su razrađeniji, sa sopstvenom lozinkom i interfejsom koji liči na pravi fajl menadžer, dostupnim samo onome ko zna tačnu putanju.

Ono što ih sve povezuje jeste da vam pristup koji daju ne zavisi ni od čega što vi kontrolišete iz WordPress administracije. Možete promeniti lozinku, uključiti dvofaktorsku prijavu, obrisati sumnjiv administratorski nalog koji ste primetili. Ako backdoor fajl i dalje stoji negde na serveru, napadač i dalje ulazi kad hoće.

Ovo je razlika koju mnogi ne uoče pri prvom susretu sa infekcijom. Uklanjanje vidljivih posledica, spam sadržaja, čudne redirekcije, sumnjivog korisnika, nije isto što i uklanjanje uzroka.

Zašto ga je teško primetiti

Prosečna WordPress instalacija ima nekoliko hiljada fajlova. Jezgro, tema, desetine dodataka, svaki sa svojom strukturom foldera. Niko realno ne otvara svaki fajl da vidi šta u njemu piše. Napadači to znaju i pišu kod tako da preživi upravo onaj tip provere koji ćete verovatno uraditi.

Ime izgleda kao da pripada sistemu

Umesto očiglednog naziva, takav fajl se često zove nešto poput wp-cache-config.php, class-wp-utils.php ili admin-functions-backup.php. Kad prelistavate listu fajlova, takvo ime ne izazove nikakvu sumnju.

Kod je namerno nečitljiv

Sadržaj je često zapisan tako da se dekodira tek u trenutku izvršavanja. Ako otvorite takav fajl, videćete dugačak niz slova i brojeva bez ijedne prepoznatljive reči. To je istovremeno i način sakrivanja i najpouzdaniji znak da nešto nije u redu, jer legitiman kod nema razloga da bude nečitljiv.

Maliciozni fajl sa lažnim imenom i namerno nečitljivim kodom

Datum izmene je lažiran

Uobičajen prvi refleks je da se folder sortira po datumu izmene i pogleda šta je najskorije dodato. Napadači to očekuju, pa ponekad postave datum fajla tako da odgovara okolnim, legitimnim fajlovima. Taj trag time nestaje.

Fajl ne radi ništa dok ne dobije tačan poziv

Sofisticiraniji backdoor ne reaguje dok ne primi tačno određenu lozinku ili parametar. Ako ga samo otvorite u pretraživaču, prikazaće praznu stranicu ili grešku, pa deluje kao da je bezopasan. A on samo čeka poziv koji zna jedino onaj ko ga je postavio.

Ubačen je u postojeći, legitiman fajl

Ovo je najteža varijanta. Nema novog fajla koji bi upao u oči. Postoji samo jedan dodatni red u fajlu koji tu inače pripada, često na samom kraju, iza mnogo praznih redova, van onoga što vidite bez skrolovanja.

Gde se najčešće krije

Postoji nekoliko lokacija koje se ponavljaju iz slučaja u slučaj, i svaka ima svoj razlog.

Uploads folder

Folder wp-content/uploads je namenjen slikama i dokumentima. Tamo nikad ne bi trebalo da postoji fajl sa ekstenzijom .php. Napadači ga vole baš zato što većina ljudi tamo i ne pomisli da traži izvršni kod, jer „tamo ionako nema koda".

MU-plugins

Folder wp-content/mu-plugins WordPress učitava automatski, pre svih ostalih dodataka. Njegov sadržaj se ne prikazuje u listi dodataka na isti način kao obični dodaci, a veliki broj vlasnika sajtova ni ne zna da taj folder postoji. Idealno mesto za nešto što treba da radi tiho i preživi uklanjanje ostalog.

Unutar teme ili dodatka

Bilo kao poseban fajl među desetinama postojećih, bilo kao dodatna linija u fajlu koji već tu pripada. Posebno se često koristi fajl functions.php aktivne teme, jer se učitava na svakoj stranici.

Česta skrovišta: uploads, mu-plugins i baza podataka

U bazi podataka

Ovo mesto se najčešće previdi, jer nije fajl. Kod može biti upisan u tabelu wp_options, u polja koja se učitavaju pri svakom zahtevu. Ako čistite samo fajlove, sve se vraća čim se stranica ponovo otvori.

Kao zakazani zadatak

Napadač može da zakaže WordPress zadatak koji ponovo postavlja backdoor nekoliko dana posle brisanja. Ovo objašnjava slučajeve gde vlasnik obriše fajl, a fajl se sam vrati.

Kao skriveni administratorski nalog

Nije fajl, ali funkcioniše po istom principu. Dodatan nalog sa administratorskim pravima, često sa imenom koje deluje sistemski, daje pristup i posle svih promena lozinki.

Zašto obična provera dodataka nije dovoljna

Uobičajen refleks kad se posumnja na infekciju je da se otvori lista instaliranih dodataka i obriše ono što deluje sumnjivo. Problem je što backdoor skoro nikad ne postoji kao zaseban, imenovan dodatak u toj listi.

Lista dodataka ne pokazuje PHP fajl sakriven u uploads folderu

Fajl postavljen u uploads folder se tamo nikad neće pojaviti, jer WordPress tu listu gradi na osnovu strukture foldera i zaglavlja fajla koje backdoor namerno nema. Isto važi za kod ubačen unutar legitimnog dodatka koji nemate razloga da sumnjičite.

Zato scenario iz uvoda ovog teksta izgleda kao da nema objašnjenja. Vlasnik obriše par dodataka, sajt privremeno deluje čisto, pa se sve vrati. Stvarni ulaz nikad nije ni dirnut.

Kako se backdoor stvarno pronalazi

Pošto ručni pregled hiljada fajlova nije izvodljiv, pouzdano traženje počiva na tri pristupa koji rade zajedno.

Poređenje sa zvaničnim verzijama

WordPress jezgro i svaki dodatak iz zvaničnog repozitorijuma imaju poznatu, javno dostupnu verziju. Poređenje fajlova na sajtu sa tom verzijom odmah pokazuje dve stvari: koji je postojeći fajl izmenjen, i koji fajl uopšte ne pripada tom paketu. Ovo ne zavisi od prepoznavanja sadržaja, pa hvata i potpuno nove obrasce koje niko još ne poznaje.

Poređenje fajlova otkriva fajl koji ne pripada zvaničnom paketu

Provera mesta gde izvršnog koda ne bi trebalo da bude

Svaki PHP fajl u uploads folderu je sumnjiv po definiciji, bez obzira na ime i sadržaj. Isto važi za neočekivane fajlove u mu-plugins folderu. Ova provera je jednostavna, a u praksi izuzetno efikasna.

Prepoznavanje obrazaca u kodu

Postoje kombinacije funkcija koje se u legitimnom WordPress kodu praktično ne pojavljuju, a koje su tipične za maliciozni kod. Njihovo prisustvo je gotovo uvek pouzdan signal, čak i kad se ne razume šta tačno dekodirani sadržaj radi.

Sve tri provere zajedno, urađene automatski i po rasporedu, daju mnogo pouzdaniji rezultat od bilo koje jednokratne ručne provere. Prosto zato što je obim posla, hiljade fajlova pri svakom skeniranju, nešto što se ne može raditi rukom.

Kako izgleda tipičan slučaj od početka do kraja

Da bi cela priča bila konkretnija, evo redosleda koji se u praksi ponavlja sa malim varijacijama.

Automatizovana skripta pronalazi ranjivost u dodatku koji nije ažuriran nekoliko meseci. Kroz nju postavlja backdoor fajl u uploads folder. To je prvi korak i, u tom trenutku, ništa se spolja ne vidi. Sajt radi normalno, brzina je ista, nema nijednog znaka.

Nekoliko dana kasnije, kroz taj backdoor, ubacuje se ono što stvarno donosi zaradu napadaču: spam sadržaj, preusmeravanje posetilaca, ili skripta za slanje pošte. To je prvi trenutak kad vlasnik sajta nešto primeti, najčešće preko tuđe prijave ili upozorenja u pretrazi.

Vlasnik reaguje na ono što vidi. Ažurira dodatak koji je bio ranjiv, čime zatvara originalnu rupu. Promeni lozinku. Ručno obriše spam stranice. Sajt ponovo izgleda uredno i deluje da je stvar rešena.

Backdoor fajl iz prvog koraka niko nije ni tražio, jer niko nije znao da postoji. Prolaze nedelje. Onda se, bez ikakvog novog napada, sve vrati. Ponekad zato što napadač ponovo pokrene istu kampanju, ponekad zato što je pristup u međuvremenu prodao nekom drugom.

Vlasnik u tom trenutku zaključi da čišćenje ne radi, ili da je hosting kriv, ili da je sajt „proklet". Nijedno nije tačno. Problem nikad nije ni bio rešen, samo je privremeno prestao da bude vidljiv.

Koliko dugo backdoor može da stoji neprimećen

Odgovor koji ljudi obično ne očekuju je: koliko god treba. Nema mehanizma koji bi ga sam otkrio.

Za razliku od spama ili redirekcije, backdoor sam po sebi ne pravi nikakav vidljiv efekat. Ne usporava sajt jer se ne izvršava dok ga niko ne pozove. Ne menja sadržaj. Ne šalje ništa. Ne pojavljuje se u pretrazi. Ne troši resurse koje bi hosting primetio.

Usnuli backdoor koji mesecima čeka pre aktivacije

To znači da sajt može mesecima izgledati potpuno uredno, dok pristup i dalje postoji. Viđali smo slučajeve gde je fajl bio postavljen godinu dana pre nego što je iskorišćen, jednostavno zato što je napadaču tako odgovaralo.

Praktična posledica je da odsustvo simptoma nije dokaz da problema nema. To je i razlog zašto nadzor ima smisla i onda kad je sve mirno, jer se baš u tim mirnim periodima postavlja ono što se kasnije aktivira.

Šta uraditi kad ga pronađete

Prvo napravite kopiju

Puna kopija fajlova i baze pre bilo kakve izmene, čak i zaražena. To je jedina zaštita ako nešto pođe naopako, i jedini izvor podataka za kasniju rekonstrukciju.

Pogledajte fajl pre nego što ga obrišete

Datum nastanka i sadržaj vam često kažu kada je postavljen i kroz koju rupu je ušao. Bez toga rešavate posledicu i čekate ponavljanje.

Pitajte kako je dospeo tu

Ovo je važnije od samog uklanjanja. Ako originalna ranjivost ostane otvorena, zastareo dodatak, slaba lozinka, tema iz nezvaničnog izvora, sledeći backdoor je samo pitanje vremena.

Pretpostavite da nije jedini

Napadači po pravilu ostavljaju više od jednog ulaza, jer računaju da će prvi biti pronađen. Kad nađete jedan, to je razlog da tražite dalje, ne da prestanete.

Promenite sve lozinke

WordPress administracija, baza podataka, hosting panel, FTP i SSH pristup. Dok je backdoor bio aktivan, napadač je verovatno mogao da izvuče i te podatke, pa ih treba tretirati kao kompromitovane.

Poništite postojeće sesije

Promena lozinke ne poništava uvek već otvorene sesije. Ako je napadač ukrao kolačić prijave, a ne samo lozinku, i dalje je unutra. Poništavanje svih aktivnih sesija zatvara i taj put.

Pratite sajt narednih nedelju dana

Posle čišćenja vredi pojačano pratiti stanje bar sedam do deset dana. To je period u kom se najčešće vidi da li je nešto propušteno, jer zakazani zadaci i rezervni ulazi obično imaju odloženo dejstvo. Ako u tom roku ništa ne iskoči, šanse da je posao završen su znatno veće nego prvog dana.

Kako sprečiti da se ponovi

Najpouzdanija odbrana nije jednokratno čišćenje, nego kontinuiran nadzor. To proizlazi direktno iz svega opisanog gore: backdoor je namerno napravljen da prođe kroz jednu ručnu proveru. Jedini način da se uhvati na vreme jeste nešto što redovno, automatski poredi trenutno stanje fajlova i baze sa prethodnim.

Uz to idu i osnovne stvari koje zatvaraju većinu ulaza pre nego što se uopšte otvore. Redovno ažuriranje jezgra, teme i dodataka. Uklanjanje svega što se ne koristi, jer neaktivan dodatak sa ranjivošću je i dalje ranjiv. Jake i jedinstvene lozinke uz dvofaktorsku prijavu. Zabrana izvršavanja PHP fajlova u uploads folderu na nivou servera, čime cela jedna klasa backdoor fajlova prestaje da funkcioniše čak i ako se fajl nekako postavi.

Kako da proverite gde ste sada

Ako sumnjate na backdoor na WordPress sajtu, ili vam se infekcija već jednom vratila posle čišćenja, prvi korak ne mora ništa da košta. Besplatna brza analiza pregleda javno dostupan sadržaj sajta i traži poznate obrasce malvera, skrivene skripte i sumnjive redirekcije. Bez naloga, bez instalacije, obično ispod minuta.

Ograničenje te provere treba reći otvoreno, jer je kod ove teme presudno. Udaljena provera vidi samo ono što je javno dostupno preko interneta. Backdoor koji tiho stoji u fajlu i čeka poziv nije javno vidljiv, i takva provera ga po pravilu neće naći. Čist rezultat je dobar znak za površinski sloj, ali nije dokaz da backdoor ne postoji.

Za pouzdan odgovor potrebno je pogledati same fajlove i bazu na sajtu, jer je to jedino mesto gde se on nalazi. Ako želite taj uvid, ili ako vam se problem već vraćao i ne želite da pogađate, pišite nam. Pošaljite adresu sajta i kratak opis šta se dešavalo, i reći ćemo vam šta ima smisla kao sledeći korak.

Pitanja

Česta pitanja

Kratki odgovori uz ovaj članak. Ako ovde nema vašeg pitanja, pišite nam preko kontakta.

Šta backdoor na WordPress sajtu zapravo radi?

To je rezervni ulaz: fajl ili komad koda koji napadaču omogućava da se vrati kad god poželi, čak i posle promene lozinke i brisanja vidljivog malvera. Sam po sebi često ne radi ništa vidljivo dok ne dobije tačan poziv.

Zašto ga ne vidim u listi dodataka?

Često nije dodatak. Sedi u uploads kao PHP, u mu-plugins (WordPress ga učitava a ne prikazuje kao običan plugin), unutar legitimne teme, u bazi, kao cron, ili kao skriveni admin nalog. Lista aktivnih dodataka te stvari ne pokazuje.

Kako se backdoor stvarno pronalazi?

Poređenjem fajlova jezgra/teme/dodataka sa zvaničnim verzijama, proverom mesta gde PHP ne bi trebalo da bude (npr. uploads), i prepoznavanjem namerno nečitljivog koda (dugački enkodirani stringovi, eval, base64). Jednokratni „pogledaj šta deluje čudno“ retko je dovoljno.

Koliko dugo može da stoji neprimećen?

Nedeljama ili mesecima. Ne usporava sajt, ne pojavljuje se u pretrazi i ne menja izgled dok napadač ne pozove. Vlasnik često primeti problem tek kad kroz backdoor stigne spam, redirekcija ili skripta za poštu.

Šta uraditi čim ga nađete?

Prvo napravite kopiju, pa pogledajte fajl pre brisanja (pomaže da utvrdite kako je dospeo). Pretpostavite da nije jedini, zatvorite originalnu rupu, promenite lozinke, poništite sesije i pratite sajt narednih dana.