<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[TurkTeam | Türk Siber Güvenlik Topluluğu - Sanallaştırma ve Konteyner]]></title>
		<link>https://www.turkteam.org/</link>
		<description><![CDATA[TurkTeam | Türk Siber Güvenlik Topluluğu - https://www.turkteam.org]]></description>
		<pubDate>Sun, 25 Oct 2026 18:48:39 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Docker İmajını Digest ile Sabitlemek: latest Tuzağından Kurtulmak]]></title>
			<link>https://www.turkteam.org/konu-docker-imajini-digest-ile-sabitlemek-latest-tuzagindan-kurtulmak-229.html</link>
			<pubDate>Thu, 22 Oct 2026 11:31:28 +0300</pubDate>
			<dc:creator><![CDATA[<a href="https://www.turkteam.org/member.php?action=profile&uid=3">BilgeKagan</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.turkteam.org/konu-docker-imajini-digest-ile-sabitlemek-latest-tuzagindan-kurtulmak-229.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=354" loading="lazy"  alt="[Resim: attachment.php?aid=354]" class="mycode_img" /></div>
<br />
Selamlar,<br />
<br />
LiteLLM olayında yalnızca PyPI wheel'leri değil, Docker Hub ve GHCR'daki <span style="font-weight: bold;" class="mycode_b">latest</span>, <span style="font-weight: bold;" class="mycode_b">main-latest</span> ve <span style="font-weight: bold;" class="mycode_b">main-stable</span> 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.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Konuda anlatılacaklar</span></span><br />
<ol type="1" class="mycode_list"><li>Etiket ile digest farkı<br />
</li>
<li>Digest nasıl öğrenilir, nasıl çekilir?<br />
</li>
<li>Dockerfile'da FROM ...@sha256:...<br />
</li>
<li>Üretim politikası önerileri<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Etiket ile digest</span></span><br />
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).<br />
<br />
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.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Lab: digest öğrenip sabitlemek</span></span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># 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:&lt;sizin_digest&gt;</code></div></div>Dockerfile'da:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># ORNEK - hash'i kendi dogrulanmis degerinizle degistirin
FROM debian@sha256:3f1d6c17773a45c97bd8f158d665c9709d7b29ed7917ac934086ad96f92e4510</code></div></div>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.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">LiteLLM bağlamı</span></span><br />
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.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Calisan konteynerin gercek digest'i
docker inspect --format '{{index .RepoDigests 0}}' &lt;konteyner&gt;
# veya
docker image inspect &lt;image_id&gt; --format '{{join .RepoDigests "&#92;n"}}'</code></div></div><br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Üretim politikası</span></span><ul class="mycode_list"><li>CI'da imajı etiket + digest ile kaydedin; deploy yalnızca digest kullansın.<br />
</li>
<li>latest / main-stable gibi hareketli etiketleri üretim namespace'inde yasaklayın.<br />
</li>
<li>İmzalı imajlar (cosign / Docker Content Trust) ile digest doğrulamasını birleştirin.<br />
</li>
<li>Bağımlılık güncellemelerini (renovate/dependabot) digest değişikliği olarak PR'layın; insan gözü görsün.<br />
</li>
</ul>
<br />
Sizin Kubernetes manifest'lerinizde digest var mı, yoksa hâlâ tag mi?<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yasal uyarı</span></span><br />
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.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kaynaklar</span></span><ul class="mycode_list"><li><a href="https://docs.docker.com/reference/cli/docker/image/pull/" target="_blank" rel="noopener" class="mycode_url">https://docs.docker.com/reference/cli/do...mage/pull/</a><br />
</li>
<li><a href="https://docs.litellm.ai/blog/security-incident-oct-21-2026" target="_blank" rel="noopener" class="mycode_url">https://docs.litellm.ai/blog/security-in...ct-21-2026</a><br />
</li>
</ul>
<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=354" target="_blank" title="">14-b04-docker-digest.png</a> (Dosya Boyutu: 117.62 KB / İndirme Sayısı: 9)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=354" loading="lazy"  alt="[Resim: attachment.php?aid=354]" class="mycode_img" /></div>
<br />
Selamlar,<br />
<br />
LiteLLM olayında yalnızca PyPI wheel'leri değil, Docker Hub ve GHCR'daki <span style="font-weight: bold;" class="mycode_b">latest</span>, <span style="font-weight: bold;" class="mycode_b">main-latest</span> ve <span style="font-weight: bold;" class="mycode_b">main-stable</span> 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.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Konuda anlatılacaklar</span></span><br />
<ol type="1" class="mycode_list"><li>Etiket ile digest farkı<br />
</li>
<li>Digest nasıl öğrenilir, nasıl çekilir?<br />
</li>
<li>Dockerfile'da FROM ...@sha256:...<br />
</li>
<li>Üretim politikası önerileri<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Etiket ile digest</span></span><br />
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).<br />
<br />
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.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Lab: digest öğrenip sabitlemek</span></span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># 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:&lt;sizin_digest&gt;</code></div></div>Dockerfile'da:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># ORNEK - hash'i kendi dogrulanmis degerinizle degistirin
FROM debian@sha256:3f1d6c17773a45c97bd8f158d665c9709d7b29ed7917ac934086ad96f92e4510</code></div></div>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.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">LiteLLM bağlamı</span></span><br />
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.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Calisan konteynerin gercek digest'i
docker inspect --format '{{index .RepoDigests 0}}' &lt;konteyner&gt;
# veya
docker image inspect &lt;image_id&gt; --format '{{join .RepoDigests "&#92;n"}}'</code></div></div><br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Üretim politikası</span></span><ul class="mycode_list"><li>CI'da imajı etiket + digest ile kaydedin; deploy yalnızca digest kullansın.<br />
</li>
<li>latest / main-stable gibi hareketli etiketleri üretim namespace'inde yasaklayın.<br />
</li>
<li>İmzalı imajlar (cosign / Docker Content Trust) ile digest doğrulamasını birleştirin.<br />
</li>
<li>Bağımlılık güncellemelerini (renovate/dependabot) digest değişikliği olarak PR'layın; insan gözü görsün.<br />
</li>
</ul>
<br />
Sizin Kubernetes manifest'lerinizde digest var mı, yoksa hâlâ tag mi?<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yasal uyarı</span></span><br />
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.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kaynaklar</span></span><ul class="mycode_list"><li><a href="https://docs.docker.com/reference/cli/docker/image/pull/" target="_blank" rel="noopener" class="mycode_url">https://docs.docker.com/reference/cli/do...mage/pull/</a><br />
</li>
<li><a href="https://docs.litellm.ai/blog/security-incident-oct-21-2026" target="_blank" rel="noopener" class="mycode_url">https://docs.litellm.ai/blog/security-in...ct-21-2026</a><br />
</li>
</ul>
<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=354" target="_blank" title="">14-b04-docker-digest.png</a> (Dosya Boyutu: 117.62 KB / İndirme Sayısı: 9)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Docker İmajını Digest ile Sabitlemek: latest Tuzağından Kurtulmak]]></title>
			<link>https://www.turkteam.org/konu-docker-imajini-digest-ile-sabitlemek-latest-tuzagindan-kurtulmak.html</link>
			<pubDate>Thu, 22 Oct 2026 11:30:21 +0300</pubDate>
			<dc:creator><![CDATA[<a href="https://www.turkteam.org/member.php?action=profile&uid=3">BilgeKagan</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.turkteam.org/konu-docker-imajini-digest-ile-sabitlemek-latest-tuzagindan-kurtulmak.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=353" loading="lazy"  alt="[Resim: attachment.php?aid=353]" class="mycode_img" /></div>
<br />
Selamlar,<br />
<br />
LiteLLM olayında yalnızca PyPI wheel'leri değil, Docker Hub ve GHCR'daki <span style="font-weight: bold;" class="mycode_b">latest</span>, <span style="font-weight: bold;" class="mycode_b">main-latest</span> ve <span style="font-weight: bold;" class="mycode_b">main-stable</span> 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.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Konuda anlatılacaklar</span></span><br />
<ol type="1" class="mycode_list"><li>Etiket ile digest farkı<br />
</li>
<li>Digest nasıl öğrenilir, nasıl çekilir?<br />
</li>
<li>Dockerfile'da FROM ...@sha256:...<br />
</li>
<li>Üretim politikası önerileri<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Etiket ile digest</span></span><br />
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).<br />
<br />
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.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Lab: digest öğrenip sabitlemek</span></span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># 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:&lt;sizin_digest&gt;</code></div></div>Dockerfile'da:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># ORNEK - hash'i kendi dogrulanmis degerinizle degistirin
FROM debian@sha256:3f1d6c17773a45c97bd8f158d665c9709d7b29ed7917ac934086ad96f92e4510</code></div></div>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.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">LiteLLM bağlamı</span></span><br />
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.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Calisan konteynerin gercek digest'i
docker inspect --format '{{index .RepoDigests 0}}' &lt;konteyner&gt;
# veya
docker image inspect &lt;image_id&gt; --format '{{join .RepoDigests "&#92;n"}}'</code></div></div><br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Üretim politikası</span></span><ul class="mycode_list"><li>CI'da imajı etiket + digest ile kaydedin; deploy yalnızca digest kullansın.<br />
</li>
<li>latest / main-stable gibi hareketli etiketleri üretim namespace'inde yasaklayın.<br />
</li>
<li>İmzalı imajlar (cosign / Docker Content Trust) ile digest doğrulamasını birleştirin.<br />
</li>
<li>Bağımlılık güncellemelerini (renovate/dependabot) digest değişikliği olarak PR'layın; insan gözü görsün.<br />
</li>
</ul>
<br />
Sizin Kubernetes manifest'lerinizde digest var mı, yoksa hâlâ tag mi?<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yasal uyarı</span></span><br />
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.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kaynaklar</span></span><ul class="mycode_list"><li><a href="https://docs.docker.com/reference/cli/docker/image/pull/" target="_blank" rel="noopener" class="mycode_url">https://docs.docker.com/reference/cli/do...mage/pull/</a><br />
</li>
<li><a href="https://docs.litellm.ai/blog/security-incident-oct-21-2026" target="_blank" rel="noopener" class="mycode_url">https://docs.litellm.ai/blog/security-in...ct-21-2026</a><br />
</li>
</ul>
<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=353" target="_blank" title="">14-b04-docker-digest.png</a> (Dosya Boyutu: 117.62 KB / İndirme Sayısı: 8)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=353" loading="lazy"  alt="[Resim: attachment.php?aid=353]" class="mycode_img" /></div>
<br />
Selamlar,<br />
<br />
LiteLLM olayında yalnızca PyPI wheel'leri değil, Docker Hub ve GHCR'daki <span style="font-weight: bold;" class="mycode_b">latest</span>, <span style="font-weight: bold;" class="mycode_b">main-latest</span> ve <span style="font-weight: bold;" class="mycode_b">main-stable</span> 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.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Konuda anlatılacaklar</span></span><br />
<ol type="1" class="mycode_list"><li>Etiket ile digest farkı<br />
</li>
<li>Digest nasıl öğrenilir, nasıl çekilir?<br />
</li>
<li>Dockerfile'da FROM ...@sha256:...<br />
</li>
<li>Üretim politikası önerileri<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Etiket ile digest</span></span><br />
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).<br />
<br />
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.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Lab: digest öğrenip sabitlemek</span></span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># 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:&lt;sizin_digest&gt;</code></div></div>Dockerfile'da:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># ORNEK - hash'i kendi dogrulanmis degerinizle degistirin
FROM debian@sha256:3f1d6c17773a45c97bd8f158d665c9709d7b29ed7917ac934086ad96f92e4510</code></div></div>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.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">LiteLLM bağlamı</span></span><br />
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.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Calisan konteynerin gercek digest'i
docker inspect --format '{{index .RepoDigests 0}}' &lt;konteyner&gt;
# veya
docker image inspect &lt;image_id&gt; --format '{{join .RepoDigests "&#92;n"}}'</code></div></div><br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Üretim politikası</span></span><ul class="mycode_list"><li>CI'da imajı etiket + digest ile kaydedin; deploy yalnızca digest kullansın.<br />
</li>
<li>latest / main-stable gibi hareketli etiketleri üretim namespace'inde yasaklayın.<br />
</li>
<li>İmzalı imajlar (cosign / Docker Content Trust) ile digest doğrulamasını birleştirin.<br />
</li>
<li>Bağımlılık güncellemelerini (renovate/dependabot) digest değişikliği olarak PR'layın; insan gözü görsün.<br />
</li>
</ul>
<br />
Sizin Kubernetes manifest'lerinizde digest var mı, yoksa hâlâ tag mi?<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yasal uyarı</span></span><br />
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.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kaynaklar</span></span><ul class="mycode_list"><li><a href="https://docs.docker.com/reference/cli/docker/image/pull/" target="_blank" rel="noopener" class="mycode_url">https://docs.docker.com/reference/cli/do...mage/pull/</a><br />
</li>
<li><a href="https://docs.litellm.ai/blog/security-incident-oct-21-2026" target="_blank" rel="noopener" class="mycode_url">https://docs.litellm.ai/blog/security-in...ct-21-2026</a><br />
</li>
</ul>
<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=353" target="_blank" title="">14-b04-docker-digest.png</a> (Dosya Boyutu: 117.62 KB / İndirme Sayısı: 8)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Docker Rootless ve Kullanıcı Namespace: Ne Kazanırız, Ne Kaybederiz]]></title>
			<link>https://www.turkteam.org/konu-docker-rootless-ve-kullanici-namespace-ne-kazaniriz-ne-kaybederiz.html</link>
			<pubDate>Wed, 21 Oct 2026 09:33:19 +0300</pubDate>
			<dc:creator><![CDATA[<a href="https://www.turkteam.org/member.php?action=profile&uid=2">Tonyukuk</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.turkteam.org/konu-docker-rootless-ve-kullanici-namespace-ne-kazaniriz-ne-kaybederiz.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=312" loading="lazy"  alt="[Resim: attachment.php?aid=312]" class="mycode_img" /></div>
<br />
Merhaba,<br />
<br />
Docker varsayılanında konteyner süreçleri host'ta root benzeri geniş yetkilerle ilişkilendirilebilir. Rootless mod ve user namespace, kaçışın etkisini azaltmak için önemli bir sıkılaştırmadır. Bu yazıda ne kazandığımızı ve hangi sınırlarla karşılaştığımızı yazıyorum.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Rootless ne demek?</span></span><br />
Dockerd ve konteynerlerin root olmayan bir kullanıcı altında çalışması. User namespace ile konteyner içindeki uid 0, host'ta ayrı bir uid'ye eşlenir. Konteynerden çıkılsa bile host root'u doğrudan alınmaz (teorik yüzey daralır; çekirdek zafiyetleri ayrı konu).<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kurulum (özet)</span></span><br />
Resmi Docker docs'taki rootless kurulum adımlarını izleyin. Tipik gereksinimler: uid map, dbus / systemd --user, gerekli kernel özellikleri.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>dockerd-rootless-setuptool.sh install
systemctl --user enable --now docker
docker info | grep -i rootless</code></div></div><br />
<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=313" loading="lazy"  alt="[Resim: attachment.php?aid=313]" class="mycode_img" /></div>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ne kazanırız?</span></span><ul class="mycode_list"><li>Daemon root değil<br />
</li>
<li>Çoğu kaçış senaryosunda etki azalır<br />
</li>
<li>Geliştirici laptop'larında daha az "sudo docker"<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ne kaybeder / zorlaşır?</span></span><ul class="mycode_list"><li>Bazı düşük portlar (&lt;1024) doğrudan bind zorlaşır<br />
</li>
<li>Overlay / dosya sistemi performans nüansları<br />
</li>
<li>Eski konteyner ağ özellikleri<br />
</li>
<li>Kurumsal güvenlik ürünlerinin desteği<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Tamamlayıcı kontroller</span></span><ul class="mycode_list"><li>--read-only, drop capabilities, no-new-privileges<br />
</li>
<li>seccomp / AppArmor / SELinux profilleri<br />
</li>
<li>İmaj tarama (Trivy) + imzasız imaj yasağı<br />
</li>
<li>K8s'te Pod Security Standards<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kaynaklar</span></span><ul class="mycode_list"><li>Docker Docs: Rootless mode<br />
</li>
<li>rootlesskit projesi<br />
</li>
<li>CIS Docker Benchmark<br />
</li>
</ul>
<br />
Rootless'e geçerken kırılan ilk aracınız ne oldu? CI runner deneyimleri özellikle değerli.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Rootless + compose</span></span><br />
docker compose rootless altında çoğu senaryoda çalışır; volume path izinlerine dikkat (uid map). IDE entegrasyonları bazen /var/run/docker.sock bekler; rootless socket yolunu (&#36;XDG_RUNTIME_DIR/docker.sock) gösterin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Güvenlik tiyatrosu olmasın</span></span><br />
Rootless açıp konteynere --privileged vermek kazanımı sıfırlar. Capability drop ve read-only rootfs ile birlikte düşünün.<br />
<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Doğrulama senaryosu</span></span><br />
Bu konuyla ilgili ek bir kontrol: değişikliği yaptıktan sonra en az bir negatif test ve bir pozitif test tanımlayın. Negatif test 'alarm boşyere düşmemeli', pozitif test 'bilinen kötü örneği yakalamalı' der. İkisini de kaydedin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Lab disiplini</span></span><br />
Ortamlar arasında (lab, staging, production) aynı yapılandırmayı kör kopyalamayın. Adresler, sertifikalar ve kimlikler farklıdır. Şablon kullanın, değerleri envanterden doldurun.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Runbook'a taşımak</span></span><br />
İlgili log ve kanıtları olaydan sonra en az kurum politikasının öngördüğü süre kadar saklayın. Disk dolunca en eski güvenlik logunu silmek klasik hatadır; ayrı retention politikası tanımlayın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ölçüm ve alarm sağlığı</span></span><br />
Yanlış pozitifleri susturmak ile körleşmek arasındaki çizgi incedir. Suppress kuralına gerekçe ve gözden geçirme tarihi yazın. Süresi dolunca yeniden değerlendirin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kapsam ve izin hatırlatması</span></span><br />
Bu adımları change ticket olmadan production'da uygulamayın. Küçük görünen bir audit ayarı bile uygulama uyumluluğunu bozabilir. Önce staging, sonra kontrollü yayılım.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yedekleme ve geri dönüş</span></span><br />
Yılda en az iki kez masabaşı tatbikatı yapın: 'bu kontrol kırılırsa kim fark eder?' sorusunu sorunsuz cevaplayabilmelisiniz. Tatbikat notlarını wiki'ye ekleyin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Log saklama süresi</span></span><br />
Araç çıktısını ekran görüntüsü olarak bırakmak yerine makinece okunur formatta (JSON/CSV) arşivleyin. İki yıl sonraki denetimde arama kolaylaşır.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yanlış pozitif yönetimi</span></span><br />
Yetki ayrımı: bu kontrolü yapılandıran kişi ile alarmı triaj eden kişi mümkünse farklı olsun. Küçük ekiplerde olmasa bile en azından farklı hesap kullanın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Değişiklik yönetimi ile ilişki</span></span><br />
Sürüüm yükseltmelerinden sonra regresyon testi yapın. 'Aynı config' yeni sürümde farklı varsayılanlara bağlanmış olabilir. Release note'daki breaking change bölümünü okuyun.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Eğitim tatbikatı</span></span><br />
Dış bağımlılık (feed, imza seti, konteyner imajı) için bütünlük doğrulaması yapın. İmzasız feed ile gelen kural seti tedarik zinciri riskidir.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Doğrulama senaryosu</span></span><br />
Bu konuyla ilgili ek bir kontrol: değişikliği yaptıktan sonra en az bir negatif test ve bir pozitif test tanımlayın. Negatif test 'alarm boşyere düşmemeli', pozitif test 'bilinen kötü örneği yakalamalı' der. İkisini de kaydedin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Lab disiplini</span></span><br />
Ortamlar arasında (lab, staging, production) aynı yapılandırmayı kör kopyalamayın. Adresler, sertifikalar ve kimlikler farklıdır. Şablon kullanın, değerleri envanterden doldurun.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Runbook'a taşımak</span></span><br />
İlgili log ve kanıtları olaydan sonra en az kurum politikasının öngördüğü süre kadar saklayın. Disk dolunca en eski güvenlik logunu silmek klasik hatadır; ayrı retention politikası tanımlayın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ölçüm ve alarm sağlığı</span></span><br />
Yanlış pozitifleri susturmak ile körleşmek arasındaki çizgi incedir. Suppress kuralına gerekçe ve gözden geçirme tarihi yazın. Süresi dolunca yeniden değerlendirin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kapsam ve izin hatırlatması</span></span><br />
Bu adımları change ticket olmadan production'da uygulamayın. Küçük görünen bir audit ayarı bile uygulama uyumluluğunu bozabilir. Önce staging, sonra kontrollü yayılım.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yedekleme ve geri dönüş</span></span><br />
Yılda en az iki kez masabaşı tatbikatı yapın: 'bu kontrol kırılırsa kim fark eder?' sorusunu sorunsuz cevaplayabilmelisiniz. Tatbikat notlarını wiki'ye ekleyin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Log saklama süresi</span></span><br />
Araç çıktısını ekran görüntüsü olarak bırakmak yerine makinece okunur formatta (JSON/CSV) arşivleyin. İki yıl sonraki denetimde arama kolaylaşır.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yanlış pozitif yönetimi</span></span><br />
Yetki ayrımı: bu kontrolü yapılandıran kişi ile alarmı triaj eden kişi mümkünse farklı olsun. Küçük ekiplerde olmasa bile en azından farklı hesap kullanın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Değişiklik yönetimi ile ilişki</span></span><br />
Sürüüm yükseltmelerinden sonra regresyon testi yapın. 'Aynı config' yeni sürümde farklı varsayılanlara bağlanmış olabilir. Release note'daki breaking change bölümünü okuyun.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Eğitim tatbikatı</span></span><br />
Dış bağımlılık (feed, imza seti, konteyner imajı) için bütünlük doğrulaması yapın. İmzasız feed ile gelen kural seti tedarik zinciri riskidir.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Uygulama notu</span></span><br />
Bu rehberdeki komutları olduğu gibi kopyalamadan önce yolları, arayüz adlarını ve IP adreslerini kendi ortamınıza göre değiştirin. Dağıtım farkları (Debian/Ubuntu/RHEL/Windows sunucu) çıktı biçimini değiştirebilir; man sayfası ve resmi dokümantasyon birincil kaynaktır. Bir adım beklediğiniz sonucu vermezse önce yetki (sudo/Administrator), sonra sürüm, en son da yapılandırma dosyası sırasıyla bakın. Değişiklikleri geri almak için snapshot veya yapılandırma yönetimi (Ansible/Git) kullanın; 'elle bir dokundum' geçmişi denetimde kaybolur. Alarm ve log örneklerini ekip kanalında paylaşırken kişisel veri ve iç IP şemasını maskeleyin.<br />
<span style="font-style: italic;" class="mycode_i">Yasal uyarı: Bu içerik eğitim amaçlıdır. Anlatılanları yalnızca kendi sistemlerinizde veya yazılı izin aldığınız sistemlerde uygulayın. Yetkisiz erişim ve sistemlere müdahale 5237 sayılı TCK'nın 243, 244 ve 245. maddeleri kapsamında suçtur.</span><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=312" target="_blank" title="">100-n34-404191.png</a> (Dosya Boyutu: 63.4 KB / İndirme Sayısı: 5)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=313" target="_blank" title="">n34-inner.png</a> (Dosya Boyutu: 16.82 KB / İndirme Sayısı: 6)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=312" loading="lazy"  alt="[Resim: attachment.php?aid=312]" class="mycode_img" /></div>
<br />
Merhaba,<br />
<br />
Docker varsayılanında konteyner süreçleri host'ta root benzeri geniş yetkilerle ilişkilendirilebilir. Rootless mod ve user namespace, kaçışın etkisini azaltmak için önemli bir sıkılaştırmadır. Bu yazıda ne kazandığımızı ve hangi sınırlarla karşılaştığımızı yazıyorum.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Rootless ne demek?</span></span><br />
Dockerd ve konteynerlerin root olmayan bir kullanıcı altında çalışması. User namespace ile konteyner içindeki uid 0, host'ta ayrı bir uid'ye eşlenir. Konteynerden çıkılsa bile host root'u doğrudan alınmaz (teorik yüzey daralır; çekirdek zafiyetleri ayrı konu).<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kurulum (özet)</span></span><br />
Resmi Docker docs'taki rootless kurulum adımlarını izleyin. Tipik gereksinimler: uid map, dbus / systemd --user, gerekli kernel özellikleri.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>dockerd-rootless-setuptool.sh install
systemctl --user enable --now docker
docker info | grep -i rootless</code></div></div><br />
<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=313" loading="lazy"  alt="[Resim: attachment.php?aid=313]" class="mycode_img" /></div>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ne kazanırız?</span></span><ul class="mycode_list"><li>Daemon root değil<br />
</li>
<li>Çoğu kaçış senaryosunda etki azalır<br />
</li>
<li>Geliştirici laptop'larında daha az "sudo docker"<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ne kaybeder / zorlaşır?</span></span><ul class="mycode_list"><li>Bazı düşük portlar (&lt;1024) doğrudan bind zorlaşır<br />
</li>
<li>Overlay / dosya sistemi performans nüansları<br />
</li>
<li>Eski konteyner ağ özellikleri<br />
</li>
<li>Kurumsal güvenlik ürünlerinin desteği<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Tamamlayıcı kontroller</span></span><ul class="mycode_list"><li>--read-only, drop capabilities, no-new-privileges<br />
</li>
<li>seccomp / AppArmor / SELinux profilleri<br />
</li>
<li>İmaj tarama (Trivy) + imzasız imaj yasağı<br />
</li>
<li>K8s'te Pod Security Standards<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kaynaklar</span></span><ul class="mycode_list"><li>Docker Docs: Rootless mode<br />
</li>
<li>rootlesskit projesi<br />
</li>
<li>CIS Docker Benchmark<br />
</li>
</ul>
<br />
Rootless'e geçerken kırılan ilk aracınız ne oldu? CI runner deneyimleri özellikle değerli.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Rootless + compose</span></span><br />
docker compose rootless altında çoğu senaryoda çalışır; volume path izinlerine dikkat (uid map). IDE entegrasyonları bazen /var/run/docker.sock bekler; rootless socket yolunu (&#36;XDG_RUNTIME_DIR/docker.sock) gösterin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Güvenlik tiyatrosu olmasın</span></span><br />
Rootless açıp konteynere --privileged vermek kazanımı sıfırlar. Capability drop ve read-only rootfs ile birlikte düşünün.<br />
<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Doğrulama senaryosu</span></span><br />
Bu konuyla ilgili ek bir kontrol: değişikliği yaptıktan sonra en az bir negatif test ve bir pozitif test tanımlayın. Negatif test 'alarm boşyere düşmemeli', pozitif test 'bilinen kötü örneği yakalamalı' der. İkisini de kaydedin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Lab disiplini</span></span><br />
Ortamlar arasında (lab, staging, production) aynı yapılandırmayı kör kopyalamayın. Adresler, sertifikalar ve kimlikler farklıdır. Şablon kullanın, değerleri envanterden doldurun.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Runbook'a taşımak</span></span><br />
İlgili log ve kanıtları olaydan sonra en az kurum politikasının öngördüğü süre kadar saklayın. Disk dolunca en eski güvenlik logunu silmek klasik hatadır; ayrı retention politikası tanımlayın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ölçüm ve alarm sağlığı</span></span><br />
Yanlış pozitifleri susturmak ile körleşmek arasındaki çizgi incedir. Suppress kuralına gerekçe ve gözden geçirme tarihi yazın. Süresi dolunca yeniden değerlendirin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kapsam ve izin hatırlatması</span></span><br />
Bu adımları change ticket olmadan production'da uygulamayın. Küçük görünen bir audit ayarı bile uygulama uyumluluğunu bozabilir. Önce staging, sonra kontrollü yayılım.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yedekleme ve geri dönüş</span></span><br />
Yılda en az iki kez masabaşı tatbikatı yapın: 'bu kontrol kırılırsa kim fark eder?' sorusunu sorunsuz cevaplayabilmelisiniz. Tatbikat notlarını wiki'ye ekleyin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Log saklama süresi</span></span><br />
Araç çıktısını ekran görüntüsü olarak bırakmak yerine makinece okunur formatta (JSON/CSV) arşivleyin. İki yıl sonraki denetimde arama kolaylaşır.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yanlış pozitif yönetimi</span></span><br />
Yetki ayrımı: bu kontrolü yapılandıran kişi ile alarmı triaj eden kişi mümkünse farklı olsun. Küçük ekiplerde olmasa bile en azından farklı hesap kullanın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Değişiklik yönetimi ile ilişki</span></span><br />
Sürüüm yükseltmelerinden sonra regresyon testi yapın. 'Aynı config' yeni sürümde farklı varsayılanlara bağlanmış olabilir. Release note'daki breaking change bölümünü okuyun.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Eğitim tatbikatı</span></span><br />
Dış bağımlılık (feed, imza seti, konteyner imajı) için bütünlük doğrulaması yapın. İmzasız feed ile gelen kural seti tedarik zinciri riskidir.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Doğrulama senaryosu</span></span><br />
Bu konuyla ilgili ek bir kontrol: değişikliği yaptıktan sonra en az bir negatif test ve bir pozitif test tanımlayın. Negatif test 'alarm boşyere düşmemeli', pozitif test 'bilinen kötü örneği yakalamalı' der. İkisini de kaydedin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Lab disiplini</span></span><br />
Ortamlar arasında (lab, staging, production) aynı yapılandırmayı kör kopyalamayın. Adresler, sertifikalar ve kimlikler farklıdır. Şablon kullanın, değerleri envanterden doldurun.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Runbook'a taşımak</span></span><br />
İlgili log ve kanıtları olaydan sonra en az kurum politikasının öngördüğü süre kadar saklayın. Disk dolunca en eski güvenlik logunu silmek klasik hatadır; ayrı retention politikası tanımlayın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ölçüm ve alarm sağlığı</span></span><br />
Yanlış pozitifleri susturmak ile körleşmek arasındaki çizgi incedir. Suppress kuralına gerekçe ve gözden geçirme tarihi yazın. Süresi dolunca yeniden değerlendirin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kapsam ve izin hatırlatması</span></span><br />
Bu adımları change ticket olmadan production'da uygulamayın. Küçük görünen bir audit ayarı bile uygulama uyumluluğunu bozabilir. Önce staging, sonra kontrollü yayılım.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yedekleme ve geri dönüş</span></span><br />
Yılda en az iki kez masabaşı tatbikatı yapın: 'bu kontrol kırılırsa kim fark eder?' sorusunu sorunsuz cevaplayabilmelisiniz. Tatbikat notlarını wiki'ye ekleyin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Log saklama süresi</span></span><br />
Araç çıktısını ekran görüntüsü olarak bırakmak yerine makinece okunur formatta (JSON/CSV) arşivleyin. İki yıl sonraki denetimde arama kolaylaşır.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yanlış pozitif yönetimi</span></span><br />
Yetki ayrımı: bu kontrolü yapılandıran kişi ile alarmı triaj eden kişi mümkünse farklı olsun. Küçük ekiplerde olmasa bile en azından farklı hesap kullanın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Değişiklik yönetimi ile ilişki</span></span><br />
Sürüüm yükseltmelerinden sonra regresyon testi yapın. 'Aynı config' yeni sürümde farklı varsayılanlara bağlanmış olabilir. Release note'daki breaking change bölümünü okuyun.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Eğitim tatbikatı</span></span><br />
Dış bağımlılık (feed, imza seti, konteyner imajı) için bütünlük doğrulaması yapın. İmzasız feed ile gelen kural seti tedarik zinciri riskidir.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Uygulama notu</span></span><br />
Bu rehberdeki komutları olduğu gibi kopyalamadan önce yolları, arayüz adlarını ve IP adreslerini kendi ortamınıza göre değiştirin. Dağıtım farkları (Debian/Ubuntu/RHEL/Windows sunucu) çıktı biçimini değiştirebilir; man sayfası ve resmi dokümantasyon birincil kaynaktır. Bir adım beklediğiniz sonucu vermezse önce yetki (sudo/Administrator), sonra sürüm, en son da yapılandırma dosyası sırasıyla bakın. Değişiklikleri geri almak için snapshot veya yapılandırma yönetimi (Ansible/Git) kullanın; 'elle bir dokundum' geçmişi denetimde kaybolur. Alarm ve log örneklerini ekip kanalında paylaşırken kişisel veri ve iç IP şemasını maskeleyin.<br />
<span style="font-style: italic;" class="mycode_i">Yasal uyarı: Bu içerik eğitim amaçlıdır. Anlatılanları yalnızca kendi sistemlerinizde veya yazılı izin aldığınız sistemlerde uygulayın. Yetkisiz erişim ve sistemlere müdahale 5237 sayılı TCK'nın 243, 244 ve 245. maddeleri kapsamında suçtur.</span><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=312" target="_blank" title="">100-n34-404191.png</a> (Dosya Boyutu: 63.4 KB / İndirme Sayısı: 5)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=313" target="_blank" title="">n34-inner.png</a> (Dosya Boyutu: 16.82 KB / İndirme Sayısı: 6)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Docker Guvenligi 2026: Rootless Mod, Trivy ile Imaj Tarama ve Sertlestirme]]></title>
			<link>https://www.turkteam.org/konu-docker-guvenligi-2026-rootless-mod-trivy-ile-imaj-tarama-ve-sertlestirme.html</link>
			<pubDate>Sat, 17 Oct 2026 11:25:12 +0300</pubDate>
			<dc:creator><![CDATA[<a href="https://www.turkteam.org/member.php?action=profile&uid=3">BilgeKagan</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.turkteam.org/konu-docker-guvenligi-2026-rootless-mod-trivy-ile-imaj-tarama-ve-sertlestirme.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=94" loading="lazy"  alt="[Resim: attachment.php?aid=94]" class="mycode_img" /></div>
<br />
Merhaba,<br />
<br />
Konteyner "guvenli gelir" diye dusunulur ama varsayilan ayarlarla calisan bir Docker ortami ciddi riskler tasir. Bu konuda 2026 icin guncel, pratik bir Docker sertlestirme listesi paylasiyorum: rootless mod, imaj tarama ve calisma zamani kisitlamalari.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Konuda Anlatilacaklar</span></span><br />
<ol type="1" class="mycode_list"><li>Neden varsayilan Docker riskli?<br />
</li>
<li>Rootless mod<br />
</li>
<li>Trivy ile imaj zafiyet taramasi<br />
</li>
<li>Calisma zamani sertlestirme<br />
</li>
<li>CI'ya entegre etme<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1) Varsayilan Risk</span></span><br />
Klasik kurulumda Docker daemon root olarak calisir ve docker grubundaki kullanici pratikte root'a esdegerdir. Ayrica cogu imaj gereksiz paketlerle ve root kullaniciyla gelir. Bu iki nokta bile ciddi saldiri yuzeyidir.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2) Rootless Mod</span></span><br />
Rootless mod, daemon ve konteynerleri host root'u olmadan calistirir; bir kacis durumunda etki alani daralir.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>curl -fsSL https://get.docker.com/rootless | sh
export DOCKER_HOST=unix://&#36;XDG_RUNTIME_DIR/docker.sock
systemctl --user enable --now docker</code></div></div><br />
Subordinate UID/GID eslemelerinin tanimli oldugundan emin olun (/etc/subuid, /etc/subgid). Her senaryo rootless'i desteklemez ama cogu web uygulamasi icin uygundur.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3) Trivy ile Tarama</span></span><br />
Trivy, imajlardaki bilinen zafiyetleri hizlica tarar. CI'da HIGH/CRITICAL bulgularda derlemeyi kirmak iyi bir politikadir.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>trivy image --exit-code 1 --severity HIGH,CRITICAL myapp:latest
# SBOM uretme
trivy image --format cyclonedx -o sbom.json myapp:latest</code></div></div><br />
Veritabanini guncel tutun ve yalnizca bir kez degil, kayit defterindeki imajlari duzenli tarayin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4) Calisma Zamani Sertlestirme</span></span><br />
Birkac bayrak saldiri yuzeyini ciddi dusurur:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>docker run --rm &#92;
  --read-only &#92;
  --cap-drop ALL &#92;
  --security-opt no-new-privileges &#92;
  --user 10001:10001 &#92;
  myapp:latest</code></div></div><br />
Ozetle: root olmayan kullanici, salt-okunur dosya sistemi, tum yeteneklerin dusurulup yalnizca gerekenin eklenmesi, no-new-privileges ve asla host docker.sock'unu konteynere baglamamak.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">5) Imaj Hijyeni</span></span><br />
Minimal temel imaj (distroless, alpine) kullanin, etiket yerine digest sabitleyin, gereksiz paket koymayin. Kucuk imaj hem daha hizli hem daha guvenlidir.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kaynaklar</span></span><ul class="mycode_list"><li><a href="https://docs.docker.com/engine/security/rootless/" target="_blank" rel="noopener" class="mycode_url">Docker - Rootless mode</a><br />
</li>
<li><a href="https://trivy.dev/" target="_blank" rel="noopener" class="mycode_url">Trivy resmi site</a><br />
</li>
<li><a href="https://docs.docker.com/engine/security/" target="_blank" rel="noopener" class="mycode_url">Docker Engine Security</a><br />
</li>
</ul>
<br />
<blockquote class="mycode_quote"><cite>Alıntı:</cite><span style="font-weight: bold;" class="mycode_b">Yasal not:</span> Tarama ve sertlestirmeyi yalnizca kendi imaj ve sunucularinizda uygulayin.</blockquote>
<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=96" target="_blank" title="">bilgekagan-b04.png</a> (Dosya Boyutu: 94.32 KB / İndirme Sayısı: 6)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=94" loading="lazy"  alt="[Resim: attachment.php?aid=94]" class="mycode_img" /></div>
<br />
Merhaba,<br />
<br />
Konteyner "guvenli gelir" diye dusunulur ama varsayilan ayarlarla calisan bir Docker ortami ciddi riskler tasir. Bu konuda 2026 icin guncel, pratik bir Docker sertlestirme listesi paylasiyorum: rootless mod, imaj tarama ve calisma zamani kisitlamalari.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Konuda Anlatilacaklar</span></span><br />
<ol type="1" class="mycode_list"><li>Neden varsayilan Docker riskli?<br />
</li>
<li>Rootless mod<br />
</li>
<li>Trivy ile imaj zafiyet taramasi<br />
</li>
<li>Calisma zamani sertlestirme<br />
</li>
<li>CI'ya entegre etme<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1) Varsayilan Risk</span></span><br />
Klasik kurulumda Docker daemon root olarak calisir ve docker grubundaki kullanici pratikte root'a esdegerdir. Ayrica cogu imaj gereksiz paketlerle ve root kullaniciyla gelir. Bu iki nokta bile ciddi saldiri yuzeyidir.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2) Rootless Mod</span></span><br />
Rootless mod, daemon ve konteynerleri host root'u olmadan calistirir; bir kacis durumunda etki alani daralir.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>curl -fsSL https://get.docker.com/rootless | sh
export DOCKER_HOST=unix://&#36;XDG_RUNTIME_DIR/docker.sock
systemctl --user enable --now docker</code></div></div><br />
Subordinate UID/GID eslemelerinin tanimli oldugundan emin olun (/etc/subuid, /etc/subgid). Her senaryo rootless'i desteklemez ama cogu web uygulamasi icin uygundur.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3) Trivy ile Tarama</span></span><br />
Trivy, imajlardaki bilinen zafiyetleri hizlica tarar. CI'da HIGH/CRITICAL bulgularda derlemeyi kirmak iyi bir politikadir.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>trivy image --exit-code 1 --severity HIGH,CRITICAL myapp:latest
# SBOM uretme
trivy image --format cyclonedx -o sbom.json myapp:latest</code></div></div><br />
Veritabanini guncel tutun ve yalnizca bir kez degil, kayit defterindeki imajlari duzenli tarayin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4) Calisma Zamani Sertlestirme</span></span><br />
Birkac bayrak saldiri yuzeyini ciddi dusurur:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>docker run --rm &#92;
  --read-only &#92;
  --cap-drop ALL &#92;
  --security-opt no-new-privileges &#92;
  --user 10001:10001 &#92;
  myapp:latest</code></div></div><br />
Ozetle: root olmayan kullanici, salt-okunur dosya sistemi, tum yeteneklerin dusurulup yalnizca gerekenin eklenmesi, no-new-privileges ve asla host docker.sock'unu konteynere baglamamak.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">5) Imaj Hijyeni</span></span><br />
Minimal temel imaj (distroless, alpine) kullanin, etiket yerine digest sabitleyin, gereksiz paket koymayin. Kucuk imaj hem daha hizli hem daha guvenlidir.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kaynaklar</span></span><ul class="mycode_list"><li><a href="https://docs.docker.com/engine/security/rootless/" target="_blank" rel="noopener" class="mycode_url">Docker - Rootless mode</a><br />
</li>
<li><a href="https://trivy.dev/" target="_blank" rel="noopener" class="mycode_url">Trivy resmi site</a><br />
</li>
<li><a href="https://docs.docker.com/engine/security/" target="_blank" rel="noopener" class="mycode_url">Docker Engine Security</a><br />
</li>
</ul>
<br />
<blockquote class="mycode_quote"><cite>Alıntı:</cite><span style="font-weight: bold;" class="mycode_b">Yasal not:</span> Tarama ve sertlestirmeyi yalnizca kendi imaj ve sunucularinizda uygulayin.</blockquote>
<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=96" target="_blank" title="">bilgekagan-b04.png</a> (Dosya Boyutu: 94.32 KB / İndirme Sayısı: 6)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[DVWA ve Juice Shop: Docker Compose ile Yerel Web Zafiyet Labı]]></title>
			<link>https://www.turkteam.org/konu-dvwa-ve-juice-shop-docker-compose-ile-yerel-web-zafiyet-labi.html</link>
			<pubDate>Fri, 16 Oct 2026 11:17:06 +0300</pubDate>
			<dc:creator><![CDATA[<a href="https://www.turkteam.org/member.php?action=profile&uid=3">BilgeKagan</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.turkteam.org/konu-dvwa-ve-juice-shop-docker-compose-ile-yerel-web-zafiyet-labi.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=19" loading="lazy"  alt="[Resim: attachment.php?aid=19]" class="mycode_img" /></div>
<br />
Selam,<br />
<br />
VirtualBox ile VM kurmak güzel ama her hedef için ayrı disk ve RAM ayırmak ağır geliyor. Web zafiyetleri çalışmak için Docker çok daha hafif. Bu konuda DVWA ve OWASP Juice Shop'u 2026 itibarıyla nasıl ayağa kaldıracağınızı, kendi lab notlarımdan derledim.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Konuda Anlatılacaklar</span></span><br />
<ol type="1" class="mycode_list"><li>Neden Docker lab?<br />
</li>
<li>DVWA: resmi compose ile localhost:4280<br />
</li>
<li>OWASP Juice Shop v20.3.0<br />
</li>
<li>Güvenlik: portları sadece 127.0.0.1'e bağlamak<br />
</li>
<li>Lab hijyeni: silme, volume, güncelleme<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1) Neden Docker?</span></span><br />
Bir konteyner saniyeler içinde kalkar, host'unuzun çekirdeğini paylaşır ama süreçleri izole eder. Web uygulaması zafiyetleri için DVWA, Juice Shop, WebGoat gibi hedefler Docker Hub / GHCR üzerinden hazır geliyor. VM'lere göre disk ve RAM tasarrufu ciddi.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2) DVWA (Damn Vulnerable Web Application)</span></span><br />
Resmi depo: github.com/digininja/DVWA. Her master commit'te GHCR'ye imaj basılıyor. compose.yml örneği:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>git clone https://github.com/digininja/DVWA.git
cd DVWA
docker compose up -d
# Uygulama: http://127.0.0.1:4280</code></div></div><br />
compose.yml içinde port satırı <span style="font-weight: bold;" class="mycode_b">127.0.0.1:4280:80</span> olarak tanımlı; yani sadece sizin makinenizden erişilir. İnternete açmayın. İlk girişten sonra Setup sayfasından veritabanını oluşturun, security level'ı Low ile başlayıp kademeli yükseltin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3) OWASP Juice Shop</span></span><br />
2026-10-11'de v20.3.0 yayınlandı. Tek satırlık çalıştırma:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>docker pull bkimminich/juice-shop:v20.3.0
docker run --rm -p 127.0.0.1:3000:3000 bkimminich/juice-shop:v20.3.0
# Tarayıcı: http://127.0.0.1:3000</code></div></div><br />
Juice Shop, OWASP Top 10 ve modern API/JWT zafiyetlerini CTF tadında sunuyor. Score Board'dan ilerlemeyi takip edebilirsiniz. "latest" etiketi yerine sürüm sabitlemek (v20.3.0) lab notlarınızın tekrarlanabilirliğini artırır.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4) Port Bağlama Disiplini</span></span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># YANLIŞ: 0.0.0.0'a bağlar, LAN'daki herkes erişir
docker run -p 3000:3000 ...

# DOĞRU: sadece localhost
docker run -p 127.0.0.1:3000:3000 ...</code></div></div><br />
Ev Wi-Fi'nizde bile yaralanabilir uygulamaları açmak istemezsiniz. VPN veya ortak ağdaysanız özellikle dikkat.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">5) Lab Hijyeni</span></span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>docker compose down -v   # DVWA: konteyner + volume sil
docker rm -f &lt;id&gt;        # Juice Shop tek konteyner
docker image prune       # kullanılmayan imajları temizle</code></div></div><br />
Haftada bir güncelleme çekmek iyi alışkanlık. DVWA için <span style="font-weight: bold;" class="mycode_b">docker compose pull &amp;&amp; docker compose up -d</span>.<br />
<br />
Bonus: WebGoat da aktif; Docker Hub'da webgoat/webgoat imajının 2026.5 etiketi Ekim 2026'da güncellendi. Öğrenme yolunuzda DVWA (klasik) -&gt; Juice Shop (modern) -&gt; WebGoat (eğitici) sırası işe yarıyor.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kaynaklar</span></span><ul class="mycode_list"><li><a href="https://github.com/digininja/DVWA" target="_blank" rel="noopener" class="mycode_url">digininja/DVWA (compose + GHCR)</a><br />
</li>
<li><a href="https://github.com/juice-shop/juice-shop/releases/tag/v20.3.0" target="_blank" rel="noopener" class="mycode_url">OWASP Juice Shop v20.3.0</a><br />
</li>
<li><a href="https://hub.docker.com/r/bkimminich/juice-shop" target="_blank" rel="noopener" class="mycode_url">Juice Shop Docker Hub</a><br />
</li>
<li><a href="https://owasp.org/www-project-juice-shop/" target="_blank" rel="noopener" class="mycode_url">OWASP Juice Shop proje sayfası</a><br />
</li>
</ul>
<br />
<blockquote class="mycode_quote"><cite>Alıntı:</cite><span style="font-weight: bold;" class="mycode_b">Yasal not:</span> Bu uygulamalar bilerek zafiyetlidir. Yalnızca kendi bilgisayarınızda, localhost'a bağlı çalıştırın. İnternete veya izinsiz ağlara açmak hem tehlikeli hem yasadışıdır (TCK 243-245).</blockquote>
<br />
Kapak: özgün TurkTeam görseli.<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=19" target="_blank" title="">bilgekagan-04.png</a> (Dosya Boyutu: 91.45 KB / İndirme Sayısı: 9)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=19" loading="lazy"  alt="[Resim: attachment.php?aid=19]" class="mycode_img" /></div>
<br />
Selam,<br />
<br />
VirtualBox ile VM kurmak güzel ama her hedef için ayrı disk ve RAM ayırmak ağır geliyor. Web zafiyetleri çalışmak için Docker çok daha hafif. Bu konuda DVWA ve OWASP Juice Shop'u 2026 itibarıyla nasıl ayağa kaldıracağınızı, kendi lab notlarımdan derledim.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Konuda Anlatılacaklar</span></span><br />
<ol type="1" class="mycode_list"><li>Neden Docker lab?<br />
</li>
<li>DVWA: resmi compose ile localhost:4280<br />
</li>
<li>OWASP Juice Shop v20.3.0<br />
</li>
<li>Güvenlik: portları sadece 127.0.0.1'e bağlamak<br />
</li>
<li>Lab hijyeni: silme, volume, güncelleme<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1) Neden Docker?</span></span><br />
Bir konteyner saniyeler içinde kalkar, host'unuzun çekirdeğini paylaşır ama süreçleri izole eder. Web uygulaması zafiyetleri için DVWA, Juice Shop, WebGoat gibi hedefler Docker Hub / GHCR üzerinden hazır geliyor. VM'lere göre disk ve RAM tasarrufu ciddi.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2) DVWA (Damn Vulnerable Web Application)</span></span><br />
Resmi depo: github.com/digininja/DVWA. Her master commit'te GHCR'ye imaj basılıyor. compose.yml örneği:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>git clone https://github.com/digininja/DVWA.git
cd DVWA
docker compose up -d
# Uygulama: http://127.0.0.1:4280</code></div></div><br />
compose.yml içinde port satırı <span style="font-weight: bold;" class="mycode_b">127.0.0.1:4280:80</span> olarak tanımlı; yani sadece sizin makinenizden erişilir. İnternete açmayın. İlk girişten sonra Setup sayfasından veritabanını oluşturun, security level'ı Low ile başlayıp kademeli yükseltin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3) OWASP Juice Shop</span></span><br />
2026-10-11'de v20.3.0 yayınlandı. Tek satırlık çalıştırma:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>docker pull bkimminich/juice-shop:v20.3.0
docker run --rm -p 127.0.0.1:3000:3000 bkimminich/juice-shop:v20.3.0
# Tarayıcı: http://127.0.0.1:3000</code></div></div><br />
Juice Shop, OWASP Top 10 ve modern API/JWT zafiyetlerini CTF tadında sunuyor. Score Board'dan ilerlemeyi takip edebilirsiniz. "latest" etiketi yerine sürüm sabitlemek (v20.3.0) lab notlarınızın tekrarlanabilirliğini artırır.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4) Port Bağlama Disiplini</span></span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># YANLIŞ: 0.0.0.0'a bağlar, LAN'daki herkes erişir
docker run -p 3000:3000 ...

# DOĞRU: sadece localhost
docker run -p 127.0.0.1:3000:3000 ...</code></div></div><br />
Ev Wi-Fi'nizde bile yaralanabilir uygulamaları açmak istemezsiniz. VPN veya ortak ağdaysanız özellikle dikkat.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">5) Lab Hijyeni</span></span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>docker compose down -v   # DVWA: konteyner + volume sil
docker rm -f &lt;id&gt;        # Juice Shop tek konteyner
docker image prune       # kullanılmayan imajları temizle</code></div></div><br />
Haftada bir güncelleme çekmek iyi alışkanlık. DVWA için <span style="font-weight: bold;" class="mycode_b">docker compose pull &amp;&amp; docker compose up -d</span>.<br />
<br />
Bonus: WebGoat da aktif; Docker Hub'da webgoat/webgoat imajının 2026.5 etiketi Ekim 2026'da güncellendi. Öğrenme yolunuzda DVWA (klasik) -&gt; Juice Shop (modern) -&gt; WebGoat (eğitici) sırası işe yarıyor.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kaynaklar</span></span><ul class="mycode_list"><li><a href="https://github.com/digininja/DVWA" target="_blank" rel="noopener" class="mycode_url">digininja/DVWA (compose + GHCR)</a><br />
</li>
<li><a href="https://github.com/juice-shop/juice-shop/releases/tag/v20.3.0" target="_blank" rel="noopener" class="mycode_url">OWASP Juice Shop v20.3.0</a><br />
</li>
<li><a href="https://hub.docker.com/r/bkimminich/juice-shop" target="_blank" rel="noopener" class="mycode_url">Juice Shop Docker Hub</a><br />
</li>
<li><a href="https://owasp.org/www-project-juice-shop/" target="_blank" rel="noopener" class="mycode_url">OWASP Juice Shop proje sayfası</a><br />
</li>
</ul>
<br />
<blockquote class="mycode_quote"><cite>Alıntı:</cite><span style="font-weight: bold;" class="mycode_b">Yasal not:</span> Bu uygulamalar bilerek zafiyetlidir. Yalnızca kendi bilgisayarınızda, localhost'a bağlı çalıştırın. İnternete veya izinsiz ağlara açmak hem tehlikeli hem yasadışıdır (TCK 243-245).</blockquote>
<br />
Kapak: özgün TurkTeam görseli.<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=19" target="_blank" title="">bilgekagan-04.png</a> (Dosya Boyutu: 91.45 KB / İndirme Sayısı: 9)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
	</channel>
</rss>