Ssylka

Магический пакет TCP активирует невидимый руткит LinkPro

Специалисты по безопасности из компании 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 активированной опции 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. Атакующая группировка пока не идентифицирована, однако ее мотивы, предположительно, являются финансовыми.


Новое на сайте