Является ли создание стороннего образа Docker небезопасным?

Предполагая:

  • Третья сторона предоставляет Dockerfile, который я не проверяю.
  • Я создаю образ Docker (docker build или аналогичный) в своей инфраструктуре.
  • сборка имеет ограничение по времени (например, максимум 5 минут)

Это небезопасно для моей инфраструктуры/машины?

Если да, то почему?

Для большего контекста это похоже на систему CI, в которой я создаю образы Docker клиента в своей инфраструктуре.

Вопросы, основанные на мнениях, не приветствуются при переполнении стека. ИМХО, ответ «да», потому что вы не можете доказать, что данный Dockerfile не повредит вашей инфраструктуре. Я считаю, что срок не имеет значения. Проблема в том, что Dockerfile может запускать произвольный код в вашей инфраструктуре.

DazWilkin 23.05.2024 16:58

@DazWilkin "Это небезопасно?" да нет. Это основано на мнении? Я ищу факты о том, почему это небезопасно.

Matthieu Napoli 27.05.2024 16:00

Это не вопрос программирования. Вопросы оперативного типа больше подходят для других сайтов, таких как serverfault.SE.

BMitch 27.05.2024 16:12

«небезопасный» не так четко определен, как вы думаете. Небезопасно ли иметь доступ к любым другим незащищенным службам в вашей локальной сети? Были ли какие-либо из этих сервисов созданы/настроены с предположением, что только «доброжелательный» код сможет добраться до них? Тогда вы нарушите это предположение. Считается ли «растрачивание ресурсов» угрозой безопасности? (В некоторых ситуациях это, конечно, так, в других – не очень). Как вы гарантируете, что в вашей инфраструктуре докеров не будет использоваться старое непропатченное программное обеспечение с известными эксплойтами?

Joachim Sauer 27.05.2024 16:13
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
4
80
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вообще говоря, если вы не просматриваете файл Dockerfile, не зная, какой инструмент вы собираетесь использовать, он может быть небезопасным. Фактически, Dockerfile содержит набор инструкций, которые будут составлять ваш образ, и может включать в себя импортированные библиотеки и специальное программное обеспечение, которое будет размещаться и выполняться.

При запуске сборки Docker каждый уровень выполняется в контексте контейнера. Таким образом, риски ограничиваются тем, какой доступ доступен к строительному контейнеру.

Итак, сопутствующие вопросы безопасности могут быть как на внутреннем, так и на внешнем уровне:

  • внутренне: потенциально контейнеры могут запускать любой тип атаки на хост-компьютер, на котором он работает, поскольку Docker не является песочницей, а запускает процессы на хост-компьютере, поэтому риски аналогичны загрузке неизвестного программного обеспечения из Интернета и запуску на вашем компьютере. хозяин
  • Внешнее: вредоносное программное обеспечение может использовать вашу инфраструктуру и ваши вычислительные ресурсы (процессор, оперативную память, диск, сеть) для отправки вредоносных атак или спам-сообщений на другие узлы в вашей сети.

Чтобы углубиться в безопасность Docker, важно понять, как ее улучшить. С помощью Docker вы можете попытаться ограничить риски безопасности, ограничив возможности экземпляра движка Docker, например:

Наконец, вы можете предотвратить повреждение Dockerfile, выполнив следующие действия:

  1. принятие широко популярного программного обеспечения и инструментов, которые, даже если вы не проверяете их внутреннюю часть, широко распространены и используются в различных контекстах и ​​известны своей безопасностью.
  2. просмотр множества Dockerfile, доступных в Интернете, например. из Docker Hub, поскольку они указывают слои, составляющие Dockerfile, и общедоступный репозиторий, подключенный к образу Docker. Таким образом, даже если вы не пишете Dockerfile, вы можете увидеть детали образа Docker.

«это может быть небезопасно». Спасибо. Есть идеи, почему?

Matthieu Napoli 27.05.2024 16:01

Я отредактировал свой ответ, добавив гораздо больше информации о потенциальных рисках безопасности, связанных с созданием образов Docker.

Alez 30.05.2024 17:55
Ответ принят как подходящий

Вы предоставляете произвольный доступ к коду для записи на диск, использования памяти, использования до 5 минут процессорного времени, доступа к сети и доступа к тому же ядру, выполняющему все остальное на хосте. Я мог бы придумать различные атаки:

  1. Злоумышленник потенциально может использовать доступ к сети для перехода к другим внутренним ресурсам или создать множество сборок для внешних пользователей.
  2. Потенциально они могут использовать доступ к сети для рассылки спама.
  3. Они могут вызвать отказ в обслуживании на хосте, исчерпав ресурсы (заполнив диск или используя всю память).
  4. Они могут запустить форк-бомбу, чтобы исчерпать ресурсы ядра и сделать хост недоступным или аварийным.
  5. Если эксплойт обнаружен в ядре, среде выполнения контейнера или инструментах сборки, этот эксплойт потенциально может предоставить им доступ для прямого доступа к хосту.

Да,

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

Для непрофессионалов докер — это просто более эффективный вариант виртуальной машины, на ней может быть что угодно.

В конечном счете, не загружайте и не создавайте контейнеры, в которых вы не уверены, используйте надежные источники. Вы должны просмотреть файл docker перед его созданием. Файл docker покажет, что устанавливается в образе, а также любые конфигурации, которые могут раскрыть сеть или создать мост.

Если вы не совсем понимаете сам файл, отключите все, что связано с сетью, портами или конфигурацией хоста, в файле docker, раскрутите контейнер и используйте cli, рабочий стол docker или аналогичный инструмент, где вы можете просмотреть файловую систему контейнеров/покопаться внутри.

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