Поиск по сайту:

Как проверить содержимое образа Docker без запуска контейнера


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

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

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

Создание контейнера без его запуска

docker create — менее известный аналог docker run. Он создает новый контейнер поверх заданного образа, не запуская его. Вы можете запустить его позже с помощью команды docker start.

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

docker create --name suspect-container suspect-image:latest

Приведенная выше команда создает новый контейнер с именем suspect-container, который будет основан на образе suspect-image:latest.

Экспорт файловой системы контейнера

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

docker export suspect-container > suspect-container.tar

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

Если вам не нужно сохранять или открывать архив, вместо этого вы предпочитаете получить список файлов в своем терминале, измените команду tar:

docker export suspect-container | tar t > suspect-container-files.txt

tar t перечисляет содержимое входного архива. В итоге вы получите список всего, что есть в вашем изображении, внутри suspect-container-files.txt.

Использование «сохранения образа докера»

Разновидностью этого метода является использование сохранения образа docker. Эта команда напрямую сохраняет данные изображения в tar-архив.

docker image save suspect-image:latest > suspect-image.tar

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

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

Список слоев с «историей образа докера»

Другой способ проверить содержимое изображения — просмотреть его список слоев с помощью команды docker image history.

docker image history suspect-image:latest

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

Каждая строка в выводе команды представляет новый слой изображения. Столбец «CREATED BY» показывает инструкцию Dockerfile, которая создала слой.

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

Последние два слоя, возможно, являются наиболее важными для оценки при проверке истории изображения. Они точно сообщают вам, что запустится, когда вы docker run или docker start контейнера. Если какая-либо инструкция выглядит подозрительной или незнакомой, рассмотрите возможность использования описанных выше методов для полной проверки указанных двоичных файлов или сценариев.

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

Сторонние инструменты

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

Проверка изображений встроена в механизм сканирования контейнеров Anchore. Вы можете использовать его, запустив anchore-cli image content my-image:latest после установки Anchore. Это предоставляет полный список содержимого файловой системы целевого образа.

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

Заключение

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

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

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