Специалисты по безопасности из компании Synacktiv обнаружили новый многофункциональный руткит для GNU/Linux, написанный на языке Golang и получивший название LinkPro. Вредоносное ПО было выявлено в ходе расследования взлома инфраструктуры Amazon Web Services (AWS). Исследователь Тео Летайер (Théo Letailleur) установил, что ключевыми особенностями руткита являются использование технологии eBPF (extended Berkeley Packet Filter) для сокрытия своей активности и уникальный механизм активации с помощью специально сформированного TCP-пакета.
LinkPro способен работать в двух режимах: активном (forward) и пассивном (reverse). В активном режиме руткит самостоятельно инициирует соединение с командным сервером (C2), поддерживая протоколы HTTP, WebSocket, UDP, TCP и DNS. В пассивном режиме вредоносное ПО остается незаметным и ожидает «магический пакет» от злоумышленника. Только после получения этого пакета LinkPro начинает прослушивать команды по протоколу HTTP.
Механизм активации в пассивном режиме реализован через модуль eBPF под названием "Knock", который содержит две программы — eXpress Data Path (XDP) и Traffic Control (TC). Этот модуль непрерывно анализирует входящий трафик в поиске TCP-пакета, в заголовке которого значение размера окна (window size) установлено на 54321. Как только такой пакет обнаружен, "Knock" сохраняет IP-адрес отправителя, предоставляя ему доступ к зараженной системе на один час.
После успешной активации модуль "Knock" начинает манипулировать сетевым трафиком для обхода брандмауэров. Он перехватывает все входящие TCP-пакеты с подтвержденного IP-адреса и изменяет их заголовки, подменяя исходный порт назначения на порт 2333, который прослушивает LinkPro. При отправке ответных пакетов от руткита модуль изменяет исходный порт 2233 на тот порт, к которому изначально обращался злоумышленник. Это делает практически невозможным сопоставление логов брандмауэра с реальной сетевой активностью на скомпрометированном сервере.
Для сокрытия своего присутствия в системе LinkPro использует два метода. Основной метод требует наличия в ядре Linux активированной опции
Если необходимая конфигурация ядра отсутствует, LinkPro прибегает к запасному методу на уровне пользовательского пространства. Он размещает в системе вредоносную разделяемую библиотеку
Для обеспечения постоянного присутствия в системе LinkPro создает службу
Функционал LinkPro позволяет злоумышленникам выполнять широкий спектр действий на зараженном хосте. Среди поддерживаемых команд: запуск оболочки
Расследование показало, что LinkPro является частью сложной цепочки заражения, которая начинается с развертывания вредоносного Docker-образа на базе Kali Linux. Внутри образа находится папка
Первый файл,
Загрузчик
LinkPro способен работать в двух режимах: активном (forward) и пассивном (reverse). В активном режиме руткит самостоятельно инициирует соединение с командным сервером (C2), поддерживая протоколы HTTP, WebSocket, UDP, TCP и DNS. В пассивном режиме вредоносное ПО остается незаметным и ожидает «магический пакет» от злоумышленника. Только после получения этого пакета LinkPro начинает прослушивать команды по протоколу HTTP.
Механизм активации в пассивном режиме реализован через модуль eBPF под названием "Knock", который содержит две программы — eXpress Data Path (XDP) и Traffic Control (TC). Этот модуль непрерывно анализирует входящий трафик в поиске TCP-пакета, в заголовке которого значение размера окна (window size) установлено на 54321. Как только такой пакет обнаружен, "Knock" сохраняет IP-адрес отправителя, предоставляя ему доступ к зараженной системе на один час.
После успешной активации модуль "Knock" начинает манипулировать сетевым трафиком для обхода брандмауэров. Он перехватывает все входящие TCP-пакеты с подтвержденного IP-адреса и изменяет их заголовки, подменяя исходный порт назначения на порт 2333, который прослушивает LinkPro. При отправке ответных пакетов от руткита модуль изменяет исходный порт 2233 на тот порт, к которому изначально обращался злоумышленник. Это делает практически невозможным сопоставление логов брандмауэра с реальной сетевой активностью на скомпрометированном сервере.
Для сокрытия своего присутствия в системе LinkPro использует два метода. Основной метод требует наличия в ядре Linux активированной опции
CONFIG_BPF_KPROBE_OVERRIDE
. В этом случае руткит загружает eBPF-программы типов tracepoint
и kretprobe
, которые перехватывают системные вызовы getdents
для сокрытия своих файлов в списках каталогов и sys_bpf
для маскировки собственных BPF-программ от средств анализа. Если необходимая конфигурация ядра отсутствует, LinkPro прибегает к запасному методу на уровне пользовательского пространства. Он размещает в системе вредоносную разделяемую библиотеку
libld.so
и прописывает путь к ней в файле /etc/ld.so.preload
. Это заставляет все новые процессы загружать данную библиотеку, которая перехватывает стандартные функции libc
. Таким образом, утилиты вроде /usr/bin/ls
не отображают файлы, процессы и другие артефакты, связанные с работой руткита. Для обеспечения постоянного присутствия в системе LinkPro создает службу
systemd
. При получении одного из сигналов прерывания (SIGHUP, SIGINT, SIGTERM) вредоносное ПО запускает процедуру очистки: выгружает свои модули eBPF, удаляет файл libld.so
и восстанавливает исходное содержимое файла /etc/ld.so.preload
, эффективно заметая следы. Функционал LinkPro позволяет злоумышленникам выполнять широкий спектр действий на зараженном хосте. Среди поддерживаемых команд: запуск оболочки
/bin/bash
в псевдотерминале, выполнение произвольных команд, перечисление файлов и каталогов, чтение, запись и удаление файлов, а также загрузка дополнительных файлов. Одной из ключевых возможностей является создание прокси-туннеля SOCKS5, что позволяет использовать скомпрометированный сервер в качестве плацдарма для дальнейших атак. Расследование показало, что LinkPro является частью сложной цепочки заражения, которая начинается с развертывания вредоносного Docker-образа на базе Kali Linux. Внутри образа находится папка
app
, содержащая скрипт start.sh
для запуска SSH-сервиса и двух других исполняемых файлов. Первый файл,
link
, представляет собой модифицированную версию программы с открытым исходным кодом vnt
. Он функционирует как VPN-сервер и прокси, подключаясь к командному центру по адресу vnt.wherewego[.]top:29872
. Это дает злоумышленникам удаленный доступ к системе. Второй файл, app
, является загрузчиком vGet
, написанным на языке Rust. Загрузчик
vGet
обращается к хранилищу S3 bucket и скачивает оттуда зашифрованную полезную нагрузку под названием VShell. Этот бэкдор, в свою очередь, устанавливает соединение со своим командным сервером по адресу 56.155.98[.]37
через WebSocket. На финальном этапе на узлы Kubernetes развертываются сам руткит LinkPro и дополнительный дроппер с еще одной копией VShell. Атакующая группировка пока не идентифицирована, однако ее мотивы, предположительно, являются финансовыми.