ADG Оставить заявку
Блог Информационная безопасность 5 мин чтения

Immutable S3-бэкап с Object Lock против ransomware: тестируем Veeam + MinIO в Compliance-режиме

Настраиваем immutable-копии через Veeam + MinIO/Yandex Object Storage с S3 Object Lock в Compliance-режиме. Тестируем: удалить бэкап не может даже администратор.

Контекст момента

Производители СХД и облачных хранилищ продвигают immutable backup с S3 Object Lock как защиту от ransomware после волны атак в 2020 году

После волны ransomware-инцидентов в марте один из наших клиентов задал вполне резонный вопрос: «А если атакующий доберётся до учётки администратора бэкапов - он сможет удалить все копии?». Честный ответ на тот момент был «да, сможет». Что нас, откровенно говоря, не устраивало.

Производители хранилищ и облачных сервисов сейчас активно продвигают S3 Object Lock как ответ именно на этот сценарий. Мы взяли и проверили - что реально работает, а что маркетинг. На клиентах, которых ведём в рамках managed-сопровождения, запустили тестирование двух схем: Veeam + MinIO on-premise и Veeam + Yandex Object Storage.

Почему Governance-режим нас не устроил

В февральском посте про Veeam 10 мы уже упоминали, что Object Lock бывает двух видов: Governance и Compliance. Вернёмся к этому подробнее, потому что разница принципиальная.

Governance mode - блокирует удаление для обычных пользователей, но пользователь с правами s3:BypassGovernanceRetention может объект всё-таки удалить. На AWS это обходится через IAM. На MinIO - аналогично. То есть если атакующий скомпрометировал достаточно привилегированную учётку, защита снимается.

Compliance mode - другая история. Объект нельзя удалить или изменить до истечения retention period никому. Буквально никому - даже root-аккаунту AWS или суперадминистратору MinIO. Период хранения нельзя сократить. Можно только увеличить. Именно это нас и интересовало.

Veeam 10 поддерживает оба режима, но по умолчанию ставит Governance. Для переключения в Compliance нужно явно указать это в настройках репозитория.

Схема, которую мы тестировали

Стенд выглядел так: продуктивная среда клиента на VMware, Veeam Backup & Replication 10 как инструмент резервного копирования, Scale-Out Backup Repository с двумя уровнями - локальный репозиторий на NAS и capacity tier в объектное хранилище.

В качестве объектного хранилища тестировали два варианта параллельно:

  • MinIO - on-premise, развёрнутый на отдельном хосте, версия с поддержкой Object Lock. Ключевой момент: MinIO для Object Lock требует инициализации в режиме с erasure coding, обычная single-node установка Object Lock не поддерживает. Это важно при планировании.
  • Yandex Object Storage - облачный, поддержка Object Lock появилась, настройка через консоль или API аналогична AWS S3.

Retention period выставили 14 дней - достаточно для обнаружения инцидента и реакции, без чрезмерного роста хранилища.

Что проверяли

Нас интересовал один конкретный сценарий: атакующий получил ключи доступа к S3 (или credentials от MinIO) с полными правами. Что он может сделать с бэкапами?

Взяли тестовый бэкап, загруженный в Compliance-режиме, и попробовали несколько вариантов удаления:

Через AWS CLI / mc (MinIO client) напрямую. Команда aws s3 rm / mc rm возвращает ошибку: объект защищён Object Lock. Даже с ключами, у которых полные права на бакет. Ожидаемо, но приятно видеть это в действии.

Попытка удалить версию объекта. S3 Object Lock привязан к конкретной версии - если бакет с версионированием, можно попробовать удалить версию отдельно. С Compliance-режимом это тоже не работает - DeleteObjectVersion возвращает AccessDenied с указанием на Object Lock.

Попытка изменить retention period. Уменьшить срок блокировки нельзя. Увеличить - можно, но нас это не беспокоит: атакующему продление retention не помогает.

Удаление всего бакета. Нельзя удалить бакет, в котором есть объекты с активным Object Lock. Сначала нужно дождаться истечения retention на всех объектах.

Итог: при правильно настроенном Compliance-режиме бэкапы за retention-период действительно недоступны для удаления. Ни через прямой доступ к хранилищу, ни через Veeam Console.

Нюансы, которые обнаружили в процессе

Не всё прошло гладко, и это полезнее всего зафиксировать.

MinIO и инициализация. Включить Object Lock на уже существующем бакете нельзя - только при создании нового. Если разворачиваете MinIO и планируете Object Lock, закладывайте это с самого начала. У нас был стенд с уже работающим MinIO без Object Lock - пришлось создавать новый бакет и переливать.

Veeam и Compliance mode. В настройках Veeam репозитория есть галочка «Make recent backups immutable for N days» и выбор режима. По умолчанию - Governance. Переключение на Compliance меняет поведение: Veeam предупреждает, что управление хранилищем станет строже. Это ограничивает гибкость расписания - уменьшить retention задним числом не выйдет, поэтому считаем объёмы заранее.

Тестовое восстановление - обязательно. После настройки Compliance-режима мы тут же проверили восстановление VM из этих бэкапов. Чтение объектов из Compliance-хранилища работает штатно - Object Lock блокирует только запись и удаление, но не чтение. Instant VM Recovery отработал без проблем. Это важно проверить, потому что бэкап, из которого нельзя восстановиться, - не бэкап.

Мониторинг дополнительных расходов на хранение. При Compliance-режиме данные гарантированно хранятся весь заявленный период. Если в расписании что-то поменялось и старые точки восстановления стали не нужны - они всё равно останутся до истечения срока. У одного клиента мы немного промахнулись с оценкой объёма на первый месяц.

Что в итоге порекомендовали клиентам

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

  • Основной репозиторий - локально, изолированная сеть, без доступа с рабочих станций.
  • Второй уровень - S3 с Object Lock в Compliance-режиме, retention 14-30 дней в зависимости от требований клиента.
  • Доступ к S3 - только с Veeam-сервера, IAM/MinIO policy запрещает доступ с других хостов. Ключи ротируются.
  • Тест восстановления - ежеквартально, из S3-копии, на изолированный стенд.

Это не панацея - у атакующего с длинным горизонтом (проник и ждёт дольше, чем retention period) этот механизм не сработает. Но против типичного ransomware, который действует за часы или дни, - работает. И это честный, проверяемый результат, а не обещание из брошюры.

Следующий шаг, который обсуждаем с несколькими клиентами, - добавить оповещение на любые попытки удаления из S3-бакетов с бэкапами. Попытка удалить защищённый объект - уже сигнал тревоги, даже если она не удалась.

Контакт

Нужна такая же инженерная работа?

Опишите задачу и контекст. Ответим в течение рабочего дня, при необходимости подпишем NDA.