Проблемы безопасности Google Cloud Run - PullRequest
1 голос
/ 27 апреля 2020

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

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

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

1 Ответ

1 голос
/ 27 апреля 2020

Это действительно серьезная проблема - однако этот класс атак не предназначен c для 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, пока я знать–) Запустить файловую систему контейнера в режиме «только чтение», чтобы запретить злоумышленнику изменять исполняемые файлы или библиотеки в контейнере, что может повлиять на последующие запросы, обрабатываемые контейнером.
  • (в отсутствие контейнера только для чтения файловая система сегодня -) если исполняемый вами недоверенный двоичный файл является / может быть «статически скомпилирован», при каждом запросе рассмотрите возможность создания нового временного каталога, который содержит двоичный файл. Затем ch root и запустите двоичный файл в этом каталоге (чтобы его побочные эффекты не повлияли на остальную часть контейнера) и очистите этот каталог до завершения запроса.

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

...