Webový útek z väzenia: ako sa zbaviť infekcie krok za krokom?

blank

Nedávno som sa zaoberal napadnutou webovou stránkou, ktorá bola plná cudzích kódov.

Ako sa infikovaná stránka (postavená na systéme WordPress) správala? Keď na stránku prišiel nový návštevník, bol presmerovaný na stránku typu „vyhrali ste iPhone“ atď., ale pri druhej návšteve stránka fungovala normálne.

Nižšie opisujem, ako sa mi podarilo nájsť a odstrániť infikované súbory.

Zbežný pohľad na administratívu

Pozrel som sa, ako to vyzerá v administrácii WP: nainštalované dve témy, len jedna aktívna (samozrejme), neaktívna nejaká neznáma. Kopa neaktualizovaných pluginov, niektoré roky staré. Zálohoval som databázu a FTP a deaktivoval práve tieto roky neudržiavané pluginy. Stránka bola „funkčná“ podľa zbežného prekliknutia. Tak som odstránil staré pluginy a presunul sa na FTP.

WP-config

Hľadanie som začal klasicky v súbore wp-config.php a hneď som narazil na stopu: na konci súboru ma zarazila pridaná cesta k súboru header.php:

include_once(ABSPATH . WPINC . ‘/header.php’);

Prečo header.php? Hlavička by mala byť normálne v šablóne. Ale šablóny sú normálne uložené v /wp-content/themes. Nie v /wp-includes (WPINC). Je teda kópia v tomto súbore?

Prvé tri riadky sú podozrivé samy o sebe: vypnutie hlásenia chýb a definovanie globálnej premennej zeeta:

error_reporting(0);
global $zeeta;

Co si o souboru myslel ChatGPT?

blank
Wow, „inteligentné doplňovanie“ si to myslí tiež. Tak som ten súbor vymazal. Stránka bežala ďalej. Odstránil som aj riadok z wp-config, kde „ležala“ cesta k header.php.

Po stopách zeety

Prehľadal som svoju inštaláciu WordPress a sledoval stopu záhadného zeeta.
blank
Tu pred odstránením header.php.
Do očí bije, že zeeta je vložená do šablón. Najprv som otáľal a vymazal priečinok „nejakej“ zálohy. Šablóna Skeleteon sa nepoužívala, tak som ju v rámci spravodlivosti vymazal. Kto by chcel skryť kostlivcov aj vo WordPresse, že? S aktívnou témou to bohužiaľ nejde. Fňukanie.

Wordfence

Nainštaloval som Wordfence a spustil skenovanie. Našlo to viac prehľadávaných súborov:
  • wp-includes/class-wp-http-netfilter.php – obsahoval tučný zoznam IP adries a po vymazaní sa vždy po chvíli znovu objavil (grrr).
  • wp-content/uploads/2021/05/wp-load.php – php súbor v uploads? Pravdepodobne tento súbor prišiel na server ako prvý. Vo vnútri čakali na svoju príležitosť riadky kódu, ktoré vyzývali na stiahnutie (ktovie odkiaľ) a spomínaná cesta include k header.php sa dala nájsť.

Zlomený súbor netfilter.php

Po odstránení súboru netfilter.php sa vždy do minúty vrátil. Ale nádej zomiera posledná! Nákaza v súbore function.php hlavnej témy stále nie je vyriešená.

Krajné riešenie (vymazanie súboru) sa samozrejme nevyplatilo. Tak som frontend stránky zmenil na „dreváreň“. Nezostávalo mi nič iné, ako sa ponoriť do kódu.

Po otvorení súboru nás s otvorenou náručou privíta známy zeeta a, samozrejme, vypnutie chybových hlásení. Tie aj tak nikto nevidí rád.

@ini_set(‘display_errors’, ‘0’);
error_reporting(0);
global $zeeta;

Chvíľu som sa na kód pozeral ako húska do fľaše, až kým som si nevšimol odlišný štýl kódovania medzi začiatkom súboru a zvyškom. Prvá časť nemala vôbec žiadne komentáre, premenné nemali popisné názvy a navyše mi z kódu nebolo jasné, o čo ide. A to by mal byť aspoň rámec šablóny, nie?

Rozhodol som sa teda urobiť „rez“. Voilà stránka bola spustená a fungovala. Čo viac! Po odstránení netfilter.php sa už neobjavil podivný netfilter.php a Wordfence nenašiel žiadny podivný súbor.

Presmerovanie na frontend tiež zmizlo. Klient a kolegovia sú spokojní, to teší aj mňa.

Nabudúce sa pozrieme na prevenciu. Ak riešite niečo podobné a necítite sa na riešenie, neváhajte ma kontaktovať. Buď vás z infekcie „vyslobodím“, alebo sa na ňu pozrieme v rámci digitálneho koučingu.

Zavolajte nám!
📞 0908 42 33 74 | Ing. Jozef Antol
Hello. Add your message here.