Siber Uzay'ın Haber Platformu

H4cktimes Youtube Kanalı

Yeni bir Web Saldırısı Keşfedildi! CPDoS (Önbellek Zehirlemesi ile Hizmet Reddi)

0

CPDoS Nedir?

Cache-Poisoned Denial-of-Service (CPDoS / Önbellek Zehirlemesi ile Hizmet Engelleme), web kaynaklarını ve web sitelerini devre dışı bırakmayı amaçlayan yeni bir web saldırısıdır.

CPDoS Nasıl çalışır?

Temel saldırı akışı aşağıda açıklanmıştır:

  1. Saldırgan, bazı web sunucuları tarafından sağlanan kurban kaynaklarını hedef alan kötü amaçlı bir başlık içeren basit bir HTTP isteği gönderir. İstek, ara önbellek tarafından işlenirken, kötü amaçlı başlık göze çarpmadan kalır.
  2. Önbellek, hedeflenen kaynağın yeni bir kopyasını depolamadığı için isteği kaynak sunucuya iletir. Kaynak sunucudaki istek, içerdiği kötü niyetli başlıktan dolayı bir hataya neden olur.
  3. Sonuç olarak, kaynak sunucu beklenen kaynak yerine önbellek tarafından saklanan bir hata sayfası döndürür.
  4. Saldırgan, yanıt olarak bir hata sayfası aldığında saldırının başarılı olduğunu bilir.
  5. Saldırgan, sonradan gelen isteklerle hedef kaynağı ele geçirmeye çalışır.
  6. Saldırgan, orijinal içerik yerine önbelleğe alınmış hata sayfasını alır.

 

CPDoS ile kötü niyetli bir istemci, içerik dağıtım ağları (CDN‘ler) aracılığıyla dağıtılan veya proxy önbelleklerinde barındırılan herhangi bir web kaynağını engelleyebilir. Böylece, saldırgan güvenlik güncellemeleri, javascript dosyaları veya bu kaynaklara erişmeye çalışan her istemci için web sitesi gibi önemli internet kaynaklarını devre dışı bırakabilir. Saldırganın hazırladığı tek bir isteğin, daha sonraki tüm isteklerin hedeflenen içeriğe erişmesini engellemek için yeterli olduğunu unutmayın…

Kaç Tip CPDoS Varyasyonu var?

  • HTTP Header Oversize (HHO)
  • HTTP Meta Character (HMC)
  • HTTP Method Override (HMO)

HTTP Header Oversize (HHO)

Bir HTTP istek başlığı, ara sistemler ve web sunucuları için önemli bilgiler içerir. Önbellekle ilgili başlık alanlarını veya istemci tarafından desteklenen medya türlerini, dilleri ve kodlamaları hakkındaki meta verileri içerir. HTTP standartları, HTTP istek başlıkları için herhangi bir boyut sınırı tanımlamaz. Sonuç olarak, ara sistemler, web sunucuları ve web framework sınırlarını kendi başlarına belirler. Apache HTTPD gibi çoğu web sunucusu ve proxy’si  için örnek verecek olursak, arabellek taşması isteği veya ReDoS saldırıların hafifletilmesi için yaklaşık 8,192 bayt’lık bir istek başlığı boyutu sınırı sağlar. Bununla birlikte, 8,192 bayt’tan daha büyük sınırlar belirleyen ara sistemler de vardır. Örneğin, Amazon Cloudfront CDN, 20,480 bayt’a kadar izin verir. İstek başlığı boyut sınırları açısından bu anlamlı boşluk, hizmet reddine yol açabilecek bir önbellek zehirlenmesi saldırısı yapmak için kullanılabilir. ​

HHO CPDoS saldırıları, bir web uygulamasının kaynak sunucudan daha büyük bir başlık boyut sınırı kabul eden bir önbellek kullandığı senaryolarda çalışır. Böyle bir web uygulamasına saldırmak için, kötü niyetli bir istemci, kaynak sunucu tarafından desteklenen boyuttan daha büyük ancak önbellek tarafından desteklenen boyuttan daha küçük bir başlık içeren bir HTTP GET isteği gönderir. Bunu yapmak için, saldırganın iki seçeneği vardır. İlk olarak, aşağıdaki Ruby kod parçacığında gösterildiği gibi birçok kötü amaçlı başlığa sahip bir istek üstbilgisi hazırlar. Diğer seçenek, büyük boyutlu bir anahtar veya değere sahip tek bir başlık eklemektir.

Aşağıdaki görselde, kötü niyetli birinin yukarıdaki kod parçası ile bir istek oluşturup gönderdiği HHO CPDoS saldırı akışı gösterilmektedir. Önbellek başlık büyüklüğü 20,480 bayt boyut sınırının altında kaldığından, tüm başlıkları içeren bu isteği son noktaya iletir. Ancak web sunucusu bu isteği engeller ve istek başlığı, başlık boyut sınırını aştığı için bir hata sayfası döndürür. Durum kodunu (404 Bad Request) içeren bu hata sayfası önbellekte saklanır ve reddedilen kaynağı hedefleyen sonraki tüm isteklere,  orijinal içerik yerine bir hata sayfası verilir.

Aşağıdaki videoda, Cloudfront’ta barındırılan bir örnek web uygulaması ile HHO CPDoS saldırısını gösteriyor. Saldırıda, gömülü web kaynakları, web sayfasının bazı bölümlerini ve son olarak da tüm sayfanın tamamı hata sayfalarıyla değiştirildi.

HTTP Meta Character (HMC)

HTTP Meta Character (HMC) CPDoS saldırısı, HHO CPDoS saldırısına benzer şekilde çalışır. Bu saldırıda, büyük boyutlu bir başlık göndermek yerine, zararlı bir meta karakter içeren bir istek başlığına sahip önbelleği atlamaya çalışır. Meta karakterler, örneğin satır sonu (/), satır başı (\n) ve satır besleme (\r) gibi kontrol karakterleri olabilir.

Tanınmayan bir önbellek, böyle bir isteği engellemeden veya meta karakterleri temizlemeden kaynak sunucuya iletir. Orijinal sunucu, böyle bir isteği zararlı meta karakterleri içerdiğinden zararlı olarak sınıflandırır. Sonuç olarak, kaynak sunucu önbellek tarafından depolanan ve yeniden kullanılan bir hata mesajı döndürür.

 

HTTP Method Override Attack (HMO)

HTTP standardı, web sunucuları ve istemcileri web’de işlem yapmak için çeşitli HTTP yöntemleri sunar. GET, POST, DELETE ve PUT muhtemelen web uygulamalarında ve REST tabanlı web hizmetlerinde en çok kullanılan HTTP yöntemleridir. Bununla birlikte, proxy’ler (vekil sunucular), yük dengeleyicileri (load balancer), önbellek ve güvenlik duvarı gibi birçok ara sistem genelde GET ve POST‘u desteklemektedir. Bu, DELETE ve PUT olan HTTP isteklerinin basitçe engellendiği anlamına gelir. İstek sunucuya ulaştığında, başlık web uygulamasına istek satırındaki HTTP yöntemini geçersiz kılmak için karşılık gelen başlık değerinde olanı kullanmasını söyler.

Kod parçacığı, X-HTTP-Method-Override başlığını kullanarak DELETE isteklerini yasaklayan bir güvenlik politikasını atlayabilen bir istek gösterir. Sunucu tarafında bu POST isteği bir DELETE isteği olarak yorumlanacaktır.

Ara sistemler farklı HTTP yöntemlerini engellediğinde, başlıkları geçersiz kılan bu yöntem bazı senaryolarda çok kullanışlıdır. Bununla birlikte, bir web uygulaması böyle bir başlığı destekliyorsa ve performansı optimize etmek için ters proxy önbellek veya CDN gibi bir web önbellekleme sistemi kullanıyorsa, kötü niyetli bir istemci bir CPDoS saldırısı yapmak için bunu kullanabilir. Yöntem, aşağıdaki görselde ilgili CPDoS saldırısının aşamalarını göstermektedir.

Burada saldırgan, başlığında X-HTTP-Method-Override içeren bir bir GET isteği gönderir. Güvenlik açığı bulunan bir önbellek, bu isteği, https://example.org/index.html kaynağını hedef alan iyi niyetli bir GET isteği olarak yorumlar. Bununla birlikte, web uygulaması, bu isteği bir POST isteği olarak yorumlayacaktır, çünkü X-HTTP-Method-Override başlığı, sunucuya istek satırında HTTP yöntemini değiştirmesini söyler. Buna göre, web uygulaması POST’a dayalı bir yanıt verir. Hedef web uygulamasının, /index.html üzerinde POST için herhangi bir işletme mantığı uygulamadığını varsayalım. Bu gibi durumlarda, Play Framework 1 gibi web framework’leri 404 Not Found durum koduyla birlikte bir hata mesajı döndürür. Önbellek, hata koduyla döndürülen yanıtın, https://example.org/index.html hedefli GET isteğinin sonucu olduğunu varsayar. 404 Not Found durum kodunun HTTP Önbellekleme RFC 7231‘e göre önbelleğe alınmasına izin verildiğinden, önbellekler saklanır ve yinelenen istekler için bu hata yanıtını yeniden kullanır. Https://example.org/index.html adresini izleyen ve bir GET isteği yapan iyi niyetli kullanıcı, orijinal web uygulamasının başlangıç ​​sayfası yerine 404 Not Found durum koduyla birlikte depolanmış bir hata mesajı alır.

Aşağıdaki video, bir web uygulamasında bir HMO saldırısını anlatmaktadır. Burada, saldırgan, başlangıç ​​sayfasına erişilmesini engellemek için Postman aracını kullnmıştır.

Saldırıyı Hafifletme Yöntemleri

  • HHO ve HMC CPDoS saldırılarının başlıca nedenlerinden biri, savunmasız bir önbelleğin varsayılan olarak hata kodları içeren yanıtları yasa dışı olarak depolaması gerçeğidir. HTTP standardına göre buna izin verilmez. Web önbellekleme standardı yalnızca 404 Not Found, 405 Method Not Allowed, 410 Gone ve 501 Not Implemented hata kodlarını önbelleğe almanıza izin verir. Dolayısıyla, hata sayfalarını HTTP standardının politikalarına göre önbelleğe almak, CPDoS saldırılarını önlemek için ilk adımdır.
  • İçerik sağlayıcıları da ilgili hata durumu için uygun durum kodunu kullanmalıdır. Örneğin, birçok HTTP uygulaması tarafından kullanılan 400 Bad Request durum kodu büyük boyutlu başlıkları bildirmek için kullanılması uygun değildir.
  • Büyük boyutlu istek başlığı için doğru hata kodu 431 Request Header Fields Too Large olmalıdır. Bu hata mesajı herhangi bir web önbellekleme sistemi tarafından önbelleğe alınmaz.
  • HHO ve HMC CPDoS saldırılarına karşı bir diğer etkili önlem ise, hata sayfalarının önbelleğe alınmasını engellemektir. Bir başka yaklaşım, her hata sayfasına Cache-Control: no-store başlığını eklemektir. Diğer seçenek, önbellek yapılandırmasında hata sayfasını önbelleğe almayı devre dışı bırakmaktır. CloudFront veya Akamai gibi CDN’ler, bunun için yapılandırma ayarları sağlar.
  • CPDoS saldırılarını azaltmak için Web Uygulaması Güvenlik Duvarları (WAF / Web Application Firewall) da kullanılabilir. Ancak, kötü amaçlı içeriği kaynak sunucuya ulaşmadan önce engellemek için WAF’ların önbellek önüne yerleştirilmesi gerekir.

 

CPDoS saldırıları hakkında daha fazla bilgi için, araştırma makalesini okuyabilirsiniz.

 

Editör: İsmail Saygılı

Yorum Bırak

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.