Selamlar,
LiteLLM olayında yalnızca PyPI wheel'leri değil, Docker Hub ve GHCR'daki latest, main-latest ve main-stable etiketleri de zararlı imaja işaret etti. Etiket hareketli bir işaretçidir; digest ise içeriğin parmak izidir. Bu yazıda Docker'ın resmi pull belgelerine göre imajı digest ile sabitlemenin nasıl yapıldığını anlatıyorum.
Konuda anlatılacaklar
- Etiket ile digest farkı
- Digest nasıl öğrenilir, nasıl çekilir?
- Dockerfile'da FROM ...@sha256:...
- Üretim politikası önerileri
Etiket ile digest
docker pull debian dediğinizde Engine varsayılan olarak :latest etiketini kullanır. Aynı imaj daha sonra güvenlik güncellemesiyle yeniden yayınlandığında aynı etiket yeni bir içeriğe bakabilir - bu bazen istediğiniz şeydir (yama almak), bazen istemediğiniz (saldırganın latest'i zehirlemesi).
Digest, imaj yapılandırması ve katmanlarını kapsayan bir SHA256 özetidir. Docker belgelerinin dediği gibi: digest ile çekmek, o imajın tam olarak o sürümünü "pin"ler ve her zaman aynı içeriği garantiler.
Lab: digest öğrenip sabitlemek
# Once etiketi cekin; Docker pull bitince digest'i yazar
docker pull debian:bookworm
# Yerel imajin RepoDigests degerini okuyun
docker image inspect debian:bookworm --format '{{json .RepoDigests}}'
# Digest ile cekme ornegi (asagidaki hash ornektir; kendi ciktinizi kullanin)
# docker pull debian@sha256:<sizin_digest># ORNEK - hash'i kendi dogrulanmis degerinizle degistirin
FROM debian@sha256:3f1d6c17773a45c97bd8f158d665c9709d7b29ed7917ac934086ad96f92e4510LiteLLM bağlamı
LiteLLM, etkilenen Docker imaj index'ini açıkça yayınladı: sha256:1bbcb1443bc962e45f5aad53fe3d2c30600e0379715fb6c664cdd3ac126c339e. Çalışan konteynerlerinizin gerçekte hangi digest'i koşturduğunu bilmiyorsanız, "biz latest kullanmıyoruz, v1.107.0 kullanıyoruz" demek yetmeyebilir; çünkü o etiket o aralıkta zehirli index'e bakıyordu.
# Calisan konteynerin gercek digest'i
docker inspect --format '{{index .RepoDigests 0}}' <konteyner>
# veya
docker image inspect <image_id> --format '{{join .RepoDigests "\n"}}'Üretim politikası
- CI'da imajı etiket + digest ile kaydedin; deploy yalnızca digest kullansın.
- latest / main-stable gibi hareketli etiketleri üretim namespace'inde yasaklayın.
- İmzalı imajlar (cosign / Docker Content Trust) ile digest doğrulamasını birleştirin.
- Bağımlılık güncellemelerini (renovate/dependabot) digest değişikliği olarak PR'layın; insan gözü görsün.
Sizin Kubernetes manifest'lerinizde digest var mı, yoksa hâlâ tag mi?
Yasal uyarı
Bu yazı bilgilendirme ve savunma amaçlıdır. Anlatılan kontrolleri yalnızca kendi sistemlerinizde veya yazılı izinle yapın. İzinsiz erişim, tarama ve sömürü girişimleri TCK 243-245 kapsamında suçtur. TurkTeam white-hat bir topluluktur; çalıntı veri, hesap, combo/log paylaşımı ve hack hizmeti talepleri forum kurallarına aykırıdır.
Kaynaklar