Neler yeni

Yazılım Forum

Tüm özelliklerimize erişmek için şimdi bize katılın. Kayıt olduktan ve giriş yaptıktan sonra konu oluşturabilecek, mevcut konulara yanıt gönderebilecek, itibar kazanabilecek, özel mesajlaşmaya erişebilecek ve çok daha fazlasını yapabileceksiniz! Bu hizmetlerimiz ise tamamen ücretsiz ve kurallara uyulduğu sürece sınırsızdır, o zaman ne bekliyorsunuz? Hadi, sizde aramıza katılın!

SSRF Saldırıları: Sunucu Tarafı İstek Sahteciliği ve Etkili Korunma Yöntemleri

Giriş: Web Uygulamalarının Gizli Tehdidi – SSRF

Günümüzün karmaşık web uygulamaları, farklı servislerle ve dahili kaynaklarla sürekli olarak etkileşim halindedir. Bu etkileşimler, geliştiricilere büyük esneklik sağlarken, aynı zamanda yeni güvenlik zafiyetlerinin de kapısını aralayabilir. Bu zafiyetlerden biri de SSRF (Server-Side Request Forgery) yani Sunucu Tarafı İstek Sahteciliği saldırılarıdır. Bu saldırılar, bir saldırganın savunmasız bir sunucuya, kendi kontrolü altındaki bir yerden değil, doğrudan hedef sunucu üzerinden başka bir URL'ye istek göndermesini sağlar. Bu durum, genellikle internete açık olmayan dahili ağlara veya diğer hassas servislere erişimin kapısını aralayarak ciddi güvenlik ihlallerine yol açabilir.

SSRF Nedir ve Nasıl Çalışır?

SSRF, bir web uygulamasının, kullanıcı tarafından sağlanan bir URL'yi alıp bu URL'ye istek göndermesi sonucu ortaya çıkan bir güvenlik açığıdır. Uygulama, kullanıcının girdisini yeterince doğrulamadığında, saldırgan bu özelliği kötüye kullanarak sunucunun kendi iç ağında bulunan veya internete kapalı olan kaynaklara (örneğin veritabanları, API'ler, bulut metadata servisleri) erişmesini sağlayabilir. Temel olarak, saldırgan, uygulamanın sunucusunu kendisi için bir proxy gibi kullanır. Sunucu, saldırganın istediği URL'ye istek gönderir ve eğer yanıtı işleyip kullanıcıya geri dönerse (geleneksel SSRF), saldırgan bu verileri ele geçirebilir. Eğer yanıt geri dönmezse (blind SSRF), saldırgan yine de çeşitli yöntemlerle (zamanlama, dışarıya yapılan DNS istekleri vb.) saldırının başarılı olup olmadığını anlayabilir.

"SSRF, saldırganın web sunucusu üzerinden kendi seçtiği bir URL'ye istek göndermesini sağlayan bir web güvenlik açığıdır. Bu, saldırganın dahili ağlara erişmesine ve hassas verilere ulaşmasına olanak tanır."

Kaynak: OWASP (Open Web Application Security Project)

SSRF Saldırılarının Mekanizması ve Hedefleri

SSRF saldırıları genellikle, kullanıcının doğrudan bir URL sağlayabildiği veya uygulamanın harici bir kaynaktan veri çekme işlevine sahip olduğu yerlerde görülür. Örneğin, bir resim indirme servisi, bir PDF dönüştürücü, bir web kancası (webhook) veya bir dış API entegrasyonu. Saldırgan, bu işlevselliği suistimal ederek çeşitli hedeflere yönelebilir:

  • İç Ağlara Erişim: En yaygın ve tehlikeli hedeflerden biridir. Sunucu, 127.0.0.1 (localhost), 10.x.x.x, 172.16.x.x – 172.31.x.x veya 192.168.x.x gibi özel IP adres aralıklarına sahip dahili sistemlere istek göndermeye zorlanabilir. Bu sayede, internete açık olmayan intranet portallarına, veritabanı sunucularına, yönetici panellerine veya diğer kritik dahili servislere erişim sağlanabilir. Örneğin, bir saldırgan,
    Kod:
    http://192.168.1.100/admin
    adresine bir istek göndererek dahili bir panelin varlığını kontrol edebilir. Ayrıca, dahili ağdaki güvenlik duvarları veya ağ erişim listeleri (ACL) tarafından korunmayan servisler hedef alınabilir.
  • Bulut Ortamlarında Metadata Erişimi: AWS EC2, Google Cloud veya Azure gibi bulut platformlarında çalışan sunucular, özel metadata API'leri aracılığıyla hassas bilgilere (geçici kimlik bilgileri, rol atamaları, SSH anahtarları vb.) erişebilir. SSRF saldırganları, bu API'lere (örneğin AWS için
    Kod:
    http://169.254.169.254/latest/meta-data/
    veya Google Cloud için
    Kod:
    http://metadata.google.internal/computeMetadata/v1/
    ) istek göndererek bulut ortamının güvenlik duruşunu tehlikeye atabilirler. Bu, özellikle geniş yetkilere sahip rollerin ele geçirilmesine ve bulut kaynaklarının tamamen ele geçirilmesine yol açabilir.
  • Port Taraması: Saldırgan, sunucunun iç ağındaki diğer cihazların hangi portlarının açık olduğunu SSRF aracılığıyla tarayabilir. Belirli bir IP adresinin farklı portlarına (örneğin 80, 443, 22, 3306, 8080) istek göndererek yanıt süresi veya hata mesajlarına göre açık portları tespit edebilir. Bu, daha sonraki saldırılar için bir keşif adımıdır ve ağ topolojisi hakkında bilgi edinmek için kullanılabilir.
  • Yerel Dosya Okuma: Bazı durumlarda,
    Kod:
    file://
    protokolü kullanılarak sunucudaki yerel dosyalara erişim denemeleri yapılabilir. Örneğin,
    Kod:
    file:///etc/passwd
    (Linux sistemlerde kullanıcı bilgileri),
    Kod:
    file:///windows/system32/drivers/etc/hosts
    (Windows sistemlerde host bilgileri) veya
    Kod:
    file:///var/log/apache2/access.log
    (Web sunucusu erişim logları) gibi hassas dosyalara okunabilir mi diye denenebilir. Bu, genellikle diğer zaafiyetlerle birleşerek etkili olur ve sistem yapılandırma bilgilerinin veya kullanıcı kimlik bilgilerinin sızdırılmasına neden olabilir.
  • Diğer Protokollerin Kötüye Kullanımı: HTTP/HTTPS dışında
    Kod:
    gopher://
    (TCP akışını simüle eder, daha karmaşık saldırılar ve dahili servislerle etkileşim için kullanılır),
    Kod:
    dict://
    (sözlük sunucusu protokolü, port taraması veya veri alma için kullanılabilir),
    Kod:
    ftp://
    gibi farklı URL şemaları da SSRF saldırılarında kullanılabilir. Özellikle gopher protokolü, MySQL veya PostgreSQL gibi veritabanlarına veya Redis gibi servislerle etkileşim kurmak için oldukça güçlüdür, bu da sunucunun dahili sistemleri üzerinde komut yürütme veya veri manipülasyonu potansiyeli yaratır. Bu durum, saldırganın uygulama sunucusunu kullanarak dahili sistemler üzerinde yetkisiz komutlar çalıştırmasına veya verilere erişmesine olanak tanır.

SSRF Türleri

SSRF saldırıları temelde iki ana kategoriye ayrılır:

  • Geleneksel (In-band) SSRF: Bu tür saldırılarda, sunucu, saldırganın istediği URL'ye gönderdiği isteğin yanıtını doğrudan saldırganın kontrolündeki web uygulaması arayüzü aracılığıyla geri döndürür. Örneğin, bir resim indirme işlevi, indirdiği resmin içeriğini doğrudan tarayıcıya yansıtırsa, saldırgan bu sayede dahili bir sayfanın HTML içeriğini görebilir. Bu tür, zaafiyetin tespiti ve istismarı açısından daha kolaydır, çünkü saldırgan doğrudan bir geri bildirim alır.
  • Blind (Out-of-band) SSRF: Bu durumda, sunucu, yapılan isteğin yanıtını doğrudan saldırgana geri döndürmez. Ancak, saldırgan, isteğin başarılı olup olmadığını anlamak için dolaylı yöntemlere başvurabilir. Örneğin, kendi kontrolündeki bir DNS sunucusuna veya HTTP sunucusuna dışarıdan bir istek gönderilmesini tetikleyerek, sunucunun kendi ağından bir dış sunucuyla bağlantı kurup kurmadığını gözlemleyebilir. Zaman tabanlı farklar (örneğin, bir portun açık veya kapalı olmasına göre yanıt süresinin değişmesi) da blind SSRF'yi tespit etmek ve istismar etmek için kullanılabilir. Blind SSRF, tespiti zor olduğu için daha sinsi olabilir ve gelişmiş izleme sistemleri veya dışarıdan etkileşim denetimleri gerektirebilir.

Örnek SSRF Senaryosu

Bir web uygulamasının kullanıcıların profil resimlerini URL ile yüklemesine izin verdiğini varsayalım. Normalde, kullanıcılar
Kod:
https://example.com/user_profile_picture.jpg
gibi geçerli bir URL girerler. Ancak, uygulama URL'yi yeterince doğrulamıyorsa, bir saldırgan şöyle bir URL girebilir:

Kod:
http://localhost/admin/dashboard

Eğer uygulama bu URL'ye dahili olarak istek gönderir ve yanıtı (örn. bir resim yerine HTML sayfasını) saklarsa veya işlemeye çalışırsa, saldırgan dahili bir yönetici paneline erişimin mümkün olup olmadığını veya bu panelin içeriğini öğrenebilir. Ya da AWS üzerinde çalışan bir uygulama için, saldırgan şu URL'yi deneyebilir:

Kod:
http://169.254.169.254/latest/meta-data/iam/security-credentials/my_role

Bu istek, eğer başarılı olursa, sunucunun üzerinde çalıştığı IAM rolüne ait geçici kimlik bilgilerini (access key, secret key, session token) döndürebilir ve bu bilgilerle bulut kaynaklarına tam erişim sağlanabilir. Bu tür bilgilerle, saldırgan bulut ortamında yetki yükseltme veya diğer kritik servisleri ele geçirme fırsatı bulabilir.

ssrf_architecture_example.png

Yukarıdaki örnek görsel, tipik bir SSRF saldırı mimarisini göstermektedir. Saldırganın kontrolündeki bir giriş noktası üzerinden gönderilen kötü niyetli istek, güvenlik açığı olan web uygulaması tarafından işlenerek dahili bir sunucuya veya bulut metadata servisine yönlendirilmektedir. Bu, internete açık olmayan hassas kaynaklara erişim riskini ortaya koymaktadır.

SSRF Zafiyetinden Korunma Yöntemleri

SSRF saldırılarından korunmak, genellikle uygulamanın dışarıdan gelen URL girdilerini sıkı bir şekilde doğrulaması ve güvenli ağ yapılandırmaları uygulamasıyla mümkündür. İşte etkili korunma yöntemleri:

  • URL Girdi Doğrulaması (Validation) ve Beyaz Liste (Whitelisting): Bu, en etkili savunma yöntemidir. Uygulama, kullanıcının sağladığı URL'nin sadece önceden tanımlanmış, güvenli ve bilinen hedeflere gitmesine izin vermelidir. Bilinmeyen veya şüpheli tüm URL'ler reddedilmelidir. IP adreslerinin değil, tam domain isimlerinin kullanılması tercih edilmelidir. Örneğin, sadece
    Kod:
    api.external-partner.com
    veya
    Kod:
    static.assets.com
    gibi URL'lere izin verilebilir. Düzenli ifade (regex) veya URL ayrıştırma kütüphaneleri kullanarak URL'nin şemasını (http/https), host'unu ve port'unu kontrol etmek hayati önem taşır. Eğer uygulamanızın dahili bir IP adresine istek göndermesi gerekiyorsa (ki bu genellikle tavsiye edilmez), bu IP'nin de sadece belirli bir alt ağda ve belirli bir portta olup olmadığını kontrol edin ve en dar kapsamlı kuralları uygulayın.

    Kod:
        # Örnek Python pseudocode (basit whitelist kontrolü)
        from urllib.parse import urlparse, urljoin
        import socket
    
        allowed_domains = ["api.trusted-partner.com", "cdn.mycompany.org"]
        allowed_schemes = ["http", "https"]
    
        def is_url_safe(url):
            try:
                parsed_url = urlparse(url)
                # Şema kontrolü
                if parsed_url.scheme not in allowed_schemes:
                    return False
    
                # Hostname kontrolü (beyaz liste)
                if parsed_url.hostname not in allowed_domains:
                    # Eğer IP adresi ise, dahili IP olmamasını kontrol et
                    try:
                        ip_address = socket.gethostbyname(parsed_url.hostname)
                        # Özel IP aralıklarını kontrol et (örneğin 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 127.0.0.0/8)
                        # Bu kısım daha detaylı CIDR kontrolü gerektirebilir
                        if ip_address.startswith(('10.', '172.16.', '172.31.', '192.168.', '127.')):
                            return False
                    except socket.gaierror:
                        # Hostname çözümlenemiyorsa, geçersiz say
                        return False
                    except ValueError: # IP format hatası
                        return False
                    
                # Port kontrolü (isteğe bağlı, sadece belirli portlara izin verilebilir)
                if parsed_url.port and parsed_url.port not in [80, 443]:
                     return False # Sadece HTTP/HTTPS standart portlarına izin ver
    
                return True
            except Exception:
                return False
  • Kara Liste (Blacklisting) Yaklaşımından Kaçınma: Özel IP adreslerini (127.0.0.1, 10.x.x.x vb.) veya hassas protokolleri (file://, gopher://) engellemeye çalışmak cazip gelse de, bu yöntem genellikle atlatılabilir. Çeşitli URL kodlama teknikleri (örn. ondalık, onaltılık IP formatları), DNS yeniden bağlama (rebind) saldırıları veya URL yönlendirmeleri gibi yöntemlerle kara listeler kolayca bypass edilebilir. Bu nedenle, beyaz liste yaklaşımı her zaman tercih edilmelidir, çünkü izin verilmeyen her şey varsayılan olarak engellenir.
  • Ağ Segmentasyonu ve Güvenlik Duvarları (Firewalls): Uygulama sunucusu ile dahili kaynaklar arasına güvenlik duvarları yerleştirerek veya ağ segmentasyonu uygulayarak, uygulama sunucusunun erişebileceği dahili IP adreslerini ve portları en aza indirmek kritik öneme sahiptir. Uygulama sunucusu, yalnızca çalışması için kesinlikle gerekli olan dahili servislere erişebilmelidir. Bu, bir SSRF saldırısı başarılı olsa bile, saldırganın erişimini sınırlar ve saldırının potansiyel etkisini azaltır.
  • En Az Ayrıcalık Prensibi: Uygulamanın ve altında yatan servislerin sadece görevlerini yerine getirmek için ihtiyaç duydukları minimum izinlere sahip olmasını sağlayın. Örneğin, bir web sunucusu veya resim işleme servisi, bir veritabanı sunucusuna veya bulut metadata API'sine doğrudan erişime sahip olmamalıdır. Bu, saldırganın ele geçirdiği bir zafiyet üzerinden yetki yükseltmesini zorlaştırır.
  • Metadata API'lerine Erişimin Kısıtlanması: Özellikle bulut ortamlarında, metadata API'lerine (örneğin AWS için 169.254.169.254) doğrudan erişimi engelleyen veya yalnızca belirli ve güvenli yollarla erişime izin veren güvenlik duvarı kuralları tanımlayın. Bazı bulut sağlayıcıları, bu tür API'lere erişimi daha güvenli hale getirmek için özel mekanizmalar sunar (örneğin AWS EC2 Instance Metadata Service Version 2 - IMDSv2, GCP'deki Instance Metadata API'sine erişim kısıtlamaları). Bu mekanizmaların kullanılması şiddetle tavsiye edilir.
  • URL Ayrıştırma Kütüphanelerinin Güvenli Kullanımı: URL'leri ayrıştırmak ve doğrulamak için güvenilir ve güncel kütüphaneler kullanın. Kendi ayrıştırma mantığınızı yazmaktan kaçının, çünkü bu, genellikle atlatılması kolay hatalara yol açabilir. Kütüphanelerin de bilinen zafiyetleri olup olmadığını takip edin ve düzenli olarak güncelleyin. Örneğin, bazı eski URL ayrıştırıcılar, özel karakterler veya yönlendirmelerle manipüle edilebilir.
  • İsteklerin Takibi ve Loglama: Uygulamanızın harici veya dahili kaynaklara yaptığı tüm istekleri detaylı bir şekilde loglayın. Anormal veya şüpheli istek kalıplarını (örneğin, olağandışı IP adreslerine veya portlara yapılan istekler, yüksek sayıda başarısız istek denemeleri, alışılmadık protokol kullanımları) tespit etmek için log analizi ve izleme sistemleri kurun. Bu, bir saldırının erken aşamada fark edilmesine ve yanıt verilmesine yardımcı olabilir.
  • Kullanılmayan Protokolleri Devre Dışı Bırakma: Eğer uygulamanızın belirli protokolleri kullanması gerekmiyorsa (örneğin gopher://, dict://, ftp://), bu protokollerin URL ayrıştırıcınız tarafından işlenmesini engelleyin veya sunucu tarafında tamamen devre dışı bırakın. Bu, saldırı yüzeyini önemli ölçüde azaltır ve potansiyel istismar vektörlerini ortadan kaldırır.

Sonuç

SSRF saldırıları, modern web uygulamaları için ciddi bir tehdit oluşturmaktadır, çünkü dahili ağlara ve hassas verilere erişim sağlayarak büyük çaplı veri ihlallerine veya sistem ele geçirmelerine yol açabilirler. Geliştiricilerin ve güvenlik uzmanlarının, kullanıcı girdilerini kapsamlı bir şekilde doğrulaması, beyaz liste yaklaşımını benimsemesi ve sağlam ağ güvenlik önlemleri uygulaması hayati önem taşımaktadır. Sürekli izleme, güncel kalma ve güvenlik farkındalığını artırma, bu tür saldırılara karşı savunmada kilit rol oynamaktadır. Unutmayın, güvenlik bir süreçtir, tek seferlik bir işlem değil, sürekli bir iyileştirme ve adaptasyon gerektiren bir alandır. Siber güvenlikte proaktif olmak, reaktif olmaktan her zaman daha avantajlıdır.

OWASP SSRF Genel Bakış Sayfası
PortSwigger SSRF Laboratuvarları ve Anlatımı
 
shape1
shape2
shape3
shape4
shape5
shape6
Üst

Bu web sitenin performansı Hazal Host tarafından sağlanmaktadır.

YazilimForum.com.tr internet sitesi, 5651 sayılı Kanun’un 2. maddesinin 1. fıkrasının (m) bendi ve aynı Kanun’un 5. maddesi kapsamında Yer Sağlayıcı konumundadır. Sitede yer alan içerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır.

YazilimForum.com.tr, kullanıcılar tarafından paylaşılan içeriklerin doğruluğunu, güncelliğini veya hukuka uygunluğunu garanti etmez ve içeriklerin kontrolü veya araştırılması ile yükümlü değildir. Kullanıcılar, paylaştıkları içeriklerden tamamen kendileri sorumludur.

Hukuka aykırı içerikleri fark ettiğinizde lütfen bize bildirin: lydexcoding@gmail.com

Sitemiz, kullanıcıların paylaştığı içerik ve bilgileri 6698 sayılı KVKK kapsamında işlemektedir. Kullanıcılar, kişisel verileriyle ilgili haklarını KVKK Politikası sayfasından inceleyebilir.

Sitede yer alan reklamlar veya üçüncü taraf bağlantılar için YazilimForum.com.tr herhangi bir sorumluluk kabul etmez.

Sitemizi kullanarak Forum Kuralları’nı kabul etmiş sayılırsınız.

DMCA.com Protection Status Copyrighted.com Registered & Protected