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

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

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

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


person ANIVGames    schedule 26.04.2020    source источник
comment
Если ваше приложение небезопасно, зависимые компоненты могут быть уязвимы независимо от того, где и как вы их размещаете. Это не относится к Cloud Run.   -  person Travis Webb    schedule 27.04.2020


Ответы (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 там и выполните двоичный файл в этом каталоге (чтобы его побочные эффекты не влияли на остальная часть контейнера) и очистите этот каталог до завершения запроса.

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

person Ahmet Alp Balkan    schedule 26.04.2020
comment
Большое спасибо за ответ. Специально для chroot tip. - person ANIVGames; 27.04.2020
comment
Это может быть дополнительным решением. - person guillaume blaquiere; 27.04.2020