Konuyu Okuyanlar: 1 Ziyaretçi

Docker İmajını Digest ile Sabitlemek: latest Tuzağından Kurtulmak

Docker İmajını Digest ile Sabitlemek: latest Tuzağından Kurtulmak
[Resim: attachment.php?aid=353]

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
  1. Etiket ile digest farkı
  2. Digest nasıl öğrenilir, nasıl çekilir?
  3. Dockerfile'da FROM ...@sha256:...
  4. Ü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
Kod:
# 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>
Dockerfile'da:
Kod:
# ORNEK - hash'i kendi dogrulanmis degerinizle degistirin FROM debian@sha256:3f1d6c17773a45c97bd8f158d665c9709d7b29ed7917ac934086ad96f92e4510
Belgelerin uyarısı: Digest ile sabitlemek, imajın güvenlik güncellemelerini otomatik almamanız anlamına gelir. Yamalı bir sürüme geçmek için digest'i bilinçli olarak değiştirirsiniz. Bu bir özelliktir: değişiklik denetimli olur.

LiteLLM 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.

Kod:
# 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


Ek DosyalarEkran Görüntüleri
   
Cevapla



Hızlı Menü: