С 17 марта по 19 августа 2026 года червь P2PInfect распространялся через серверы Redis, оставленные доступными из интернета. За это время зафиксировано 692 адреса источников атак и 363 командных сервера, рассылавших одну и ту же вредоносную программу. Семейство известно с июля 2023 года, когда оно проникало в системы через уязвимость в механизме изоляции сценариев Lua. Теперь вход другой по форме, но такой же по сути - ошибка конфигурации вместо изъяна в коде. Под удар попадают в первую очередь компании, которые развернули хранилище для внутренних задач, а затем открыли к нему доступ из внешней сети. Масштаб говорит о том, что небрежная настройка остаётся массовой проблемой, а не редким исключением.
Описание
Redis держит данные в оперативной памяти и отвечает на запросы очень быстро. Разработчики создавали его для доверенного окружения, где клиенты и сервер находятся в одной защищённой сети. Подключение из интернета разрушает это допущение. Любой, кто установил соединение, получает полный набор команд, включая те, что управляют записью файлов на диск и загрузкой кода в память процесса. Последствия зависят от аппетита атакующего: от скрытой добычи криптовалюты и кражи содержимого хранилища до развёртывания программ-вымогателей. Наблюдение за инфраструктурой показало, что злоумышленники используют открытый доступ двумя способами, и оба ведут к полному контролю над узлом.
Первый способ опирается на копирование данных между серверами. Хранилище умеет получать копию с ведущего узла, и атакующий подставляет вместо доверенного партнёра собственный сервер. Жертва обращается к нему за снимком базы, а получает разделяемую библиотеку - исполняемый файл, который сервер по отдельной команде загружает в свой процесс. Библиотека наследует права процесса, а на плохо настроенных установках это права суперпользователя. Она добавляет в систему две новые команды: запуск произвольной команды оболочки с возвратом результата и открытие обратного подключения к атакующему. Через них загружается основная полезная нагрузка. Завершив работу, инструмент удаляет загруженный файл и выгружает библиотеку из памяти. Список подключённых расширений остаётся пустым, и самый очевидный след вторжения исчезает.
Одна из двух перехваченных сборок собрана независимо от публичной версии. Как показало исследование, она наделена заметно более широкими возможностями: следит за событиями жизненного цикла сервера, читает и изменяет очереди сообщений, собирает сведения о версии и настройках, перебирает все ключи хранилища. Такой набор заметно упрощает разведку внутри базы и подготовку следующего шага. Автор явно рассчитывал на длительное присутствие в чужой сети, а не на разовый захват узла.
Второй способ превращает хранилище в средство записи файлов. Снимок, который сервер сохраняет на диск, хранит значения ключей как обычный текст, а расположение и имя файла задаёт клиент. Атакующий помещает нужную строку в значение ключа и указывает серверу сохранить снимок поверх файла, которому операционная система доверяет. Дальше срабатывает логика самой системы, а не уязвимость в коде. В первом варианте в расписание планировщика заданий попадает строка запуска: она открывает соединение с командным сервером, скачивает полезную нагрузку и выполняет её. Во втором в список доверенных ключей удалённого доступа добавляется открытый ключ атакующего, и тот получает вход под учётной записью суперпользователя. Программы разбора и планировщика, и службы удалённого доступа пропускают посторонние двоичные данные вокруг вставленной строки и воспринимают её как обычную настройку.
Скачанные файлы оказались червём P2PInfect, написанным на Rust. Полноценно распаковать удалось только самую крупную сборку, два других файла представляли собой обрезанные копии. Ранее этот вариант не публиковался. Опознать семейство помогли служебные пути, которые сохраняются при компиляции: в них видны имена каталогов проекта автора. Возможности широкие. Внутри есть клиент удалённого доступа с готовым словарём из более чем сотни учётных данных для атаки полным перебором, сканер сети в поисках новых целей, участие в одноранговом ботнете с подписанными обновлениями и переключатель на добычу криптовалюты. Каждый заражённый узел сам начинает искать следующую жертву, поэтому один небрежно настроенный сервер быстро превращается в плацдарм для атаки на соседние подсети.
Инфраструктура атакующего устроена неравномерно. Из 363 командных серверов 218 совмещают две роли - подставного ведущего узла и хранилища полезной нагрузки. Ещё 138 работают только как подставные ведущие узлы, семь - только как источник загрузки. Первый способ применяется ровно с марта. Обе ветки второго способа резко пошли вверх с июля: запись в расписание и добавление ключа доступа оказались дешевле и надёжнее в эксплуатации. В августе через планировщик заданий пришло 120 новых адресов атак, тогда как через подмену копирования - 93. Такое соотношение показывает, куда смещается интерес группировки.
Проверку разумно начать с того, кто вообще видит сервер. Через авторизованное подключение администратор узнаёт версию и смотрит по одной настройке - параметры привязки, порта, режима защищённости. Правила брандмауэра, группы безопасности и опубликованные порты контейнеров нужно сверить с этим списком. Включённый режим защищённости сам по себе не доказывает, что сетевой доступ ограничен правильно. Дальше проверяют права подключённых пользователей: учётные записи без пароля и разрешения шире роли требуют немедленной правки. Отдельно смотрят, разрешены ли смена критичных настроек и загрузка модулей; в справочнике для установленной версии указано, какие значения эти операции блокируют. Служба не должна работать с правами суперпользователя и не должна уметь писать в файлы расписания и ключей доступа. Минимальные привилегии и закрытый сетевой периметр обрывают оба описанных пути.