SSRF — Müşterinin Verdiği Adresi Sunucu Neden Çağırmamalı?
Önce şunu oku: Spring Security Filter Chain
30 saniyede özet
Kullanıcının verdiği bir URL'yi sunucu çağırırsa, istek sunucunun yetkileriyle gider ve iç ağa ulaşabilir. Yazıya bakan yasak listesi kolayca atlatılır; izin listesi, çözülen IP kontrolü ve yönlendirmesiz istek bunu durdurur.
Bir ofiste getir götür işlerine bakan bir görevli var. Kapıdaki ziyaretçi ondan bir adresten kâğıt getirmesini istiyor. Görevlinin personel kartı arşivi ve kasa odasını da açıyor; ziyaretçinin hiç giremeyeceği yerleri.
-
Bayt: Kurumsal müşteriler bir adres veriyor, biz de faturalarını oradan indiriyoruz. Ne güzel.
-
Sen: Biri adres olarak 169.254.169.254 yazmış. İnen dosyada bulut hesabımızın geçici anahtarları var!
-
Bayt: Hemen 169.254'ü yasakladık. Ertesi gün aynı adres bir sayı olarak yazılmış geldi.
-
Bayt: Neyin yasak olduğunu değil, nereye gidebileceğimizi yazmamız gerekiyor.
İstek kimin adına gidiyor?
Kullanıcının verdiği bir adresi sunucu çağırdığında, istek sunucunun ağ konumundan ve yetkileriyle gider. Saldırganın sunucuya kendi seçtiği bir adresi çağırtmasına SSRFSaldırganın sunucuya kendi seçtiği bir adresi çağırtması. Sunucu, saldırganın ulaşamadığı iç servislere ulaşabildiği için tehlikelidir.Sözlükte gör → denir.
En çok hedeflenen yerlerden biri bulut metadata servisiBulut makinesinin içinden 169.254.169.254 adresinde çalışan, makine hakkında bilgi ve bazen geçici kimlik bilgisi veren servis.Sözlükte gör →. Makinenin içinden 169.254.169.254 adresinde çalışır ve geçici kimlik bilgileri verebilir.
Kafam karıştı, daha basit anlat
Sunucu, müşterinin ulaşamadığı yerlere ulaşır. Müşterinin verdiği adresi çağırmak, ona sunucunun kartını vermektir.
SSRF nedir?
Sunucunun çağırdığı bir adres neden tehlikeli olabilir?
Yasak listesi neden yetmez?
Sunucu, adresin yazısında localhost ya da 169.254 geçiyorsa reddediyor. Saldırgan adres olarak http://2852039166/ yazdı. Ne olur? Cevabı göster
İstek metadata servisine gider. 2852039166, 169.254.169.254’ün tek bir sayı olarak yazılmış hâlidir. Yasak listesi yazıya baktı; yazıda yasak hiçbir şey yoktu.
Adım adım oku
- Ziyaretçi: şu adresten bir kâğıt getir.
- Görevlinin kartı kasa odasını da açıyor.
- Kasa odası yasak, ama oda numarası değil.
- Yalnızca izinli adreslere git.
Yasak listesi yazıya bakar. Aynı adresin başka bir yazımını ya da masum görünen bir adresin içeriye yönlendirmesini görmez.
Sağlam yol tersidir: yalnızca bilinen alan adlarına izin ver, adı çözdükten sonra IP’nin iç ağda olmadığını kontrol et ve yönlendirmeleri takip etme.
Kafam karıştı, daha basit anlat
Yasakları sayma; izin verdiğin adresleri yaz ve çözülen IP’ye bak.
Bulut metadata servisi (169.254.169.254) neden hedef olur?
Yasak listesi "169.254" yazısını engelliyor. Saldırgan nasıl aşabilir?
Kendin gör
Fatura indiren sunucu
Tohum 427631- https://fatura.firma.com.tr/ocak.pdfgerçek fatura
- http://localhost:8080/actuator/envkendi uygulamamızın ayarları
- http://169.254.169.254/latest/meta-data/bulut metadata servisi
- http://2852039166/latest/meta-data/aynı adres, sayı olarak yazılmış
- https://cdn.fatura-ornek.net/a.pdfiç ağdaki yönetim paneline yönlendiriyor
✕ iç ağa ulaşan istek: 0
Şu an ne oldu?
Yasak listesi: "localhost" ve "169.254" geçmesin
Müşterinin verdiği adresleri sunucumuz çağırıyor; sunucu, müşterinin göremediği iç ağı görebilir.
Görevler0/3
Bulut metadata servisine ulaşılsınaçık
İpucu
Kontrol yok.
Yasak listesine rağmen iç ağa ulaşılsınaçık
İpucu
Yasak listesi.
Yalnızca gerçek fatura indirilsinaçık
İpucu
İzin listesi.
Olay günlüğü (0)
Henüz olay yok. Oynat veya adımla.
- Varsayılanla oynat. Yasak listesi localhost’u ve 169.254’ü durdurdu; ama sayı olarak yazılan adres ve yönlendirme iç ağa ulaştı.
- “Kontrol yok” seç. Dört iç adresin dördü de indirildi, metadata dahil.
- “İzin listesi” seç. Yalnızca gerçek fatura indirildi.
SSRF'e karşı en sağlam yaklaşım hangisi?
Masum görünen bir adres iç ağdaki bir panele yönlendiriyor. HTTP istemcisi yönlendirmeyi takip ederse ne olur?
Tuzaklar
Adı kontrol edip ayrıca bağlanmak. Kontrol ile bağlantı arasında aynı ad başka bir IP’ye çözülebilir. Adı bir kez çöz, IP’yi kontrol et ve bağlantıyı o IP’ye yap.
Yalnızca koda güvenmek. Uygulamanın dışarı çıkışını ağ kurallarıyla yalnızca gerekli adreslere sınırla. Bulutta metadata servisinin token isteyen sürümünü kullan.
Özelliği gereğinden geniş tutmak. Önce sor: müşteri dosyayı kendisi yükleyemez mi? En güvenli istek, hiç atılmayandır.
Kafam karıştı, daha basit anlat
Kontrol ettiğin IP’ye bağlan, ağda da sınır koy, özelliği dar tut.
Adı kontrol edip sonra ayrıca bağlanmak neden yetmeyebilir?
Derinleş · Kurumsal bankacılık: fatura indirme, yalnızca izinli adreslere 3 dosya · ~76 satır · ilk okumada atlayabilirsin
Kendini sına
Sunucunun çağırdığı adres, sunucunun yetkileriyle çağrılır.
SSRF'in etkisini azaltan altyapı önlemi hangisi?
Aklında kalacak üç şey
- 1 Sunucunun çağırdığı adres, müşterinin değil sunucunun ağ konumu ve yetkileriyle çağrılır. Müşterinin göremediği iç servisler sunucuya açıktır.
- 2 Yazıya bakan yasak listesi, aynı adresin başka yazımına ya da bir yönlendirmeye yenilir.
- 3 Yalnızca izinli adreslere git, çözülen IP'nin iç ağda olmadığını kontrol et, yönlendirmeleri takip etme.
4 kart sonraki derste seni bekliyor