<?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 - Bulut Güvenliği]]></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:38 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[GCP Dataflow Gölge Bağımlılık: Tahmin Edilebilir Bucket ile Kiracılar Arası RCE]]></title>
			<link>https://www.turkteam.org/konu-gcp-dataflow-golge-bagimlilik-tahmin-edilebilir-bucket-ile-kiracilar-arasi-rce.html</link>
			<pubDate>Sat, 24 Oct 2026 11:28:54 +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-gcp-dataflow-golge-bagimlilik-tahmin-edilebilir-bucket-ile-kiracilar-arasi-rce.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=403" loading="lazy"  alt="[Resim: attachment.php?aid=403]" class="mycode_img" /></div>
<br />
Selamlar,<br />
<br />
Varonis Threat Labs, Google Cloud Dataflow'ta kiracılar arası (cross-tenant) bir saldırı yolunu açıkladı: varsayılan staging bucket adının <span style="font-weight: bold;" class="mycode_b">proje kimliği + bölge</span>den tahmin edilebilir olması. Saldırgan bu adı önceden kendi projesinde oluşturursa (bucket squatting), kurbanın ilk Dataflow işi kodunu saldırganın kovasına yükleyebiliyor. <span style="font-weight: bold;" class="mycode_b">--save_main_session</span> ile pickle edilen oturum değiştirilince Dataflow işçilerinde kod çalışıyor. Google sorunu küresel olarak kapatmış; yine de dersleri kalıcı.<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>Saldırı zinciri<br />
</li>
<li>Kimler risk altındaydı?<br />
</li>
<li>Google'ın üç katmanlı düzeltmesi<br />
</li>
<li>Sizin yapmanız gerekenler<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Saldırı zinciri</span></span><br />
<ol type="1" class="mycode_list"><li>Saldırgan dataflow-staging-&lt;bolge&gt;-&lt;md5(proje_id)&gt; adını önceden oluşturur, AllUsers yazma verir.<br />
</li>
<li>Kurban, açık staging konumu vermeden Beam Python ile ilk işi çalıştırır; pickle oturumu bu kovaya iner.<br />
</li>
<li>Saldırgan pickled_main_session dosyasını kendi zararlı pickle'ı ile değiştirir.<br />
</li>
<li>İşçiler unpickle ederken kod, Dataflow servis hesabı yetkisiyle çalışır.<br />
</li>
</ol>
Varonis, kurban projesine hiç IAM izni gerekmediğini vurguluyor; proje ID'si çoğu zaman gizli değildir.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Kimler risk altındaydı?</span></span><ul class="mycode_list"><li>Apache Beam <span style="font-weight: bold;" class="mycode_b">Python</span> SDK kullanan işler (Java SDK zaten sahiplik kontrolü yapıyordu).<br />
</li>
<li>Bölgede henüz varsayılan staging bucket'ı oluşmamış projeler.<br />
</li>
<li>--save_main_session açık, --staging_location verilmemiş işler.<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Üç katmanlı düzeltme</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Beam 2.75.0:</span> istemci tarafı bucket sahiplik doğrulaması.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Dataflow kontrol düzlemi:</span> varsayılan kova başka projeye aitse FAILED_PRECONDITION.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">SHA-256 bütünlük:</span> staging sonrası değiştirilen artefaktlar işçi tarafından reddedilir.<br />
</li>
</ul>
Eski/pinlanmış SDK'lar bile sunucu tarafı kontrol sayesinde korunuyor.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. Sizin yapmanız gerekenler</span></span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Isinizde staging konumunu acikca verin
--staging_location=gs://SIZIN-PROJE-staging/beam
--temp_location=gs://SIZIN-PROJE-temp/beam</code></div></div><ul class="mycode_list"><li>Staging kovalarını kod deposu gibi koruyun; yazma yetkisini sıkı tutun.<br />
</li>
<li>Pickle hâlâ pickle'dır: --save_main_session kullanımını gözden geçirin.<br />
</li>
<li>Servis hesabına Compute Engine varsayılanı yerine en az yetkili özel hesap verin.<br />
</li>
</ul>
<br />
Dataflow/Beam işlerinizde staging_location'ı açık mı veriyorsunuz, yoksa varsayılan mı?<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://www.varonis.com/blog/shadow-dependency-in-gcp-dataflow-cross-tenant" target="_blank" rel="noopener" class="mycode_url">https://www.varonis.com/blog/shadow-depe...oss-tenant</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=403" target="_blank" title="">13-b03-gcp-dataflow-shadow.png</a> (Dosya Boyutu: 117.13 KB / İndirme Sayısı: 2)
<!-- 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=403" loading="lazy"  alt="[Resim: attachment.php?aid=403]" class="mycode_img" /></div>
<br />
Selamlar,<br />
<br />
Varonis Threat Labs, Google Cloud Dataflow'ta kiracılar arası (cross-tenant) bir saldırı yolunu açıkladı: varsayılan staging bucket adının <span style="font-weight: bold;" class="mycode_b">proje kimliği + bölge</span>den tahmin edilebilir olması. Saldırgan bu adı önceden kendi projesinde oluşturursa (bucket squatting), kurbanın ilk Dataflow işi kodunu saldırganın kovasına yükleyebiliyor. <span style="font-weight: bold;" class="mycode_b">--save_main_session</span> ile pickle edilen oturum değiştirilince Dataflow işçilerinde kod çalışıyor. Google sorunu küresel olarak kapatmış; yine de dersleri kalıcı.<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>Saldırı zinciri<br />
</li>
<li>Kimler risk altındaydı?<br />
</li>
<li>Google'ın üç katmanlı düzeltmesi<br />
</li>
<li>Sizin yapmanız gerekenler<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Saldırı zinciri</span></span><br />
<ol type="1" class="mycode_list"><li>Saldırgan dataflow-staging-&lt;bolge&gt;-&lt;md5(proje_id)&gt; adını önceden oluşturur, AllUsers yazma verir.<br />
</li>
<li>Kurban, açık staging konumu vermeden Beam Python ile ilk işi çalıştırır; pickle oturumu bu kovaya iner.<br />
</li>
<li>Saldırgan pickled_main_session dosyasını kendi zararlı pickle'ı ile değiştirir.<br />
</li>
<li>İşçiler unpickle ederken kod, Dataflow servis hesabı yetkisiyle çalışır.<br />
</li>
</ol>
Varonis, kurban projesine hiç IAM izni gerekmediğini vurguluyor; proje ID'si çoğu zaman gizli değildir.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Kimler risk altındaydı?</span></span><ul class="mycode_list"><li>Apache Beam <span style="font-weight: bold;" class="mycode_b">Python</span> SDK kullanan işler (Java SDK zaten sahiplik kontrolü yapıyordu).<br />
</li>
<li>Bölgede henüz varsayılan staging bucket'ı oluşmamış projeler.<br />
</li>
<li>--save_main_session açık, --staging_location verilmemiş işler.<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Üç katmanlı düzeltme</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Beam 2.75.0:</span> istemci tarafı bucket sahiplik doğrulaması.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Dataflow kontrol düzlemi:</span> varsayılan kova başka projeye aitse FAILED_PRECONDITION.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">SHA-256 bütünlük:</span> staging sonrası değiştirilen artefaktlar işçi tarafından reddedilir.<br />
</li>
</ul>
Eski/pinlanmış SDK'lar bile sunucu tarafı kontrol sayesinde korunuyor.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. Sizin yapmanız gerekenler</span></span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Isinizde staging konumunu acikca verin
--staging_location=gs://SIZIN-PROJE-staging/beam
--temp_location=gs://SIZIN-PROJE-temp/beam</code></div></div><ul class="mycode_list"><li>Staging kovalarını kod deposu gibi koruyun; yazma yetkisini sıkı tutun.<br />
</li>
<li>Pickle hâlâ pickle'dır: --save_main_session kullanımını gözden geçirin.<br />
</li>
<li>Servis hesabına Compute Engine varsayılanı yerine en az yetkili özel hesap verin.<br />
</li>
</ul>
<br />
Dataflow/Beam işlerinizde staging_location'ı açık mı veriyorsunuz, yoksa varsayılan mı?<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://www.varonis.com/blog/shadow-dependency-in-gcp-dataflow-cross-tenant" target="_blank" rel="noopener" class="mycode_url">https://www.varonis.com/blog/shadow-depe...oss-tenant</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=403" target="_blank" title="">13-b03-gcp-dataflow-shadow.png</a> (Dosya Boyutu: 117.13 KB / İndirme Sayısı: 2)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Railway Ortam Değişkenleri İhlali: Tüm Kullanıcılara Acil Sır Rotasyonu Çağrısı]]></title>
			<link>https://www.turkteam.org/konu-railway-ortam-degiskenleri-ihlali-tum-kullanicilara-acil-sir-rotasyonu-cagrisi-244.html</link>
			<pubDate>Fri, 23 Oct 2026 11:26:10 +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-railway-ortam-degiskenleri-ihlali-tum-kullanicilara-acil-sir-rotasyonu-cagrisi-244.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=371" loading="lazy"  alt="[Resim: attachment.php?aid=371]" class="mycode_img" /></div>
<br />
Selamlar,<br />
<br />
Geliştirici bulut platformu Railway, 21 Ekim 2026 sabahı müşteri ortam değişkenlerini (environment variables) saklayan sistemlerde anormal etkinlik tespit ettiğini açıkladı. Şirketin ifadesine göre yetkisiz bir üçüncü taraf <span style="font-weight: bold;" class="mycode_b">şifrelenmiş ortam değişkenlerine erişmiş ve bir kısmının şifresi çözülmüş içeriğini elde etmiş olabilir</span>. BleepingComputer'a göre Railway'in yaklaşık 4,8 milyon kullanıcısı ve 16 milyondan fazla servisi var.<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>Ne oldu?<br />
</li>
<li>Railway'in kendi aldığı önlemler<br />
</li>
<li>Kullanıcı olarak yapmanız gerekenler<br />
</li>
<li>Bucket ve GitHub sıfırlamasından sonra servisi ayağa kaldırmak<br />
</li>
<li>Platform ihlallerinden çıkarılacak ders<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ne oldu?</span></span><ul class="mycode_list"><li>Railway olayı, son dönemde <span style="font-weight: bold;" class="mycode_b">YZ çıkarım (inference) sağlayıcılarını ele geçirmeyi amaçlayan platform şirketlerine yönelik saldırı serisinin</span> parçası olarak görüyor ve bu sağlayıcılara tüm anahtarları proaktif olarak iptal etmelerini bildirdi.<br />
</li>
<li>İlk analiz etkinin bir kullanıcı alt kümesiyle sınırlı olabileceğini gösterse de şirket <span style="font-weight: bold;" class="mycode_b">tüm kullanıcılara</span> önlem almalarını önerdi.<br />
</li>
<li>Soruşturma süresince tüm deploy'lar durduruldu. 22 Ekim'de Pro ve Enterprise için build'ler geri açıldı; Hobby, Free ve Trial sırayla açılacak.<br />
</li>
<li>TechCrunch'a göre kök neden açıklanmadı; CEO Jake Cooper bir post-mortem yayımlanacağını söyledi.<br />
</li>
</ul>
Not: Dün paylaştığımız Zeabur ihlaliyle aynı dönemde, benzer hedeflemeyle (platformdaki sırlar üzerinden YZ sağlayıcı anahtarları) gelmesi dikkat çekici.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Railway'in aldığı önlemler</span></span><ul class="mycode_list"><li>22 Ekim 04:39 UTC itibarıyla tüm Railway API token'ları geçersiz kılındı. Public API entegrasyonlarınız için yeni token üretmeniz gerekiyor.<br />
</li>
<li>Her ortamdaki her storage bucket'ın ACCESS_KEY_ID ve SECRET_ACCESS_KEY değerleri yenilendi.<br />
</li>
<li>Railway'in tuttuğu GitHub token'ları geçersiz kılındı; registry kimlik bilgisi olarak saklanan GitHub token'ları Railway'den silindi. <span style="font-weight: bold;" class="mycode_b">Ancak bu token'lar GitHub tarafında siz iptal edene kadar hâlâ çalışıyor.</span><br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yapmanız gerekenler</span></span><br />
<ol type="1" class="mycode_list"><li>Railway'de saklanan tüm ortam değişkenlerini döndürün: veritabanı parolaları, üçüncü taraf API anahtarları (ödeme, e-posta, YZ sağlayıcıları), JWT imzalama anahtarları.<br />
</li>
<li>Özel registry kimlik bilgilerini yenileyin.<br />
</li>
<li>GitHub'da Railway'e verilmiş personal access token'ları ve deploy key'leri kendiniz iptal edin, ardından bağlantıyı yeniden kurun.<br />
</li>
<li>Döndürdüğünüz her anahtarın sağlayıcı tarafındaki loglarını (bulut, ödeme, YZ API kullanım panelleri) 21 Ekim öncesinden itibaren inceleyin.<br />
</li>
</ol>
Sıralama önemli: önce sağlayıcıda yeni anahtar üretin, uygulamaya girin, deploy edin, <span style="font-weight: bold;" class="mycode_b">sonra</span> eskisini iptal edin; aksi halde kendi kendinize kesinti yaratırsınız.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Bucket ve GitHub sonrası yeniden deploy</span></span><br />
Railway'in rehberine göre konteynerler değişkenleri yalnızca başlangıçta okur. Bucket'ın yeni kimlik bilgileri hazır ama servisinizin yeniden deploy edilmesi gerekiyor:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>railway redeploy --service uploads-api
railway bucket credentials --bucket my-bucket</code></div></div>Bir servis hâlâ InvalidAccessKeyId veya SignatureDoesNotMatch hatası veriyorsa ya eski deployment çalışıyordur ya da değişkene düz metin olarak yapıştırılmış eski anahtar vardır. Railway, düz metin yerine referans değişken (örneğin &#36;{{ my-bucket.SECRET_ACCESS_KEY }}) kullanmayı öneriyor; bir sonraki rotasyonda elle düzenleme gerekmez. Denetim kayıtlarında bu sıfırlamalar "Railway Staff" aktör tipiyle görünüyor; kendi olay kaydınız için bu girdileri dışa aktarın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ders</span></span><br />
PaaS platformundaki env değişkenleri, uygulamanızın tüm dış dünyaya açılan anahtarlık halkasıdır. Kısa ömürlü kimlik bilgileri (OIDC, workload identity), anahtar başına en az yetki ve harcama limitleri, platform ihlal olduğunda patlama yarıçapını ciddi şekilde küçültür.<br />
<br />
Railway veya benzeri bir PaaS kullanıyorsanız sır rotasyonunu ne kadar sürede tamamlayabildiniz? Otomasyon önerilerinizi paylaşın.<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://blog.railway.com/p/security-disclosure-wednesday-october-21st" target="_blank" rel="noopener" class="mycode_url">https://blog.railway.com/p/security-disc...tober-21st</a><br />
</li>
<li><a href="https://blog.railway.com/p/security-disclosure-recommendation-redeploy-buckets-and-reconnect-github-after-the-credential-reset" target="_blank" rel="noopener" class="mycode_url">https://blog.railway.com/p/security-disc...tial-reset</a><br />
</li>
<li><a href="https://www.bleepingcomputer.com/news/security/railway-warns-devs-to-rotate-secrets-after-potential-breach/" target="_blank" rel="noopener" class="mycode_url">https://www.bleepingcomputer.com/news/se...al-breach/</a><br />
</li>
<li><a href="https://techcrunch.com/2026/10/22/developer-platform-railway-urges-all-users-to-revoke-secret-keys-after-cyberattack/" target="_blank" rel="noopener" class="mycode_url">https://techcrunch.com/2026/10/22/develo...berattack/</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=371" target="_blank" title="">07-t07-railway-env-ihlal.png</a> (Dosya Boyutu: 120.26 KB / İndirme Sayısı: 3)
<!-- 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=371" loading="lazy"  alt="[Resim: attachment.php?aid=371]" class="mycode_img" /></div>
<br />
Selamlar,<br />
<br />
Geliştirici bulut platformu Railway, 21 Ekim 2026 sabahı müşteri ortam değişkenlerini (environment variables) saklayan sistemlerde anormal etkinlik tespit ettiğini açıkladı. Şirketin ifadesine göre yetkisiz bir üçüncü taraf <span style="font-weight: bold;" class="mycode_b">şifrelenmiş ortam değişkenlerine erişmiş ve bir kısmının şifresi çözülmüş içeriğini elde etmiş olabilir</span>. BleepingComputer'a göre Railway'in yaklaşık 4,8 milyon kullanıcısı ve 16 milyondan fazla servisi var.<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>Ne oldu?<br />
</li>
<li>Railway'in kendi aldığı önlemler<br />
</li>
<li>Kullanıcı olarak yapmanız gerekenler<br />
</li>
<li>Bucket ve GitHub sıfırlamasından sonra servisi ayağa kaldırmak<br />
</li>
<li>Platform ihlallerinden çıkarılacak ders<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ne oldu?</span></span><ul class="mycode_list"><li>Railway olayı, son dönemde <span style="font-weight: bold;" class="mycode_b">YZ çıkarım (inference) sağlayıcılarını ele geçirmeyi amaçlayan platform şirketlerine yönelik saldırı serisinin</span> parçası olarak görüyor ve bu sağlayıcılara tüm anahtarları proaktif olarak iptal etmelerini bildirdi.<br />
</li>
<li>İlk analiz etkinin bir kullanıcı alt kümesiyle sınırlı olabileceğini gösterse de şirket <span style="font-weight: bold;" class="mycode_b">tüm kullanıcılara</span> önlem almalarını önerdi.<br />
</li>
<li>Soruşturma süresince tüm deploy'lar durduruldu. 22 Ekim'de Pro ve Enterprise için build'ler geri açıldı; Hobby, Free ve Trial sırayla açılacak.<br />
</li>
<li>TechCrunch'a göre kök neden açıklanmadı; CEO Jake Cooper bir post-mortem yayımlanacağını söyledi.<br />
</li>
</ul>
Not: Dün paylaştığımız Zeabur ihlaliyle aynı dönemde, benzer hedeflemeyle (platformdaki sırlar üzerinden YZ sağlayıcı anahtarları) gelmesi dikkat çekici.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Railway'in aldığı önlemler</span></span><ul class="mycode_list"><li>22 Ekim 04:39 UTC itibarıyla tüm Railway API token'ları geçersiz kılındı. Public API entegrasyonlarınız için yeni token üretmeniz gerekiyor.<br />
</li>
<li>Her ortamdaki her storage bucket'ın ACCESS_KEY_ID ve SECRET_ACCESS_KEY değerleri yenilendi.<br />
</li>
<li>Railway'in tuttuğu GitHub token'ları geçersiz kılındı; registry kimlik bilgisi olarak saklanan GitHub token'ları Railway'den silindi. <span style="font-weight: bold;" class="mycode_b">Ancak bu token'lar GitHub tarafında siz iptal edene kadar hâlâ çalışıyor.</span><br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yapmanız gerekenler</span></span><br />
<ol type="1" class="mycode_list"><li>Railway'de saklanan tüm ortam değişkenlerini döndürün: veritabanı parolaları, üçüncü taraf API anahtarları (ödeme, e-posta, YZ sağlayıcıları), JWT imzalama anahtarları.<br />
</li>
<li>Özel registry kimlik bilgilerini yenileyin.<br />
</li>
<li>GitHub'da Railway'e verilmiş personal access token'ları ve deploy key'leri kendiniz iptal edin, ardından bağlantıyı yeniden kurun.<br />
</li>
<li>Döndürdüğünüz her anahtarın sağlayıcı tarafındaki loglarını (bulut, ödeme, YZ API kullanım panelleri) 21 Ekim öncesinden itibaren inceleyin.<br />
</li>
</ol>
Sıralama önemli: önce sağlayıcıda yeni anahtar üretin, uygulamaya girin, deploy edin, <span style="font-weight: bold;" class="mycode_b">sonra</span> eskisini iptal edin; aksi halde kendi kendinize kesinti yaratırsınız.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Bucket ve GitHub sonrası yeniden deploy</span></span><br />
Railway'in rehberine göre konteynerler değişkenleri yalnızca başlangıçta okur. Bucket'ın yeni kimlik bilgileri hazır ama servisinizin yeniden deploy edilmesi gerekiyor:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>railway redeploy --service uploads-api
railway bucket credentials --bucket my-bucket</code></div></div>Bir servis hâlâ InvalidAccessKeyId veya SignatureDoesNotMatch hatası veriyorsa ya eski deployment çalışıyordur ya da değişkene düz metin olarak yapıştırılmış eski anahtar vardır. Railway, düz metin yerine referans değişken (örneğin &#36;{{ my-bucket.SECRET_ACCESS_KEY }}) kullanmayı öneriyor; bir sonraki rotasyonda elle düzenleme gerekmez. Denetim kayıtlarında bu sıfırlamalar "Railway Staff" aktör tipiyle görünüyor; kendi olay kaydınız için bu girdileri dışa aktarın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ders</span></span><br />
PaaS platformundaki env değişkenleri, uygulamanızın tüm dış dünyaya açılan anahtarlık halkasıdır. Kısa ömürlü kimlik bilgileri (OIDC, workload identity), anahtar başına en az yetki ve harcama limitleri, platform ihlal olduğunda patlama yarıçapını ciddi şekilde küçültür.<br />
<br />
Railway veya benzeri bir PaaS kullanıyorsanız sır rotasyonunu ne kadar sürede tamamlayabildiniz? Otomasyon önerilerinizi paylaşın.<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://blog.railway.com/p/security-disclosure-wednesday-october-21st" target="_blank" rel="noopener" class="mycode_url">https://blog.railway.com/p/security-disc...tober-21st</a><br />
</li>
<li><a href="https://blog.railway.com/p/security-disclosure-recommendation-redeploy-buckets-and-reconnect-github-after-the-credential-reset" target="_blank" rel="noopener" class="mycode_url">https://blog.railway.com/p/security-disc...tial-reset</a><br />
</li>
<li><a href="https://www.bleepingcomputer.com/news/security/railway-warns-devs-to-rotate-secrets-after-potential-breach/" target="_blank" rel="noopener" class="mycode_url">https://www.bleepingcomputer.com/news/se...al-breach/</a><br />
</li>
<li><a href="https://techcrunch.com/2026/10/22/developer-platform-railway-urges-all-users-to-revoke-secret-keys-after-cyberattack/" target="_blank" rel="noopener" class="mycode_url">https://techcrunch.com/2026/10/22/develo...berattack/</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=371" target="_blank" title="">07-t07-railway-env-ihlal.png</a> (Dosya Boyutu: 120.26 KB / İndirme Sayısı: 3)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Railway Ortam Değişkenleri İhlali: Tüm Kullanıcılara Acil Sır Rotasyonu Çağrısı]]></title>
			<link>https://www.turkteam.org/konu-railway-ortam-degiskenleri-ihlali-tum-kullanicilara-acil-sir-rotasyonu-cagrisi.html</link>
			<pubDate>Fri, 23 Oct 2026 11:22:49 +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-railway-ortam-degiskenleri-ihlali-tum-kullanicilara-acil-sir-rotasyonu-cagrisi.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=370" loading="lazy"  alt="[Resim: attachment.php?aid=370]" class="mycode_img" /></div>
<br />
Selamlar,<br />
<br />
Geliştirici bulut platformu Railway, 21 Ekim 2026 sabahı müşteri ortam değişkenlerini (environment variables) saklayan sistemlerde anormal etkinlik tespit ettiğini açıkladı. Şirketin ifadesine göre yetkisiz bir üçüncü taraf <span style="font-weight: bold;" class="mycode_b">şifrelenmiş ortam değişkenlerine erişmiş ve bir kısmının şifresi çözülmüş içeriğini elde etmiş olabilir</span>. BleepingComputer'a göre Railway'in yaklaşık 4,8 milyon kullanıcısı ve 16 milyondan fazla servisi var.<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>Ne oldu?<br />
</li>
<li>Railway'in kendi aldığı önlemler<br />
</li>
<li>Kullanıcı olarak yapmanız gerekenler<br />
</li>
<li>Bucket ve GitHub sıfırlamasından sonra servisi ayağa kaldırmak<br />
</li>
<li>Platform ihlallerinden çıkarılacak ders<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ne oldu?</span></span><ul class="mycode_list"><li>Railway olayı, son dönemde <span style="font-weight: bold;" class="mycode_b">YZ çıkarım (inference) sağlayıcılarını ele geçirmeyi amaçlayan platform şirketlerine yönelik saldırı serisinin</span> parçası olarak görüyor ve bu sağlayıcılara tüm anahtarları proaktif olarak iptal etmelerini bildirdi.<br />
</li>
<li>İlk analiz etkinin bir kullanıcı alt kümesiyle sınırlı olabileceğini gösterse de şirket <span style="font-weight: bold;" class="mycode_b">tüm kullanıcılara</span> önlem almalarını önerdi.<br />
</li>
<li>Soruşturma süresince tüm deploy'lar durduruldu. 22 Ekim'de Pro ve Enterprise için build'ler geri açıldı; Hobby, Free ve Trial sırayla açılacak.<br />
</li>
<li>TechCrunch'a göre kök neden açıklanmadı; CEO Jake Cooper bir post-mortem yayımlanacağını söyledi.<br />
</li>
</ul>
Not: Dün paylaştığımız Zeabur ihlaliyle aynı dönemde, benzer hedeflemeyle (platformdaki sırlar üzerinden YZ sağlayıcı anahtarları) gelmesi dikkat çekici.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Railway'in aldığı önlemler</span></span><ul class="mycode_list"><li>22 Ekim 04:39 UTC itibarıyla tüm Railway API token'ları geçersiz kılındı. Public API entegrasyonlarınız için yeni token üretmeniz gerekiyor.<br />
</li>
<li>Her ortamdaki her storage bucket'ın ACCESS_KEY_ID ve SECRET_ACCESS_KEY değerleri yenilendi.<br />
</li>
<li>Railway'in tuttuğu GitHub token'ları geçersiz kılındı; registry kimlik bilgisi olarak saklanan GitHub token'ları Railway'den silindi. <span style="font-weight: bold;" class="mycode_b">Ancak bu token'lar GitHub tarafında siz iptal edene kadar hâlâ çalışıyor.</span><br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yapmanız gerekenler</span></span><br />
<ol type="1" class="mycode_list"><li>Railway'de saklanan tüm ortam değişkenlerini döndürün: veritabanı parolaları, üçüncü taraf API anahtarları (ödeme, e-posta, YZ sağlayıcıları), JWT imzalama anahtarları.<br />
</li>
<li>Özel registry kimlik bilgilerini yenileyin.<br />
</li>
<li>GitHub'da Railway'e verilmiş personal access token'ları ve deploy key'leri kendiniz iptal edin, ardından bağlantıyı yeniden kurun.<br />
</li>
<li>Döndürdüğünüz her anahtarın sağlayıcı tarafındaki loglarını (bulut, ödeme, YZ API kullanım panelleri) 21 Ekim öncesinden itibaren inceleyin.<br />
</li>
</ol>
Sıralama önemli: önce sağlayıcıda yeni anahtar üretin, uygulamaya girin, deploy edin, <span style="font-weight: bold;" class="mycode_b">sonra</span> eskisini iptal edin; aksi halde kendi kendinize kesinti yaratırsınız.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Bucket ve GitHub sonrası yeniden deploy</span></span><br />
Railway'in rehberine göre konteynerler değişkenleri yalnızca başlangıçta okur. Bucket'ın yeni kimlik bilgileri hazır ama servisinizin yeniden deploy edilmesi gerekiyor:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>railway redeploy --service uploads-api
railway bucket credentials --bucket my-bucket</code></div></div>Bir servis hâlâ InvalidAccessKeyId veya SignatureDoesNotMatch hatası veriyorsa ya eski deployment çalışıyordur ya da değişkene düz metin olarak yapıştırılmış eski anahtar vardır. Railway, düz metin yerine referans değişken (örneğin &#36;{{ my-bucket.SECRET_ACCESS_KEY }}) kullanmayı öneriyor; bir sonraki rotasyonda elle düzenleme gerekmez. Denetim kayıtlarında bu sıfırlamalar "Railway Staff" aktör tipiyle görünüyor; kendi olay kaydınız için bu girdileri dışa aktarın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ders</span></span><br />
PaaS platformundaki env değişkenleri, uygulamanızın tüm dış dünyaya açılan anahtarlık halkasıdır. Kısa ömürlü kimlik bilgileri (OIDC, workload identity), anahtar başına en az yetki ve harcama limitleri, platform ihlal olduğunda patlama yarıçapını ciddi şekilde küçültür.<br />
<br />
Railway veya benzeri bir PaaS kullanıyorsanız sır rotasyonunu ne kadar sürede tamamlayabildiniz? Otomasyon önerilerinizi paylaşın.<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://blog.railway.com/p/security-disclosure-wednesday-october-21st" target="_blank" rel="noopener" class="mycode_url">https://blog.railway.com/p/security-disc...tober-21st</a><br />
</li>
<li><a href="https://blog.railway.com/p/security-disclosure-recommendation-redeploy-buckets-and-reconnect-github-after-the-credential-reset" target="_blank" rel="noopener" class="mycode_url">https://blog.railway.com/p/security-disc...tial-reset</a><br />
</li>
<li><a href="https://www.bleepingcomputer.com/news/security/railway-warns-devs-to-rotate-secrets-after-potential-breach/" target="_blank" rel="noopener" class="mycode_url">https://www.bleepingcomputer.com/news/se...al-breach/</a><br />
</li>
<li><a href="https://techcrunch.com/2026/10/22/developer-platform-railway-urges-all-users-to-revoke-secret-keys-after-cyberattack/" target="_blank" rel="noopener" class="mycode_url">https://techcrunch.com/2026/10/22/develo...berattack/</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=370" target="_blank" title="">07-t07-railway-env-ihlal.png</a> (Dosya Boyutu: 120.26 KB / İndirme Sayısı: 3)
<!-- 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=370" loading="lazy"  alt="[Resim: attachment.php?aid=370]" class="mycode_img" /></div>
<br />
Selamlar,<br />
<br />
Geliştirici bulut platformu Railway, 21 Ekim 2026 sabahı müşteri ortam değişkenlerini (environment variables) saklayan sistemlerde anormal etkinlik tespit ettiğini açıkladı. Şirketin ifadesine göre yetkisiz bir üçüncü taraf <span style="font-weight: bold;" class="mycode_b">şifrelenmiş ortam değişkenlerine erişmiş ve bir kısmının şifresi çözülmüş içeriğini elde etmiş olabilir</span>. BleepingComputer'a göre Railway'in yaklaşık 4,8 milyon kullanıcısı ve 16 milyondan fazla servisi var.<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>Ne oldu?<br />
</li>
<li>Railway'in kendi aldığı önlemler<br />
</li>
<li>Kullanıcı olarak yapmanız gerekenler<br />
</li>
<li>Bucket ve GitHub sıfırlamasından sonra servisi ayağa kaldırmak<br />
</li>
<li>Platform ihlallerinden çıkarılacak ders<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ne oldu?</span></span><ul class="mycode_list"><li>Railway olayı, son dönemde <span style="font-weight: bold;" class="mycode_b">YZ çıkarım (inference) sağlayıcılarını ele geçirmeyi amaçlayan platform şirketlerine yönelik saldırı serisinin</span> parçası olarak görüyor ve bu sağlayıcılara tüm anahtarları proaktif olarak iptal etmelerini bildirdi.<br />
</li>
<li>İlk analiz etkinin bir kullanıcı alt kümesiyle sınırlı olabileceğini gösterse de şirket <span style="font-weight: bold;" class="mycode_b">tüm kullanıcılara</span> önlem almalarını önerdi.<br />
</li>
<li>Soruşturma süresince tüm deploy'lar durduruldu. 22 Ekim'de Pro ve Enterprise için build'ler geri açıldı; Hobby, Free ve Trial sırayla açılacak.<br />
</li>
<li>TechCrunch'a göre kök neden açıklanmadı; CEO Jake Cooper bir post-mortem yayımlanacağını söyledi.<br />
</li>
</ul>
Not: Dün paylaştığımız Zeabur ihlaliyle aynı dönemde, benzer hedeflemeyle (platformdaki sırlar üzerinden YZ sağlayıcı anahtarları) gelmesi dikkat çekici.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Railway'in aldığı önlemler</span></span><ul class="mycode_list"><li>22 Ekim 04:39 UTC itibarıyla tüm Railway API token'ları geçersiz kılındı. Public API entegrasyonlarınız için yeni token üretmeniz gerekiyor.<br />
</li>
<li>Her ortamdaki her storage bucket'ın ACCESS_KEY_ID ve SECRET_ACCESS_KEY değerleri yenilendi.<br />
</li>
<li>Railway'in tuttuğu GitHub token'ları geçersiz kılındı; registry kimlik bilgisi olarak saklanan GitHub token'ları Railway'den silindi. <span style="font-weight: bold;" class="mycode_b">Ancak bu token'lar GitHub tarafında siz iptal edene kadar hâlâ çalışıyor.</span><br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yapmanız gerekenler</span></span><br />
<ol type="1" class="mycode_list"><li>Railway'de saklanan tüm ortam değişkenlerini döndürün: veritabanı parolaları, üçüncü taraf API anahtarları (ödeme, e-posta, YZ sağlayıcıları), JWT imzalama anahtarları.<br />
</li>
<li>Özel registry kimlik bilgilerini yenileyin.<br />
</li>
<li>GitHub'da Railway'e verilmiş personal access token'ları ve deploy key'leri kendiniz iptal edin, ardından bağlantıyı yeniden kurun.<br />
</li>
<li>Döndürdüğünüz her anahtarın sağlayıcı tarafındaki loglarını (bulut, ödeme, YZ API kullanım panelleri) 21 Ekim öncesinden itibaren inceleyin.<br />
</li>
</ol>
Sıralama önemli: önce sağlayıcıda yeni anahtar üretin, uygulamaya girin, deploy edin, <span style="font-weight: bold;" class="mycode_b">sonra</span> eskisini iptal edin; aksi halde kendi kendinize kesinti yaratırsınız.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Bucket ve GitHub sonrası yeniden deploy</span></span><br />
Railway'in rehberine göre konteynerler değişkenleri yalnızca başlangıçta okur. Bucket'ın yeni kimlik bilgileri hazır ama servisinizin yeniden deploy edilmesi gerekiyor:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>railway redeploy --service uploads-api
railway bucket credentials --bucket my-bucket</code></div></div>Bir servis hâlâ InvalidAccessKeyId veya SignatureDoesNotMatch hatası veriyorsa ya eski deployment çalışıyordur ya da değişkene düz metin olarak yapıştırılmış eski anahtar vardır. Railway, düz metin yerine referans değişken (örneğin &#36;{{ my-bucket.SECRET_ACCESS_KEY }}) kullanmayı öneriyor; bir sonraki rotasyonda elle düzenleme gerekmez. Denetim kayıtlarında bu sıfırlamalar "Railway Staff" aktör tipiyle görünüyor; kendi olay kaydınız için bu girdileri dışa aktarın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ders</span></span><br />
PaaS platformundaki env değişkenleri, uygulamanızın tüm dış dünyaya açılan anahtarlık halkasıdır. Kısa ömürlü kimlik bilgileri (OIDC, workload identity), anahtar başına en az yetki ve harcama limitleri, platform ihlal olduğunda patlama yarıçapını ciddi şekilde küçültür.<br />
<br />
Railway veya benzeri bir PaaS kullanıyorsanız sır rotasyonunu ne kadar sürede tamamlayabildiniz? Otomasyon önerilerinizi paylaşın.<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://blog.railway.com/p/security-disclosure-wednesday-october-21st" target="_blank" rel="noopener" class="mycode_url">https://blog.railway.com/p/security-disc...tober-21st</a><br />
</li>
<li><a href="https://blog.railway.com/p/security-disclosure-recommendation-redeploy-buckets-and-reconnect-github-after-the-credential-reset" target="_blank" rel="noopener" class="mycode_url">https://blog.railway.com/p/security-disc...tial-reset</a><br />
</li>
<li><a href="https://www.bleepingcomputer.com/news/security/railway-warns-devs-to-rotate-secrets-after-potential-breach/" target="_blank" rel="noopener" class="mycode_url">https://www.bleepingcomputer.com/news/se...al-breach/</a><br />
</li>
<li><a href="https://techcrunch.com/2026/10/22/developer-platform-railway-urges-all-users-to-revoke-secret-keys-after-cyberattack/" target="_blank" rel="noopener" class="mycode_url">https://techcrunch.com/2026/10/22/develo...berattack/</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=370" target="_blank" title="">07-t07-railway-env-ihlal.png</a> (Dosya Boyutu: 120.26 KB / İndirme Sayısı: 3)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Zeabur İkinci İhlal: 3,2 Milyon Ortam Değişkeni Okundu, Platform Kapanıyor]]></title>
			<link>https://www.turkteam.org/konu-zeabur-ikinci-ihlal-3-2-milyon-ortam-degiskeni-okundu-platform-kapaniyor-221.html</link>
			<pubDate>Thu, 22 Oct 2026 11:22:33 +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-zeabur-ikinci-ihlal-3-2-milyon-ortam-degiskeni-okundu-platform-kapaniyor-221.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=345" loading="lazy"  alt="[Resim: attachment.php?aid=345]" class="mycode_img" /></div>
<br />
Selamlar,<br />
<br />
Geliştirici barındırma platformu Zeabur, 19 Ekim 2026'da Ekim ayı güvenlik olayının ön raporunu yayınladı. Özet: saldırgan, sızdırılmış Zeabur dahili kimlik bilgileriyle paylaşımlı kümeyi, bazı GCP Dedicated Server'ları ve dahili sistemleri ele geçirdi; sonunda platform veritabanını okudu. Onaylanan sayılar: <span style="font-weight: bold;" class="mycode_b">3.218.965</span> ortam değişkeni kaydı ve <span style="font-weight: bold;" class="mycode_b">321.810</span> hesap verisi. Zeabur ayrıca 31 Aralık 2026'da kapanacağını duyurdu.<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>İki yol nasıl birleşti?<br />
</li>
<li>Hangi veriler okundu?<br />
</li>
<li>Ağustos olayından sonra neden yine oldu?<br />
</li>
<li>Etkilenen kullanıcılar için eylem listesi<br />
</li>
<li>PaaS güvenliği için çıkarılacak dersler<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">İki yol nasıl birleşti?</span></span><br />
Zeabur'un raporuna göre saldırgan iki yoldan ilerledi:<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Yol A - paylaşımlı küme ve AWS:</span> 14 Ekim 01:36 UTC'den itibaren Zeabur'un dahili AWS anahtarları ve paylaşımlı küme yönetici token'ları kullanıldı. Bu kimlik bilgileri düz metin olarak özel bir yapılandırma deposundaydı. Yönetici arayüzü internete açıktı ve token'ların son kullanma tarihi yoktu. Saldırgan 9 bölgedeki paylaşımlı kümeye dışarıdan erişti; 12:39'dan itibaren tüm servislerin ayarlarını ve sırlarını (ortam değişkenleri dahil) okudu; 865 veritabanı servisi içinde okuma komutları çalıştırdı.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Yol B - GCP Dedicated Server'lar:</span> Aynı gün 13:40'tan itibaren saldırgan, Zeabur'un GCP üzerinde yönettiği 101 Dedicated Server'a root olarak giriş yaptı. Sunucu başlatma ayarlarında root parolası düz metindi; eski bir GCP anahtarıyla bu ayarlar okunabiliyordu.<br />
<br />
İki yol 15 Ekim'de birleşti: Saldırgan, ele geçirdiği bir GCP sunucusundan Yol A'dan elde ettiği dahili ağ yönetici kimlik bilgileriyle Zeabur'un dahili ağına bir düğüm ekledi. Dahili ağ kuralları bu düğümün platform veritabanına bağlanmasına izin veriyordu. 16:10-16:47 arasında salt okunur bir hesapla veritabanı okundu; 8.903 işlem kaydı eşleştirildi.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Hangi veriler okundu?</span></span><ul class="mycode_list"><li>Platform veritabanı: 3.218.965 ortam değişkeni (ad ve değer), 321.810 hesabın profil verileri, 566 zSend API anahtarı (düz metin), Access Token'lar (yalnızca hash; hepsi iptal edildi)<br />
</li>
<li>Paylaşımlı küme: 9 bölgede servis sırları; 865 veritabanı konteyneri içinde okuma komutları (n8n, PostgreSQL, new-api/one-api dahil)<br />
</li>
<li>GCP Dedicated Server: 101 sunucu, 92 kullanıcı; 50'sine kalıcılık için SSH anahtarı eklendi<br />
</li>
<li>GitHub App özel anahtarı: 15:05-18:54 arası okundu; şirket şu ana kadar kullanım bulamadığını söylüyor<br />
</li>
</ul>
Saldırganın davranışı AI servis anahtarlarını aramaya yoğunlaşmış görünüyor; n8n ve new-api/one-api okumaları ve Amazon Bedrock çağrı denemeleri (başarısız) bunu destekliyor. Zeabur yine de okunan her şeyi sızmış kabul ediyor.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ağustos'tan sonra neden yine?</span></span><br />
Bu, iki aydan kısa sürede Zeabur'un ikinci güvenlik olayı. Ağustos'ta sızdığı doğrulanan dahili anahtarlar döndürülmüştü; ancak yapılandırma deposundaki düz metin küme yönetici token'ları ve AWS anahtarları o rotasyona dahil edilmemişti. GCP sunucu başlatma ayarlarındaki root parolaları da Eylül'de tespit edilmesine rağmen olay öncesi düzeltilmemişti. Zeabur, Ağustos raporundaki "tüm dahili yönetici anahtarları devre dışı bırakıldı veya döndürüldü" ifadesinin eksik olduğunu bu raporda düzeltiyor.<br />
<br />
Olumlu taraf: Ağustos rehberliğini takip edip ortam değişkenlerini kendi Dedicated Server'ına taşıyan projeler, platform veritabanı okumasının kapsamı dışında kaldı.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Etkilenen kullanıcılar için eylem listesi</span></span><br />
Zeabur'un vurgusu: beklemeyin, hemen harekete geçin; Ağustos'tan sonra değiştirdiğiniz kimlik bilgilerini de yeniden değiştirin.<br />
<ol type="1" class="mycode_list"><li>Ortam değişkenlerindeki tüm API anahtarlarını, bulut anahtarlarını, veritabanı parolalarını, imzalama/şifreleme anahtarlarını sağlayıcıda iptal edip yenileyin, yeniden deploy edin.<br />
</li>
<li>Platform Access Token'larını yeniden oluşturun (hepsi iptal edildi).<br />
</li>
<li>zSend kullananlar: API anahtarlarını yeniden yaratın.<br />
</li>
<li>GitHub: 15 Ekim 15:05-18:54 UTC arasında Zeabur GitHub App'inin beklenmeyen clone/push, deploy key veya webhook değişikliklerini denetleyin.<br />
</li>
<li>14 Ekim'den (GCP Dedicated kullanıcıları için 1 Eylül'den) itibaren faturaları ve kullanım kayıtlarını gözden geçirin.<br />
</li>
<li>Paylaşımlı küme: Veritabanı içindeki parolaları değiştirin; n8n encryption key'ini yenileyip üçüncü taraf kimlik bilgilerini yeniden oluşturun; new-api/one-api için üst akış anahtarlarını iptal edin.<br />
</li>
<li>GCP Dedicated: Sunucuyu yeniden kurmak en güvenli yol. En azından /root/.ssh/authorized_keys içinde @zeabur-pentest yorumlu veya tanınmayan anahtarları silin, root parolasını değiştirin, parola ile SSH'yi kapatın.<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">PaaS güvenliği için dersler</span></span><ul class="mycode_list"><li>Yönetici token'larının son kullanma tarihi olmalı, internete açık olmamalı ve rotasyon listesinde unutulmamalıdır.<br />
</li>
<li>Küme yedekleri sırları içermemeli; yedek erişim anahtarı diğer sırlarla aynı ortamda tutulmamalıdır.<br />
</li>
<li>Kullanıcı servisleri ile dahili servisler aynı kümede çalışıyorsa, bir kullanıcı konteynerinin ele geçirilmesi dahili kimlik bilgilerine giden yol olabilir.<br />
</li>
<li>16 saatten fazla saldırı etkinliğinin alarm üretmemesi, denetim ve tespit kapsamının en az yetki kadar kritik olduğunu gösteriyor.<br />
</li>
</ul>
<br />
PaaS üzerinde ortam değişkeni tutanlar: sırlarınızı kendi sunucunuza taşıma planınız var mı?<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://zeabur.com/blogs/october-2026-security-incident" target="_blank" rel="noopener" class="mycode_url">https://zeabur.com/blogs/october-2026-security-incident</a><br />
</li>
<li><a href="https://zeabur.com/blogs/zeabur-is-shutting-down" target="_blank" rel="noopener" class="mycode_url">https://zeabur.com/blogs/zeabur-is-shutting-down</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=345" target="_blank" title="">07-t07-zeabur-ihlal.png</a> (Dosya Boyutu: 120.92 KB / İndirme Sayısı: 5)
<!-- 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=345" loading="lazy"  alt="[Resim: attachment.php?aid=345]" class="mycode_img" /></div>
<br />
Selamlar,<br />
<br />
Geliştirici barındırma platformu Zeabur, 19 Ekim 2026'da Ekim ayı güvenlik olayının ön raporunu yayınladı. Özet: saldırgan, sızdırılmış Zeabur dahili kimlik bilgileriyle paylaşımlı kümeyi, bazı GCP Dedicated Server'ları ve dahili sistemleri ele geçirdi; sonunda platform veritabanını okudu. Onaylanan sayılar: <span style="font-weight: bold;" class="mycode_b">3.218.965</span> ortam değişkeni kaydı ve <span style="font-weight: bold;" class="mycode_b">321.810</span> hesap verisi. Zeabur ayrıca 31 Aralık 2026'da kapanacağını duyurdu.<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>İki yol nasıl birleşti?<br />
</li>
<li>Hangi veriler okundu?<br />
</li>
<li>Ağustos olayından sonra neden yine oldu?<br />
</li>
<li>Etkilenen kullanıcılar için eylem listesi<br />
</li>
<li>PaaS güvenliği için çıkarılacak dersler<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">İki yol nasıl birleşti?</span></span><br />
Zeabur'un raporuna göre saldırgan iki yoldan ilerledi:<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Yol A - paylaşımlı küme ve AWS:</span> 14 Ekim 01:36 UTC'den itibaren Zeabur'un dahili AWS anahtarları ve paylaşımlı küme yönetici token'ları kullanıldı. Bu kimlik bilgileri düz metin olarak özel bir yapılandırma deposundaydı. Yönetici arayüzü internete açıktı ve token'ların son kullanma tarihi yoktu. Saldırgan 9 bölgedeki paylaşımlı kümeye dışarıdan erişti; 12:39'dan itibaren tüm servislerin ayarlarını ve sırlarını (ortam değişkenleri dahil) okudu; 865 veritabanı servisi içinde okuma komutları çalıştırdı.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Yol B - GCP Dedicated Server'lar:</span> Aynı gün 13:40'tan itibaren saldırgan, Zeabur'un GCP üzerinde yönettiği 101 Dedicated Server'a root olarak giriş yaptı. Sunucu başlatma ayarlarında root parolası düz metindi; eski bir GCP anahtarıyla bu ayarlar okunabiliyordu.<br />
<br />
İki yol 15 Ekim'de birleşti: Saldırgan, ele geçirdiği bir GCP sunucusundan Yol A'dan elde ettiği dahili ağ yönetici kimlik bilgileriyle Zeabur'un dahili ağına bir düğüm ekledi. Dahili ağ kuralları bu düğümün platform veritabanına bağlanmasına izin veriyordu. 16:10-16:47 arasında salt okunur bir hesapla veritabanı okundu; 8.903 işlem kaydı eşleştirildi.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Hangi veriler okundu?</span></span><ul class="mycode_list"><li>Platform veritabanı: 3.218.965 ortam değişkeni (ad ve değer), 321.810 hesabın profil verileri, 566 zSend API anahtarı (düz metin), Access Token'lar (yalnızca hash; hepsi iptal edildi)<br />
</li>
<li>Paylaşımlı küme: 9 bölgede servis sırları; 865 veritabanı konteyneri içinde okuma komutları (n8n, PostgreSQL, new-api/one-api dahil)<br />
</li>
<li>GCP Dedicated Server: 101 sunucu, 92 kullanıcı; 50'sine kalıcılık için SSH anahtarı eklendi<br />
</li>
<li>GitHub App özel anahtarı: 15:05-18:54 arası okundu; şirket şu ana kadar kullanım bulamadığını söylüyor<br />
</li>
</ul>
Saldırganın davranışı AI servis anahtarlarını aramaya yoğunlaşmış görünüyor; n8n ve new-api/one-api okumaları ve Amazon Bedrock çağrı denemeleri (başarısız) bunu destekliyor. Zeabur yine de okunan her şeyi sızmış kabul ediyor.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ağustos'tan sonra neden yine?</span></span><br />
Bu, iki aydan kısa sürede Zeabur'un ikinci güvenlik olayı. Ağustos'ta sızdığı doğrulanan dahili anahtarlar döndürülmüştü; ancak yapılandırma deposundaki düz metin küme yönetici token'ları ve AWS anahtarları o rotasyona dahil edilmemişti. GCP sunucu başlatma ayarlarındaki root parolaları da Eylül'de tespit edilmesine rağmen olay öncesi düzeltilmemişti. Zeabur, Ağustos raporundaki "tüm dahili yönetici anahtarları devre dışı bırakıldı veya döndürüldü" ifadesinin eksik olduğunu bu raporda düzeltiyor.<br />
<br />
Olumlu taraf: Ağustos rehberliğini takip edip ortam değişkenlerini kendi Dedicated Server'ına taşıyan projeler, platform veritabanı okumasının kapsamı dışında kaldı.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Etkilenen kullanıcılar için eylem listesi</span></span><br />
Zeabur'un vurgusu: beklemeyin, hemen harekete geçin; Ağustos'tan sonra değiştirdiğiniz kimlik bilgilerini de yeniden değiştirin.<br />
<ol type="1" class="mycode_list"><li>Ortam değişkenlerindeki tüm API anahtarlarını, bulut anahtarlarını, veritabanı parolalarını, imzalama/şifreleme anahtarlarını sağlayıcıda iptal edip yenileyin, yeniden deploy edin.<br />
</li>
<li>Platform Access Token'larını yeniden oluşturun (hepsi iptal edildi).<br />
</li>
<li>zSend kullananlar: API anahtarlarını yeniden yaratın.<br />
</li>
<li>GitHub: 15 Ekim 15:05-18:54 UTC arasında Zeabur GitHub App'inin beklenmeyen clone/push, deploy key veya webhook değişikliklerini denetleyin.<br />
</li>
<li>14 Ekim'den (GCP Dedicated kullanıcıları için 1 Eylül'den) itibaren faturaları ve kullanım kayıtlarını gözden geçirin.<br />
</li>
<li>Paylaşımlı küme: Veritabanı içindeki parolaları değiştirin; n8n encryption key'ini yenileyip üçüncü taraf kimlik bilgilerini yeniden oluşturun; new-api/one-api için üst akış anahtarlarını iptal edin.<br />
</li>
<li>GCP Dedicated: Sunucuyu yeniden kurmak en güvenli yol. En azından /root/.ssh/authorized_keys içinde @zeabur-pentest yorumlu veya tanınmayan anahtarları silin, root parolasını değiştirin, parola ile SSH'yi kapatın.<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">PaaS güvenliği için dersler</span></span><ul class="mycode_list"><li>Yönetici token'larının son kullanma tarihi olmalı, internete açık olmamalı ve rotasyon listesinde unutulmamalıdır.<br />
</li>
<li>Küme yedekleri sırları içermemeli; yedek erişim anahtarı diğer sırlarla aynı ortamda tutulmamalıdır.<br />
</li>
<li>Kullanıcı servisleri ile dahili servisler aynı kümede çalışıyorsa, bir kullanıcı konteynerinin ele geçirilmesi dahili kimlik bilgilerine giden yol olabilir.<br />
</li>
<li>16 saatten fazla saldırı etkinliğinin alarm üretmemesi, denetim ve tespit kapsamının en az yetki kadar kritik olduğunu gösteriyor.<br />
</li>
</ul>
<br />
PaaS üzerinde ortam değişkeni tutanlar: sırlarınızı kendi sunucunuza taşıma planınız var mı?<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://zeabur.com/blogs/october-2026-security-incident" target="_blank" rel="noopener" class="mycode_url">https://zeabur.com/blogs/october-2026-security-incident</a><br />
</li>
<li><a href="https://zeabur.com/blogs/zeabur-is-shutting-down" target="_blank" rel="noopener" class="mycode_url">https://zeabur.com/blogs/zeabur-is-shutting-down</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=345" target="_blank" title="">07-t07-zeabur-ihlal.png</a> (Dosya Boyutu: 120.92 KB / İndirme Sayısı: 5)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Zeabur İkinci İhlal: 3,2 Milyon Ortam Değişkeni Okundu, Platform Kapanıyor]]></title>
			<link>https://www.turkteam.org/konu-zeabur-ikinci-ihlal-3-2-milyon-ortam-degiskeni-okundu-platform-kapaniyor.html</link>
			<pubDate>Thu, 22 Oct 2026 11:21:41 +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-zeabur-ikinci-ihlal-3-2-milyon-ortam-degiskeni-okundu-platform-kapaniyor.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=344" loading="lazy"  alt="[Resim: attachment.php?aid=344]" class="mycode_img" /></div>
<br />
Selamlar,<br />
<br />
Geliştirici barındırma platformu Zeabur, 19 Ekim 2026'da Ekim ayı güvenlik olayının ön raporunu yayınladı. Özet: saldırgan, sızdırılmış Zeabur dahili kimlik bilgileriyle paylaşımlı kümeyi, bazı GCP Dedicated Server'ları ve dahili sistemleri ele geçirdi; sonunda platform veritabanını okudu. Onaylanan sayılar: <span style="font-weight: bold;" class="mycode_b">3.218.965</span> ortam değişkeni kaydı ve <span style="font-weight: bold;" class="mycode_b">321.810</span> hesap verisi. Zeabur ayrıca 31 Aralık 2026'da kapanacağını duyurdu.<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>İki yol nasıl birleşti?<br />
</li>
<li>Hangi veriler okundu?<br />
</li>
<li>Ağustos olayından sonra neden yine oldu?<br />
</li>
<li>Etkilenen kullanıcılar için eylem listesi<br />
</li>
<li>PaaS güvenliği için çıkarılacak dersler<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">İki yol nasıl birleşti?</span></span><br />
Zeabur'un raporuna göre saldırgan iki yoldan ilerledi:<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Yol A - paylaşımlı küme ve AWS:</span> 14 Ekim 01:36 UTC'den itibaren Zeabur'un dahili AWS anahtarları ve paylaşımlı küme yönetici token'ları kullanıldı. Bu kimlik bilgileri düz metin olarak özel bir yapılandırma deposundaydı. Yönetici arayüzü internete açıktı ve token'ların son kullanma tarihi yoktu. Saldırgan 9 bölgedeki paylaşımlı kümeye dışarıdan erişti; 12:39'dan itibaren tüm servislerin ayarlarını ve sırlarını (ortam değişkenleri dahil) okudu; 865 veritabanı servisi içinde okuma komutları çalıştırdı.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Yol B - GCP Dedicated Server'lar:</span> Aynı gün 13:40'tan itibaren saldırgan, Zeabur'un GCP üzerinde yönettiği 101 Dedicated Server'a root olarak giriş yaptı. Sunucu başlatma ayarlarında root parolası düz metindi; eski bir GCP anahtarıyla bu ayarlar okunabiliyordu.<br />
<br />
İki yol 15 Ekim'de birleşti: Saldırgan, ele geçirdiği bir GCP sunucusundan Yol A'dan elde ettiği dahili ağ yönetici kimlik bilgileriyle Zeabur'un dahili ağına bir düğüm ekledi. Dahili ağ kuralları bu düğümün platform veritabanına bağlanmasına izin veriyordu. 16:10-16:47 arasında salt okunur bir hesapla veritabanı okundu; 8.903 işlem kaydı eşleştirildi.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Hangi veriler okundu?</span></span><ul class="mycode_list"><li>Platform veritabanı: 3.218.965 ortam değişkeni (ad ve değer), 321.810 hesabın profil verileri, 566 zSend API anahtarı (düz metin), Access Token'lar (yalnızca hash; hepsi iptal edildi)<br />
</li>
<li>Paylaşımlı küme: 9 bölgede servis sırları; 865 veritabanı konteyneri içinde okuma komutları (n8n, PostgreSQL, new-api/one-api dahil)<br />
</li>
<li>GCP Dedicated Server: 101 sunucu, 92 kullanıcı; 50'sine kalıcılık için SSH anahtarı eklendi<br />
</li>
<li>GitHub App özel anahtarı: 15:05-18:54 arası okundu; şirket şu ana kadar kullanım bulamadığını söylüyor<br />
</li>
</ul>
Saldırganın davranışı AI servis anahtarlarını aramaya yoğunlaşmış görünüyor; n8n ve new-api/one-api okumaları ve Amazon Bedrock çağrı denemeleri (başarısız) bunu destekliyor. Zeabur yine de okunan her şeyi sızmış kabul ediyor.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ağustos'tan sonra neden yine?</span></span><br />
Bu, iki aydan kısa sürede Zeabur'un ikinci güvenlik olayı. Ağustos'ta sızdığı doğrulanan dahili anahtarlar döndürülmüştü; ancak yapılandırma deposundaki düz metin küme yönetici token'ları ve AWS anahtarları o rotasyona dahil edilmemişti. GCP sunucu başlatma ayarlarındaki root parolaları da Eylül'de tespit edilmesine rağmen olay öncesi düzeltilmemişti. Zeabur, Ağustos raporundaki "tüm dahili yönetici anahtarları devre dışı bırakıldı veya döndürüldü" ifadesinin eksik olduğunu bu raporda düzeltiyor.<br />
<br />
Olumlu taraf: Ağustos rehberliğini takip edip ortam değişkenlerini kendi Dedicated Server'ına taşıyan projeler, platform veritabanı okumasının kapsamı dışında kaldı.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Etkilenen kullanıcılar için eylem listesi</span></span><br />
Zeabur'un vurgusu: beklemeyin, hemen harekete geçin; Ağustos'tan sonra değiştirdiğiniz kimlik bilgilerini de yeniden değiştirin.<br />
<ol type="1" class="mycode_list"><li>Ortam değişkenlerindeki tüm API anahtarlarını, bulut anahtarlarını, veritabanı parolalarını, imzalama/şifreleme anahtarlarını sağlayıcıda iptal edip yenileyin, yeniden deploy edin.<br />
</li>
<li>Platform Access Token'larını yeniden oluşturun (hepsi iptal edildi).<br />
</li>
<li>zSend kullananlar: API anahtarlarını yeniden yaratın.<br />
</li>
<li>GitHub: 15 Ekim 15:05-18:54 UTC arasında Zeabur GitHub App'inin beklenmeyen clone/push, deploy key veya webhook değişikliklerini denetleyin.<br />
</li>
<li>14 Ekim'den (GCP Dedicated kullanıcıları için 1 Eylül'den) itibaren faturaları ve kullanım kayıtlarını gözden geçirin.<br />
</li>
<li>Paylaşımlı küme: Veritabanı içindeki parolaları değiştirin; n8n encryption key'ini yenileyip üçüncü taraf kimlik bilgilerini yeniden oluşturun; new-api/one-api için üst akış anahtarlarını iptal edin.<br />
</li>
<li>GCP Dedicated: Sunucuyu yeniden kurmak en güvenli yol. En azından /root/.ssh/authorized_keys içinde @zeabur-pentest yorumlu veya tanınmayan anahtarları silin, root parolasını değiştirin, parola ile SSH'yi kapatın.<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">PaaS güvenliği için dersler</span></span><ul class="mycode_list"><li>Yönetici token'larının son kullanma tarihi olmalı, internete açık olmamalı ve rotasyon listesinde unutulmamalıdır.<br />
</li>
<li>Küme yedekleri sırları içermemeli; yedek erişim anahtarı diğer sırlarla aynı ortamda tutulmamalıdır.<br />
</li>
<li>Kullanıcı servisleri ile dahili servisler aynı kümede çalışıyorsa, bir kullanıcı konteynerinin ele geçirilmesi dahili kimlik bilgilerine giden yol olabilir.<br />
</li>
<li>16 saatten fazla saldırı etkinliğinin alarm üretmemesi, denetim ve tespit kapsamının en az yetki kadar kritik olduğunu gösteriyor.<br />
</li>
</ul>
<br />
PaaS üzerinde ortam değişkeni tutanlar: sırlarınızı kendi sunucunuza taşıma planınız var mı?<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://zeabur.com/blogs/october-2026-security-incident" target="_blank" rel="noopener" class="mycode_url">https://zeabur.com/blogs/october-2026-security-incident</a><br />
</li>
<li><a href="https://zeabur.com/blogs/zeabur-is-shutting-down" target="_blank" rel="noopener" class="mycode_url">https://zeabur.com/blogs/zeabur-is-shutting-down</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=344" target="_blank" title="">07-t07-zeabur-ihlal.png</a> (Dosya Boyutu: 120.92 KB / İndirme Sayısı: 2)
<!-- 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=344" loading="lazy"  alt="[Resim: attachment.php?aid=344]" class="mycode_img" /></div>
<br />
Selamlar,<br />
<br />
Geliştirici barındırma platformu Zeabur, 19 Ekim 2026'da Ekim ayı güvenlik olayının ön raporunu yayınladı. Özet: saldırgan, sızdırılmış Zeabur dahili kimlik bilgileriyle paylaşımlı kümeyi, bazı GCP Dedicated Server'ları ve dahili sistemleri ele geçirdi; sonunda platform veritabanını okudu. Onaylanan sayılar: <span style="font-weight: bold;" class="mycode_b">3.218.965</span> ortam değişkeni kaydı ve <span style="font-weight: bold;" class="mycode_b">321.810</span> hesap verisi. Zeabur ayrıca 31 Aralık 2026'da kapanacağını duyurdu.<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>İki yol nasıl birleşti?<br />
</li>
<li>Hangi veriler okundu?<br />
</li>
<li>Ağustos olayından sonra neden yine oldu?<br />
</li>
<li>Etkilenen kullanıcılar için eylem listesi<br />
</li>
<li>PaaS güvenliği için çıkarılacak dersler<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">İki yol nasıl birleşti?</span></span><br />
Zeabur'un raporuna göre saldırgan iki yoldan ilerledi:<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Yol A - paylaşımlı küme ve AWS:</span> 14 Ekim 01:36 UTC'den itibaren Zeabur'un dahili AWS anahtarları ve paylaşımlı küme yönetici token'ları kullanıldı. Bu kimlik bilgileri düz metin olarak özel bir yapılandırma deposundaydı. Yönetici arayüzü internete açıktı ve token'ların son kullanma tarihi yoktu. Saldırgan 9 bölgedeki paylaşımlı kümeye dışarıdan erişti; 12:39'dan itibaren tüm servislerin ayarlarını ve sırlarını (ortam değişkenleri dahil) okudu; 865 veritabanı servisi içinde okuma komutları çalıştırdı.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Yol B - GCP Dedicated Server'lar:</span> Aynı gün 13:40'tan itibaren saldırgan, Zeabur'un GCP üzerinde yönettiği 101 Dedicated Server'a root olarak giriş yaptı. Sunucu başlatma ayarlarında root parolası düz metindi; eski bir GCP anahtarıyla bu ayarlar okunabiliyordu.<br />
<br />
İki yol 15 Ekim'de birleşti: Saldırgan, ele geçirdiği bir GCP sunucusundan Yol A'dan elde ettiği dahili ağ yönetici kimlik bilgileriyle Zeabur'un dahili ağına bir düğüm ekledi. Dahili ağ kuralları bu düğümün platform veritabanına bağlanmasına izin veriyordu. 16:10-16:47 arasında salt okunur bir hesapla veritabanı okundu; 8.903 işlem kaydı eşleştirildi.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Hangi veriler okundu?</span></span><ul class="mycode_list"><li>Platform veritabanı: 3.218.965 ortam değişkeni (ad ve değer), 321.810 hesabın profil verileri, 566 zSend API anahtarı (düz metin), Access Token'lar (yalnızca hash; hepsi iptal edildi)<br />
</li>
<li>Paylaşımlı küme: 9 bölgede servis sırları; 865 veritabanı konteyneri içinde okuma komutları (n8n, PostgreSQL, new-api/one-api dahil)<br />
</li>
<li>GCP Dedicated Server: 101 sunucu, 92 kullanıcı; 50'sine kalıcılık için SSH anahtarı eklendi<br />
</li>
<li>GitHub App özel anahtarı: 15:05-18:54 arası okundu; şirket şu ana kadar kullanım bulamadığını söylüyor<br />
</li>
</ul>
Saldırganın davranışı AI servis anahtarlarını aramaya yoğunlaşmış görünüyor; n8n ve new-api/one-api okumaları ve Amazon Bedrock çağrı denemeleri (başarısız) bunu destekliyor. Zeabur yine de okunan her şeyi sızmış kabul ediyor.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ağustos'tan sonra neden yine?</span></span><br />
Bu, iki aydan kısa sürede Zeabur'un ikinci güvenlik olayı. Ağustos'ta sızdığı doğrulanan dahili anahtarlar döndürülmüştü; ancak yapılandırma deposundaki düz metin küme yönetici token'ları ve AWS anahtarları o rotasyona dahil edilmemişti. GCP sunucu başlatma ayarlarındaki root parolaları da Eylül'de tespit edilmesine rağmen olay öncesi düzeltilmemişti. Zeabur, Ağustos raporundaki "tüm dahili yönetici anahtarları devre dışı bırakıldı veya döndürüldü" ifadesinin eksik olduğunu bu raporda düzeltiyor.<br />
<br />
Olumlu taraf: Ağustos rehberliğini takip edip ortam değişkenlerini kendi Dedicated Server'ına taşıyan projeler, platform veritabanı okumasının kapsamı dışında kaldı.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Etkilenen kullanıcılar için eylem listesi</span></span><br />
Zeabur'un vurgusu: beklemeyin, hemen harekete geçin; Ağustos'tan sonra değiştirdiğiniz kimlik bilgilerini de yeniden değiştirin.<br />
<ol type="1" class="mycode_list"><li>Ortam değişkenlerindeki tüm API anahtarlarını, bulut anahtarlarını, veritabanı parolalarını, imzalama/şifreleme anahtarlarını sağlayıcıda iptal edip yenileyin, yeniden deploy edin.<br />
</li>
<li>Platform Access Token'larını yeniden oluşturun (hepsi iptal edildi).<br />
</li>
<li>zSend kullananlar: API anahtarlarını yeniden yaratın.<br />
</li>
<li>GitHub: 15 Ekim 15:05-18:54 UTC arasında Zeabur GitHub App'inin beklenmeyen clone/push, deploy key veya webhook değişikliklerini denetleyin.<br />
</li>
<li>14 Ekim'den (GCP Dedicated kullanıcıları için 1 Eylül'den) itibaren faturaları ve kullanım kayıtlarını gözden geçirin.<br />
</li>
<li>Paylaşımlı küme: Veritabanı içindeki parolaları değiştirin; n8n encryption key'ini yenileyip üçüncü taraf kimlik bilgilerini yeniden oluşturun; new-api/one-api için üst akış anahtarlarını iptal edin.<br />
</li>
<li>GCP Dedicated: Sunucuyu yeniden kurmak en güvenli yol. En azından /root/.ssh/authorized_keys içinde @zeabur-pentest yorumlu veya tanınmayan anahtarları silin, root parolasını değiştirin, parola ile SSH'yi kapatın.<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">PaaS güvenliği için dersler</span></span><ul class="mycode_list"><li>Yönetici token'larının son kullanma tarihi olmalı, internete açık olmamalı ve rotasyon listesinde unutulmamalıdır.<br />
</li>
<li>Küme yedekleri sırları içermemeli; yedek erişim anahtarı diğer sırlarla aynı ortamda tutulmamalıdır.<br />
</li>
<li>Kullanıcı servisleri ile dahili servisler aynı kümede çalışıyorsa, bir kullanıcı konteynerinin ele geçirilmesi dahili kimlik bilgilerine giden yol olabilir.<br />
</li>
<li>16 saatten fazla saldırı etkinliğinin alarm üretmemesi, denetim ve tespit kapsamının en az yetki kadar kritik olduğunu gösteriyor.<br />
</li>
</ul>
<br />
PaaS üzerinde ortam değişkeni tutanlar: sırlarınızı kendi sunucunuza taşıma planınız var mı?<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://zeabur.com/blogs/october-2026-security-incident" target="_blank" rel="noopener" class="mycode_url">https://zeabur.com/blogs/october-2026-security-incident</a><br />
</li>
<li><a href="https://zeabur.com/blogs/zeabur-is-shutting-down" target="_blank" rel="noopener" class="mycode_url">https://zeabur.com/blogs/zeabur-is-shutting-down</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=344" target="_blank" title="">07-t07-zeabur-ihlal.png</a> (Dosya Boyutu: 120.92 KB / İndirme Sayısı: 2)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Azure Blob Storage Yanlış Yapılandırması: Genel Erişim, SAS ve Denetim]]></title>
			<link>https://www.turkteam.org/konu-azure-blob-storage-yanlis-yapilandirmasi-genel-erisim-sas-ve-denetim.html</link>
			<pubDate>Mon, 19 Oct 2026 01:52:01 +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-azure-blob-storage-yanlis-yapilandirmasi-genel-erisim-sas-ve-denetim.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=285" loading="lazy"  alt="[Resim: attachment.php?aid=285]" class="mycode_img" /></div>
<br />
Merhaba,<br />
<br />
Azure Blob'da yanlışlıkla public container bırakmak hâlâ klasik bulgu. Bu yazıda genel erişim seviyeleri, SAS riskleri ve denetim için pratik kontrolleri anlatıyorum. Örnekler kendi lab aboneliğim üzerinden.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Erişim katmanları</span></span><ul class="mycode_list"><li>Private: anonim erişim yok<br />
</li>
<li>Blob: anonim kullanıcı blob bilgisini URL ile okuyabilir<br />
</li>
<li>Container: listeleme de açık (daha kötü)<br />
</li>
</ul>
Depolama hesabında "Allow blob public access" kapalıysa container public yapsanız bile engellenir. İkisini birden kontrol edin.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>az storage account show -n LABSTORE -g LABRG --query allowBlobPublicAccess
az storage container show --account-name LABSTORE -n uploads --query publicAccess</code></div></div><br />
<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=286" loading="lazy"  alt="[Resim: attachment.php?aid=286]" class="mycode_img" /></div>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">SAS token tuzakları</span></span><br />
Shared Access Signature geçici yetki verir; fakat:<ul class="mycode_list"><li>Çok uzun expiry (yıllarca) = fiilen anahtar<br />
</li>
<li>İzinlerin fazla olması (write+delete+list)<br />
</li>
<li>HTTPS zorunluluğu olmaması<br />
</li>
<li>SAS'ın GitHub'a / mobil uygulamaya gömülmesi<br />
</li>
</ul>
Tercihen <span style="font-weight: bold;" class="mycode_b">user delegation SAS</span> (Azure AD kimliğiyle) kullanın; hesap anahtarıyla üretilen SAS sızıntısında rotasyon daha acı olur.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Denetim ve tespit</span></span><ul class="mycode_list"><li>Azure Resource Graph / Policy ile public container taraması<br />
</li>
<li>Diagnostic settings: StorageRead/Write loglarını Log Analytics'e<br />
</li>
<li>Microsoft Defender for Storage (ortamınızda varsa) anomali uyarısı<br />
</li>
<li>CI'da Terraform plan: public_access != null ise fail<br />
</li>
</ul>
Örnek Resource Graph düşüncesi: storage container'larında publicAccess alanı boş olmayanlar.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Sıkılaştırma adımları</span></span><br />
<ol type="1" class="mycode_list"><li>Hesapta public access'i kapat<br />
</li>
<li>Gerekli anonim dağıtım varsa Azure CDN + kontrollü origin kullan<br />
</li>
<li>Firewall: selected networks + private endpoint<br />
</li>
<li>Shared key access'i mümkünse kapatıp AAD'ye geç<br />
</li>
<li>SAS için kısa TTL + minimum permission<br />
</li>
</ol>
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>az storage account update -n LABSTORE -g LABRG --allow-blob-public-access false</code></div></div><br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Olay senaryosu</span></span><br />
Public container'da müşteri verisi bulunduysa: hemen private yap, SAS/account key rotate et, logdan kim indirmiş bak, KVKK sürecini tetikle. "URL'yi gizledik" yetmez; URL zaten indekslenmiş olabilir.<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>Microsoft Learn: Azure Storage security guide<br />
</li>
<li>Azure Security Benchmark - Storage<br />
</li>
<li>SAS best practices (Microsoft Docs)<br />
</li>
</ul>
<br />
Siz storage hesaplarında shared key'i kapatabildiniz mi, yoksa eski uygulamalar mı engelliyor?<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Private endpoint ve DNS</span></span><br />
Storage'ı private endpoint arkasına alınca eski public URL'ler kırılır; uygulamaları güncelleyin. DNS zone'ları (privatelink) doğru değilse geliştirici "Azure bozuldu" diye public'i geri açar — en sık regressiyon.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Lifecycle ve soft delete</span></span><br />
Yanlışlıkla silinen kanıt / yedek için soft delete ve versioning açın. Fidye senaryosunda immutable storage (WORM) politikaları ayrı başlıktır; en azından kritik konteynerlerde versioning açık olsun.<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">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=285" target="_blank" title="">100-n18-4ecc77.png</a> (Dosya Boyutu: 67.04 KB / İndirme Sayısı: 13)
<!-- 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=286" target="_blank" title="">n18-inner.png</a> (Dosya Boyutu: 20.26 KB / İndirme Sayısı: 14)
<!-- 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=285" loading="lazy"  alt="[Resim: attachment.php?aid=285]" class="mycode_img" /></div>
<br />
Merhaba,<br />
<br />
Azure Blob'da yanlışlıkla public container bırakmak hâlâ klasik bulgu. Bu yazıda genel erişim seviyeleri, SAS riskleri ve denetim için pratik kontrolleri anlatıyorum. Örnekler kendi lab aboneliğim üzerinden.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Erişim katmanları</span></span><ul class="mycode_list"><li>Private: anonim erişim yok<br />
</li>
<li>Blob: anonim kullanıcı blob bilgisini URL ile okuyabilir<br />
</li>
<li>Container: listeleme de açık (daha kötü)<br />
</li>
</ul>
Depolama hesabında "Allow blob public access" kapalıysa container public yapsanız bile engellenir. İkisini birden kontrol edin.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>az storage account show -n LABSTORE -g LABRG --query allowBlobPublicAccess
az storage container show --account-name LABSTORE -n uploads --query publicAccess</code></div></div><br />
<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=286" loading="lazy"  alt="[Resim: attachment.php?aid=286]" class="mycode_img" /></div>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">SAS token tuzakları</span></span><br />
Shared Access Signature geçici yetki verir; fakat:<ul class="mycode_list"><li>Çok uzun expiry (yıllarca) = fiilen anahtar<br />
</li>
<li>İzinlerin fazla olması (write+delete+list)<br />
</li>
<li>HTTPS zorunluluğu olmaması<br />
</li>
<li>SAS'ın GitHub'a / mobil uygulamaya gömülmesi<br />
</li>
</ul>
Tercihen <span style="font-weight: bold;" class="mycode_b">user delegation SAS</span> (Azure AD kimliğiyle) kullanın; hesap anahtarıyla üretilen SAS sızıntısında rotasyon daha acı olur.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Denetim ve tespit</span></span><ul class="mycode_list"><li>Azure Resource Graph / Policy ile public container taraması<br />
</li>
<li>Diagnostic settings: StorageRead/Write loglarını Log Analytics'e<br />
</li>
<li>Microsoft Defender for Storage (ortamınızda varsa) anomali uyarısı<br />
</li>
<li>CI'da Terraform plan: public_access != null ise fail<br />
</li>
</ul>
Örnek Resource Graph düşüncesi: storage container'larında publicAccess alanı boş olmayanlar.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Sıkılaştırma adımları</span></span><br />
<ol type="1" class="mycode_list"><li>Hesapta public access'i kapat<br />
</li>
<li>Gerekli anonim dağıtım varsa Azure CDN + kontrollü origin kullan<br />
</li>
<li>Firewall: selected networks + private endpoint<br />
</li>
<li>Shared key access'i mümkünse kapatıp AAD'ye geç<br />
</li>
<li>SAS için kısa TTL + minimum permission<br />
</li>
</ol>
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>az storage account update -n LABSTORE -g LABRG --allow-blob-public-access false</code></div></div><br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Olay senaryosu</span></span><br />
Public container'da müşteri verisi bulunduysa: hemen private yap, SAS/account key rotate et, logdan kim indirmiş bak, KVKK sürecini tetikle. "URL'yi gizledik" yetmez; URL zaten indekslenmiş olabilir.<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>Microsoft Learn: Azure Storage security guide<br />
</li>
<li>Azure Security Benchmark - Storage<br />
</li>
<li>SAS best practices (Microsoft Docs)<br />
</li>
</ul>
<br />
Siz storage hesaplarında shared key'i kapatabildiniz mi, yoksa eski uygulamalar mı engelliyor?<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Private endpoint ve DNS</span></span><br />
Storage'ı private endpoint arkasına alınca eski public URL'ler kırılır; uygulamaları güncelleyin. DNS zone'ları (privatelink) doğru değilse geliştirici "Azure bozuldu" diye public'i geri açar — en sık regressiyon.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Lifecycle ve soft delete</span></span><br />
Yanlışlıkla silinen kanıt / yedek için soft delete ve versioning açın. Fidye senaryosunda immutable storage (WORM) politikaları ayrı başlıktır; en azından kritik konteynerlerde versioning açık olsun.<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">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=285" target="_blank" title="">100-n18-4ecc77.png</a> (Dosya Boyutu: 67.04 KB / İndirme Sayısı: 13)
<!-- 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=286" target="_blank" title="">n18-inner.png</a> (Dosya Boyutu: 20.26 KB / İndirme Sayısı: 14)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[AWS IAM En Az Yetki: Access Analyzer ve Policy Simulator Pratikleri]]></title>
			<link>https://www.turkteam.org/konu-aws-iam-en-az-yetki-access-analyzer-ve-policy-simulator-pratikleri.html</link>
			<pubDate>Mon, 19 Oct 2026 01:34:50 +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-aws-iam-en-az-yetki-access-analyzer-ve-policy-simulator-pratikleri.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=283" loading="lazy"  alt="[Resim: attachment.php?aid=283]" class="mycode_img" /></div>
<br />
Selam,<br />
<br />
AWS'te en sık gördüğüm bulgu hâlâ aşırı geniş IAM izinleri: Action "*" ve Resource "*". Bu yazıda en az yetki için Access Analyzer ve Policy Simulator'ı kendi hesabınızda (lab) nasıl kullanacağınızı anlatıyorum.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">En az yetki pratiği</span></span><ul class="mycode_list"><li>İnsan kullanıcı yerine rol + kısa ömürlü kimlik bilgisi<br />
</li>
<li>Admin Access'i günlük iş için vermeyin; break-glass hesabı ayırın<br />
</li>
<li>Wildcard Action'ları gerekçelendirin veya kaldırın<br />
</li>
<li>SCPs ile organizasyon sınırları (AWS Organizations)<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">IAM Access Analyzer</span></span><br />
Analyzer, hesap dışına açılan erişimleri ve (kullanım tipine göre) kullanılmayan izinleri bulmanıza yardım eder. Konsolda IAM &gt; Access Analyzer veya CLI:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>aws accessanalyzer list-analyzers
aws accessanalyzer list-findings --analyzer-arn arn:aws:access-analyzer:REGION:ACCOUNT:analyzer/NAME</code></div></div>Bulgular: public S3, çapraz hesap rol güveni, beklenmeyen principal'lar. Her bulguyu "bilinçli mi?" diye işaretleyin; bilinçliyse arşivleyip gerekçe yazın.<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=284" loading="lazy"  alt="[Resim: attachment.php?aid=284]" class="mycode_img" /></div>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Policy Simulator</span></span><br />
Bir rolün belirli Action'ı yapıp yapamayacağını denemek için:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>aws iam simulate-principal-policy &#92;
  --policy-source-arn arn:aws:iam::ACCOUNT:role/AppRole &#92;
  --action-names s3:GetObject ec2:TerminateInstances &#92;
  --resource-arns arn:aws:s3:::lab-bucket/*</code></div></div>Çıktıdaki EvalDecision: allowed / implicitDeny / explicitDeny. CI boru hattında yeni policy PR'ları için simülasyon koşturmak FP'li prod olaylarını azaltır.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">İzin sınırları (permissions boundary)</span></span><br />
Geliştiriciye politika ekleme hakkı verirken boundary ile tavan koyun. Böylece kendini admin yapamaz. CloudFormation / Terraform modüllerinde boundary ARN'sini zorunlu tutun.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Son 90 gün erişim önerileri</span></span><br />
IAM konsolunda Access Advisor, bir rolün kullandığı servisleri gösterir. Kullanılmayan geniş yönetilen politikaları daraltmak için başlangıç noktasıdır; körlemesine silmeyin, önce staging'de deneyin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kontrol listesi</span></span><br />
<ol type="1" class="mycode_list"><li>Root kullanıcıda MFA + kasa; günlük iş yok<br />
</li>
<li>Access Analyzer aktif, haftalık gözden geçirme<br />
</li>
<li>Public bulgular için alarm (EventBridge)<br />
</li>
<li>CI'da policy-as-code (например, IAM Access Analyzer policy validation / OPA)<br />
</li>
</ol>
<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>AWS IAM User Guide - Access Analyzer<br />
</li>
<li>AWS Policy Simulator dokümantasyonu<br />
</li>
<li>CIS AWS Foundations Benchmark<br />
</li>
</ul>
<br />
Siz wildcard temizliği için Access Advisor mı, yoksa CloudTrail tabanlı araçlar mı kullanıyorsunuz?<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Örnek daraltma hikâyesi</span></span><br />
AmazonS3FullAccess yerine ListBucket + GetObject + belirli bucket ARN. PutObject gerekiyorsa ayrı rol. CI rolü ile insan rolünü ayırın. Access Analyzer unused access bulgularını 30 günde bir sprint backlog'una taşıyın; birikirse kimse okumaz.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Policy as code</span></span><br />
Terraform aws_iam_policy_document kullanırken heredoc JSON yapıştırmayın; argument'ler review edilebilir kalsın. PR'da simulate-principal-policy veya IAM Access Analyzer policy validation çalıştırı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">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=283" target="_blank" title="">100-n17-9fb51c.png</a> (Dosya Boyutu: 62.22 KB / İndirme Sayısı: 13)
<!-- 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=284" target="_blank" title="">n17-inner.png</a> (Dosya Boyutu: 21.15 KB / İndirme Sayısı: 12)
<!-- 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=283" loading="lazy"  alt="[Resim: attachment.php?aid=283]" class="mycode_img" /></div>
<br />
Selam,<br />
<br />
AWS'te en sık gördüğüm bulgu hâlâ aşırı geniş IAM izinleri: Action "*" ve Resource "*". Bu yazıda en az yetki için Access Analyzer ve Policy Simulator'ı kendi hesabınızda (lab) nasıl kullanacağınızı anlatıyorum.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">En az yetki pratiği</span></span><ul class="mycode_list"><li>İnsan kullanıcı yerine rol + kısa ömürlü kimlik bilgisi<br />
</li>
<li>Admin Access'i günlük iş için vermeyin; break-glass hesabı ayırın<br />
</li>
<li>Wildcard Action'ları gerekçelendirin veya kaldırın<br />
</li>
<li>SCPs ile organizasyon sınırları (AWS Organizations)<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">IAM Access Analyzer</span></span><br />
Analyzer, hesap dışına açılan erişimleri ve (kullanım tipine göre) kullanılmayan izinleri bulmanıza yardım eder. Konsolda IAM &gt; Access Analyzer veya CLI:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>aws accessanalyzer list-analyzers
aws accessanalyzer list-findings --analyzer-arn arn:aws:access-analyzer:REGION:ACCOUNT:analyzer/NAME</code></div></div>Bulgular: public S3, çapraz hesap rol güveni, beklenmeyen principal'lar. Her bulguyu "bilinçli mi?" diye işaretleyin; bilinçliyse arşivleyip gerekçe yazın.<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=284" loading="lazy"  alt="[Resim: attachment.php?aid=284]" class="mycode_img" /></div>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Policy Simulator</span></span><br />
Bir rolün belirli Action'ı yapıp yapamayacağını denemek için:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>aws iam simulate-principal-policy &#92;
  --policy-source-arn arn:aws:iam::ACCOUNT:role/AppRole &#92;
  --action-names s3:GetObject ec2:TerminateInstances &#92;
  --resource-arns arn:aws:s3:::lab-bucket/*</code></div></div>Çıktıdaki EvalDecision: allowed / implicitDeny / explicitDeny. CI boru hattında yeni policy PR'ları için simülasyon koşturmak FP'li prod olaylarını azaltır.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">İzin sınırları (permissions boundary)</span></span><br />
Geliştiriciye politika ekleme hakkı verirken boundary ile tavan koyun. Böylece kendini admin yapamaz. CloudFormation / Terraform modüllerinde boundary ARN'sini zorunlu tutun.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Son 90 gün erişim önerileri</span></span><br />
IAM konsolunda Access Advisor, bir rolün kullandığı servisleri gösterir. Kullanılmayan geniş yönetilen politikaları daraltmak için başlangıç noktasıdır; körlemesine silmeyin, önce staging'de deneyin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kontrol listesi</span></span><br />
<ol type="1" class="mycode_list"><li>Root kullanıcıda MFA + kasa; günlük iş yok<br />
</li>
<li>Access Analyzer aktif, haftalık gözden geçirme<br />
</li>
<li>Public bulgular için alarm (EventBridge)<br />
</li>
<li>CI'da policy-as-code (например, IAM Access Analyzer policy validation / OPA)<br />
</li>
</ol>
<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>AWS IAM User Guide - Access Analyzer<br />
</li>
<li>AWS Policy Simulator dokümantasyonu<br />
</li>
<li>CIS AWS Foundations Benchmark<br />
</li>
</ul>
<br />
Siz wildcard temizliği için Access Advisor mı, yoksa CloudTrail tabanlı araçlar mı kullanıyorsunuz?<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Örnek daraltma hikâyesi</span></span><br />
AmazonS3FullAccess yerine ListBucket + GetObject + belirli bucket ARN. PutObject gerekiyorsa ayrı rol. CI rolü ile insan rolünü ayırın. Access Analyzer unused access bulgularını 30 günde bir sprint backlog'una taşıyın; birikirse kimse okumaz.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Policy as code</span></span><br />
Terraform aws_iam_policy_document kullanırken heredoc JSON yapıştırmayın; argument'ler review edilebilir kalsın. PR'da simulate-principal-policy veya IAM Access Analyzer policy validation çalıştırı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">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=283" target="_blank" title="">100-n17-9fb51c.png</a> (Dosya Boyutu: 62.22 KB / İndirme Sayısı: 13)
<!-- 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=284" target="_blank" title="">n17-inner.png</a> (Dosya Boyutu: 21.15 KB / İndirme Sayısı: 12)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Prowler ile AWS Güvenlik Denetimi 2026: Açık Kaynak CSPM ile Kendi Hesabınızı Tarayın]]></title>
			<link>https://www.turkteam.org/konu-prowler-ile-aws-guvenlik-denetimi-2026-acik-kaynak-cspm-ile-kendi-hesabinizi-tarayin.html</link>
			<pubDate>Sun, 18 Oct 2026 20:13:16 +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-prowler-ile-aws-guvenlik-denetimi-2026-acik-kaynak-cspm-ile-kendi-hesabinizi-tarayin.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=224" loading="lazy"  alt="[Resim: attachment.php?aid=224]" class="mycode_img" /></div>
<br />
Merhaba arkadaşlar,<br />
<br />
Bulut hesabınızda yüzlerce kaynak varsa, "acaba bir yerde açık bir S3 bucket ya da fazla yetkili bir IAM kullanıcısı mı kaldı?" sorusunu elle cevaplamak imkansızdır. İşte bu noktada bulut güvenlik duruşu yönetimi (CSPM) araçları devreye girer. Prowler, AWS başta olmak üzere birçok sağlayıcıyı tarayan, açık kaynak ve ücretsiz bir CSPM aracıdır. Bu rehberde Prowler'ı resmi belgelerine dayanarak kurup kendi AWS hesabınızda nasıl güvenlik denetimi yapacağınızı, raporları nasıl okuyacağınızı ve bulguları nasıl önceliklendireceğinizi anlatıyorum. Tüm komutlar yalnızca kendi hesabınızda veya yazılı izniniz olan hesaplarda çalıştırılmalıdır.<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>CSPM nedir, Prowler ne yapar?<br />
</li>
<li>Kurulum ve kimlik doğrulama<br />
</li>
<li>En az yetkili denetim kullanıcısı<br />
</li>
<li>İlk tarama ve raporlar<br />
</li>
<li>Uyumluluk çerçeveleriyle tarama<br />
</li>
<li>Belirli servis/kontrol çalıştırma<br />
</li>
<li>Bulguları önceliklendirme ve düzenli denetim<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">CSPM Nedir, Prowler Ne Yapar?</span></span><br />
<br />
CSPM araçları, bulut yapılandırmanızı bilinen güvenlik en iyi uygulamaları ve uyumluluk çerçeveleriyle karşılaştırır; yanlış yapılandırmaları (açık bucket, şifresiz disk, MFA'sız kök hesap, aşırı geniş IAM) tespit eder. Prowler, resmi belgelerine göre AWS, Azure, GCP, Kubernetes, Microsoft 365, GitHub ve daha fazlasını destekler. Yüzlerce hazır kontrol ve CIS, NIST gibi uyumluluk çerçeveleriyle gelir.<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=225" loading="lazy"  alt="[Resim: attachment.php?aid=225]" class="mycode_img" /></div>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kurulum ve Kimlik Doğrulama</span></span><br />
<br />
Prowler, Python ile kurulur (resmi belgelere göre Python 3.10-3.13):<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>pip install prowler
prowler -v</code></div></div><br />
Prowler, komut çalıştırıldığında ortam değişkeni veya profil üzerinden AWS kimlik bilgilerini kullanır. Önce AWS CLI ile kimliğinizi doğrulayın:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>aws sts get-caller-identity</code></div></div><br />
Prowler sağlayıcıyı ilk argüman olarak alır (belirtmezseniz geriye dönük uyumluluk için AWS varsayılır):<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>prowler aws
prowler aws --profile kendi-profilim</code></div></div><br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">En Az Yetkili Denetim Kullanıcısı</span></span><br />
<br />
Prowler yalnızca okuma yapar; bu yüzden ona yazma yetkisi vermeyin. AWS'nin yönetilen <span style="font-weight: bold;" class="mycode_b">SecurityAudit</span> ve <span style="font-weight: bold;" class="mycode_b">ViewOnlyAccess</span> politikaları çoğu kontrol için yeterlidir. En az yetki ilkesine uygun olarak Prowler için ayrı bir IAM rolü/kullanıcısı oluşturun ve yalnızca bu salt okunur politikaları bağlayın. Kök hesapla veya AdministratorAccess ile tarama yapmak, gereksiz risktir.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">İlk Tarama ve Raporlar</span></span><br />
<br />
En basit haliyle tüm hesabı tüm bölgelerde tarayın:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>prowler aws</code></div></div><br />
Prowler resmi belgelerine göre varsayılan olarak <span style="font-weight: bold;" class="mycode_b">CSV, JSON-OCSF ve HTML</span> raporları üretir ve bunları output dizinine kaydeder. Çıktı formatını kendiniz de seçebilirsiniz:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>prowler aws -M csv json-ocsf html</code></div></div><br />
Belirli bir profil ve bölgeyle sınırlamak:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>prowler aws --profile kendi-profilim -f eu-central-1 eu-west-1</code></div></div><br />
HTML raporu tarayıcıda açıp bulguları önem (severity) ve servis bazında filtreleyebilirsiniz. İlk taramada yüzlerce bulgu görmek normaldir; panik yapmayın, önceliklendirin.<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=226" loading="lazy"  alt="[Resim: attachment.php?aid=226]" class="mycode_img" /></div>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Uyumluluk Çerçeveleriyle Tarama</span></span><br />
<br />
Prowler, taramayı bir uyumluluk çerçevesine göre yapabilir. Örneğin CIS AWS Benchmark'a göre:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>prowler aws --compliance cis_3.0_aws</code></div></div><br />
Mevcut çerçeveleri ve kontrolleri listelemek için:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>prowler aws --list-compliance
prowler aws --list-checks
prowler aws --list-services</code></div></div><br />
Uyumluluk modu, denetim raporlarına ve yönetime sunum yaparken özellikle değerlidir; her bulguyu bir çerçeve maddesiyle eşler.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Belirli Servis veya Kontrol Çalıştırma</span></span><br />
<br />
Tüm hesabı taramak yerine tek bir servise odaklanabilirsiniz. Belgelerdeki örneklere göre:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>prowler aws --services s3 ec2
prowler aws --checks s3_bucket_public_access</code></div></div><br />
Belirli kontrolleri hariç tutmak da mümkündür:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>prowler aws --excluded-checks s3_bucket_public_access</code></div></div><br />
Böylece "önce S3'ü düzeltelim" gibi odaklı iyileştirme turları yapabilirsiniz.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Prowler Nasıl Tarar? Kontrol Mantığı</span></span><br />
<br />
Prowler her kontrolü küçük, bağımsız bir modül olarak çalıştırır. Bir kontrol, ilgili AWS API'sini salt okunur biçimde çağırır (örneğin S3 için get-public-access-block, bucket politikası), sonucu beklenen güvenli duruma göre değerlendirir ve PASS/FAIL olarak işaretler. Bu yüzden Prowler hiçbir şeyi değiştirmez; yalnızca mevcut yapılandırmayı okur ve yorumlar. Her bulgu; kontrol kimliği, önem düzeyi, etkilenen kaynak, açıklama ve düzeltme (remediation) önerisiyle birlikte gelir. Bu alanlar HTML raporunda sütun olarak görünür ve JSON-OCSF çıktısında makine tarafından işlenebilir biçimde yer alır, böylece bulguları bir SIEM'e veya tablolama aracına aktarabilirsiniz.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">İleri Seviye: Bulguları Önceliklendirme ve Düzenli Denetim</span></span><br />
<br />
İlk taramadan sonra bir eylem planı çıkarın:<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Önce kritik ve yüksek (critical/high) bulgular:</span> açık bucket, herkese açık güvenlik grubu (0.0.0.0/0), MFA'sız kök hesap, şifresiz veritabanı.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Sonra orta (medium):</span> loglama eksikleri, eski erişim anahtarları.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Düzenli tekrar:</span> Prowler'ı CI/CD veya zamanlanmış bir görev olarak çalıştırıp değişimi izleyin.<br />
</li>
</ul>
<br />
Taramayı tarih damgalı bir dizine kaydedip zamanla karşılaştırmak, duruşunuzun iyileşip iyileşmediğini gösterir:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>prowler aws -M json-ocsf html &#92;
  --output-directory ./denetim-&#36;(date +%F)</code></div></div><br />
<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=227" loading="lazy"  alt="[Resim: attachment.php?aid=227]" class="mycode_img" /></div>
<br />
Not: Çoklu hesap (AWS Organizations) ortamlarında Prowler'ı bir denetim rolüyle tüm hesaplarda çalıştırabilirsiniz; ancak bu, yalnızca bu hesapların sahibi veya yetkili yöneticisiyseniz yapılmalıdır. Prowler'ın yönetilen SaaS sürümü (Prowler Cloud) ve açık kaynak yerel paneli de sürekli izleme için kullanılabilir.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Sonuç</span></span><br />
<br />
Prowler, kendi AWS hesabınızın güvenlik duruşunu ücretsiz ve hızlı biçimde ölçmenin en pratik yollarından biri. Salt okunur bir denetim kullanıcısıyla kurun, varsayılan CSV/JSON/HTML raporlarıyla başlayın, CIS gibi bir çerçeveye göre tarayın ve kritik bulgulardan başlayarak düzenli iyileştirme turları yapın. Siz hangi CSPM aracını kullanıyorsunuz, ilk taramada en çok hangi bulguyla karşılaştınız? Yorumlarda paylaşın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kaynakça</span></span><ul class="mycode_list"><li>Prowler belgeleri, Basic Usage: <a href="https://docs.prowler.com/getting-started/basic-usage/prowler-cli" target="_blank" rel="noopener" class="mycode_url">https://docs.prowler.com/getting-started...rowler-cli</a><br />
</li>
<li>Prowler belgeleri, Installation: <a href="https://docs.prowler.com/getting-started/installation/prowler-cli" target="_blank" rel="noopener" class="mycode_url">https://docs.prowler.com/getting-started...rowler-cli</a><br />
</li>
<li>Prowler belgeleri, Reporting: <a href="https://docs.prowler.com/user-guide/cli/tutorials/reporting" target="_blank" rel="noopener" class="mycode_url">https://docs.prowler.com/user-guide/cli/.../reporting</a><br />
</li>
<li>Prowler belgeleri, Compliance: <a href="https://docs.prowler.com/user-guide/compliance/tutorials/compliance" target="_blank" rel="noopener" class="mycode_url">https://docs.prowler.com/user-guide/comp...compliance</a><br />
</li>
<li>Prowler (PyPI): <a href="https://pypi.org/project/prowler/" target="_blank" rel="noopener" class="mycode_url">https://pypi.org/project/prowler/</a><br />
</li>
<li>AWS CLI, get-caller-identity: <a href="https://docs.aws.amazon.com/cli/latest/reference/sts/get-caller-identity.html" target="_blank" rel="noopener" class="mycode_url">https://docs.aws.amazon.com/cli/latest/r...ntity.html</a><br />
</li>
<li>AWS, SecurityAudit yönetilen politikası: <a href="https://docs.aws.amazon.com/aws-managed-policy/latest/reference/SecurityAudit.html" target="_blank" rel="noopener" class="mycode_url">https://docs.aws.amazon.com/aws-managed-...Audit.html</a><br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yasal Uyarı</span></span><br />
<br />
Bu rehberdeki tarama komutları yalnızca kendi AWS hesabınızda veya yazılı olarak yetkilendirildiğiniz hesaplarda çalıştırılmalıdır. Başkasına ait bulut kaynaklarını izinsiz taramak veya bunlara erişmek 5237 sayılı Türk Ceza Kanunu'nun 243, 244 ve 245. maddeleri kapsamında suçtur. TurkTeam yalnızca savunma ve eğitim amaçlı paylaşımları destekler.<br />
<br />
Görsel: TurkTeam özgün kapak ve diyagramları<br />
<br />
<span style="font-style: italic;" class="mycode_i">Yasal uyarı: Bu içerik eğitim amaçlıdır. Yalnızca kendi sistemlerinizde veya yazılı izin aldığınız hedeflerde uygulayın (TCK 243-245).</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=224" target="_blank" title="">09-cover.png</a> (Dosya Boyutu: 242.22 KB / İndirme Sayısı: 8)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=225" target="_blank" title="">09-a.jpg</a> (Dosya Boyutu: 54.27 KB / İndirme Sayısı: 8)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=226" target="_blank" title="">09-b.jpg</a> (Dosya Boyutu: 61.99 KB / İndirme Sayısı: 8)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=227" target="_blank" title="">09-c.jpg</a> (Dosya Boyutu: 53.15 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=224" loading="lazy"  alt="[Resim: attachment.php?aid=224]" class="mycode_img" /></div>
<br />
Merhaba arkadaşlar,<br />
<br />
Bulut hesabınızda yüzlerce kaynak varsa, "acaba bir yerde açık bir S3 bucket ya da fazla yetkili bir IAM kullanıcısı mı kaldı?" sorusunu elle cevaplamak imkansızdır. İşte bu noktada bulut güvenlik duruşu yönetimi (CSPM) araçları devreye girer. Prowler, AWS başta olmak üzere birçok sağlayıcıyı tarayan, açık kaynak ve ücretsiz bir CSPM aracıdır. Bu rehberde Prowler'ı resmi belgelerine dayanarak kurup kendi AWS hesabınızda nasıl güvenlik denetimi yapacağınızı, raporları nasıl okuyacağınızı ve bulguları nasıl önceliklendireceğinizi anlatıyorum. Tüm komutlar yalnızca kendi hesabınızda veya yazılı izniniz olan hesaplarda çalıştırılmalıdır.<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>CSPM nedir, Prowler ne yapar?<br />
</li>
<li>Kurulum ve kimlik doğrulama<br />
</li>
<li>En az yetkili denetim kullanıcısı<br />
</li>
<li>İlk tarama ve raporlar<br />
</li>
<li>Uyumluluk çerçeveleriyle tarama<br />
</li>
<li>Belirli servis/kontrol çalıştırma<br />
</li>
<li>Bulguları önceliklendirme ve düzenli denetim<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">CSPM Nedir, Prowler Ne Yapar?</span></span><br />
<br />
CSPM araçları, bulut yapılandırmanızı bilinen güvenlik en iyi uygulamaları ve uyumluluk çerçeveleriyle karşılaştırır; yanlış yapılandırmaları (açık bucket, şifresiz disk, MFA'sız kök hesap, aşırı geniş IAM) tespit eder. Prowler, resmi belgelerine göre AWS, Azure, GCP, Kubernetes, Microsoft 365, GitHub ve daha fazlasını destekler. Yüzlerce hazır kontrol ve CIS, NIST gibi uyumluluk çerçeveleriyle gelir.<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=225" loading="lazy"  alt="[Resim: attachment.php?aid=225]" class="mycode_img" /></div>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kurulum ve Kimlik Doğrulama</span></span><br />
<br />
Prowler, Python ile kurulur (resmi belgelere göre Python 3.10-3.13):<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>pip install prowler
prowler -v</code></div></div><br />
Prowler, komut çalıştırıldığında ortam değişkeni veya profil üzerinden AWS kimlik bilgilerini kullanır. Önce AWS CLI ile kimliğinizi doğrulayın:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>aws sts get-caller-identity</code></div></div><br />
Prowler sağlayıcıyı ilk argüman olarak alır (belirtmezseniz geriye dönük uyumluluk için AWS varsayılır):<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>prowler aws
prowler aws --profile kendi-profilim</code></div></div><br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">En Az Yetkili Denetim Kullanıcısı</span></span><br />
<br />
Prowler yalnızca okuma yapar; bu yüzden ona yazma yetkisi vermeyin. AWS'nin yönetilen <span style="font-weight: bold;" class="mycode_b">SecurityAudit</span> ve <span style="font-weight: bold;" class="mycode_b">ViewOnlyAccess</span> politikaları çoğu kontrol için yeterlidir. En az yetki ilkesine uygun olarak Prowler için ayrı bir IAM rolü/kullanıcısı oluşturun ve yalnızca bu salt okunur politikaları bağlayın. Kök hesapla veya AdministratorAccess ile tarama yapmak, gereksiz risktir.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">İlk Tarama ve Raporlar</span></span><br />
<br />
En basit haliyle tüm hesabı tüm bölgelerde tarayın:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>prowler aws</code></div></div><br />
Prowler resmi belgelerine göre varsayılan olarak <span style="font-weight: bold;" class="mycode_b">CSV, JSON-OCSF ve HTML</span> raporları üretir ve bunları output dizinine kaydeder. Çıktı formatını kendiniz de seçebilirsiniz:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>prowler aws -M csv json-ocsf html</code></div></div><br />
Belirli bir profil ve bölgeyle sınırlamak:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>prowler aws --profile kendi-profilim -f eu-central-1 eu-west-1</code></div></div><br />
HTML raporu tarayıcıda açıp bulguları önem (severity) ve servis bazında filtreleyebilirsiniz. İlk taramada yüzlerce bulgu görmek normaldir; panik yapmayın, önceliklendirin.<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=226" loading="lazy"  alt="[Resim: attachment.php?aid=226]" class="mycode_img" /></div>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Uyumluluk Çerçeveleriyle Tarama</span></span><br />
<br />
Prowler, taramayı bir uyumluluk çerçevesine göre yapabilir. Örneğin CIS AWS Benchmark'a göre:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>prowler aws --compliance cis_3.0_aws</code></div></div><br />
Mevcut çerçeveleri ve kontrolleri listelemek için:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>prowler aws --list-compliance
prowler aws --list-checks
prowler aws --list-services</code></div></div><br />
Uyumluluk modu, denetim raporlarına ve yönetime sunum yaparken özellikle değerlidir; her bulguyu bir çerçeve maddesiyle eşler.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Belirli Servis veya Kontrol Çalıştırma</span></span><br />
<br />
Tüm hesabı taramak yerine tek bir servise odaklanabilirsiniz. Belgelerdeki örneklere göre:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>prowler aws --services s3 ec2
prowler aws --checks s3_bucket_public_access</code></div></div><br />
Belirli kontrolleri hariç tutmak da mümkündür:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>prowler aws --excluded-checks s3_bucket_public_access</code></div></div><br />
Böylece "önce S3'ü düzeltelim" gibi odaklı iyileştirme turları yapabilirsiniz.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Prowler Nasıl Tarar? Kontrol Mantığı</span></span><br />
<br />
Prowler her kontrolü küçük, bağımsız bir modül olarak çalıştırır. Bir kontrol, ilgili AWS API'sini salt okunur biçimde çağırır (örneğin S3 için get-public-access-block, bucket politikası), sonucu beklenen güvenli duruma göre değerlendirir ve PASS/FAIL olarak işaretler. Bu yüzden Prowler hiçbir şeyi değiştirmez; yalnızca mevcut yapılandırmayı okur ve yorumlar. Her bulgu; kontrol kimliği, önem düzeyi, etkilenen kaynak, açıklama ve düzeltme (remediation) önerisiyle birlikte gelir. Bu alanlar HTML raporunda sütun olarak görünür ve JSON-OCSF çıktısında makine tarafından işlenebilir biçimde yer alır, böylece bulguları bir SIEM'e veya tablolama aracına aktarabilirsiniz.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">İleri Seviye: Bulguları Önceliklendirme ve Düzenli Denetim</span></span><br />
<br />
İlk taramadan sonra bir eylem planı çıkarın:<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Önce kritik ve yüksek (critical/high) bulgular:</span> açık bucket, herkese açık güvenlik grubu (0.0.0.0/0), MFA'sız kök hesap, şifresiz veritabanı.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Sonra orta (medium):</span> loglama eksikleri, eski erişim anahtarları.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Düzenli tekrar:</span> Prowler'ı CI/CD veya zamanlanmış bir görev olarak çalıştırıp değişimi izleyin.<br />
</li>
</ul>
<br />
Taramayı tarih damgalı bir dizine kaydedip zamanla karşılaştırmak, duruşunuzun iyileşip iyileşmediğini gösterir:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>prowler aws -M json-ocsf html &#92;
  --output-directory ./denetim-&#36;(date +%F)</code></div></div><br />
<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=227" loading="lazy"  alt="[Resim: attachment.php?aid=227]" class="mycode_img" /></div>
<br />
Not: Çoklu hesap (AWS Organizations) ortamlarında Prowler'ı bir denetim rolüyle tüm hesaplarda çalıştırabilirsiniz; ancak bu, yalnızca bu hesapların sahibi veya yetkili yöneticisiyseniz yapılmalıdır. Prowler'ın yönetilen SaaS sürümü (Prowler Cloud) ve açık kaynak yerel paneli de sürekli izleme için kullanılabilir.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Sonuç</span></span><br />
<br />
Prowler, kendi AWS hesabınızın güvenlik duruşunu ücretsiz ve hızlı biçimde ölçmenin en pratik yollarından biri. Salt okunur bir denetim kullanıcısıyla kurun, varsayılan CSV/JSON/HTML raporlarıyla başlayın, CIS gibi bir çerçeveye göre tarayın ve kritik bulgulardan başlayarak düzenli iyileştirme turları yapın. Siz hangi CSPM aracını kullanıyorsunuz, ilk taramada en çok hangi bulguyla karşılaştınız? Yorumlarda paylaşın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kaynakça</span></span><ul class="mycode_list"><li>Prowler belgeleri, Basic Usage: <a href="https://docs.prowler.com/getting-started/basic-usage/prowler-cli" target="_blank" rel="noopener" class="mycode_url">https://docs.prowler.com/getting-started...rowler-cli</a><br />
</li>
<li>Prowler belgeleri, Installation: <a href="https://docs.prowler.com/getting-started/installation/prowler-cli" target="_blank" rel="noopener" class="mycode_url">https://docs.prowler.com/getting-started...rowler-cli</a><br />
</li>
<li>Prowler belgeleri, Reporting: <a href="https://docs.prowler.com/user-guide/cli/tutorials/reporting" target="_blank" rel="noopener" class="mycode_url">https://docs.prowler.com/user-guide/cli/.../reporting</a><br />
</li>
<li>Prowler belgeleri, Compliance: <a href="https://docs.prowler.com/user-guide/compliance/tutorials/compliance" target="_blank" rel="noopener" class="mycode_url">https://docs.prowler.com/user-guide/comp...compliance</a><br />
</li>
<li>Prowler (PyPI): <a href="https://pypi.org/project/prowler/" target="_blank" rel="noopener" class="mycode_url">https://pypi.org/project/prowler/</a><br />
</li>
<li>AWS CLI, get-caller-identity: <a href="https://docs.aws.amazon.com/cli/latest/reference/sts/get-caller-identity.html" target="_blank" rel="noopener" class="mycode_url">https://docs.aws.amazon.com/cli/latest/r...ntity.html</a><br />
</li>
<li>AWS, SecurityAudit yönetilen politikası: <a href="https://docs.aws.amazon.com/aws-managed-policy/latest/reference/SecurityAudit.html" target="_blank" rel="noopener" class="mycode_url">https://docs.aws.amazon.com/aws-managed-...Audit.html</a><br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yasal Uyarı</span></span><br />
<br />
Bu rehberdeki tarama komutları yalnızca kendi AWS hesabınızda veya yazılı olarak yetkilendirildiğiniz hesaplarda çalıştırılmalıdır. Başkasına ait bulut kaynaklarını izinsiz taramak veya bunlara erişmek 5237 sayılı Türk Ceza Kanunu'nun 243, 244 ve 245. maddeleri kapsamında suçtur. TurkTeam yalnızca savunma ve eğitim amaçlı paylaşımları destekler.<br />
<br />
Görsel: TurkTeam özgün kapak ve diyagramları<br />
<br />
<span style="font-style: italic;" class="mycode_i">Yasal uyarı: Bu içerik eğitim amaçlıdır. Yalnızca kendi sistemlerinizde veya yazılı izin aldığınız hedeflerde uygulayın (TCK 243-245).</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=224" target="_blank" title="">09-cover.png</a> (Dosya Boyutu: 242.22 KB / İndirme Sayısı: 8)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=225" target="_blank" title="">09-a.jpg</a> (Dosya Boyutu: 54.27 KB / İndirme Sayısı: 8)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=226" target="_blank" title="">09-b.jpg</a> (Dosya Boyutu: 61.99 KB / İndirme Sayısı: 8)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=227" target="_blank" title="">09-c.jpg</a> (Dosya Boyutu: 53.15 KB / İndirme Sayısı: 8)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Entra ID Güvenliği 2026: Koşullu Erişim, Zorunlu MFA ve PIM ile Kimlik Sertleştirme]]></title>
			<link>https://www.turkteam.org/konu-entra-id-guvenligi-2026-kosullu-erisim-zorunlu-mfa-ve-pim-ile-kimlik-sertlestirme.html</link>
			<pubDate>Sun, 18 Oct 2026 20:09:47 +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-entra-id-guvenligi-2026-kosullu-erisim-zorunlu-mfa-ve-pim-ile-kimlik-sertlestirme.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=216" loading="lazy"  alt="[Resim: attachment.php?aid=216]" class="mycode_img" /></div>
<br />
Merhaba arkadaşlar,<br />
<br />
Bulut saldırılarının büyük kısmı bir açıktan değil, ele geçirilmiş bir kimlikten başlıyor. Microsoft'un kimlik servisi Entra ID (eski adıyla Azure AD) üzerinde doğru yapılandırılmış üç kontrol, saldırı yüzeyinin büyük bölümünü kapatır: Koşullu Erişim (Conditional Access), çok faktörlü kimlik doğrulama (MFA) ve ayrıcalıklı erişim yönetimi (PIM). 2026'da Microsoft Azure için MFA'yı kademeli olarak zorunlu hale getirdi. Bu rehberde bu üç kontrolü resmi Microsoft Learn belgelerine dayanarak savunma gözüyle ele alıyorum. Amaç saldırmak değil, kendi kiracınızı (tenant) güvenli kurmak.<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>Entra ID kimlik güvenliğinin temeli<br />
</li>
<li>2026 zorunlu MFA: ne, ne zaman, kimi kapsıyor?<br />
</li>
<li>Koşullu Erişim nasıl çalışır?<br />
</li>
<li>Örnek politikalar<br />
</li>
<li>PIM ile en az ayrıcalık ve tam zamanında erişim<br />
</li>
<li>İzleme ve doğrulama<br />
</li>
<li>Yaygın hatalar<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Entra ID Kimlik Güvenliğinin Temeli</span></span><br />
<br />
Bulutta "ağ çevresi" yerini "kimlik çevresine" bıraktı. Entra ID'de güvenliğin üç ayağı vardır: güçlü kimlik doğrulama (parola + MFA), bağlama göre erişim kararı (Koşullu Erişim) ve ayrıcalıklı rollerin sürekli değil ihtiyaç anında verilmesi (PIM). Bu üçünü birlikte kurduğunuzda, çalınmış bir parola tek başına işe yaramaz hale gelir.<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=217" loading="lazy"  alt="[Resim: attachment.php?aid=217]" class="mycode_img" /></div>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2026 Zorunlu MFA: Ne, Ne Zaman, Kimi Kapsıyor?</span></span><br />
<br />
Microsoft'un resmi planına göre Azure için zorunlu MFA iki aşamalı devreye girdi. İkinci aşama (Phase 2) <span style="font-weight: bold;" class="mycode_b">1 Ekim 2025</span>'ten itibaren kiracılara kademeli olarak uygulanmaya başladı ve şunları kapsar:<ul class="mycode_list"><li>Azure CLI, Azure PowerShell, SDK'lar, IaC araçları, REST API ve mobil uygulama üzerinden yapılan <span style="font-weight: bold;" class="mycode_b">oluşturma, güncelleme ve silme (CUD)</span> işlemleri.<br />
</li>
<li>Yalnızca okuma (read) işlemleri bu zorunluluğun dışındadır.<br />
</li>
</ul>
En iyi deneyim için Azure CLI 2.76+ ve Azure PowerShell 14.3+ önerilir. <span style="font-weight: bold;" class="mycode_b">Önemli:</span> Kullanıcı kimliğiyle çalışan otomasyonlar bundan etkilenir; bu tür işleri yönetilen kimliklere (managed identity) veya hizmet sorumlularına (service principal) taşıyın, çünkü bunlar kullanıcı MFA zorunluluğuna tabi değildir. Kiracılar bu aşamayı 1 Temmuz 2026'ya kadar erteleyebiliyordu; bu erteleme penceresi kapandı.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Koşullu Erişim Nasıl Çalışır?</span></span><br />
<br />
Microsoft Learn'e göre Koşullu Erişim politikası bir "eğer-ise" (if-then) ifadesidir: belirli sinyaller (kullanıcı, uygulama, cihaz, konum, risk) karşılanırsa belirli erişim kontrolleri (grant/block) uygulanır. Aynı anda birden çok politika uygulanıyorsa hepsi birden sağlanmalıdır (mantıksal AND). Kullanılabilen "grant" (izin) kontrollerinden bazıları:<ul class="mycode_list"><li>Require multifactor authentication (MFA iste)<br />
</li>
<li>Require authentication strength (belirli kimlik doğrulama gücü)<br />
</li>
<li>Require device to be marked as compliant (Intune uyumlu cihaz)<br />
</li>
<li>Require Microsoft Entra hybrid joined device<br />
</li>
<li>Require approved client app / app protection policy<br />
</li>
<li>Require password change / terms of use<br />
</li>
</ul>
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=218" loading="lazy"  alt="[Resim: attachment.php?aid=218]" class="mycode_img" /></div>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Örnek Politikalar</span></span><br />
<br />
Aşağıdaki politikalar kavramsal örneklerdir; kendi test kiracınızda önce "yalnızca rapor" (report-only) modunda deneyin.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1) Yöneticiler için her zaman MFA:</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Atamalar:</span> Hedef kullanıcılar = dizin yönetici rolleri.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Hedef kaynaklar:</span> Tüm bulut uygulamaları.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Erişim kontrolü:</span> Grant -&gt; Require multifactor authentication.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">2) Eski (legacy) kimlik doğrulamayı engelle:</span> Temel kimlik doğrulama (basic auth) MFA'yı atlatır. Koşullu Erişim'de "Other clients / legacy authentication clients" koşulunu seçip Block uygulayın. Bu, kimlik güvenliğinin en etkili tek adımlarından biridir.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3) Riskli oturum açmada MFA (Entra ID Protection gerektirir):</span> Sign-in risk = medium/high olduğunda MFA iste.<br />
<br />
Her politika için <span style="font-weight: bold;" class="mycode_b">report-only</span> modunu kullanarak önce etkisini loglardan izleyin, sonra açın. Yanlışlıkla kendinizi dışarıda bırakmamak için en az bir "acil erişim" (break-glass) hesabını politikaların dışında tutun.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">PIM ile En Az Ayrıcalık ve Tam Zamanında Erişim</span></span><br />
<br />
Privileged Identity Management (PIM), ayrıcalıklı rolleri sürekli atamak yerine "uygun" (eligible) hale getirir; kullanıcı rolü ihtiyaç duyduğunda, süreli olarak etkinleştirir (just-in-time). Microsoft Learn'e göre PIM ile yapılabilecekler:<ul class="mycode_list"><li>Rol etkinleştirmede MFA zorunlu kılma.<br />
</li>
<li>Etkinleştirmede Koşullu Erişim kimlik doğrulama bağlamı (authentication context) isteme.<br />
</li>
<li>Onay (approval) gerektirme ve etkinleştirme gerekçesi (justification) isteme.<br />
</li>
<li>Süreli (time-bound) atama ve etkinleştirme bildirimleri.<br />
</li>
<li>Düzenli erişim incelemeleri (access reviews).<br />
</li>
</ul>
<br />
Belgelere göre önemli bir pratik: Kimlik doğrulama bağlamını PIM ayarına eklemeden <span style="font-weight: bold;" class="mycode_b">önce</span> o bağlamı hedefleyen Koşullu Erişim politikasını oluşturup etkinleştirin. Eğer bağlamı hedefleyen hiçbir politika yoksa, PIM yedek koruma olarak etkinleştirmede MFA'yı zaten zorunlu tutar.<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=219" loading="lazy"  alt="[Resim: attachment.php?aid=219]" class="mycode_img" /></div>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">İzleme ve Doğrulama</span></span><br />
<br />
Yapılandırmayı kurduktan sonra doğrulayın. Microsoft Graph PowerShell ile mevcut Koşullu Erişim politikalarını listeleyebilirsiniz (yalnızca kendi kiracınızda, yetkili hesapla):<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>Connect-MgGraph -Scopes "Policy.Read.All"
Get-MgIdentityConditionalAccessPolicy |
  Select-Object DisplayName, State |
  Format-Table -AutoSize</code></div></div><br />
Oturum açma günlüklerini (sign-in logs) inceleyerek hangi politikanın hangi oturuma uygulandığını görebilir, report-only sonuçlarını buradan okuyabilirsiniz. Düzenli olarak: MFA kaydı olmayan kullanıcıları, kullanılmayan ayrıcalıklı rolleri ve legacy auth denemelerini kontrol edin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">İleri Seviye: Yaygın Hatalar</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Break-glass hesabı unutmak:</span> Tüm hesapları MFA/CA politikasına bağlayıp kilitli kalmak. En az bir acil erişim hesabını istisna tutun ve güçlü biçimde koruyun.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Legacy auth'u açık bırakmak:</span> MFA'yı atlatan en büyük açık budur.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Ayrıcalıkları kalıcı atamak:</span> Global Administrator gibi rolleri sürekli vermek yerine PIM ile eligible yapın.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Otomasyonu kullanıcı hesabıyla çalıştırmak:</span> Zorunlu MFA sonrası bozulur; managed identity/service principal kullanın.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Politikaları test etmeden açmak:</span> Önce report-only.<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Sonuç</span></span><br />
<br />
Entra ID güvenliğinde üçlü sacayağı nettir: her yönetici için MFA, legacy auth'u kapatan ve bağlama göre karar veren Koşullu Erişim, kalıcı ayrıcalık yerine PIM ile tam zamanında erişim. 2026 zorunlu MFA'sını fırsata çevirin: otomasyonlarınızı managed identity'ye taşıyın ve kimlik duruşunuzu sadeleştirin. Siz kiracınızda hangi kontrolü olmazsa olmaz görüyorsunuz? Yorumlarda konuşalım.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kaynakça</span></span><ul class="mycode_list"><li>Microsoft Learn, Plan for mandatory Entra MFA: <a href="https://learn.microsoft.com/en-us/entra/identity/authentication/concept-mandatory-multifactor-authentication" target="_blank" rel="noopener" class="mycode_url">https://learn.microsoft.com/en-us/entra/...entication</a><br />
</li>
<li>Azure Blog, Mandatory MFA Phase 2: <a href="https://azure.microsoft.com/en-us/blog/azure-mandatory-multifactor-authentication-phase-2-starting-in-october-2025/" target="_blank" rel="noopener" class="mycode_url">https://azure.microsoft.com/en-us/blog/a...ober-2025/</a><br />
</li>
<li>Microsoft Learn, Build Conditional Access policies: <a href="https://learn.microsoft.com/en-us/entra/identity/conditional-access/concept-conditional-access-policies" target="_blank" rel="noopener" class="mycode_url">https://learn.microsoft.com/en-us/entra/...s-policies</a><br />
</li>
<li>Microsoft Learn, Configure Entra role settings in PIM: <a href="https://learn.microsoft.com/en-us/entra/id-governance/privileged-identity-management/pim-how-to-change-default-settings" target="_blank" rel="noopener" class="mycode_url">https://learn.microsoft.com/en-us/entra/...t-settings</a><br />
</li>
<li>Microsoft Learn, Plan a PIM deployment: <a href="https://learn.microsoft.com/en-us/entra/id-governance/privileged-identity-management/pim-deployment-plan" target="_blank" rel="noopener" class="mycode_url">https://learn.microsoft.com/en-us/entra/...yment-plan</a><br />
</li>
<li>Microsoft Learn, Get-MgIdentityConditionalAccessPolicy: <a href="https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.identity.signins/get-mgidentityconditionalaccesspolicy" target="_blank" rel="noopener" class="mycode_url">https://learn.microsoft.com/en-us/powers...cesspolicy</a><br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yasal Uyarı</span></span><br />
<br />
Bu rehberdeki tüm yapılandırma ve komutlar yalnızca kendi Entra ID kiracınızda veya yazılı olarak yetkilendirildiğiniz ortamlarda uygulanmalıdır. Başkasına ait kimlik sistemlerine izinsiz erişim 5237 sayılı Türk Ceza Kanunu'nun 243, 244 ve 245. maddeleri kapsamında suçtur. TurkTeam yalnızca savunma ve eğitim amaçlı paylaşımları destekler.<br />
<br />
Görsel: TurkTeam özgün kapak ve diyagramları<br />
<br />
<span style="font-style: italic;" class="mycode_i">Yasal uyarı: Bu içerik eğitim amaçlıdır. Yalnızca kendi sistemlerinizde veya yazılı izin aldığınız hedeflerde uygulayın (TCK 243-245).</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=216" target="_blank" title="">07-cover.png</a> (Dosya Boyutu: 234.16 KB / İndirme Sayısı: 9)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=217" target="_blank" title="">07-a.jpg</a> (Dosya Boyutu: 74.83 KB / İndirme Sayısı: 8)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=218" target="_blank" title="">07-b.jpg</a> (Dosya Boyutu: 57.98 KB / İndirme Sayısı: 9)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=219" target="_blank" title="">07-c.jpg</a> (Dosya Boyutu: 61.55 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=216" loading="lazy"  alt="[Resim: attachment.php?aid=216]" class="mycode_img" /></div>
<br />
Merhaba arkadaşlar,<br />
<br />
Bulut saldırılarının büyük kısmı bir açıktan değil, ele geçirilmiş bir kimlikten başlıyor. Microsoft'un kimlik servisi Entra ID (eski adıyla Azure AD) üzerinde doğru yapılandırılmış üç kontrol, saldırı yüzeyinin büyük bölümünü kapatır: Koşullu Erişim (Conditional Access), çok faktörlü kimlik doğrulama (MFA) ve ayrıcalıklı erişim yönetimi (PIM). 2026'da Microsoft Azure için MFA'yı kademeli olarak zorunlu hale getirdi. Bu rehberde bu üç kontrolü resmi Microsoft Learn belgelerine dayanarak savunma gözüyle ele alıyorum. Amaç saldırmak değil, kendi kiracınızı (tenant) güvenli kurmak.<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>Entra ID kimlik güvenliğinin temeli<br />
</li>
<li>2026 zorunlu MFA: ne, ne zaman, kimi kapsıyor?<br />
</li>
<li>Koşullu Erişim nasıl çalışır?<br />
</li>
<li>Örnek politikalar<br />
</li>
<li>PIM ile en az ayrıcalık ve tam zamanında erişim<br />
</li>
<li>İzleme ve doğrulama<br />
</li>
<li>Yaygın hatalar<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Entra ID Kimlik Güvenliğinin Temeli</span></span><br />
<br />
Bulutta "ağ çevresi" yerini "kimlik çevresine" bıraktı. Entra ID'de güvenliğin üç ayağı vardır: güçlü kimlik doğrulama (parola + MFA), bağlama göre erişim kararı (Koşullu Erişim) ve ayrıcalıklı rollerin sürekli değil ihtiyaç anında verilmesi (PIM). Bu üçünü birlikte kurduğunuzda, çalınmış bir parola tek başına işe yaramaz hale gelir.<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=217" loading="lazy"  alt="[Resim: attachment.php?aid=217]" class="mycode_img" /></div>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2026 Zorunlu MFA: Ne, Ne Zaman, Kimi Kapsıyor?</span></span><br />
<br />
Microsoft'un resmi planına göre Azure için zorunlu MFA iki aşamalı devreye girdi. İkinci aşama (Phase 2) <span style="font-weight: bold;" class="mycode_b">1 Ekim 2025</span>'ten itibaren kiracılara kademeli olarak uygulanmaya başladı ve şunları kapsar:<ul class="mycode_list"><li>Azure CLI, Azure PowerShell, SDK'lar, IaC araçları, REST API ve mobil uygulama üzerinden yapılan <span style="font-weight: bold;" class="mycode_b">oluşturma, güncelleme ve silme (CUD)</span> işlemleri.<br />
</li>
<li>Yalnızca okuma (read) işlemleri bu zorunluluğun dışındadır.<br />
</li>
</ul>
En iyi deneyim için Azure CLI 2.76+ ve Azure PowerShell 14.3+ önerilir. <span style="font-weight: bold;" class="mycode_b">Önemli:</span> Kullanıcı kimliğiyle çalışan otomasyonlar bundan etkilenir; bu tür işleri yönetilen kimliklere (managed identity) veya hizmet sorumlularına (service principal) taşıyın, çünkü bunlar kullanıcı MFA zorunluluğuna tabi değildir. Kiracılar bu aşamayı 1 Temmuz 2026'ya kadar erteleyebiliyordu; bu erteleme penceresi kapandı.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Koşullu Erişim Nasıl Çalışır?</span></span><br />
<br />
Microsoft Learn'e göre Koşullu Erişim politikası bir "eğer-ise" (if-then) ifadesidir: belirli sinyaller (kullanıcı, uygulama, cihaz, konum, risk) karşılanırsa belirli erişim kontrolleri (grant/block) uygulanır. Aynı anda birden çok politika uygulanıyorsa hepsi birden sağlanmalıdır (mantıksal AND). Kullanılabilen "grant" (izin) kontrollerinden bazıları:<ul class="mycode_list"><li>Require multifactor authentication (MFA iste)<br />
</li>
<li>Require authentication strength (belirli kimlik doğrulama gücü)<br />
</li>
<li>Require device to be marked as compliant (Intune uyumlu cihaz)<br />
</li>
<li>Require Microsoft Entra hybrid joined device<br />
</li>
<li>Require approved client app / app protection policy<br />
</li>
<li>Require password change / terms of use<br />
</li>
</ul>
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=218" loading="lazy"  alt="[Resim: attachment.php?aid=218]" class="mycode_img" /></div>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Örnek Politikalar</span></span><br />
<br />
Aşağıdaki politikalar kavramsal örneklerdir; kendi test kiracınızda önce "yalnızca rapor" (report-only) modunda deneyin.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1) Yöneticiler için her zaman MFA:</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Atamalar:</span> Hedef kullanıcılar = dizin yönetici rolleri.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Hedef kaynaklar:</span> Tüm bulut uygulamaları.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Erişim kontrolü:</span> Grant -&gt; Require multifactor authentication.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">2) Eski (legacy) kimlik doğrulamayı engelle:</span> Temel kimlik doğrulama (basic auth) MFA'yı atlatır. Koşullu Erişim'de "Other clients / legacy authentication clients" koşulunu seçip Block uygulayın. Bu, kimlik güvenliğinin en etkili tek adımlarından biridir.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3) Riskli oturum açmada MFA (Entra ID Protection gerektirir):</span> Sign-in risk = medium/high olduğunda MFA iste.<br />
<br />
Her politika için <span style="font-weight: bold;" class="mycode_b">report-only</span> modunu kullanarak önce etkisini loglardan izleyin, sonra açın. Yanlışlıkla kendinizi dışarıda bırakmamak için en az bir "acil erişim" (break-glass) hesabını politikaların dışında tutun.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">PIM ile En Az Ayrıcalık ve Tam Zamanında Erişim</span></span><br />
<br />
Privileged Identity Management (PIM), ayrıcalıklı rolleri sürekli atamak yerine "uygun" (eligible) hale getirir; kullanıcı rolü ihtiyaç duyduğunda, süreli olarak etkinleştirir (just-in-time). Microsoft Learn'e göre PIM ile yapılabilecekler:<ul class="mycode_list"><li>Rol etkinleştirmede MFA zorunlu kılma.<br />
</li>
<li>Etkinleştirmede Koşullu Erişim kimlik doğrulama bağlamı (authentication context) isteme.<br />
</li>
<li>Onay (approval) gerektirme ve etkinleştirme gerekçesi (justification) isteme.<br />
</li>
<li>Süreli (time-bound) atama ve etkinleştirme bildirimleri.<br />
</li>
<li>Düzenli erişim incelemeleri (access reviews).<br />
</li>
</ul>
<br />
Belgelere göre önemli bir pratik: Kimlik doğrulama bağlamını PIM ayarına eklemeden <span style="font-weight: bold;" class="mycode_b">önce</span> o bağlamı hedefleyen Koşullu Erişim politikasını oluşturup etkinleştirin. Eğer bağlamı hedefleyen hiçbir politika yoksa, PIM yedek koruma olarak etkinleştirmede MFA'yı zaten zorunlu tutar.<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=219" loading="lazy"  alt="[Resim: attachment.php?aid=219]" class="mycode_img" /></div>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">İzleme ve Doğrulama</span></span><br />
<br />
Yapılandırmayı kurduktan sonra doğrulayın. Microsoft Graph PowerShell ile mevcut Koşullu Erişim politikalarını listeleyebilirsiniz (yalnızca kendi kiracınızda, yetkili hesapla):<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>Connect-MgGraph -Scopes "Policy.Read.All"
Get-MgIdentityConditionalAccessPolicy |
  Select-Object DisplayName, State |
  Format-Table -AutoSize</code></div></div><br />
Oturum açma günlüklerini (sign-in logs) inceleyerek hangi politikanın hangi oturuma uygulandığını görebilir, report-only sonuçlarını buradan okuyabilirsiniz. Düzenli olarak: MFA kaydı olmayan kullanıcıları, kullanılmayan ayrıcalıklı rolleri ve legacy auth denemelerini kontrol edin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">İleri Seviye: Yaygın Hatalar</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Break-glass hesabı unutmak:</span> Tüm hesapları MFA/CA politikasına bağlayıp kilitli kalmak. En az bir acil erişim hesabını istisna tutun ve güçlü biçimde koruyun.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Legacy auth'u açık bırakmak:</span> MFA'yı atlatan en büyük açık budur.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Ayrıcalıkları kalıcı atamak:</span> Global Administrator gibi rolleri sürekli vermek yerine PIM ile eligible yapın.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Otomasyonu kullanıcı hesabıyla çalıştırmak:</span> Zorunlu MFA sonrası bozulur; managed identity/service principal kullanın.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Politikaları test etmeden açmak:</span> Önce report-only.<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Sonuç</span></span><br />
<br />
Entra ID güvenliğinde üçlü sacayağı nettir: her yönetici için MFA, legacy auth'u kapatan ve bağlama göre karar veren Koşullu Erişim, kalıcı ayrıcalık yerine PIM ile tam zamanında erişim. 2026 zorunlu MFA'sını fırsata çevirin: otomasyonlarınızı managed identity'ye taşıyın ve kimlik duruşunuzu sadeleştirin. Siz kiracınızda hangi kontrolü olmazsa olmaz görüyorsunuz? Yorumlarda konuşalım.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kaynakça</span></span><ul class="mycode_list"><li>Microsoft Learn, Plan for mandatory Entra MFA: <a href="https://learn.microsoft.com/en-us/entra/identity/authentication/concept-mandatory-multifactor-authentication" target="_blank" rel="noopener" class="mycode_url">https://learn.microsoft.com/en-us/entra/...entication</a><br />
</li>
<li>Azure Blog, Mandatory MFA Phase 2: <a href="https://azure.microsoft.com/en-us/blog/azure-mandatory-multifactor-authentication-phase-2-starting-in-october-2025/" target="_blank" rel="noopener" class="mycode_url">https://azure.microsoft.com/en-us/blog/a...ober-2025/</a><br />
</li>
<li>Microsoft Learn, Build Conditional Access policies: <a href="https://learn.microsoft.com/en-us/entra/identity/conditional-access/concept-conditional-access-policies" target="_blank" rel="noopener" class="mycode_url">https://learn.microsoft.com/en-us/entra/...s-policies</a><br />
</li>
<li>Microsoft Learn, Configure Entra role settings in PIM: <a href="https://learn.microsoft.com/en-us/entra/id-governance/privileged-identity-management/pim-how-to-change-default-settings" target="_blank" rel="noopener" class="mycode_url">https://learn.microsoft.com/en-us/entra/...t-settings</a><br />
</li>
<li>Microsoft Learn, Plan a PIM deployment: <a href="https://learn.microsoft.com/en-us/entra/id-governance/privileged-identity-management/pim-deployment-plan" target="_blank" rel="noopener" class="mycode_url">https://learn.microsoft.com/en-us/entra/...yment-plan</a><br />
</li>
<li>Microsoft Learn, Get-MgIdentityConditionalAccessPolicy: <a href="https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.identity.signins/get-mgidentityconditionalaccesspolicy" target="_blank" rel="noopener" class="mycode_url">https://learn.microsoft.com/en-us/powers...cesspolicy</a><br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yasal Uyarı</span></span><br />
<br />
Bu rehberdeki tüm yapılandırma ve komutlar yalnızca kendi Entra ID kiracınızda veya yazılı olarak yetkilendirildiğiniz ortamlarda uygulanmalıdır. Başkasına ait kimlik sistemlerine izinsiz erişim 5237 sayılı Türk Ceza Kanunu'nun 243, 244 ve 245. maddeleri kapsamında suçtur. TurkTeam yalnızca savunma ve eğitim amaçlı paylaşımları destekler.<br />
<br />
Görsel: TurkTeam özgün kapak ve diyagramları<br />
<br />
<span style="font-style: italic;" class="mycode_i">Yasal uyarı: Bu içerik eğitim amaçlıdır. Yalnızca kendi sistemlerinizde veya yazılı izin aldığınız hedeflerde uygulayın (TCK 243-245).</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=216" target="_blank" title="">07-cover.png</a> (Dosya Boyutu: 234.16 KB / İndirme Sayısı: 9)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=217" target="_blank" title="">07-a.jpg</a> (Dosya Boyutu: 74.83 KB / İndirme Sayısı: 8)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=218" target="_blank" title="">07-b.jpg</a> (Dosya Boyutu: 57.98 KB / İndirme Sayısı: 9)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=219" target="_blank" title="">07-c.jpg</a> (Dosya Boyutu: 61.55 KB / İndirme Sayısı: 8)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Kubernetes Güvenliği 2026: RBAC, Pod Security Standards, NetworkPolicy ve kube-bench]]></title>
			<link>https://www.turkteam.org/konu-kubernetes-guvenligi-2026-rbac-pod-security-standards-networkpolicy-ve-kube-bench.html</link>
			<pubDate>Sun, 18 Oct 2026 20:07:32 +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-kubernetes-guvenligi-2026-rbac-pod-security-standards-networkpolicy-ve-kube-bench.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=212" loading="lazy"  alt="[Resim: attachment.php?aid=212]" class="mycode_img" /></div>
<br />
Merhaba arkadaşlar,<br />
<br />
Kubernetes, modern uygulamaların çalıştığı fiili standart haline geldi; ama varsayılan bir küme güvenli değildir. Yanlış yapılandırılmış RBAC, ayrıcalıklı pod'lar ve kısıtlanmamış ağ trafiği, saldırganın bir konteynerden tüm kümeye yayılmasına zemin hazırlar. Bu rehberde Kubernetes güvenliğinin dört temel taşını resmi Kubernetes belgelerine dayanarak savunma gözüyle ele alıyorum: RBAC, Pod Security Standards, NetworkPolicy ve kube-bench ile CIS denetimi. Tüm komutlar kendi test kümenizde (örneğin minikube/kind) çalıştırılmalıdır.<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>Kubernetes saldırı yüzeyi<br />
</li>
<li>RBAC ile en az yetki<br />
</li>
<li>Pod Security Standards ve Admission<br />
</li>
<li>NetworkPolicy ile ağ segmentasyonu<br />
</li>
<li>Secret yönetimi<br />
</li>
<li>kube-bench ile CIS denetimi<br />
</li>
<li>Test lab kurulumu<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kubernetes Saldırı Yüzeyi</span></span><br />
<br />
Bir Kubernetes kümesinde başlıca risk alanları: API sunucusuna aşırı geniş erişim (RBAC), konteyner kaçışına izin veren ayrıcalıklı pod'lar, pod'lar arası sınırsız yatay trafik (lateral movement), açıkta kalan Secret'lar ve güncellenmemiş bileşenler. Savunma, bu alanların her birine bir kontrol koymaktır.<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=213" loading="lazy"  alt="[Resim: attachment.php?aid=213]" class="mycode_img" /></div>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">RBAC ile En Az Yetki</span></span><br />
<br />
Role-Based Access Control (RBAC), kimin hangi kaynak üzerinde ne yapabileceğini belirler. Kubernetes belgelerine göre Role (namespace kapsamlı) veya ClusterRole (küme geneli) ile izinler tanımlanır, RoleBinding/ClusterRoleBinding ile özneye (kullanıcı, grup, ServiceAccount) atanır. Altın kural: geniş "cluster-admin" dağıtmak yerine dar roller verin.<br />
<br />
Yalnızca belirli bir namespace'te pod okuyabilen bir rol örneği:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: uygulama
  name: pod-okuyucu
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "watch"]</code></div></div><br />
Bu rolü bir ServiceAccount'a bağlamak:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: pod-okuyucu-baglama
  namespace: uygulama
subjects:
- kind: ServiceAccount
  name: izleme-sa
  namespace: uygulama
roleRef:
  kind: Role
  name: pod-okuyucu
  apiGroup: rbac.authorization.k8s.io</code></div></div><br />
Kendi yetkinizi kontrol etmek için kubectl'in yerleşik aracı:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>kubectl auth can-i create deployments --namespace uygulama
kubectl auth can-i '*' '*' --all-namespaces</code></div></div><br />
İkinci komut "yes" dönüyorsa fazla yetkiniz var demektir; bunu daraltın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Pod Security Standards ve Admission</span></span><br />
<br />
Kubernetes, PodSecurityPolicy'yi kaldırdı ve yerine yerleşik <span style="font-weight: bold;" class="mycode_b">Pod Security Admission</span> denetleyicisini getirdi. Üç profil vardır: privileged (kısıtsız), baseline (bilinen ayrıcalık yükseltmelerini engeller) ve restricted (sıkı en iyi uygulamalar). Belgelerine göre profiller namespace etiketleriyle uygulanır. "restricted" profili zorunlu kılan etiketleme:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>kubectl label namespace uygulama &#92;
  pod-security.kubernetes.io/enforce=restricted &#92;
  pod-security.kubernetes.io/enforce-version=v1.37</code></div></div><br />
enforce dışında audit ve warn modları da vardır; önce warn/audit ile etkisini görmek iyi bir yaklaşımdır:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>kubectl label namespace uygulama &#92;
  pod-security.kubernetes.io/warn=restricted &#92;
  pod-security.kubernetes.io/audit=restricted --overwrite</code></div></div><br />
<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=214" loading="lazy"  alt="[Resim: attachment.php?aid=214]" class="mycode_img" /></div>
<br />
Pod tanımında da sertleştirme yapın: ayrıcalıklı çalıştırmayın, kök olmayan kullanıcı kullanın, salt okunur kök dosya sistemi tercih edin:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>securityContext:
  runAsNonRoot: true
  allowPrivilegeEscalation: false
  readOnlyRootFilesystem: true
  capabilities:
    drop: ["ALL"]</code></div></div><br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">NetworkPolicy ile Ağ Segmentasyonu</span></span><br />
<br />
Varsayılan olarak bir kümedeki tüm pod'lar birbiriyle serbestçe konuşabilir. NetworkPolicy ile bunu kısıtlarsınız (CNI eklentinizin NetworkPolicy desteklemesi gerekir). Önce namespace'te tüm gelen trafiği varsayılan olarak reddeden bir politika:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: varsayilan-ingress-reddet
  namespace: uygulama
spec:
  podSelector: {}
  policyTypes:
  - Ingress</code></div></div><br />
Boş podSelector tüm pod'ları seçer; ingress kuralı tanımlanmadığı için hiçbir gelen trafiğe izin verilmez. Sonra yalnızca gereken trafiği açarsınız (örneğin frontend'den backend'e). Bu "önce hepsini kapat, sonra gerekeni aç" yaklaşımı sıfır güven (zero trust) ağ modelinin temelidir.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Secret Yönetimi</span></span><br />
<br />
Kubernetes Secret'ları varsayılan olarak yalnızca base64 ile kodlanır, <span style="font-weight: bold;" class="mycode_b">şifrelenmez</span>. Belgelere göre etcd'de bekleyen veri şifrelemesini (encryption at rest) etkinleştirmek ve Secret'lara RBAC ile erişimi kısıtlamak gerekir. Secret'ları asla git deposuna düz metin olarak koymayın; dışarıdan bir gizli bilgi yöneticisi (ör. harici KMS) ile entegrasyon tercih edin. Bir Secret'ı kimlerin okuyabildiğini RBAC ile sınırlayın; "get secrets" iznini herkese vermeyin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">kube-bench ile CIS Denetimi</span></span><br />
<br />
Aqua Security'nin açık kaynak aracı kube-bench, kümeyi CIS Kubernetes Benchmark'a göre denetler. Resmi belgelere göre küme içinde bir Job olarak çalıştırılır:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>kubectl apply -f job.yaml
kubectl get pods
# kube-bench-xxxxx Completed olduğunda:
kubectl logs kube-bench-xxxxx</code></div></div><br />
Belgelerde belirtildiği gibi Job hostPID ve host yolu bağlamaları kullanır; kontrol düzlemi düğümünde çalışması için gerekirse nodeSelector ve toleration ekleyin. Çıktı [PASS]/[FAIL]/[WARN] olarak gelir; FAIL maddelerini önceliklendirin.<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=215" loading="lazy"  alt="[Resim: attachment.php?aid=215]" class="mycode_img" /></div>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">İleri Seviye: Test Lab Kurulumu</span></span><br />
<br />
Üretim kümesinde deneme yapmayın. Kendi bilgisayarınızda bir test kümesi kurun:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># minikube ile
minikube start --kubernetes-version=stable
kubectl create namespace uygulama
kubectl label namespace uygulama pod-security.kubernetes.io/warn=restricted
# ihlal eden bir pod deneyin, uyariyi gorun
kubectl run test --image=nginx -n uygulama</code></div></div><br />
Bu lab'da RBAC rollerini, PSA profillerini ve NetworkPolicy'leri güvenle deneyip davranışı gözlemleyebilirsiniz. Ardından bir zafiyet tarayıcısıyla (örneğin imajlar için Trivy) konteyner imajlarınızı da tarayın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Sonuç</span></span><br />
<br />
Kubernetes güvenliğinde dört temel: RBAC ile en az yetki, Pod Security Admission ile restricted profil, NetworkPolicy ile "önce kapat sonra aç" segmentasyon ve kube-bench ile düzenli CIS denetimi. Bunları bir test kümesinde deneyip sonra üretime taşıyın. Siz kümelerinizde hangi kontrolü ilk uyguluyorsunuz? Yorumlarda paylaşın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kaynakça</span></span><ul class="mycode_list"><li>Kubernetes, Using RBAC Authorization: <a href="https://kubernetes.io/docs/reference/access-authn-authz/rbac/" target="_blank" rel="noopener" class="mycode_url">https://kubernetes.io/docs/reference/acc...uthz/rbac/</a><br />
</li>
<li>Kubernetes, Pod Security Admission: <a href="https://kubernetes.io/docs/concepts/security/pod-security-admission/" target="_blank" rel="noopener" class="mycode_url">https://kubernetes.io/docs/concepts/secu...admission/</a><br />
</li>
<li>Kubernetes, Enforce Pod Security Standards with Namespace Labels: <a href="https://kubernetes.io/docs/tasks/configure-pod-container/enforce-standards-namespace-labels/" target="_blank" rel="noopener" class="mycode_url">https://kubernetes.io/docs/tasks/configu...ce-labels/</a><br />
</li>
<li>Kubernetes, Network Policies: <a href="https://kubernetes.io/docs/concepts/services-networking/network-policies/" target="_blank" rel="noopener" class="mycode_url">https://kubernetes.io/docs/concepts/serv...-policies/</a><br />
</li>
<li>Kubernetes, Encrypting Confidential Data at Rest: <a href="https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/" target="_blank" rel="noopener" class="mycode_url">https://kubernetes.io/docs/tasks/adminis...rypt-data/</a><br />
</li>
<li>Kubernetes, Authorization (kubectl auth can-i): <a href="https://kubernetes.io/docs/reference/access-authn-authz/authorization/" target="_blank" rel="noopener" class="mycode_url">https://kubernetes.io/docs/reference/acc...orization/</a><br />
</li>
<li>Aqua Security, kube-bench: <a href="https://aquasecurity.github.io/kube-bench/" target="_blank" rel="noopener" class="mycode_url">https://aquasecurity.github.io/kube-bench/</a><br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yasal Uyarı</span></span><br />
<br />
Bu rehberdeki tüm komutlar yalnızca kendi test kümenizde veya yazılı olarak yetkilendirildiğiniz ortamlarda çalıştırılmalıdır. Başkasına ait Kubernetes kümelerine izinsiz erişim veya denetim 5237 sayılı Türk Ceza Kanunu'nun 243, 244 ve 245. maddeleri kapsamında suçtur. TurkTeam yalnızca savunma ve eğitim amaçlı paylaşımları destekler.<br />
<br />
Görsel: TurkTeam özgün kapak ve diyagramları<br />
<br />
<span style="font-style: italic;" class="mycode_i">Yasal uyarı: Bu içerik eğitim amaçlıdır. Yalnızca kendi sistemlerinizde veya yazılı izin aldığınız hedeflerde uygulayın (TCK 243-245).</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=212" target="_blank" title="">08-cover.png</a> (Dosya Boyutu: 257.02 KB / İndirme Sayısı: 10)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=213" target="_blank" title="">08-a.jpg</a> (Dosya Boyutu: 112.32 KB / İndirme Sayısı: 8)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=214" target="_blank" title="">08-b.jpg</a> (Dosya Boyutu: 60.54 KB / İndirme Sayısı: 10)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=215" target="_blank" title="">08-c.jpg</a> (Dosya Boyutu: 69.96 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=212" loading="lazy"  alt="[Resim: attachment.php?aid=212]" class="mycode_img" /></div>
<br />
Merhaba arkadaşlar,<br />
<br />
Kubernetes, modern uygulamaların çalıştığı fiili standart haline geldi; ama varsayılan bir küme güvenli değildir. Yanlış yapılandırılmış RBAC, ayrıcalıklı pod'lar ve kısıtlanmamış ağ trafiği, saldırganın bir konteynerden tüm kümeye yayılmasına zemin hazırlar. Bu rehberde Kubernetes güvenliğinin dört temel taşını resmi Kubernetes belgelerine dayanarak savunma gözüyle ele alıyorum: RBAC, Pod Security Standards, NetworkPolicy ve kube-bench ile CIS denetimi. Tüm komutlar kendi test kümenizde (örneğin minikube/kind) çalıştırılmalıdır.<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>Kubernetes saldırı yüzeyi<br />
</li>
<li>RBAC ile en az yetki<br />
</li>
<li>Pod Security Standards ve Admission<br />
</li>
<li>NetworkPolicy ile ağ segmentasyonu<br />
</li>
<li>Secret yönetimi<br />
</li>
<li>kube-bench ile CIS denetimi<br />
</li>
<li>Test lab kurulumu<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kubernetes Saldırı Yüzeyi</span></span><br />
<br />
Bir Kubernetes kümesinde başlıca risk alanları: API sunucusuna aşırı geniş erişim (RBAC), konteyner kaçışına izin veren ayrıcalıklı pod'lar, pod'lar arası sınırsız yatay trafik (lateral movement), açıkta kalan Secret'lar ve güncellenmemiş bileşenler. Savunma, bu alanların her birine bir kontrol koymaktır.<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=213" loading="lazy"  alt="[Resim: attachment.php?aid=213]" class="mycode_img" /></div>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">RBAC ile En Az Yetki</span></span><br />
<br />
Role-Based Access Control (RBAC), kimin hangi kaynak üzerinde ne yapabileceğini belirler. Kubernetes belgelerine göre Role (namespace kapsamlı) veya ClusterRole (küme geneli) ile izinler tanımlanır, RoleBinding/ClusterRoleBinding ile özneye (kullanıcı, grup, ServiceAccount) atanır. Altın kural: geniş "cluster-admin" dağıtmak yerine dar roller verin.<br />
<br />
Yalnızca belirli bir namespace'te pod okuyabilen bir rol örneği:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: uygulama
  name: pod-okuyucu
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "watch"]</code></div></div><br />
Bu rolü bir ServiceAccount'a bağlamak:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: pod-okuyucu-baglama
  namespace: uygulama
subjects:
- kind: ServiceAccount
  name: izleme-sa
  namespace: uygulama
roleRef:
  kind: Role
  name: pod-okuyucu
  apiGroup: rbac.authorization.k8s.io</code></div></div><br />
Kendi yetkinizi kontrol etmek için kubectl'in yerleşik aracı:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>kubectl auth can-i create deployments --namespace uygulama
kubectl auth can-i '*' '*' --all-namespaces</code></div></div><br />
İkinci komut "yes" dönüyorsa fazla yetkiniz var demektir; bunu daraltın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Pod Security Standards ve Admission</span></span><br />
<br />
Kubernetes, PodSecurityPolicy'yi kaldırdı ve yerine yerleşik <span style="font-weight: bold;" class="mycode_b">Pod Security Admission</span> denetleyicisini getirdi. Üç profil vardır: privileged (kısıtsız), baseline (bilinen ayrıcalık yükseltmelerini engeller) ve restricted (sıkı en iyi uygulamalar). Belgelerine göre profiller namespace etiketleriyle uygulanır. "restricted" profili zorunlu kılan etiketleme:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>kubectl label namespace uygulama &#92;
  pod-security.kubernetes.io/enforce=restricted &#92;
  pod-security.kubernetes.io/enforce-version=v1.37</code></div></div><br />
enforce dışında audit ve warn modları da vardır; önce warn/audit ile etkisini görmek iyi bir yaklaşımdır:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>kubectl label namespace uygulama &#92;
  pod-security.kubernetes.io/warn=restricted &#92;
  pod-security.kubernetes.io/audit=restricted --overwrite</code></div></div><br />
<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=214" loading="lazy"  alt="[Resim: attachment.php?aid=214]" class="mycode_img" /></div>
<br />
Pod tanımında da sertleştirme yapın: ayrıcalıklı çalıştırmayın, kök olmayan kullanıcı kullanın, salt okunur kök dosya sistemi tercih edin:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>securityContext:
  runAsNonRoot: true
  allowPrivilegeEscalation: false
  readOnlyRootFilesystem: true
  capabilities:
    drop: ["ALL"]</code></div></div><br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">NetworkPolicy ile Ağ Segmentasyonu</span></span><br />
<br />
Varsayılan olarak bir kümedeki tüm pod'lar birbiriyle serbestçe konuşabilir. NetworkPolicy ile bunu kısıtlarsınız (CNI eklentinizin NetworkPolicy desteklemesi gerekir). Önce namespace'te tüm gelen trafiği varsayılan olarak reddeden bir politika:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: varsayilan-ingress-reddet
  namespace: uygulama
spec:
  podSelector: {}
  policyTypes:
  - Ingress</code></div></div><br />
Boş podSelector tüm pod'ları seçer; ingress kuralı tanımlanmadığı için hiçbir gelen trafiğe izin verilmez. Sonra yalnızca gereken trafiği açarsınız (örneğin frontend'den backend'e). Bu "önce hepsini kapat, sonra gerekeni aç" yaklaşımı sıfır güven (zero trust) ağ modelinin temelidir.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Secret Yönetimi</span></span><br />
<br />
Kubernetes Secret'ları varsayılan olarak yalnızca base64 ile kodlanır, <span style="font-weight: bold;" class="mycode_b">şifrelenmez</span>. Belgelere göre etcd'de bekleyen veri şifrelemesini (encryption at rest) etkinleştirmek ve Secret'lara RBAC ile erişimi kısıtlamak gerekir. Secret'ları asla git deposuna düz metin olarak koymayın; dışarıdan bir gizli bilgi yöneticisi (ör. harici KMS) ile entegrasyon tercih edin. Bir Secret'ı kimlerin okuyabildiğini RBAC ile sınırlayın; "get secrets" iznini herkese vermeyin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">kube-bench ile CIS Denetimi</span></span><br />
<br />
Aqua Security'nin açık kaynak aracı kube-bench, kümeyi CIS Kubernetes Benchmark'a göre denetler. Resmi belgelere göre küme içinde bir Job olarak çalıştırılır:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>kubectl apply -f job.yaml
kubectl get pods
# kube-bench-xxxxx Completed olduğunda:
kubectl logs kube-bench-xxxxx</code></div></div><br />
Belgelerde belirtildiği gibi Job hostPID ve host yolu bağlamaları kullanır; kontrol düzlemi düğümünde çalışması için gerekirse nodeSelector ve toleration ekleyin. Çıktı [PASS]/[FAIL]/[WARN] olarak gelir; FAIL maddelerini önceliklendirin.<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=215" loading="lazy"  alt="[Resim: attachment.php?aid=215]" class="mycode_img" /></div>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">İleri Seviye: Test Lab Kurulumu</span></span><br />
<br />
Üretim kümesinde deneme yapmayın. Kendi bilgisayarınızda bir test kümesi kurun:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># minikube ile
minikube start --kubernetes-version=stable
kubectl create namespace uygulama
kubectl label namespace uygulama pod-security.kubernetes.io/warn=restricted
# ihlal eden bir pod deneyin, uyariyi gorun
kubectl run test --image=nginx -n uygulama</code></div></div><br />
Bu lab'da RBAC rollerini, PSA profillerini ve NetworkPolicy'leri güvenle deneyip davranışı gözlemleyebilirsiniz. Ardından bir zafiyet tarayıcısıyla (örneğin imajlar için Trivy) konteyner imajlarınızı da tarayın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Sonuç</span></span><br />
<br />
Kubernetes güvenliğinde dört temel: RBAC ile en az yetki, Pod Security Admission ile restricted profil, NetworkPolicy ile "önce kapat sonra aç" segmentasyon ve kube-bench ile düzenli CIS denetimi. Bunları bir test kümesinde deneyip sonra üretime taşıyın. Siz kümelerinizde hangi kontrolü ilk uyguluyorsunuz? Yorumlarda paylaşın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kaynakça</span></span><ul class="mycode_list"><li>Kubernetes, Using RBAC Authorization: <a href="https://kubernetes.io/docs/reference/access-authn-authz/rbac/" target="_blank" rel="noopener" class="mycode_url">https://kubernetes.io/docs/reference/acc...uthz/rbac/</a><br />
</li>
<li>Kubernetes, Pod Security Admission: <a href="https://kubernetes.io/docs/concepts/security/pod-security-admission/" target="_blank" rel="noopener" class="mycode_url">https://kubernetes.io/docs/concepts/secu...admission/</a><br />
</li>
<li>Kubernetes, Enforce Pod Security Standards with Namespace Labels: <a href="https://kubernetes.io/docs/tasks/configure-pod-container/enforce-standards-namespace-labels/" target="_blank" rel="noopener" class="mycode_url">https://kubernetes.io/docs/tasks/configu...ce-labels/</a><br />
</li>
<li>Kubernetes, Network Policies: <a href="https://kubernetes.io/docs/concepts/services-networking/network-policies/" target="_blank" rel="noopener" class="mycode_url">https://kubernetes.io/docs/concepts/serv...-policies/</a><br />
</li>
<li>Kubernetes, Encrypting Confidential Data at Rest: <a href="https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/" target="_blank" rel="noopener" class="mycode_url">https://kubernetes.io/docs/tasks/adminis...rypt-data/</a><br />
</li>
<li>Kubernetes, Authorization (kubectl auth can-i): <a href="https://kubernetes.io/docs/reference/access-authn-authz/authorization/" target="_blank" rel="noopener" class="mycode_url">https://kubernetes.io/docs/reference/acc...orization/</a><br />
</li>
<li>Aqua Security, kube-bench: <a href="https://aquasecurity.github.io/kube-bench/" target="_blank" rel="noopener" class="mycode_url">https://aquasecurity.github.io/kube-bench/</a><br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yasal Uyarı</span></span><br />
<br />
Bu rehberdeki tüm komutlar yalnızca kendi test kümenizde veya yazılı olarak yetkilendirildiğiniz ortamlarda çalıştırılmalıdır. Başkasına ait Kubernetes kümelerine izinsiz erişim veya denetim 5237 sayılı Türk Ceza Kanunu'nun 243, 244 ve 245. maddeleri kapsamında suçtur. TurkTeam yalnızca savunma ve eğitim amaçlı paylaşımları destekler.<br />
<br />
Görsel: TurkTeam özgün kapak ve diyagramları<br />
<br />
<span style="font-style: italic;" class="mycode_i">Yasal uyarı: Bu içerik eğitim amaçlıdır. Yalnızca kendi sistemlerinizde veya yazılı izin aldığınız hedeflerde uygulayın (TCK 243-245).</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=212" target="_blank" title="">08-cover.png</a> (Dosya Boyutu: 257.02 KB / İndirme Sayısı: 10)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=213" target="_blank" title="">08-a.jpg</a> (Dosya Boyutu: 112.32 KB / İndirme Sayısı: 8)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=214" target="_blank" title="">08-b.jpg</a> (Dosya Boyutu: 60.54 KB / İndirme Sayısı: 10)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=215" target="_blank" title="">08-c.jpg</a> (Dosya Boyutu: 69.96 KB / İndirme Sayısı: 9)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[ConnectWise Cloud Backup OAuth Uygulaması Ele Geçirildi: 173 Microsoft 365 Kiracısı]]></title>
			<link>https://www.turkteam.org/konu-connectwise-cloud-backup-oauth-uygulamasi-ele-gecirildi-173-microsoft-365-kiracisi.html</link>
			<pubDate>Sat, 17 Oct 2026 16:14:31 +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-connectwise-cloud-backup-oauth-uygulamasi-ele-gecirildi-173-microsoft-365-kiracisi.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=123" loading="lazy"  alt="[Resim: attachment.php?aid=123]" class="mycode_img" /></div>
<br />
Selamlar,<br />
<br />
Bu sabah düşen haber, özellikle MSP (yönetilen hizmet sağlayıcı) ile çalışan ya da Microsoft 365 tenant'ı yöneten herkesi ilgilendiriyor. Saldırganlar, ConnectWise Cloud Backup (eski adıyla SkyKick) uygulamasına ait bir kimlik bilgisini ele geçirip bu uygulamanın kurulu olduğu müşteri tenant'larına giriş yaptı. Huntress'in açıklamasına göre doğrulanmış yetkisiz giriş sayısı <span style="font-weight: bold;" class="mycode_b">173 tenant</span>.<br />
<br />
Bu olay, "kullanıcı parolası çalındı" türünden bir olay değil. Burada çalınan şey bir <span style="font-weight: bold;" class="mycode_b">uygulama kimliği</span>. Ve bu fark, savunma tarafında yapılacak her şeyi değiştiriyor.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ne oldu?</span></span><ul class="mycode_list"><li>ConnectWise Cloud Backup, MSP'lerin müşteri M365 verilerini yedeklemesi için kullanılan bir servis. Görevini yapabilmek için posta kutularına, OneDrive, SharePoint, Teams ve dizin verilerine geniş izinle erişiyor.<br />
</li>
<li>Huntress'e göre saldırgan, 15 Ekim 2026'da 06:13-08:34 UTC arasında (Türkiye saatiyle 09:13-11:34) 144.172.64[.]128 adresinden müşteri tenant'larında Microsoft Graph token'ı aldı.<br />
</li>
<li>Saldırgan tenant'ları GUID sırasına göre, birkaç saniye arayla dolaştı. Araştırmacılar bunun bir hedef listesiyle çalışan bir script olduğunu düşünüyor.<br />
</li>
<li>Aynı IP'nin 13-14 Ekim'de dört hukuk bürosu tenant'ına parola püskürtme (password spraying) denediği, ancak başarılı kullanıcı girişi görülmediği belirtildi.<br />
</li>
<li>En az bir tenant'ta ConnectWise'ın Teams için olan başka bir uygulamasının kendini Global Administrator rolüne eklediği ve iki başka güvenilir uygulamaya yeni client secret eklediği gözlendi.<br />
</li>
</ul>
<br />
ConnectWise, Cloud Backup uygulama erişimini ikinci bir duyuruya kadar kapattığını ve yedek verilerin ele geçirildiğine dair kanıt bulmadığını açıkladı. Microsoft da olayı "aktif tedarik zinciri saldırısı" olarak nitelendirdi.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Neden kullanıcı oturumlarını kapatmak yetmiyor?</span></span><br />
Todyl'in tespit mühendisliği ekibinin vurguladığı nokta çok önemli: kullanıcı oturumlarını iptal etmek bu erişimi sonlandırmıyor. Çünkü saldırgan bir kullanıcı olarak değil, servis sorumlusu (service principal) olarak giriş yapıyor. Uygulamayı tenant'ta devre dışı bırakmak yeni token alınmasını engelliyor, ancak önceden verilmiş token'lar 90 dakikaya kadar geçerli kalabiliyor.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Hemen yapılacaklar (kontrol listesi)</span></span><br />
<ol type="1" class="mycode_list"><li>Entra yönetim merkezinde <span style="font-weight: bold;" class="mycode_b">Monitoring &gt; Sign-in logs &gt; Service principal sign-ins</span> sekmesine gidin. Varsayılan "User sign-ins" sekmesi bu kayıtları göstermez.<br />
</li>
<li>Application ID <span style="font-weight: bold;" class="mycode_b">506e08f9-6e9a-4da4-942b-a099a03644ae</span> ile filtreleyin.<br />
</li>
<li>IP sütununda Microsoft/Azure dışından gelen girişlere, özellikle 144.172.64[.]128 adresine bakın.<br />
</li>
<li>ConnectWise kimlik bilgilerini yenilediğini teyit edene kadar uygulamayı devre dışı bırakın.<br />
</li>
<li>13 Ekim 2026'dan bu yana herhangi bir uygulamaya eklenen yeni secret/sertifikaları denetleyin.<br />
</li>
<li>Audit loglarında ConnectWise veya SkyKick uygulamalarının kendilerini bir dizin rolüne eklemesini arayın.<br />
</li>
<li>Microsoft Graph activity log'larını etkinleştirin (açık değilse bundan sonraki olaylar için).<br />
</li>
</ol>
<br />
PowerShell ile servis sorumlusunu hızlıca bulmak için (Microsoft Graph PowerShell modülü):<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>Connect-MgGraph -Scopes "Application.Read.All","AuditLog.Read.All"
Get-MgServicePrincipal -Filter "appId eq '506e08f9-6e9a-4da4-942b-a099a03644ae'" |
  Select-Object DisplayName, Id, AccountEnabled

# Uygulamaya eklenmis kimlik bilgilerini listelemek icin
Get-MgServicePrincipal -All | ForEach-Object {
  [pscustomobject]@{ Ad=&#36;_.DisplayName; Secret=&#36;_.PasswordCredentials.Count; Sertifika=&#36;_.KeyCredentials.Count }
} | Where-Object { &#36;_.Secret -gt 0 } | Sort-Object Ad</code></div></div><br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Çıkarılacak ders: Uygulama izinleri de bir saldırı yüzeyidir</span></span><br />
Çoğu kurumda "Enterprise Applications" listesine son ne zaman bakıldığını kimse hatırlamaz. Bir kez onay verilmiş bir uygulama, yıllarca Directory.ReadWrite.All gibi çok güçlü izinlerle oturur. Bu olay bize şunu söylüyor:<ul class="mycode_list"><li>Her üçüncü taraf uygulama için bir sahip belirleyin.<br />
</li>
<li>Gerçekten gerekmeyen yüksek izinleri kaldırın.<br />
</li>
<li>Servis sorumlusu girişlerini SIEM'e alın ve bilinmeyen IP'lerden gelenlere alarm kurun.<br />
</li>
<li>Kullanıcıların uygulamalara kendi başına onay vermesini (user consent) kısıtlayın.<br />
</li>
</ul>
<br />
Hikaye hâlâ gelişiyor; yeni bilgi geldikçe bu konuyu güncelleyeceğim.<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>The Hacker News - "Hackers Use Compromised ConnectWise Credential to Sign In to 173 Microsoft 365 Tenants" (17 Ekim 2026)<br />
</li>
<li>Huntress, Todyl ve Microsoft açıklamaları (haber içinde aktarıldığı şekliyle)<br />
</li>
<li>ConnectWise güvenlik duyurusu<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=123" target="_blank" title="">002-connectwise.png</a> (Dosya Boyutu: 81.45 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=123" loading="lazy"  alt="[Resim: attachment.php?aid=123]" class="mycode_img" /></div>
<br />
Selamlar,<br />
<br />
Bu sabah düşen haber, özellikle MSP (yönetilen hizmet sağlayıcı) ile çalışan ya da Microsoft 365 tenant'ı yöneten herkesi ilgilendiriyor. Saldırganlar, ConnectWise Cloud Backup (eski adıyla SkyKick) uygulamasına ait bir kimlik bilgisini ele geçirip bu uygulamanın kurulu olduğu müşteri tenant'larına giriş yaptı. Huntress'in açıklamasına göre doğrulanmış yetkisiz giriş sayısı <span style="font-weight: bold;" class="mycode_b">173 tenant</span>.<br />
<br />
Bu olay, "kullanıcı parolası çalındı" türünden bir olay değil. Burada çalınan şey bir <span style="font-weight: bold;" class="mycode_b">uygulama kimliği</span>. Ve bu fark, savunma tarafında yapılacak her şeyi değiştiriyor.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ne oldu?</span></span><ul class="mycode_list"><li>ConnectWise Cloud Backup, MSP'lerin müşteri M365 verilerini yedeklemesi için kullanılan bir servis. Görevini yapabilmek için posta kutularına, OneDrive, SharePoint, Teams ve dizin verilerine geniş izinle erişiyor.<br />
</li>
<li>Huntress'e göre saldırgan, 15 Ekim 2026'da 06:13-08:34 UTC arasında (Türkiye saatiyle 09:13-11:34) 144.172.64[.]128 adresinden müşteri tenant'larında Microsoft Graph token'ı aldı.<br />
</li>
<li>Saldırgan tenant'ları GUID sırasına göre, birkaç saniye arayla dolaştı. Araştırmacılar bunun bir hedef listesiyle çalışan bir script olduğunu düşünüyor.<br />
</li>
<li>Aynı IP'nin 13-14 Ekim'de dört hukuk bürosu tenant'ına parola püskürtme (password spraying) denediği, ancak başarılı kullanıcı girişi görülmediği belirtildi.<br />
</li>
<li>En az bir tenant'ta ConnectWise'ın Teams için olan başka bir uygulamasının kendini Global Administrator rolüne eklediği ve iki başka güvenilir uygulamaya yeni client secret eklediği gözlendi.<br />
</li>
</ul>
<br />
ConnectWise, Cloud Backup uygulama erişimini ikinci bir duyuruya kadar kapattığını ve yedek verilerin ele geçirildiğine dair kanıt bulmadığını açıkladı. Microsoft da olayı "aktif tedarik zinciri saldırısı" olarak nitelendirdi.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Neden kullanıcı oturumlarını kapatmak yetmiyor?</span></span><br />
Todyl'in tespit mühendisliği ekibinin vurguladığı nokta çok önemli: kullanıcı oturumlarını iptal etmek bu erişimi sonlandırmıyor. Çünkü saldırgan bir kullanıcı olarak değil, servis sorumlusu (service principal) olarak giriş yapıyor. Uygulamayı tenant'ta devre dışı bırakmak yeni token alınmasını engelliyor, ancak önceden verilmiş token'lar 90 dakikaya kadar geçerli kalabiliyor.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Hemen yapılacaklar (kontrol listesi)</span></span><br />
<ol type="1" class="mycode_list"><li>Entra yönetim merkezinde <span style="font-weight: bold;" class="mycode_b">Monitoring &gt; Sign-in logs &gt; Service principal sign-ins</span> sekmesine gidin. Varsayılan "User sign-ins" sekmesi bu kayıtları göstermez.<br />
</li>
<li>Application ID <span style="font-weight: bold;" class="mycode_b">506e08f9-6e9a-4da4-942b-a099a03644ae</span> ile filtreleyin.<br />
</li>
<li>IP sütununda Microsoft/Azure dışından gelen girişlere, özellikle 144.172.64[.]128 adresine bakın.<br />
</li>
<li>ConnectWise kimlik bilgilerini yenilediğini teyit edene kadar uygulamayı devre dışı bırakın.<br />
</li>
<li>13 Ekim 2026'dan bu yana herhangi bir uygulamaya eklenen yeni secret/sertifikaları denetleyin.<br />
</li>
<li>Audit loglarında ConnectWise veya SkyKick uygulamalarının kendilerini bir dizin rolüne eklemesini arayın.<br />
</li>
<li>Microsoft Graph activity log'larını etkinleştirin (açık değilse bundan sonraki olaylar için).<br />
</li>
</ol>
<br />
PowerShell ile servis sorumlusunu hızlıca bulmak için (Microsoft Graph PowerShell modülü):<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>Connect-MgGraph -Scopes "Application.Read.All","AuditLog.Read.All"
Get-MgServicePrincipal -Filter "appId eq '506e08f9-6e9a-4da4-942b-a099a03644ae'" |
  Select-Object DisplayName, Id, AccountEnabled

# Uygulamaya eklenmis kimlik bilgilerini listelemek icin
Get-MgServicePrincipal -All | ForEach-Object {
  [pscustomobject]@{ Ad=&#36;_.DisplayName; Secret=&#36;_.PasswordCredentials.Count; Sertifika=&#36;_.KeyCredentials.Count }
} | Where-Object { &#36;_.Secret -gt 0 } | Sort-Object Ad</code></div></div><br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Çıkarılacak ders: Uygulama izinleri de bir saldırı yüzeyidir</span></span><br />
Çoğu kurumda "Enterprise Applications" listesine son ne zaman bakıldığını kimse hatırlamaz. Bir kez onay verilmiş bir uygulama, yıllarca Directory.ReadWrite.All gibi çok güçlü izinlerle oturur. Bu olay bize şunu söylüyor:<ul class="mycode_list"><li>Her üçüncü taraf uygulama için bir sahip belirleyin.<br />
</li>
<li>Gerçekten gerekmeyen yüksek izinleri kaldırın.<br />
</li>
<li>Servis sorumlusu girişlerini SIEM'e alın ve bilinmeyen IP'lerden gelenlere alarm kurun.<br />
</li>
<li>Kullanıcıların uygulamalara kendi başına onay vermesini (user consent) kısıtlayın.<br />
</li>
</ul>
<br />
Hikaye hâlâ gelişiyor; yeni bilgi geldikçe bu konuyu güncelleyeceğim.<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>The Hacker News - "Hackers Use Compromised ConnectWise Credential to Sign In to 173 Microsoft 365 Tenants" (17 Ekim 2026)<br />
</li>
<li>Huntress, Todyl ve Microsoft açıklamaları (haber içinde aktarıldığı şekliyle)<br />
</li>
<li>ConnectWise güvenlik duyurusu<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=123" target="_blank" title="">002-connectwise.png</a> (Dosya Boyutu: 81.45 KB / İndirme Sayısı: 8)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[AWS Güvenlik Temelleri: S3 ve IAM Yanlış Yapılandırmalarından Korunma]]></title>
			<link>https://www.turkteam.org/konu-aws-guvenlik-temelleri-s3-ve-iam-yanlis-yapilandirmalarindan-korunma.html</link>
			<pubDate>Sat, 17 Oct 2026 11:30:29 +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-aws-guvenlik-temelleri-s3-ve-iam-yanlis-yapilandirmalarindan-korunma.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=117" loading="lazy"  alt="[Resim: attachment.php?aid=117]" class="mycode_img" /></div>
<br />
Son yılların büyük veri sızıntılarının önemli bir kısmı sofistike bir sıfırıncı günden değil, basit bir bulut yanlış yapılandırmasından çıktı. "Açık S3 bucket" artık neredeyse bir klişe. Bu rehberde AWS'de en sık karşılaşılan iki hata alanını, S3 ve IAM'i, savunma gözüyle ele alıyorum. Amaç saldırmak değil, kendi hesabınızı güvenli kurmak.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Konuda anlatılacaklar</span><br />
<ol type="1" class="mycode_list"><li>Bulutta paylaşımlı sorumluluk modeli<br />
</li>
<li>S3 neden sızıyor?<br />
</li>
<li>S3 sertleştirme adımları<br />
</li>
<li>IAM: en az yetke ilkesi<br />
</li>
<li>Tehlikeli IAM desenleri<br />
</li>
<li>Tespit ve izleme<br />
</li>
<li>Yasal uyarı<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Paylaşımlı Sorumluluk Modeli</span></span><br />
<br />
AWS güvenliğinin temeli bu kavramı anlamaktan geçer: AWS <span style="font-weight: bold;" class="mycode_b">bulutun kendisinin güvenliğinden</span> (donanım, veri merkezi, altyapı) sorumludur; siz ise <span style="font-weight: bold;" class="mycode_b">buluttaki her şeyin güvenliğinden</span> (verileriniz, erişim politikaları, yapılandırma) sorumlusunuz. Açık kalan bir bucket AWS'nin değil, sizin hatanızdır.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">S3 Neden Sızıyor?</span></span><br />
<br />
S3 (Simple Storage Service), dosya depolama hizmetidir. Sızıntıların tipik sebepleri:<ul class="mycode_list"><li>Bucket veya nesnelerin yanlışlıkla <span style="font-weight: bold;" class="mycode_b">herkese açık</span> (public) yapılması.<br />
</li>
<li>Aşırı geniş bucket politikaları (Principal "*").<br />
</li>
<li>"Herkes okuyabilsin ama yazamaz" sanılan ama aslında listeleme/indirmeye açık ayarlar.<br />
</li>
<li>Yedeklerin/logların ayrı ve korumasız bir bucket'ta tutulması.<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">S3 Sertleştirme Adımları</span></span><br />
<br />
<ol type="1" class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Block Public Access</span> özelliğini hesap ve bucket seviyesinde açık tutun (varsayılan böyledir, kapatmayın).<br />
</li>
<li>Gerçekten herkese açık olması gereken içerik dışında hiçbir bucket'ı public yapmayın; statik web sitesi gibi durumlar için bile CloudFront + OAC tercih edin.<br />
</li>
<li>Varsayılan <span style="font-weight: bold;" class="mycode_b">şifrelemeyi</span> (SSE-S3 veya SSE-KMS) etkinleştirin.<br />
</li>
<li>Erişim için bucket politikası yerine mümkünse IAM rolleri ve en dar kapsamı kullanın.<br />
</li>
<li>Nesne <span style="font-weight: bold;" class="mycode_b">sürümleme</span> ve silme koruması ile fidye/kaza senaryolarına karşı dayanıklılık ekleyin.<br />
</li>
</ol>
<br />
Hızlı kontrol fikri (yetkiliyseniz kendi hesabınızda):<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>aws s3api get-public-access-block --bucket BUCKET_ADI
aws s3api get-bucket-policy --bucket BUCKET_ADI</code></div></div><br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">IAM: En Az Yetki İlkesi</span></span><br />
<br />
IAM (Identity and Access Management), kimin neye erişebileceğini yönetir. Altın kural: <span style="font-weight: bold;" class="mycode_b">en az yetki (least privilege)</span>. Her kimliğe yalnızca işini yapması için gereken izinleri verin.<br />
<ul class="mycode_list"><li>Kök (root) hesabı günlük işler için kullanmayın; MFA ile kilitleyip kenara kaldırın.<br />
</li>
<li>İnsanlar için mümkünse uzun ömürlü erişim anahtarları yerine <span style="font-weight: bold;" class="mycode_b">geçici kimlik</span> (SSO/rol) kullanın.<br />
</li>
<li>Uygulamalara anahtar gömmek yerine <span style="font-weight: bold;" class="mycode_b">IAM rolleri</span> atayın (EC2 instance profile gibi).<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Tehlikeli IAM Desenleri</span></span><br />
<br />
Politikalarda şu kalıplardan kaçının:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>{
  "Effect": "Allow",
  "Action": "*",
  "Resource": "*"
}</code></div></div><br />
"Her şeye izin" demek olan bu kalıp, tek bir kimliğin sızması halinde tüm hesabı tehlikeye atar. Ayrıca:<ul class="mycode_list"><li>iam<img src="https://cdn.turkteam.org/images/smilies/tongue.png" alt="Tongue" title="Tongue" class="smilie smilie_5" />assRole ile aşırı geniş rol geçişi, yetki yükseltmeye yol açar.<br />
</li>
<li>"Principal": "*" içeren kaynak politikaları (S3, KMS) dikkatle incelenmeli.<br />
</li>
<li>Kullanılmayan eski erişim anahtarları düzenli olarak devre dışı bırakılmalı.<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Tespit ve İzleme</span></span><br />
<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">CloudTrail</span>'i tüm bölgelerde açın; kim ne yaptı kaydı budur.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">AWS Config</span> ile yanlış yapılandırmaları (public bucket, şifresiz volume) otomatik yakalayın.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">GuardDuty</span> ile anormal API çağrılarını ve bilinen kötü IP'leri izleyin.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">IAM Access Analyzer</span> ile hesap dışına açılan kaynakları tespit edin.<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Sonuç</span></span><br />
<br />
Bulut güvenliğinde haberlere düşen çoğu olayın kökeni basit bir ayar hatası. S3'te Block Public Access'i koruyun, IAM'de en az yetki ilkesini uygulayın, CloudTrail/Config/GuardDuty üçlüsünü açın; bu temel adımlar riskin büyük kısmını kapatır. Siz bulut tarafında hangi otomatik kontrolü olmazsa olmaz görüyorsunuz, yorumlarda konuşalım.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yasal Uyarı</span></span><br />
<br />
Bu rehberdeki komut ve kontroller yalnızca kendi AWS hesabınızda veya yetkilendirildiğiniz ortamlarda çalıştırılmalıdır. Başkasının bulut kaynaklarını izinsiz taramak/erişmek TCK 243-245 kapsamında suçtur.<br />
<br />
Görsel: TurkTeam özgün kapak görseli<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=117" target="_blank" title="">tonyukuk-18-aws.jpg</a> (Dosya Boyutu: 79.97 KB / İndirme Sayısı: 12)
<!-- 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=117" loading="lazy"  alt="[Resim: attachment.php?aid=117]" class="mycode_img" /></div>
<br />
Son yılların büyük veri sızıntılarının önemli bir kısmı sofistike bir sıfırıncı günden değil, basit bir bulut yanlış yapılandırmasından çıktı. "Açık S3 bucket" artık neredeyse bir klişe. Bu rehberde AWS'de en sık karşılaşılan iki hata alanını, S3 ve IAM'i, savunma gözüyle ele alıyorum. Amaç saldırmak değil, kendi hesabınızı güvenli kurmak.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Konuda anlatılacaklar</span><br />
<ol type="1" class="mycode_list"><li>Bulutta paylaşımlı sorumluluk modeli<br />
</li>
<li>S3 neden sızıyor?<br />
</li>
<li>S3 sertleştirme adımları<br />
</li>
<li>IAM: en az yetke ilkesi<br />
</li>
<li>Tehlikeli IAM desenleri<br />
</li>
<li>Tespit ve izleme<br />
</li>
<li>Yasal uyarı<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Paylaşımlı Sorumluluk Modeli</span></span><br />
<br />
AWS güvenliğinin temeli bu kavramı anlamaktan geçer: AWS <span style="font-weight: bold;" class="mycode_b">bulutun kendisinin güvenliğinden</span> (donanım, veri merkezi, altyapı) sorumludur; siz ise <span style="font-weight: bold;" class="mycode_b">buluttaki her şeyin güvenliğinden</span> (verileriniz, erişim politikaları, yapılandırma) sorumlusunuz. Açık kalan bir bucket AWS'nin değil, sizin hatanızdır.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">S3 Neden Sızıyor?</span></span><br />
<br />
S3 (Simple Storage Service), dosya depolama hizmetidir. Sızıntıların tipik sebepleri:<ul class="mycode_list"><li>Bucket veya nesnelerin yanlışlıkla <span style="font-weight: bold;" class="mycode_b">herkese açık</span> (public) yapılması.<br />
</li>
<li>Aşırı geniş bucket politikaları (Principal "*").<br />
</li>
<li>"Herkes okuyabilsin ama yazamaz" sanılan ama aslında listeleme/indirmeye açık ayarlar.<br />
</li>
<li>Yedeklerin/logların ayrı ve korumasız bir bucket'ta tutulması.<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">S3 Sertleştirme Adımları</span></span><br />
<br />
<ol type="1" class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Block Public Access</span> özelliğini hesap ve bucket seviyesinde açık tutun (varsayılan böyledir, kapatmayın).<br />
</li>
<li>Gerçekten herkese açık olması gereken içerik dışında hiçbir bucket'ı public yapmayın; statik web sitesi gibi durumlar için bile CloudFront + OAC tercih edin.<br />
</li>
<li>Varsayılan <span style="font-weight: bold;" class="mycode_b">şifrelemeyi</span> (SSE-S3 veya SSE-KMS) etkinleştirin.<br />
</li>
<li>Erişim için bucket politikası yerine mümkünse IAM rolleri ve en dar kapsamı kullanın.<br />
</li>
<li>Nesne <span style="font-weight: bold;" class="mycode_b">sürümleme</span> ve silme koruması ile fidye/kaza senaryolarına karşı dayanıklılık ekleyin.<br />
</li>
</ol>
<br />
Hızlı kontrol fikri (yetkiliyseniz kendi hesabınızda):<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>aws s3api get-public-access-block --bucket BUCKET_ADI
aws s3api get-bucket-policy --bucket BUCKET_ADI</code></div></div><br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">IAM: En Az Yetki İlkesi</span></span><br />
<br />
IAM (Identity and Access Management), kimin neye erişebileceğini yönetir. Altın kural: <span style="font-weight: bold;" class="mycode_b">en az yetki (least privilege)</span>. Her kimliğe yalnızca işini yapması için gereken izinleri verin.<br />
<ul class="mycode_list"><li>Kök (root) hesabı günlük işler için kullanmayın; MFA ile kilitleyip kenara kaldırın.<br />
</li>
<li>İnsanlar için mümkünse uzun ömürlü erişim anahtarları yerine <span style="font-weight: bold;" class="mycode_b">geçici kimlik</span> (SSO/rol) kullanın.<br />
</li>
<li>Uygulamalara anahtar gömmek yerine <span style="font-weight: bold;" class="mycode_b">IAM rolleri</span> atayın (EC2 instance profile gibi).<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Tehlikeli IAM Desenleri</span></span><br />
<br />
Politikalarda şu kalıplardan kaçının:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>{
  "Effect": "Allow",
  "Action": "*",
  "Resource": "*"
}</code></div></div><br />
"Her şeye izin" demek olan bu kalıp, tek bir kimliğin sızması halinde tüm hesabı tehlikeye atar. Ayrıca:<ul class="mycode_list"><li>iam<img src="https://cdn.turkteam.org/images/smilies/tongue.png" alt="Tongue" title="Tongue" class="smilie smilie_5" />assRole ile aşırı geniş rol geçişi, yetki yükseltmeye yol açar.<br />
</li>
<li>"Principal": "*" içeren kaynak politikaları (S3, KMS) dikkatle incelenmeli.<br />
</li>
<li>Kullanılmayan eski erişim anahtarları düzenli olarak devre dışı bırakılmalı.<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Tespit ve İzleme</span></span><br />
<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">CloudTrail</span>'i tüm bölgelerde açın; kim ne yaptı kaydı budur.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">AWS Config</span> ile yanlış yapılandırmaları (public bucket, şifresiz volume) otomatik yakalayın.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">GuardDuty</span> ile anormal API çağrılarını ve bilinen kötü IP'leri izleyin.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">IAM Access Analyzer</span> ile hesap dışına açılan kaynakları tespit edin.<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Sonuç</span></span><br />
<br />
Bulut güvenliğinde haberlere düşen çoğu olayın kökeni basit bir ayar hatası. S3'te Block Public Access'i koruyun, IAM'de en az yetki ilkesini uygulayın, CloudTrail/Config/GuardDuty üçlüsünü açın; bu temel adımlar riskin büyük kısmını kapatır. Siz bulut tarafında hangi otomatik kontrolü olmazsa olmaz görüyorsunuz, yorumlarda konuşalım.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yasal Uyarı</span></span><br />
<br />
Bu rehberdeki komut ve kontroller yalnızca kendi AWS hesabınızda veya yetkilendirildiğiniz ortamlarda çalıştırılmalıdır. Başkasının bulut kaynaklarını izinsiz taramak/erişmek TCK 243-245 kapsamında suçtur.<br />
<br />
Görsel: TurkTeam özgün kapak görseli<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=117" target="_blank" title="">tonyukuk-18-aws.jpg</a> (Dosya Boyutu: 79.97 KB / İndirme Sayısı: 12)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
	</channel>
</rss>