Проблемы безопасности Google Cloud Run

Я тестирую Google Cloud Run, и у меня есть некоторые проблемы с безопасностью. Допустим, я обрабатываю ввод пользователя с помощью двоичной программы. Что делать, если программа уязвима и вредоносный код внедрен в контейнер. Злоумышленник сможет получить доступ к моей базе данных или хранилищу или любому ресурсу, к которому у контейнера есть разрешения на доступ.

Вопрос в том, действительно ли это вызывает беспокойство и как мне это предотвратить?

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

1 ответ

Решение

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

Представьте, что вы бежите ffmpegв контейнере, и один из ваших пользователей дает вам видеовход для преобразования. Это видео может использовать уязвимости в ffmpeg (поскольку оно написано не на безопасном для памяти языке, их было много) и может выполнять произвольный код. Этот произвольный код может потенциально проникнуть в вашу среду, включая токен доступа к API GCP, запросив:

curl -H "metadata-flavor: Google" http://metadata/computeMetadata/v1/instance/service-accounts/default/token

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

Чтобы защитить себя от этого класса атак, я рекомендую:

  • Создайте в Cloud Run отдельную службу, единственной задачей которой является выполнение оболочки для ненадежного исполняемого файла (как вы упомянули).
  • Запустите эту службу с учетной записью службы (--service-account), у которого нет разрешений делать что-либо с вашим объектом. Таким образом, злоумышленник может извлечь токен, который не может сделать много (однако может узнать идентификатор вашего проекта GCP или адрес электронной почты этой учетной записи службы).
  • (Насколько мне известно, это пока невозможно в Cloud Run). Запустите файловую систему контейнера в режиме только для чтения, чтобы предотвратить изменение злоумышленником исполняемых файлов или библиотек в контейнере, что может повлиять на последующие запросы, обрабатываемые контейнером.
  • (В связи с отсутствием сегодня файловой системы контейнера только для чтения), если ненадежный двоичный файл, который вы выполняете, является / может быть "статически скомпилирован", при каждом запросе рассмотрите возможность создания нового временного каталога, содержащего двоичный файл. Затем выполните chroot и выполните двоичный файл в этом каталоге (чтобы его побочные эффекты не повлияли на остальную часть контейнера) и очистите этот каталог до завершения запроса.

Надеюсь это поможет.

Другие вопросы по тегам