Шестнадцать взломанных сайтов на WordPress показывают посетителям страницу с проверкой, которая просит открыть системный терминал и вставить заранее скопированную команду. После этого на компьютере запускается скрытая программа, замаскированная под компонент звуковой подсистемы Realtek. Площадки расположены в разных странах и не связаны между собой ничем, кроме внедрённого скрипта.
Описание
Сама поддельная страница на серверах жертв не хранится. Браузер забирает её содержимое из смарт-контрактов в тестовой сети BNB Smart Chain, поэтому оператор меняет адрес следующего шага одной транзакцией, не касаясь взломанных площадок по данным анализа. Приём получил название EtherHiding и за последний год стал частым способом доставки для кампаний ClickFix: удалять на стороне WordPress приходится только внедрённый загрузчик, а домена, который можно заблокировать, в этой схеме нет. Отдельный контракт запоминает, что конкретный посетитель уже выполнил команду, поэтому повторно окно ему не показывают.
Вставленная команда обращается к сервису jsDelivr, который отдаёт файлы прямо из публичного репозитория на GitHub. Кавычки внутри строки разбивают написание адреса на части, чтобы обойти сравнение с известным шаблоном, а сама оболочка их отбрасывает. Первый скрипт занимает 237 килобайт и прячет все осмысленные строки за девятью функциями-декодерами, большинство из которых служат приманкой. Перед работой он проверяет, не запущен ли он в среде разработки или под отладчиком, и в таком случае молча завершается.
Маскировка под аудиодрайвер
Первый скрипт запускает 32-битную версию PowerShell со скрытым окном и загружает второй файл размером 6,3 мегабайта. Тот состоит из 64 тысяч строк, и почти всё это декоративные вычисления; полезной нагрузкой оказывается массив из 510 тысяч кодов символов. Ключ расшифровки собирается из таблицы символов, а сама расшифровка выполнена через логическую операцию, записанную непривычным способом, чтобы не совпасть с шаблоном антивирусных правил.
Полученный код содержит шелл-код (вредоносный код, исполняемый в памяти) в нестандартной кодировке Base85 и загрузчик, который не упоминает имена системных функций в открытом виде. Вместо этого он копирует образ системной библиотеки, перебирает её экспортируемые имена и сравнивает числовые отпечатки. Затем создаётся приостановленный процесс обновления Edge или системной утилиты, в него записывается код, а выполнение стартует с задержкой от половины до двух секунд. Приём с внедрением до запуска основного кода называется Early Bird injection и оставляет вредоносный код внутри подписанного процесса Microsoft.
Финальный исполняемый файл весит 680 килобайт. В его свойствах указаны производитель Realtek Semiconductor и описание Realtek HD Audio Manager, что не выглядит подозрительно на обычном ноутбуке. На диск под этим именем файл не попадает: он существует только в памяти чужого процесса. На момент проверки ни он, ни шелл-код не встречались в VirusTotal и MalwareBazaar.
Закрепления в системе ни один из этапов не создаёт: нет ни автозапуска, ни задач по расписанию, ни служб, ни файлов на диске. Такой функционал, вероятно, оставлен финальной программе, которую автор разбора предположительно относит к классу программ для кражи данных.
Ротация инфраструктуры
Аккаунт на GitHub, отдававший первый скрипт, был создан за два дня до обнаружения. Его история показывает быструю смену хостов: несколько файлов подряд указывали на разные управляющие адреса, а часть версий оператор удалил. Второй аккаунт с тем же набором приёмов появился на две недели раньше и успел отработать ещё три адреса. Совпадение сборщика, структуры имён, пары серверов имён и редиректа на крупный новостной сайт говорит об одной и той же группе. Редирект нужен для маскировки: при открытии управляющего хоста в браузере посетитель видит новостную страницу, а запрос за скриптом получает полезную нагрузку.
За три дня наблюдений трекер зафиксировал 354 взломанных сайта и 12 отдельных кампаний ClickFix. Собрано 713 уникальных вставленных команд с 861 снимка страниц, 4 246 обращений к 27 смарт-контрактам в четырёх сетях, включая Polygon, Base и Sepolia. Из 480 скачанных файлов следующего шага извлечено восемь финальных исполняемых файлов, и шесть из них не определялись антивирусными сервисами. Крупнейшая кампания охватила 247 площадок и распространяла программу, которую VirusTotal распознаёт в 45 случаях из 70.
Часть взломанных сайтов несла вторую, не связанную с первой инъекцию от другого оператора. Удаление одного загрузчика не делает площадку чистой, поскольку повторные компрометации WordPress остаются обычной практикой. Ни одна из описанных цепочек не использует уязвимость нулевого дня: ставка сделана на социальную инженерию и доверие к подписанным процессам и крупным сервисам доставки кода.