Како со помош на Gemini Argon 4 лоциравме и уништивме софистициран руски malware во вгнездена WordPress инфраструктура

„Сајбер безбедноста станува се порелевантна во ерата на вештачката интелигенција“ е реченица за која изминативе 2 недели сфатив дека е многу повеќе од клише напишано на порталите и социјалните мрежи. Би сакал да споделам скорашно искуство од прилично софистициран сајбер напад на cloud инфраструктура на која беа хостирани преку 30 WordPress веб страни.

Во интерес на споделување искуство со македонската ИТ заедница (притоа целосно заштитувајќи ја приватноста на клиентите  и засегнатите домени), ви ја пренесувам деталната хронологија: од првата порака на клиентот на 30 септември, преку деновите на верижната реинфекција, па сè до финалната победа и целосно чистење на хостингот.

Ова е приказната за една 14-дневна безбедносна сага со која се соочивме на еден од cloud серверите што ги менаџираме. Стануваше збор за исклучително софистициран, автоматизиран напад со руско потекло, кој користеше локален механизам за полиморфна обфускација и мемориска инјекција за да ги преживее класичните методи на чистење и враќање од бекап.

Ден 1 (30 септември): Јапонски хиероглифи среде македонски Google резултати

Сè започна на 30 септември, кога наш клиент ни испрати фотографија од својот екран со прашање: „Зошто под името на мојата компанија на Google излегуваат резултати на јапонски јазик со цени во јени (¥21,450)?“

По мало истражување сфатив дека стануваше збор за познатиот Japanese Keyword Hack (SEO spam injection). Кога направивме првичен преглед наpublic_htmlфајлот, дијагнозата од првичната анализа беше кристално јасна:

“Based on the directory listing in public_html, your site has definitely been hit by an automated backdoor/SEO-injection attack.”

Првата реакција беше стандардна: започнавме со мануелно чистење на фајловите. Но, веднаш стана јасно дека скриптата веќе генерирала стотици сомнителни фајлови и документи со рандом нумерички имиња расфрлани низ целата структура.

За да не губиме време во игра на „мачка и глушец“ со веќе генерираните фајлови, го применивме златното правило: вративме чист бекап на сајтот, ги ажуриравме сите плагини и го затворивме случајот. Барем така мислевме.

Следното утро, друг сајт

Следното утро, првиот сајт беше чист, но истиот проблем се појави на втор сајт на истиот сервер. Го исчистивме и вративме бекап и на тој, за следното утро алармот да се вклучи на трет сајт. Изгледаше како да се бориме со чудовиштето Хидра од античката митологија, на која кога и сечеш една глава, веднаш и никнуваат две други.

Токму тука започна вистинската двонеделна агонија. Секое утро во 03:08 часот, автоматскиот malware-скенер на хостингот пријавуваше нови малициозни PHP фајлови (cras.php, нумерички фајлови како 1791939954.php и кратки единечни фајлови), додека ресурсите на cloud серверот (CPU и I/O лимитите) беа до плафон.

Зошто враќањето од бекап и ажурирањето на главните сајтови не помагаше? Затоа што кога неколку домени делат иста корисничка средина (shared/cloud контејнер), напаѓачите користат латерално движење (Lateral Movement). Тие не мора одново да го хакираат сајтот што веќе сме го исчистиле, туку доволно им е да имаат само една скриена задна врата на некој соседен фолдер на истиот сервер за секоја ноќ повторно да ги инфицираат сите останати домени.

Пресвртот: Вклучување на Gemini Argon 4 и длабинска SSH форензика

По две недели борба со симптомите, беше јасно дека класичните алатки, графичкиот File Manager и стандардните WordPress безбедносни плагини како Wordfence, се слепи за изворот на инфекцијата.

Тогаш во играта го вклучивме Gemini Argon 4 (моментално најнапредниот AI модел на Google), чија огромна аналитичка моќ во доменот на сајбер-безбедноста, читањето системски логови и де-обфускацијата на малициозен код ни овозможи да преминеме во целосна офанзива преку SSH терминал и WP-CLI.

Со помош на Gemini Argon 4, спроведовме хируршка форензика на целиот linux контејнер и ги откривме 4-те столба на овој софистициран руски напад:

1. Влезната точка: Заборавена под-инсталација (Shadow IT)

Сите наши претходни скрипти за безбедност ги проверуваа главните патеки на домените (~/domains/*/public_html/). Но, со помош на длабинско пребарување на сите wp-config.php фајлови на серверот, откривме дека изворот воопшто не е во главните сајтови, туку во стара, секундарна инсталација сместена во под-фолдер (/public_html/sub-folder/).

Бидејќи тој под-фолдер бил надвор од редовниот радар за одржување, неговиот додаток JupiterX Core останал заглавен на стара верзија (46 верзии зад актуелната), која содржи критична ранливост за неавтентицирано прикачување на фајлови. Тоа била главната база на напаѓачите.

2. Тројански коњ во системската папка .private

Секој што работи со cloud хостинг знае дека во коренот на домените постои скриена системска папка .private (со config.json и .htaccess), која легитимно ја користи самиот хостинг провајдер.

Напаѓачите генијално го искористиле ова за камуфлажа. Внатре во .private на вгнездената инсталација креирале под-папка .private/library/index.php од 82 KB. Бидејќи папката почнува со точка (.), ниту еден стандарден WordPress скенер не ја скенира. Кога со Gemini Argon 4 го анализиравме овој фајл преку терминал, ја најдовме командната централа на нападот:

/* PHP File manager ver 1.5 */
$langs = array('en','ru','de','fr','uk');
$default_language = 'ru';
'enable_php_console' => true,
'enable_sql_console' => true,

Стануваше збор за комплетен руски веб-шел (Web Shell) со директна PHP и SQL конзола, преку кој напаѓачите имале целосна контрола врз целиот серверски простор.

3. Полиморфна фабрика за malware во .cagefs/tmp/

Друго прашање кое висеше беше зошто секое утро во 03:08 часот се појавуваа фајлови со сосема различен код кој антивирусите не го препознаваа веднаш? Кога со Gemini Argon 4 направивме скен за скриени PHP фајлови надвор од веб-директориумите (find ~ -path "*/.*/*.php"), во привремената системска меморија на linux контејнерот (.cagefs/tmp/) откривме цела инсталација на YAK Pro – PHP Obfuscator (x_yakpro).

Хакерите инсталирале сопствена фабрика за обфускација (маскирање на код) директно во /tmp папката на серверот. Секоја вечер, нивната скрипта ја користела оваа локална алатка за динамички да го „меша“ и кодира изворниот код на вирусот пред да го дистрибуира низ сајтовите.

4. Социјален инженеринг во кодот и in-memory execution (tmpfile())

Најлукавиот момент од целиот инцидент се случи кога ја креиравме нашата прва автоматизирана скрипта за проверка во главниот фајл, наречена security_check.sh.

Напаѓачите забележале дека на серверот постои наша скрипта со тоа име. За да си осигураат резервен пристап на уште 11 други домени, тие креирале свој малициозен фајл, го крстиле токму security_check.php, го сокриле во папката за Javascript (wp-admin/js/security_check.php) и му го фалсификувале датумот на креирање (Timestomping) за да изгледа како стар системски фајл.

Кога го отворивме, видовме напредна техника на мемориска евазија со тројна base64_decode енкрипција:

$v43346 = $w24461($y13226);
$v57010 = $w24461($v43346);
$b69248 = $w24461($v57010);
$tmp = tmpfile();
fwrite($tmp, '<?php ' . $b69248 . ' ?>');
fseek($tmp, 0);
include stream_get_meta_data($tmp)['uri'];
fclose($tmp);

Наместо да запишува фајл на дискот каде што скенерот би го фатил, оваа задна врата го декодира вирусот во RAM/привремена меморија преку tmpfile(), го извршува директно преку меморискиот стрим stream_get_meta_data($tmp)['uri'] и веднаш ја брише трагата со fclose($tmp).

wordpress bezbednost cli

Како ја добивме битката: Финална елиминација на вирусот

Откако Gemini Argon 4 ги поврза сите точки и ни ја даде комплетната слика за архитектурата на нападот, во рок од неколку часа спроведовме тотална дезинфекција која стави крај на дво-неделната сага:

  1. Глобална криптографска ревизија (wp core verify-checksums): Со една мастер-скрипта ги проверивме MD5 криптографските отпечатоци на сите инсталации и под-инсталации директно со официјалниот репозиториум на WordPress.org. Оваа команда не може да се излаже со лажни датуми (Timestomping) и веднаш ги лоцираше сите 11 копии од лажниот wp-admin/js/security_check.php и скриените фајлови во wp-includes/fonts/.

  2. Уништување на командниот центар и обфускаторот: Ги избришавме .private/library шелот, x_yakpro обфускаторот во .cagefs/tmp/ и сите стари /OLD и /test директориуми.

  3. Затворање на ранливостите и чистење на додатоците: Ги ажуриравме сите јадра, теми и плагини преку WP-CLI, ги избришавме сите неактивни плагини и ги ротиравме сите криптографски клучеви (wp config shuffle-salts).

  4. Појачана структура и 24/7 автоматизиран Cron штит: Ги заклучивме пермисиите на wp-config.php и .htaccess (chmod 444), забранивме извршување на PHP скрипти во /uploads/ папките и поставивме автоматизиран дневен Cron монитор кој секое утро во 06:00 часот скенира специјално за скриени dot-фолдери (*/.*/*.php) и сомнителни фајлови.

Резултатот следното утро? Нула предупредувања од хостингот, целосно мирни ресурси и беспрекорно чист безбедносен лог.

Заклучок: Новата ера на сајбер-одбраната

Оваа 14-дневна битка ни потврди две клучни лекции кои секој ИТ професионалец и сопственик на дигитален бизнис во Македонија мора да ги има предвид:

Прво, безбедноста на вашиот сервер е силна онолку колку што е силна вашата најзаборавена тест-инсталација. Доволен е само еден стар под-фолдер за да стане отворена врата кон целата ваша инфраструктура. Затоа одржавката на WordPress веб страните и навременото ажурирање на темите и плагините мора да биде редовно и правилно направено.

Второ, во ера кога хакерите користат автоматизирани ботнет мрежи, полиморфни скрипти и in-memory injections, мануелното барање фајлови е однапред изгубена битка. Клучот за нашата победа беше спојот на системското инженерство со огромната моќ за сајбер-безбедност на вештачката интелигенција (поточно Gemini Argon 4 моделот), кој во секунди може да анализира илјадници линии логови, да декодира повеќеслоен малициозен код и да креира прецизни форензички скрипти за целосна заштита.

Автор: Благој Ѓелевски

You May Also Like

Previous Post
Иднината на пребарувањето: зошто традиционалното SEO веќе не е доволно (и како AI SEO ja менува играта)