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