Webový útek z väzenia: ako sa zbaviť infekcie krok za krokom?
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
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?
Po stopách zeety
Wordfence
- ● 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.