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

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

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

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

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

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

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

docker create —name подозреваемый-контейнер подозрительный-образ: последний

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

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

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

докер экспорт подозрительный-контейнер> подозрительный-контейнер.tar

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

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

докер экспортный подозрительный контейнер | tar t> подозреваемый-контейнер-файлы.txt

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

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

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

изображение докера сохранить подозрительный-образ: последний> подозрительный-образ.tar

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

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

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

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

история изображений докеров подозреваемый-образ: последнее

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

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

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

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

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

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

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

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

Заключение

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

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

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

Похожие записи

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *