Balık Baştan Kokar – Host Header Injection Nedir?
Günde kaç adet internet sitesini ziyaret ediyorsunuz? Elbette ki bu soruya net ya da ortalama sayısal değer vereceğiniz bir cevap beklemiyorum. Çünkü dijital bir çağda yaşıyor ve günlük network akışımızı takip edemeyecek kadar fazla interneti kullanıyoruz, doğru mu? Bu yazıyı okuyanlar arasında belki de web sitesi sahipleri, yöneticileri veya editörleri de bulunuyordur. Peki, bir internet sitesinin güvenlik zafiyetlerinin olup olmadığını nasıl tespit edeceğiz? Ya da en azından çok bilinen ve etkili zarar verici ataklara karşı nasıl savunma yapmalıyız?
İşte tam da bu noktada, web sitelerinin çalışma mantığını öğrenmek ve keşfetmek gerekiyor. Tabii siber güvenlik ile ilgiliyseniz, bu konuya muhakkak ehemmiyet göstermelisiniz. Şu an ki “ayırt edici bilgi” düzeyiniz fark etmeksizin, durmaksızın öğrenmeye devam etmelisiniz. Ki buna istinaden nerede, nasıl aksiyon alınacağının da bilincinde olabilelim.
Bu içerikte, keşfedeceğiniz birçok farklı perspektif bulunmakta. Özellikle web sitelerinin başlıklarının(headers) sömürülerek nasıl zafiyetlerin ortaya çıktığını göreceğiz. Öyleyse hadi, başlayalım.
Host Header Injection Nedir?
Bir saldırganın HTTP isteğinin host başlığını manipüle ederek kötü amaçlı giriş enjekte ettiği bir web uygulaması güvenlik açığıdır. Host başlığı, istemcinin bağlanmaya çalıştığı hedef sunucunun alan adını belirtmek için HTTP protokolünün bir parçasıdır. Bu güvenlik açığı, çeşitli ataklara yol açabilmektedir. Bunlardan bazılarını şu şekilde sıralayabilirim;
- Cache poisoning(önbellek zehirlenmesi),
- (Privilege escalation(ayrıcalık yükseltme),
- bypassing security control(güvenlik kontrollerini ekarte etmek)
- XSS Attack
Peki, Host Header Injection’ın nasıl çalıştığını, örneklerle birlikte, bu atağı engelleme yöntemlerine ve çözümlerini incelemeye ne dersiniz? Merak etmeyin. Olabildiğince sade ve net anlatmaya gayret edeceğim J.
Host Header Injection Nasıl Çalışır?
-
Normal Fonksiyonellik
Öncelikle “host” terimini açıklığa kavuşturalım; ‘sunucu’ anlamına gelir. Her web sitesi bir(veya daha fazla) host’un arkasında çalışır. Peki, bu adımda neler oluyor?
Host başlığı, HTTP/1.1 teknik özelliğinin zorunlu bir parçasıdır. İstemcinin bağlanmaya çalıştığı sunucunun alan adını gösterir. Şu an okuduğunuz bu içeriğin host başlığı nedir(İpucu: URL’inize bir göz atabilirsiniz)?
-
Saldırganların Manipülasyonu
Host Header Injection saldırısında; kötü niyetli kişi(ler), host başlığını manipüle ederek kötü amaçlı bir HTTP isteği oluşturur. Amaç, web uygulamasını isteğin asıl hedeflenen alan adından farklı bir alan adından geldiğini işlemeye ikna etmektir. ‘Nasıl yapılır’ diye merak edenler; BurpSuite aracını araştırabilirsiniz.
-
Web Uygulamalarına Etkisi
Bu anlamda web uygulamalarına birçok etkisi gözetilmektedir. Tabii bunun farklı kategorilerde güvenlik zafiyetlerini doğurması bile host header injection’un ne denli büyük sorunlara yol açabileceğinin aşikar bir göstergesidir. Bir önceki başlıkta host başlığının sömürülerek hangi atakların tetiklenebileceğini listelemiştim.
Host Header Injection’a (Gerçek) Örnekler
Önbellek Zehirlenmesi
Bu senaryoda; bir saldırgan, önbelleği zehirlemeye neden olacak şekilde manipüle edilmiş bir Host başlığı içeren istek gönderir. Ardından, aynı kaynağa manipüle edilmiş host başlığı ile erişen sonraki kullanıcılar zehirlenmiş içeriği alabilirler. Örneğin, siz orneksite(.)com/iletisim adresine gittiğinizi sanırken, arka planda farklı istekleri çağırarak önbellek zehirlenmesine maruz kalabilirsiniz.
Güvenlik Kontrollerini Atlatma
Bir uygulama, güvenlik politikalarını belirlemek için Host başlığını kullanır. Saldırgan, Host başlığını manipüle ederek isteğin güvenilir bir alan adından geldiğini göstermeye çalışır. Bu sayede güvenlik kontrollerini atlar. Ne iş ama, değil mi?
Ayrıcalık Yükseltme
Web sitelerine, uygulamalara erişmek için kullanıcı profilleriniz oluyor, değil mi? Bu senaryomuzda bir uygulama, kullanıcıları tanımlamak için host başlığını kullanmaktadır. Saldırgan, Host başlığını manipüle ederek başka bir kullanıcı gibi görünebilmektedir. Dolayısıyla bu durum da, hassas bilgilere izinsiz erişim, değiştirilme ve bütünlüğünün bozulmasına pektabi yol açabilmektedir.
Host Header Injection Nasıl Engellenir?
Aşağıda bu injection türünü önlemek için 4 farklı alternatif sunacağım. Fakat elbette ki tüm süreç bunlardan ibaret olmayacak. Öncelikle bilinmelidir ki güvenli kodlama, host konfigürasyonları ve sürekli güncel kalmak, bu işin elzem olgularıdır.
-
Girişleri Onaylayın ve Temizleyin
Her zaman kullanıcı girişlerini onaylayın ve temizleyin, özellikle HTTP başlıklarında kullanılan verileri. Host başlığının yalnızca geçerli ve beklenen değerler içerdiğinden emin olun.
-
Beyaz Listeleme(White List) Kullanın
Geçerli host başlığı değerleri için beyaz listeleme kullanılabilir. Bu sayede yalnızca önceden tanımlanmış ve beklenen değerlere sahip host başlıklarına izin verebilirsiniz. Dolayısıyla host başlıklarını manipüle etmenin de önüne geçmiş olursunuz.
-
Host Değerlerini Kanonikleştirme
Host başlığı değerlerini standart bir formata kanonikleştirin. Böylece tutarsızlıkların önüne geçilerek zafiyet riski azaltılır. Yeri gelmişken, hemen kanonikleştirmeden kısaca bahsedeyim. Örneğin, elimizde orneksite(.)com adresli bir sitemiz var. Bu siteye Orneksite(.)com olarak da, ORNEKSITE(.)com olarak da erişebilirsiniz. Kanonikleştirme yaparak, sadece orneksite(.)com biçiminde isteğin gelmesini sağlayabilirsiniz. Böylece manipüle edici işlemlerin önüne geçebilirsiniz.
-
Güvenmeyin ve Kontrol Edin
Güvenilir kararlar vermek için sadece host başlığına güvenmek olmaz. Gelen isteğin gerçekten güvendiğiniz bir alan adından geldiğini teyit etmek için çerezler veya tokenlar gibi ek bilgileri kullanabilirsiniz. Ne de olsa, siber güvenlik(çi) dediğin hep ekstra çözümleri ve B,C,D… planlarını düşünür, değil mi? 🙂
Host Header Injection’ı Önlemek İçin Çözümler
Buraya kadar geldiğinize göre host header injection’un nelere yol açabileceğini de zihninizde canlandırmışsınızdır. Sizi temin ederim, bu injection ile birçok site güvenlik anlamında sorunlar yaşamıştır veya şu an yaşıyordur fakat henüz site kullanıcıları/yöneticileri durumun farkında değildir. Tabii maalesef ki yaşanmaya da devam edecektir.
Buna istinaden bu kompleks sorunun önüne geçebilmek adına kullanılması gereken bazı çözümler vardır. Şimdi gelin, birlikte bu çözümlere bir göz atalım.
Web Uygulama Güvenlik Duvarları (WAF)
WAF kullanmak, Host Header Injection saldırılarını tespit etmeye ve azaltmaya yardımcı olur. Keza gelen HTTP trafiğini analiz ederek filtreleme yapmaktadır.
Bu anlamda benim de deneyimlediğim ve globalde de en etkin ürünlerden biri olan F5’i araştırabilirsiniz. F5 Nedir diye merak ediyorsanız, blog siteme beklerim :).
Ters Proxy Yapılandırması
Ters proxy’leri(reverse proxy) yapılandırarak gelen istekleri temizlemek ve onaylamak önemlidir. Yalnızca geçerli ve düzgün biçimlendirilmiş host başlıklarının web uygulamasına iletilmesini sağlamaktadır. Bunu bir süzgeç mantığında düşünebilirsiniz.
Güvenlik Başlıkları
Güvenlik başlıklarını kullanmak(ör: HTTP Strict Transport Security (HSTS) başlığı), güvenli iletişimi zorlamak ve başlık manipülasyonu riskini azaltmak için etkili bir yöntemdir.
Düzenli Güvenlik Denetimleri
Düzenli güvenlik denetimleri ve testler, Host Header Injection gibi potansiyel güvenlik açıklarını belirlemek ve zamanında düzeltmek için büyük önem arz etmektedir. Özellikle gelişen teknoloji ile birlikte zero day attackların da yoğunluğu artmaktadır.
Bundan dolayı eğer yönettiğiniz sistemler, uygulamalar veya siteler varsa muhakkak güncelliğini koruduğundan emin olmalısınız. Aksi durumlarda sadece bu konu başlığı özelinde değil, birçok alandan gol yememiz işten bile olmayacaktır. Bu, herkes için geçerli bir durumdur.
Peki, siz hiç host header injectiona maruz kalan bir site/uygulamaya denk geldiniz mi? Belki de çevrenizden birileri böyle bir konuya şahitlik etmiştir. Düşüncelerinizi yorumlarda belirtebilirsiniz. Balığın baştan kokmasını engelleyecek çözümlere… Sağlıkla ve güvenle kalın.