HTTP Host Header Attacks | HTTP Host Üstbilgi Saldırıları

Gauloran

Moderasyon Ekibi Lideri
7 Tem 2013
8,199
674
HTTP Host Header Saldırıları

Merhaba bu konuda yanlış yapılandırmaların sonucunda HTTP Host Header kullanılarak web sitelerinin nasıl çeşitli saldırılara karşı maruz kaldığından bahsedeceğiz. HTTP Host Header saldırılarına karşı savunmasız olan web sitelerini belirlemek için detaylı bilgiler vereceğiz. Tabii bu bilgilerin yanında aşağıdaki konuları içeren lab'lerle birlikte pekiştirme yapabileceksiniz:

Kod:
Password reset poisoning
Web cache poisoning
Exploiting classic server-side vulnerabilities
Bypassing authentication
Virtual host brute-forcing
Routing-based SSRF
Connection state attacks

Bu lab'lere konunun sonundaki yorumları inceleyerek lab'lerin açıklamasını anlayıp gidebilirsiniz.

S9i3rH.jpg


HTTP Host Header Nedir?

HTTP Host Başlığı, HTTP/1.1'den beri zorunlu bir request header'ıdır. İstemcinin erişmek istediği domaini belirtir. Örneğin, bir kullanıcı,
https://portswigger.net/web-security adresini ziyaret ettiğinde kullandığı tarayıcı aşağıdaki gibi bir Host headerı içeren bir istek oluşturacaktır:

Kod:
GET /web-security HTTP/1.1
Host: portswigger.net

Bazı durumlarda, request (istek) bir ara sistem tarafından iletildiğinde Host değeri hedeflenen back-end komponentine ulaşmadan önce değiştirilebilir. Bu senaryoyu aşağıda daha ayrıntılı olarak tartışacağız.

Amaç Ne?

HTTP Host Header'ın amacı istemcinin hangi back-end komponenti ile iletişim kurmak istediğini belirlemeye yardımcı olmaktır. Eğer requestler (istekler) Host Header'larını içermiyorsa veya Host Header herhangi bir şekilde bozulmuşsa bu durum gelen isteklerin hedeflenen uygulamaya yönlendirilmesi sırasında sorunlara yol açabilir.

Geçmişten günümüze bakacak olursak bu belirsizlik yoktu çünkü her IP adresi yalnızca tek bir domain için içerik barındırıyordu. Günümüzde ise büyük ölçüde bulut tabanlı çözümlere yönelik sürekli artan eğilim ve ilgili mimarinin çoğunun dış kaynak kullanımından sağlanmasından dolayı aynı IP adresinde birden fazla web sitesine ve uygulamaya erişilebilmesi yaygın bir durum. Bu yaklaşım, kısmen IPv4 adres tükenmesinin bir sonucu olarak da popülerlik kazandı.

Birden fazla uygulama aynı IP adresi üzerinden erişilebildiğinde, bu durum genelde aşağıdaki senaryolardan birine çıkar:

Virtual Hosting

Olası senaryolardan biri, tek bir web sunucusunun birden fazla web sitesini veya uygulamayı barındırmasıdır. Tek bir sahibi olan birden fazla web sitesi olabilir, ancak farklı sahiplere ait web sitelerinin tek bir paylaşılan platformda barındırılması da mümkündür. Bu durum eskiden daha yaygındı, ancak yine de bazı bulut tabanlı (cloud-based) Hizmet Olarak Yazılım (SaaS) çözümlerinde görülmektedir.

Her iki durumda da, bu farklı web sitelerinin her biri farklı bir domaine sahip olsa da, hepsi sunucuyla ortak bir IP adresini paylaşır. Tek bir sunucuda bu şekilde barındırılan web sitelerine "virtual hosts" denir. Bu bir Hosting türüdür, çeviri notlarında daha detaylı bir açıklama bıraktım. Web sitesine erişen normal bir kullanıcı genelde Virtual Host mu kullanılıyor yoksa kendi Dedicated Server mı kullanılıyor diye ayırt edemez.

Aracıyla Trafik Yönlendirme

Bir diğer olası senaryo da sitenin farklı bi back-end sunucuda bulunması ama istemci ve sunucular arasındaki tüm trafiğin bir aracı sistem vasıtasıyla yönlendirilmesidir. Bu da basit bi' yük dengeleyici veya ters bi' proxy sunucusu gibi bi' şeydir. Bu bahsettiğimiz ise genelde istemcilerin siteye CDN vasıtasıyla erişim sağladığı zamanlar sıklıkla rastlanır.

Bu durumda siteler farklı bir back-end sunucularda bulunsa bile tüm alan adları ara bileşenin tek bir IP adresinden çözümlenir. Bu ise virtual hosting gibi zorlukluklara yol açabilir çünkü ters proxy veya yük dengeleyici her isteğin gitmesi gereken uygun back-end'i bilmesi gerekir.

Peki HTTP Host Header Bunu Nasıl Çözer?

İki senaryoda da Host Header istenilen alıcıya bakar. Benzetme yapacak olursak, tıpkı bir apartmanda oturan birine kargo göndermek gibidir. Tüm binanın adresi aynı geçer lakin bu sokağın bu numaranın içinde bir de farklı farklı daireler vardır ve kargo doğru kapıya gitmelidir. İlk çözümümüz, kargoda alıcı adresine kapı numarasını veya alıcının adını soyadını eklemek olur. Yani HTTP mesajları bakımından Host Header da aynı amacı güder.

Tarayıcı bir istek gönderdiğinde hedef URL, ilgili sunucunun IP adresini çözümler. Sunucu bu isteği aldığında Host Header'a istenilen back-end'i bulmasını ve isteği uygun bir şekilde iletmesini ister.

HTTP Host Header Saldırısı Nedir?

HTTP Host Header saldırıları da Host Header değerinin güvenli bir ortamda işlenmediği bu tür saldırıya açık siteleri exploit'ler. Eğer sunucu, Host Header'a sorgusuz sualsiz güvenirse ve düzgünce doğrulayamaz veya döndüremezse saldırgan bu durumdan faydalanabilir ve sunucu tarafına zararlı payload'lar yükleyebilir. Ayrıca Host Header'a direkt olarak payload yerleştirebiliyorsa buna da genelde "Host Header Injection" saldırıları denir.

Hazır web uygulamaları, manuel olarak kurulum esnasında konfigürasyon dosyasında belirtilmediyse genellikle hangi alan adında olduklarını bilmezler. Misal e-posta'da olacak mutlak URL oluşturmak için bulundukları güncel alan adını öğrenme gereksinimi duyduklarında ise Host Header'a alan adını almak için başvururlar:

Kod:
<a href="https://_SERVER['HOST']/support">Contact support</a>

Header değeri de website'nin altyapısında farklı sistemler arasında çeşitli etkileşimlerde kullanılmış olabilir.

Host Header her ne kadar kullanıcının kontrol edebildiği bir şey olsa da bu işlem bir çok soruna yol açabilir. Eğer bi girdiyi kontrol edilmezse, Host Header potansiyel olarak özellikle aşağıdaki tarzda saldırılara maruz kalabilir:
  • Web cache poisoning
  • Business logic flaws in specific functionality
  • Routing-based SSRF
  • Classic server-side vulnerabilities, such as SQL injection

HTTP Host Header Açıkları Nasıl Yükseldi?

HTTP Host Header açıkları genellikle Header'ın kullanıcı kontrolünde olmadığı yanlış varsayımdan dolayı arşa çıktı. Saldırganın kolayca Burp Proxy tarzı araçları kullanarak bunu kafasına göre düzenleyebiliyor olsa bile, bu durum Host Header'da ve değerin yetersiz doğrulanan sonucunda boş bir güven oluşturuyor.

Gelen isteklerle ilgilenen sunucunun ayarlanmasına bağlı olarak Host Header'ın kendisi bile daha güvenli bir şekilde ele alınmış olsa bile Host yine de diğer başlıkları ekleyerek bastırılabilir. Bazen website sahipleri bu tür başlıkların varsayılan olarak desteklendiklerinden bile bir haber ve sonuç olarak bunlara gerektiği derecede inceleme yapılmamakta.

Gerçek şu ki, bu tür açıkların çoğu yetersiz kodlamadan değil de ilgili altyapıda bir veya daha fazla bileşende bulunan yetersiz konfigürasyondan kaynaklandığını söyleyebiliriz. Bu konfigürasyon sorunları, websitelerin daha onların konfigürasyon ayarlarından ve gizlilik/güvenlik kurallarından bi' haber olarak üçüncü parti teknolojileri kendi yapılarına eklemeleriyle oluşabilir.

Host Header Saldırıları Nasıl Önlenir?

HTTP Host Header saldırılarını önlemek için en basit yaklaşım, sunucu tarafı kodunda Host Header'ı tamamen kullanmamaktan geçer. Her URL'nin gerçekten mutlak olması gerekip gerekmediğini bir kez daha kontrol edin. Bunun yerine genellikle göreceli bir URL kullanabileceğinizi göreceksiniz. Bu basit değişiklik, özellikle önbellek zehirlenmesi açıklarını önlemenize yardımcı olabilir.
Diğer Yöntemler:

Mutlak URL'leri Korumak

Mutlak URL kullanmak zorunda kaldığınızda alan adınızın konfigürasyon dosyasında olduğundan ve Host Header yerine bu değerin geçtiğinden emin olmalısnız. Bu tür önlemle örneğin password reset poisining tarzı saldırıları önleyebilirsiniz.

Host Header Doğrulama

Host Header kullanmanız gerekiyorsa bunu düzgünce doğruladığınızdan emin olun. Bu, izin verilen alan adlarının beyaz listesiyle karşılaştırılarak kontrol edilmesini ve tanınmayan host'lara yönelik tüm isteklerin reddedilmesini veya yeniden yönlendirilmesini içermelidir. Bunun nasıl yapılacağını tam kestiremiyorsanız framework'ün dokümasyonuna bakabilirsiniz. Örneğin, Django framework'ü ayarlar dosyasında "ALLOWED_HOSTS" seçeneği verir. Bu yaklaşım, Hot Header Injection saldırılarına maruz kalma oranınızı azaltacaktır.

Host Header Bastırmayı Desteklememe

Bu tür saldırılara yol açabilecek ek başlıkları desteklememek de oldukça önemlidir. Ama bu tip ayarlar vasayılan olarak gelebilir ve bu yüzden kontrol edilmelidir.

Beyaz Liste'de İzin Verilen Alan Adları

Yoğun altyapıda routing-based saldırıları önlemek için de load balancer'ınızı veya herhangi bir reverse proxy'lerinizi sadece beyaz listenizde bulunan izin verdiğiniz alan adlarına yönlendirecek şekilde konfigüre etmelisiniz.

Internal-Only Virtual Host Kullanırken Dikkatli Olun

Sanal hosting kullanırken, internal-only web sitelerini ve uygulamaları halka açık içerikle aynı sunucuda barındırmaktan kaçınmalısınız. Aksi takdirde saldırganlar, Host Header manipülasyonu yoluyla dahili alanlara erişebilir.

Çeviri notları:

*IPv4 adresi tükenmesi, ayrılmamış IPv4 adresleri havuzunun tükenmesidir. Orijinal İnternet mimarisinde 4,3 milyardan daha az adres bulunduğundan, İnternet'in çarpıcı bir büyüme yaşamaya başladığı 1980'lerin sonlarından bu yana tükenme bekleniyordu.
*Virtual Hosting, Web sunucusunun yazılımsal olarak bölümlere ayrılarak, her kısmın birbirinden özerk, terminal gibi çalışmasına olanak sağlayan hosting türüdür. Bir alan adına birden fazla IP numarası atanabilir. Bu yoğun talep olan hallerde geçerlidir. Wikipedia.org, yahoo.com, google.com gibi adreslerde bu çok olur.
*SaaS: Hizmet olarak yazılım kullanıcılara internet üzerinden bulut tabanlı uygulamalara erişim ve kullanım olanağı sağlayan, merkezi olarak barındırılan, aboneliğe bağlı bir lisanslama ve dağıtım modeli olarak tanımlanmaktadır. E-posta servisleri, elektronik takvim ve çeşitli ofis uygulamaları yaygın kullanım alanlarıdır.
*Dedicated Servers: Dedicated server sadece bir müşteri için ayrılmış web sunucusudur. Shared hostingde çok sayıda web sitesi aynı sunucuda barındırılırken dedicated serverlar sadece bir müşteriye hizmet eder. Co-location’dan farkı, müşterinin kendi donanımını sağlamak zorunda olmamasıdır.
*CDN: Bir web sitesinin içeriğini en düşük ağ ve işlem gecikmesi ile yani en hızlı bir şekilde kullanıcılara ulaştırmak üzere coğrafi olarak farklı bölgelerde konumlandırılmış sunucu kümesine verilen isimdir.

Çeviren @Gauloran
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.