Infekcija se vraća posle čišćenja: evo zašto
Malo šta je frustrirajuće kao ovo. Uložili ste vreme, očistili sajt, sve je izgledalo uredno. A onda, za nekoliko dana ili nedelja, isti problem se vrati kao da niste ni dirali. Spam se ponovo pojavi, redirekcija se vrati, Google opet upozori. I sve počne iz početka.
Ukratko: infekcija se vraća jer je uklonjena posledica, ne uzrok - backdoor, otvoren ulaz ili zaraženi bekap. Nađite uzrok, zatvorite ga, pa nadzirite.
Ako se infekcija vraća posle čišćenja, u devet od deset slučajeva razlog je isti, i nije u tome da ste loše čistili niti da je sajt proklet. Razlog je da je uklonjeno ono što se videlo, a ostavljeno ono što je napadaču omogućavalo da se vrati. U ovom tekstu objašnjavamo zašto se to dešava, gde se krije ono što stalno vraća infekciju, kako se to pronalazi, i kako da prekinete krug zauvek.

Zašto se čišćenje vraća
Da bismo razumeli zašto se infekcija vraća, treba razdvojiti dve stvari koje se lako pomešaju: posledicu i uzrok. Posledica je ono što vidite, spam, redirekcija, ubačen sadržaj. Uzrok je ono što je omogućilo da posledica uopšte nastane, i on je skoro uvek nevidljiv.
Kad očistite samo posledicu, uklonili ste simptom ali ne i sposobnost napadača da ga ponovo stvori. To je kao da brišete vodu sa poda a ne zatvarate slavinu koja curi. Sve dok slavina radi, voda se vraća, koliko god puta brisali.
Kod hakovanih sajtova, ta slavina je najčešće jedna od tri stvari: backdoor koji je ostao, ulazna rupa koja nije zatvorena, ili zaraženi bekap koji se u nekom trenutku vrati. Prođimo kroz sve tri, jer je vaš slučaj gotovo sigurno jedna od njih.
Uzrok broj jedan, backdoor koji je ostao
Ovo je ubedljivo najčešći razlog. Backdoor je fajl ili kod koji napadaču omogućava da se vrati u sajt kad god poželi, nezavisno od toga što ste promenili lozinku ili uklonili vidljivi malver.
Kad prvi put očistite sajt, prirodno je da uklonite ono što vidite, spam stranice, sumnjiv sadržaj, možda čudan dodatak. Ali backdoor je namerno napravljen da ga ne primetite. Ne pravi nikakav vidljiv efekat, ne usporava sajt, ne pojavljuje se u pretrazi. Tiho stoji i čeka poziv koji zna samo napadač. Kad mu se prohte, pozove ga i ponovo ubaci sve što ste obrisali.
Gde se backdoor krije
Postoji nekoliko omiljenih mesta. U uploads folderu, kao PHP fajl koji tamo nema šta da traži. U mu-plugins folderu, koji WordPress učitava automatski a ne prikazuje kao običan dodatak. Unutar legitimnog dodatka ili teme, kao dodatna linija koju ne primetite jer fajl inače pripada tu. I u bazi podataka, kao kod u poljima koja se učitavaju pri svakom zahtevu.

Zašto ga je teško naći
Backdoor koristi nekoliko trikova da izbegne otkrivanje. Ime mu izgleda kao da pripada sistemu. Kod je nečitljiv, dugačak niz koji se dekodira tek pri izvršavanju. Datum izmene je ponekad lažiran da odgovara okolnim fajlovima. I ne radi ništa dok ne primi tačan poziv, pa ako ga samo otvorite deluje bezopasno. Zbog svega toga, jednokratni ručni pregled ga po pravilu promaši, i baš zato se infekcija vraća.
Uzrok broj dva, ulaz nije zatvoren
Drugi čest razlog je da je backdoor uklonjen, ali originalna rupa kroz koju je napadač prvi put ušao ostala je otvorena. U tom slučaju napadač prosto ponovo uđe na isti način na koji je ušao prvi put, i postavi sve iznova.
Ulazna rupa je najčešće jedna od sledećih. Zastareo dodatak sa poznatom ranjivošću, koji je i dalje zastareo. Slaba administratorska lozinka koja nije promenjena. Tema ili dodatak iz nezvaničnog izvora koji sadrži ubačen kod. Ili kompromitovan pristup hostingu preko lozinke koja je procurila.
Poenta je da uklanjanje koda i zatvaranje ulaza moraju ići zajedno. Ako uradite samo prvo, kupili ste sebi nekoliko dana dok napadač ne primeti da je sajt ponovo čist i ne uđe opet kroz ista otvorena vrata. Zato pitanje kako je ušao nije manje važno od pitanja šta je ostavio.

Uzrok broj tri, zaraženi bekap
Treći razlog je podmukliji i ređe se prepozna. Ako ste u nekom trenutku vratili sajt iz bekapa, a taj bekap je napravljen posle nego što je infekcija već ušla, vratili ste zaraženu verziju sajta zajedno sa backdoor-om.
Ovo se posebno često dešava jer infekcija ume da tiho stoji nedeljama pre nego što napravi vidljiv efekat. Vlasnik primeti problem u martu, vrati bekap iz februara misleći da je tada sve bilo u redu, a zapravo je backdoor postavljen u januaru. Bekap iz februara ga već sadrži, pa se infekcija vraća.
Zbog toga vraćanje bekapa nije rešenje samo po sebi, osim ako pouzdano znate da je bekap stariji od infekcije. A to se ne zna bez utvrđivanja vremenske linije, kada je tačno backdoor postavljen. Vraćanje bekapa naslepo je zato čest način da se infekcija nehotice zadrži.
Ovaj problem ima i podmukliju varijantu. Neki sistemi za automatski bekap čuvaju više verzija unazad, ali ako je infekcija starija od svih sačuvanih verzija, onda su svi vaši bekapi zaraženi, a da to ne znate. Vlasnik proba jedan bekap, pa drugi, pa treći, i svaki vraća isti problem, jer su svi napravljeni posle nego što je backdoor već postavljen. To ostavlja utisak da je sajt beznadežan, dok je zapravo rešenje jednostavno: očistiti trenutno stanje umesto tražiti čist bekap koji ne postoji.

Kako da prepoznate koji je od tri uzroka vaš
Iako se sva tri uzroka rešavaju sličnim temeljnim pristupom, korisno je grubo prepoznati koji je verovatno vaš, jer vam to govori na šta prvo obratiti pažnju.
Ako se infekcija vratila brzo, u roku od nekoliko dana, i to sa istim tačno sadržajem kao pre, verovatno je u pitanju backdoor koji je ostao. Napadaču nije trebalo da ponovo traži ulaz, samo je pozvao ono što je već tu.
Ako se vratila posle nešto dužeg vremena, nedelju ili dve, i pri tom ste u međuvremenu ažurirali ili menjali nešto, moguće je da je backdoor uklonjen ali je rupa ostala otvorena, pa je napadač ponovo ušao istim putem. Ovo je posebno verovatno ako niste sigurni da ste zatvorili originalni ulaz.
Ako se vratila tačno posle što ste vratili neki bekap, uzrok je gotovo sigurno zaraženi bekap. Vremenski poklopac sa vraćanjem bekapa je jak trag.
Ova procena nije zamena za pravu proveru, ali vam pomaže da razumete šta se verovatno dešava i da postavite prava pitanja kad tražite pomoć.
Kako se pronalazi ono što vraća infekciju
Pošto su svi ovi uzroci namerno teški za ručno otkrivanje, pouzdano pronalaženje počiva na nekoliko 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 koji je fajl izmenjen i koji fajl uopšte ne pripada tom paketu. Ovo ne zavisi od prepoznavanja sadržaja, pa hvata i potpuno nove backdoor obrasce koje niko još ne poznaje.
Provera mesta gde koda ne bi trebalo da bude
Svaki PHP fajl u uploads folderu je sumnjiv po definiciji. Isto važi za neočekivane fajlove u mu-plugins folderu. Ova provera je jednostavna a izuzetno efikasna, jer su to omiljena skrovišta.
Prepoznavanje obrazaca u kodu
Postoje kombinacije funkcija koje se u legitimnom kodu praktično ne pojavljuju, a tipične su za maliciozni kod. Njihovo prisustvo je gotovo uvek pouzdan signal, čak i kad se ne razume šta tačno dekodirani sadržaj radi.
Utvrđivanje vremenske linije
Da bi se izbegao problem zaraženog bekapa, treba utvrditi kada je infekcija tačno počela. To se radi gledanjem datuma izmena fajlova i tragova u logovima. Tek kad se zna kada je backdoor postavljen, može se sigurno reći koji je bekap čist.
Sve ove provere zajedno, urađene temeljno, daju mnogo pouzdaniji rezultat od jednokratnog ručnog pregleda koji je verovatno i doveo do toga da se infekcija vratila.
Kako da prekinete krug zauvek
Da bi čišćenje ovaj put bilo trajno, treba uraditi sve tri stvari zajedno, ne samo jednu.
Uklonite sve backdoor fajlove, ne samo vidljivi malver
Pretpostavite da postoji više od jednog ulaza, jer napadači po pravilu ostavljaju rezervu računajući da će prvi biti pronađen. Kad nađete jedan backdoor, to je razlog da tražite dalje, ne da prestanete.
Zatvorite originalnu rupu
Utvrdite kako je napadač ušao i zatvorite taj ulaz. Ažurirajte sve što je zastarelo, uklonite što ne koristite, zamenite sve što dolazi iz nezvaničnog izvora, promenite sve lozinke. Bez ovog koraka, čišćenje je privremeno bez obzira koliko temeljno uklonili backdoor.
Proverite da bekap nije zaražen
Ako planirate da koristite bekap, prvo utvrdite da je stariji od infekcije. Ako niste sigurni, bolje je čistiti trenutno stanje nego vraćati bekap za koji ne znate da li već sadrži backdoor.
Poništite sesije i rotirajte ključeve
Na kraju, poništite sve aktivne sesije i promenite bezbednosne ključeve. Time izbacujete napadača i ako je ranije ukrao kolačić prijave, ne samo lozinku.

Šta ako se vratila više od jednom
Ako vam se infekcija vratila ne jednom nego više puta, uprkos ponovljenim čišćenjima, to je jak signal da problem nije u trudu nego u pristupu. Svako ponovljeno čišćenje koje uklanja samo vidljivo daje isti rezultat, jer uzrok ostaje.
Više ponavljanja obično znači jedno od dvoje. Ili postoji backdoor koji je sve to vreme neotkriven, i svako čišćenje ga zaobiđe. Ili je rupa kroz koju napadač ulazi toliko otvorena da se on vraća čim primeti da je sajt ponovo čist. U oba slučaja, rešenje nije još jedno isto čišćenje, nego promena pristupa koja uključuje temeljnu potragu za skrivenim ulazima i, presudno, nadzor koji hvata sledeći pokušaj pre nego što uspe.
Sajt kome se infekcija vratila više puta nije izgubljen slučaj. Skoro uvek se radi o jednom uporno previđenom detalju. Ali jeste znak da je vreme da se pristupi drugačije nego dosad, jer ponavljanje istog očigledno ne prekida krug.
Zašto se ovo dešava i profesionalcima
Vredi reći da povratak infekcije nije uvek znak da je neko loše radio. Čak i pažljivo čišćenje može promašiti dobro sakriven backdoor, jer su namerno napravljeni da izbegnu upravo detekciju. Razlika je u pristupu.
Jednokratno ručno čišćenje, koliko god pažljivo, oslanja se na to da će čovek pregledom naći sve. Kod hiljada fajlova, to je težak zadatak čak i za iskusnog. Zbog toga se povratak infekcije dešava i ljudima koji znaju posao, ako se oslone samo na jednokratni pregled.
Pouzdaniji pristup kombinuje automatsko poređenje sa zvaničnim verzijama, koje ne zavisi od ljudske pažnje, sa iskustvom koje zna gde da gleda. I, što je najvažnije za trajno rešenje, prati sajt i posle čišćenja, jer se tako uhvati svaki pokušaj ponovnog ubacivanja pre nego što naraste u novu vidljivu infekciju.
Vredi biti pošten i o tome da nijedan pristup ne daje apsolutnu garanciju da baš nijedan backdoor neće promaći, jer napadači stalno smišljaju nove načine skrivanja. Razlika je u tome što dobar pristup drastično smanjuje šansu da nešto promakne, i, još važnije, hvata ono što ipak promakne pre nego što napravi štetu. Savršenstvo nije realan cilj u bezbednosti. Realan cilj je da svaki pokušaj bude primećen dovoljno rano da ne stigne da naškodi, a to nadzor omogućava čak i kad je početno čišćenje nešto propustilo.
Zašto je nadzor posle čišćenja ključan baš ovde
Ako postoji jedna pouka iz svega ovoga, to je da je nadzor posle čišćenja najvažniji baš za sajtove kojima se infekcija već vraćala.
Razlog je jednostavan. Backdoor je napravljen da bude nevidljiv u jednom trenutku, ali ne može da sakrije samu izmenu koju pravi kad se aktivira. Sistem koji redovno, automatski poredi trenutno stanje fajlova i baze sa prethodnim primeti tu izmenu odmah, čim se desi, umesto da čekate da naraste u vidljiv problem koji ponovo guglate u panici.
Drugim rečima, čak i ako je pri čišćenju promašen jedan dobro sakriven backdoor, nadzor ga uhvati u trenutku kad se prvi put aktivira, pre nego što uspe da napravi štetu. To je razlika između sajta koji se čisti iznova svakih mesec dana i sajta koji ostaje stabilan.

Šta ne raditi kad se infekcija vrati
Kad se problem vrati, frustracija navede na poteze koji ne pomažu. Nekoliko ih vredi izbeći.
Ne ponavljajte isto čišćenje na isti način. Ako je jednokratno brisanje vidljivog malvera već jednom propustilo backdoor, ponavljanje istog pristupa daće isti rezultat. Treba promeniti pristup, ne samo ponoviti trud.
Ne vraćajte sve starije i starije bekape u nadi da ćete pogoditi čist. Bez utvrđivanja vremenske linije, to je pogađanje koje često vrati još stariji problem ili izgubi mnogo sadržaja.
Ne odustajte od sajta. Povratak infekcije deluje kao da je sajt izgubljen, ali skoro uvek se radi o jednom previđenom backdoor-u ili jednoj nezatvorenoj rupi, što je rešiv problem kad se pristupi kako treba.
Ne krivite sebe. Mnogi vlasnici sajtova u ovoj situaciji zaključe da su nesposobni ili da rade nešto pogrešno. Već smo objasnili zašto to nije tačno: backdoor je napravljen da promakne upravo takvom pregledu kakav bi razuman čovek uradio. Povratak infekcije je poznat, čest obrazac sa poznatim rešenjem, ne dokaz vaše greške. Korisnije je energiju usmeriti na promenu pristupa nego na samokritiku.
Realan primer kako izgleda krug koji se vrti
Da bi cela priča bila konkretnija, evo redosleda koji se ponavlja sa malim varijacijama i objašnjava zašto se toliki broj ljudi nađe u ovom tekstu.
Napadač kroz ranjiv dodatak postavi backdoor u uploads folder. Nekoliko dana kasnije, kroz taj backdoor, ubaci spam sadržaj. Vlasnik to primeti, obriše spam stranice, ažurira dodatak koji je bio ranjiv, i sajt izgleda uredno. Ali backdoor u uploads folderu niko nije dirnuo, jer niko nije znao da postoji.
Prođe nedelju dana. Napadač ponovo pozove backdoor i vrati spam. Vlasnik, sada frustriran, ponovo obriše spam, možda promeni lozinku, i zaključi da čišćenje ne radi. Backdoor je i dalje tu. Krug se nastavlja, i svaki put vlasnik radi isti posao na posledici, dok uzrok mirno stoji.
Krug se prekida tek kad neko potraži i ukloni sam backdoor, ne spam koji on stvara. To je razlika između vrtenja u mestu i stvarnog rešenja, i objašnjava zašto ponavljanje istog čišćenja nikad ne pomaže.
Ono što ovaj primer čini posebno čestim je što svaki pojedinačni korak vlasnika deluje razumno. Obrisati spam kad se pojavi je logično. Ažurirati ranjivi dodatak je ispravno. Promeniti lozinku je dobra ideja. Problem nije ni u jednom pojedinačnom potezu, nego u tome što nijedan od njih ne dodiruje backdoor, jer niko ne zna da ga treba tražiti. Zato se pametni, savesni ljudi nađu u ovom krugu, ne zato što greše, nego zato što rešavaju ono što vide, a ono što vraća infekciju je namerno napravljeno da se ne vidi.
Kako da proverite gde ste sada
Ako vam se infekcija već vraćala, prvi korak ka trajnom rešenju je da vidite šta je vidljivo. Besplatna brza analiza pregleda javno dostupan sadržaj sajta i traži poznate obrasce malvera, skrivene skripte i preusmeravanja. Bez naloga, bez instalacije, obično ispod minuta.
Ograničenje je kod ovog problema posebno važno, pa ga kažemo otvoreno. Backdoor koji vraća infekciju tiho stoji u fajlu ili bazi i nije javno vidljiv, pa ga udaljena provera po pravilu neće naći. Čist rezultat brze analize zato nije dokaz da backdoor ne postoji, pogotovo ako vam se infekcija već vraćala. Za pouzdan odgovor potreban je pregled samih fajlova i baze na sajtu, jer se on tamo krije.
Ako vam se infekcija vratila jednom ili više puta, to je jasan znak da jednokratno čišćenje nije dovoljno i da negde stoji previđen backdoor ili otvorena rupa. Javite nam se sa adresom sajta i kratkim opisom šta se dešavalo i koliko puta se vraćalo. Taj podatak nam pomaže da odmah znamo gde da tražimo, i reći ćemo vam šta ima smisla da se krug konačno prekine.