Комментарии 8
То, что по хешу слоя можно извлечь слой - это ожидаемое поведение.
Что старые слои остаются доступными (как минимум на некоторое время), не смотря на перенос тегов - тоже ожидаемо.
Но вот чего не понял - а откуда злоумышленник получает перечень зомби-слоев.
Постоянно мониторит новые образы?
P.S. у меня 2 слоя возвращается в запросе на манифест, причем формат ответа другой - нет fsLayers.
Написано, что
Подобный вектор атаки известен давно. Если злоумышленник следит за количеством слоёв, то вполне может им воспользоваться, найти зомби-слой и получить к нему доступ.
то есть надо отслеживать манифесты, и если какой-то слой пропадает в новой версии, это может быть зомби)) по-другому непонятно как)
Обратите внимание, что правильное поведение в этом случае — отозвать старые учётные данные и выпустить новые.
Вот именно. И зачем тогда всё это...
Вывод получается один, не хранить какие либо секреты в доккер контейнерах, как я вижу из вашего вывода JSON с информацией о слоях, информация хранящаяся в аргументах - не отображается, следовательно чувствительные данные надо хранить в другом безопасном месте и передавать как аргументы в образ.
В двух местах опечатка
новый слой
RUN
(то есть abdd..216d)
должно быть - новый слой COPY
Насколько я понял, зомби-слои появляются если пушить с тем же тегом. А если просто удалить образ из реестра, его слои тоже остаются как зомби?
Layers по спецификации (https://specs.opencontainers.org/distribution-spec/?v=v1.0.0) это отдельный объект, удалить который нельзя, они связаны с манифестами, на которые ссылаются теги.
При этом layers должны быть уже загружены перед загрузкой манифеста.
Добавим к этому, что для точного определения что layer не используется нужно или перебрать все манифесты, или хранить счётчик использования и постоянно его обновлять, что может быть нетривиально для больших registry с поддержкой multiple AZ.
Добавим к этому что слои могу переиспользоваться и получаем, что перед удалением нам в любом случае нужен какой-то grace period.
В итоге все имплементации которые я видел, какое-то время будут сохранять у себя такие зомби-слои.
Неиспользуемые остатки образов в Docker: как удалить зомби-слои и защитить секреты