Аналитики DataDog Security Labs обнаружили вредоносную кампанию, в рамках которой злоумышленники проникают на серверы Nginx и перенаправляют трафик пользователей в свою инфраструктуру.
Исследователи связывают эту кампанию с эксплуатацией уязвимости React2Shell, через которую атакующие, вероятно, получают первоначальный доступ к серверам. По словам специалистов, атаки нацелены на установки Nginx и панели управления хостингом Baota, которые используются сайтами с азиатскими доменами (.in, .id, .pe, .bd, .th), а также государственными и образовательными ресурсами (.edu, .gov).
Злоумышленники модифицируют существующие конфигурационные файлы Nginx, внедряя вредоносные блоки location, которые перехватывают входящие запросы на определенные URL-адреса. После этого запросы пересылаются на серверы хакеров через proxy_pass, причем в них сохраняется информация о том, куда изначально хотел попасть пользователь.
Дело в том, что proxy_pass применяется для балансировки нагрузки, и Nginx действительно использует ее, чтобы распределять запросы между бэкенд-серверами. Поэтому такое поведение не вызывает подозрений у систем безопасности.
Заголовки запросов вроде Host, X-Real-IP, User-Agent и Referer сохраняются в нетронутом виде, чтобы трафик выглядел легитимным.
Для проведения атак хакеры задействуют автоматизированный инструментарий, который внедряет изменения в конфигурации в пять этапов.
- Первый этап (zx.sh) — главный управляющий скрипт. Загружает и запускает остальные компоненты. Имеет резервный механизм, который отправляет HTTP-запросы напрямую через TCP, если на сервере нет curl или wget.
- Второй этап (bt.sh) — нацелен на конфигурационные файлы Nginx, которые управляются Baota. Динамически подбирает шаблоны для инъекций в зависимости от значения server_name, перезаписывает конфигурацию и перезапускает Nginx без простоя сервиса.
- Третий этап (4zdh.sh) — перебирает стандартные пути к конфигурационным файлам sites-enabled, conf.d, sites-available. Использует утилиты для парсинга вроде csplit и awk, чтобы не повредить конфигурацию. Обнаруживает предыдущие инъекции через хеши и глобальный файл маппинга, а также проверяет изменения командой nginx -t перед перезапуском.
- Четвертый этап (zdh.sh) — более узконаправленный скрипт, фокусируется на /etc/nginx/sites-enabled и на доменах .in и .id. Проводит те же проверки конфигурации и перезагрузку, с принудительным перезапуском (pkill) в качестве резервного варианта.
- Пятый этап (ok.sh) — сканирует скомпрометированные конфигурации Nginx для создания списка захваченных доменов, используемых шаблонов инъекций и прокси-целей. Вся собранная информация уходит на управляющий сервер 158.94.210[.]227.
Исследователи отмечают, что обнаружить такие атаки непросто. Хакеры не эксплуатируют уязвимости в Nginx и скрывают вредоносные инструкции в файлах конфигурации, которые проверяют редко. К тому же пользовательский трафик все равно достигает цели, а его прохождение через серверы злоумышленников остается незамеченным без специальных средств мониторинга.

