🐳 Как использовать Docker для проверки безопасности ПО

Мануал

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

Программное обеспечение в них работает с производительностью, близкой к нативной.

Это делает контейнеры Docker отличным способом безопасно опробовать новые пакеты, не устанавливая их “на чистое железо” на своей машине.

Вот некоторые из методов, которые вы можете использовать.

Зачем использовать Docker для опробования программного обеспечения?

Установка непосредственно из менеджера пакетов не всегда желательна, когда вы впервые пробуете программное обеспечение.

Возможно, вы не захотите запускать на своем оборудовании непроверенный демон или сетевую службу.

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

В худшем случае пакет, который вы загружаете, может оказаться вредоносным или скомпрометированным.

Выбирая “голую” установку, вы подвергаете риску свои данные.

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

Контейнеры Docker предоставляют изолированную “песочницу”, в которой можно устанавливать новые пакеты, не беспокоясь об этих проблемах. По сравнению с созданием новой виртуальной машины, Docker легче и быстрее, но обеспечивает аналогичный уровень безопасности при настройке на безопасное выполнение.

Пакеты, которые вы устанавливаете в контейнер, изменяют файловую систему контейнера, оставляя данные хоста нетронутыми.

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

☸️ Побег из контейнера Kubernetes с помощью монтирования HostPath

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

Если окажется, что пакет вам не подходит, “деинсталлируйте” его, просто удалив свой Docker-контейнер из песочницы.

В вашей системе не останется никаких следов этого пакета.

Поиск образов Docker

Когда вы хотите попробовать что-то новое, лучше всего сначала найти в Docker Hub образ контейнера для выбранного вами пакета.

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

Многие популярные проекты теперь предлагают официальные образы Docker в составе своих релизов.

Они четко обозначены на Docker Hub Official Image.

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

Стоит сначала проверить статистику загрузок, чтобы оценить, успешно ли другие используют этот образ.

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

Образы различают разные версии с помощью тегов Docker, например, mongo:5 для MongoDB 5 и mongo:4 для MongoDB 4.

Используйте представление тегов Docker Hub для просмотра доступных вариантов и времени их последнего обновления.

Использование образа

Найдя образ, запустите из него контейнер.

Вам следует обратиться к описанию образа на Docker Hub, чтобы получить конкретные инструкции для выбранного вами программного обеспечения.

В общем, образа, упаковывающие интерактивное приложение, могут быть запущены с помощью этой последовательности:

docker run -it example-image:latest

Вместо этого запускайте образа, обеспечивающие фоновые процессы, с флагом -d:

docker run -d example-image:latest

Команда docker run запускает контейнер, используя указанный образ.

Теперь ваше программное обеспечение работает в изолированной среде со своей собственной файловой системой.

Вы можете запустить несколько независимых экземпляров одновременно, запустив несколько контейнеров из образа.

Что делать, если нет образа?

Отсутствие официального – или неофициального – образа Docker для выбранного вами программного пакета – это еще не конец вашего путешествия с Docker.

В этой ситуации создайте контейнер из базового образа операционной системы для размещения изолированной среды.

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

Вот пример, который запускает свежую среду Ubuntu в Docker:

docker run -it ubuntu:20.04

Флаг -it означает, что вы попадете в интерактивную оболочку, запущенную в терминале.

Теперь вы можете использовать apt, curl, wget или любые другие необходимые шаги для установки и опробования целевого пакета.

apt update
apt install example-package
example-package --example-flags

Если вы захотите повторить эти шаги в будущем, напишите Dockerfile, который позволит вам создать свой собственный образ:

FROM ubuntu:20.04
apt update
apt install example-package
ENTRYPOINT ["example-package"]
CMD [""]

🐳 Краткое введение в Dockerfile

Создайте свой образ:

docker build -t example-package:latest .

Теперь используйте ваш образ для запуска контейнера, который автоматически запускает двоичный файл example-package, добавленный в базовый образ Ubuntu:

docker run -it example-package:latest --example-flags

Это работает, потому что двоичный файл установлен в качестве команды образа Docker в вашем Dockerfile.

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

Создание снепшотов

Еще одним преимуществом использования Docker для опробования нового программного обеспечения является возможность создания снимков текущего состояния контейнера.

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

Используйте команду docker commit для создания нового образа из файловой системы контейнера:

🐳 Как обновить образ Docker c новыми изменениями?

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

Если вы хотите сделать откат, используйте команду docker run для запуска другого контейнера из образа package-snapshot:latest.

Очистка

Когда вы закончите экспериментировать, Docker позволяет легко “деинсталлировать” ваше программное обеспечение, не оставляя следов.

Сначала удалите свои контейнеры:

docker rm my-container

Затем очистите загруженные образа:

docker rmi example-image:latest

Теперь вы вернулись к чистому состоянию.

Поскольку все, что связано с программным обеспечением, существовало только внутри вашего контейнера, файловая система вашего хоста останется неизменной.

Постоянные данные

Одна из проблем, с которой вы можете столкнуться, – это когда вы хотите приостановить свои процессы и возобновить их позже.

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

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

Для этого используйте флаг -v в docker run.

docker run -it -v config-volume:/etc/example-package/conf.d example-package:latest

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

Удалите тома с помощью команды docker volume rm.

Заключение

Docker – это быстрый и простой способ безопасно опробовать программное обеспечение, не загрязняя среду хост-машины.

Он позволяет проверять новые пакеты, прежде чем внедрять их в чувствительные системы и “голое” оборудование.

Использование Docker дает возможность сканировать программное обеспечение перед его запуском.

Встроенный компонент Docker Scan выявляет уязвимости в пакетах внутри образа, давая вам представление о последствиях для безопасности.

Используйте docker scan example-package:latest для сканирования загруженных образов.

Также можно использовать Harbor:

🐳 Как использовать Harbor для сканирования образов Docker на наличие уязвимостей

см. также:

 

Добавить комментарий