Вредоносная программа для Linux, которую относят к семейству BambooToken, получает команды через брокер MQTT - облегчённый протокол обмена сообщениями, привычный для систем интернета вещей. Запустившись, она отделяется от родительского процесса и уходит в фон. Внутри - три функциональных блока: сбор сведений о заражённой машине, выполнение команд оболочки и работа с файлами. Интерес представляют серверы под управлением Linux, в том числе корпоративные.
Описание
Настройки зашиты прямо в исполняемый файл. Небольшой блок данных содержит адрес управляющего узла и общий идентификатор группы, к которой подключается программа. Преобразование, скрывающее эти значения, примитивно: ключ лежит рядом и восстанавливается без усилий. Кроме общего канала, программа создаёт личный идентификатор и при следующем запуске меняет его. Общий идентификатор из образца не изменить, а привязать конкретный процесс к одной машине сложнее. Перед входом в основной цикл программа оставляет служебное сообщение о том, что уйдёт в офлайн при обрыве связи. Неудачные попытки соединения повторяются с паузой в пятнадцать секунд. Уходить в фон программа умеет и по отдельному указанию: она дважды разделяется на родительский и дочерний процессы, создаёт новую сессию, переходит в корневой каталог и сбрасывает маску прав. Механизмов запуска при загрузке системы в разобранном коде не нашли.
Принадлежность к семейству подтверждается независимо. Контрольная сумма образца совпадает с записью в перечне индикаторов кампании BambooToken, который опубликовала исследовательская группа Black Lotus Labs. Совпадение хеша точнее, чем схожесть имени файла или общего протокола. Установить по этим данным конкретного оператора нельзя - нужны отдельные доказательства. Тот же домен управляющего узла встречается в перечне рядом с сетевым адресом, который относили к инфраструктуре кампании: окно наблюдений за ней охватывает период с декабря 2025 года по сентябрь 2026 года. Это исторические даты отчётов, а не подтверждение того, что узел отвечает на запросы сегодня. Публичный отчёт песочницы по тому же образцу, датированный декабрём 2025 года, фиксирует обращение к этому узлу на нестандартном порту. Стороннее наблюдение совпадает с настройками, извлечёнными из кода, но полного сеанса связи с оператором оно не показывает.
Работу подсистем делят топики - именованные каналы, на которые программа подписывается. Общий групповой канал отвечает за сбор сведений о хосте. Отдельные каналы, привязанные к идентификатору клиента, включают исполнение команд и файловый модуль. Каждая подсистема получает собственные каналы для приёма задач и отправки ответов, а связывает их брокер. Программа подписывается и на каналы с многообещающими названиями - что-то вроде загрузки дополнений и поддержки скриптов. Обработчиков для них в разобранном образце нет. Подписка на красноречивый топик сама по себе ничего не доказывает.
Содержимое сообщений кодируют повторяющимся ключом, имена каналов дополнительно преобразуют. Ключ известен и хранится внутри программы, поэтому тайны не составляет: получив образец, чужой трафик читают без усилий. Защищённого соединения в разобранном коде нет - настроек шифрования канала не обнаружено. Администратору стоит держать в голове простую вещь: наличие шифрования в описании продукта и в самом образце - разные вещи.
Оболочка выглядит как терминал: в ответ приходит приглашение к вводу. На деле каждая команда запускается отдельно через системную оболочку и возвращает результат вместе с новым приглашением. Постоянного интерактивного сеанса нет. Поток ошибок попадает в ответ только тогда, когда сама команда перенаправила его в стандартный вывод.
Файловый модуль умеет просматривать каталоги, скачивать и загружать файлы, а также удалять их. Вывод списка каталога содержит имя, тип, размер и время изменения каждой записи. Скачивание идёт блоками по 128 килобайт: к двоичным данным добавляется описание в формате JSON (текстовый формат обмена данными), а разделяет их нулевой байт. Разборщик, который ждёт на выходе только JSON, потеряет эту часть. Удаление затрагивает обычные файлы, каталоги остаются на месте. В ответе со списком каталога имя массива файлов написано с опечаткой. Опечатка устойчивая и годится как признак при разборе перехваченного трафика. Обработчики путей и меток времени подогнаны под формат, принятый в Windows. Это говорит о совместимости с ориентированным на Windows протоколом управления, но не об авторстве кода. Автоматического запуска загруженного файла не предусмотрено.
Профиль хоста включает имя пользователя, имя машины, версию системы, идентификатор оборудования, сетевые адреса, модель процессора, номера процесса и потока. Часть полей названа громче, чем есть на самом деле: вместо полного пути к исполняемому файлу передаётся только имя процесса, а несколько полей заполнены словом linux. Идентификатор машины программа ищет в нескольких системных файлах и может сохранить собственный. Этот файл служит для отслеживания, а не для запуска после перезагрузки.
Сетевые признаки для поиска - соединения по MQTT к известному узлу и необычные имена каналов. Один только нестандартный порт служит слабым свидетельством; значение имеет совокупность: формат сообщений, структура каналов, декодированные поля. Там, где есть перехват трафика, содержимое стоит раскодировать до разбора описаний. На самом хосте неизвестный исполняемый файл сопоставляют с порождёнными процессами оболочки и обращениями к файлам. Возможности программы соотносят с техниками MITRE ATT&CK - каталогом известных приёмов атакующих: обмен сообщениями через публикацию и подписку, запуск команд системной оболочки, сбор сведений о системе, перечисление каталогов и вывод файлов через канал управления. Перечисленные приёмы описывают заложенные возможности, а не подтверждённые действия на конкретной жертве.
Обновление систем, контроль исходящих соединений и внимание к необычной сетевой активности снижают риск. Для управления Linux-хостами злоумышленникам хватает открытого протокола и простой прослойки кодирования.