Web vyzeral v poriadku, no mesiace slúžil útočníkovi
Tento príbeh je zo skutočného napadnutého webu. Majiteľa ani firmu nemenujem, napíšem len toľko, že išlo o firemný web na WordPresse s online rezerváciami. A že ma oslovili kvôli niečomu úplne inému, než čo som nakoniec riešil.
Požiadavka znela: zrýchliť web
Web bol pomalý. Na mobile mal v teste PageSpeed Insights 42 bodov zo 100, čo znamená, že zákazník na telefóne čaká zbytočne dlho. Bežná zákazka: pozrieť sa, čo web brzdí, a upratať to.
Pri zrýchľovaní sa vždy pozerám aj do zdrojového kódu stránky, teda do toho, čo prehliadač naozaj dostane. A tam som si všimol niečo, čo do rýchlosti nepatrilo.
Nález, ktorý nikto nečakal
V kóde úvodnej stránky boli skryté odkazy na online kasína. Boli posunuté mimo obrazovky, takže ich návštevník nemal ako vidieť. Vyhľadávač ich však čítal ako každý iný odkaz na stránke. Je to typický SEO spam: útočník si cudzím webom zvyšuje dôveryhodnosť svojich stránok v Google.
Web pritom vyzeral a fungoval úplne normálne. Žiadne varovanie, žiadna chyba, rezervácie chodili. Keby som sa nepozrel do kódu, nik by na to neprišiel.
Čo všetko na webe bolo
Skryté odkazy boli len to, čo bolo vidieť zvonka. Podrobná kontrola ukázala, že útočník mal k webu prístup niekoľko mesiacov a stihol si ho zariadiť ako vlastný:
- Desiatky spamových článkov s kasínovou tematikou. K tomu testovacie príspevky, ktorými si útočník najprv overoval, či vie na webe publikovať.
- Skrytý administrátorský účet. V zozname používateľov sa nezobrazoval, takže ho majiteľ nemal ako objaviť.
- Škodlivý „must-use“ doplnok, ktorý sa vydával za bezpečnostný plugin. Vkladal skryté odkazy a mal pripravenú záložnú kópiu, uloženú ako bežný doplnok. Keď ho niekto zmazal, sám sa z nej obnovil.
- 17 falošných tém s náhodnými názvami. Slúžili ako zadné vrátka, odborne webshelly. Niektoré súbory mali nenápadne pozmenené názvy, napríklad s písmenom „l“ namiesto „i“, aby na prvý pohľad vyzerali ako originál.
- Inštalačné archívy útočníka v priečinku s nahranými obrázkami a súbormi.
Ako sa útočník dostal dnu
Najpravdepodobnejšou vstupnou bránou bol zastaraný doplnok dodávaný spolu s témou. Mal známu zraniteľnosť, ktorá umožňovala bez prihlásenia čítať súbory na serveri. Vrátane konfiguračného súboru wp-config.php, v ktorom je prístup k databáze.
Táto chyba bola verejne známa a aktívne zneužívaná. Nikto si web nevybral cielene. Automatické programy jednoducho hľadali weby s touto verziou doplnku a tento web medzi nimi bol. Viac o tom, prečo sa to deje, píšem v článku Prečo útočníci napádajú aj malé firemné weby.
Čistenie krok za krokom
Pri napadnutom webe nestačí zmazať to, čo je vidieť. Útočník si skoro vždy necháva viac ciest späť. Postupoval som takto:
- Súbory jadra WordPressu som porovnal s originálmi pomocou kontrolných súčtov. Zhodovali sa 1:1, jadro teda útočník nemenil.
- Škodlivý doplnok aj jeho záložnú kópiu, falošné témy a inštalačné archívy som najprv presunul do karantény mimo webu a až potom ich zmazal natrvalo.
- Odstránil som skrytého administrátora aj podvrhnutý obsah.
- Vymenil som všetky prístupy: heslá administrátorov, heslo k databáze aj bezpečnostné kľúče. Tým sa odhlásili všetci prihlásení, vrátane útočníka.
- Vypol som úpravu súborov z administrácie, aby sa cez ňu už nedal vkladať kód.
- Odstránil som rizikové a opustené doplnky: správcu súborov, doplnok, ktorý už nikto neudržiava, a doplnok s podozrivým kódom.
- Zraniteľnú funkciu doplnku témy som zablokoval virtuálnou záplatou, kým nebude dostupná aktualizácia. Vzhľad webu sa tým nezmenil.
- Časť obsahu som obnovil zo zálohy hostingu.
- Výsledok som overil bezpečnostným skenom, ktorý nenašiel žiadny malvér, a kontrolou zdrojového kódu.
- Nastavil som spoľahlivé spúšťanie plánovaných úloh cez hosting a cache tak, aby nenarúšala rezervačný systém. O tom je samostatný článok Cache a rezervačné systémy.
Výsledok
- Nula skrytých odkazov a nula spamových článkov.
- Jadro WordPressu zhodné s originálom.
- Zraniteľnosť zablokovaná a overená.
- Hlavné čistenie prebehlo za jedno dopoludnie.
Majiteľ k tomu dostal odporúčania, ako web chrániť ďalej: aktualizovať aj platené doplnky, zapnúť dvojfaktorové prihlásenie a nechať web pravidelne skenovať.
Prečo si to majiteľ nevšimol
Nemal ako. Web fungoval, rezervácie chodili a jediné, čo sa zmenilo, bolo pomalšie načítanie. Útočníkovi presne o to ide: čím dlhšie zostane nenápadný, tým dlhšie môže web využívať. Skryté odkazy vidia vyhľadávače, nie ľudia. Spamové články ležali na adresách, kam sa majiteľ bežne nepozerá. A skrytý administrátor sa v zozname používateľov ani neukázal.
Na príznaky, ktoré si môžete všimnúť aj vy, som napísal samostatný článok Je váš web napadnutý? 8 príznakov.
Čo si z toho vziať
- Väčšina útokov nie je cielená. Stačí jeden zastaraný doplnok a web sa dostane do zoznamu, ktorý si útočníci automaticky prechádzajú.
- Napadnutý web môže vyzerať úplne normálne. Pomalšie načítanie alebo častejšie výpadky môžu byť jediným signálom.
- Najlacnejšia ochrana sú pravidelné aktualizácie a mazanie doplnkov, ktoré nepoužívate. Viac v článku Neaktualizované pluginy: najčastejšie dvere pre útočníkov.
Ak máte čo i len podozrenie, kontrola sa oplatí. Čo všetko pri čistení napadnutého webu robím a koľko to stojí, nájdete na samostatnej stránke. Základné vyčistenie je od 99 €.
Zdroje: WordPress: FAQ My site was hacked, WordPress: Zabezpečenie WordPressu, Google: Pravidlá proti spamu.