Как стать автором
Поиск
Написать публикацию
Обновить

Неиспользуемые остатки образов в Docker: как удалить зомби-слои и защитить секреты

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров7.4K
Всего голосов 21: ↑21 и ↓0+24
Комментарии8

Комментарии 8

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

Но вот чего не понял - а откуда злоумышленник получает перечень зомби-слоев.
Постоянно мониторит новые образы?

P.S. у меня 2 слоя возвращается в запросе на манифест, причем формат ответа другой - нет fsLayers.

Написано, что

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

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

Обратите внимание, что правильное поведение в этом случае — отозвать старые учётные данные и выпустить новые.

Вот именно. И зачем тогда всё это...

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

Насколько я понял, зомби-слои появляются если пушить с тем же тегом. А если просто удалить образ из реестра, его слои тоже остаются как зомби?

Layers по спецификации (https://specs.opencontainers.org/distribution-spec/?v=v1.0.0) это отдельный объект, удалить который нельзя, они связаны с манифестами, на которые ссылаются теги.

При этом layers должны быть уже загружены перед загрузкой манифеста.

Добавим к этому, что для точного определения что layer не используется нужно или перебрать все манифесты, или хранить счётчик использования и постоянно его обновлять, что может быть нетривиально для больших registry с поддержкой multiple AZ.

Добавим к этому что слои могу переиспользоваться и получаем, что перед удалением нам в любом случае нужен какой-то grace period.

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий