25 Ağustos 2019 Pazar

HTTP Güvenlik Headerları

Headerlar, HTTP'nin hem istek hem de yanıt mesajlarında yer alan ve mesajın meta bilgilerini taşıyan bölümlerdir. Meta, bilgiyi tanımlayan bilgi anlamına gelmektedir. HTTP 1.0 ve 1.1 versiyonları ile protokole eklenmiştir.
Bu meta bilgileri, istekler için, talep edilen mesajın dili, tipi, browserın sakladığı yetki bilgileri, önbellekte tutulan içeriğe ait bilgiler olabileceği gibi; yanıt yani response mesajlarında ise, içeriğin boyutu ve tipi, bellekte saklanma tercihleri, sunucu bilgileri, tarih ve saati, istemci tarafında set edilecek credentiallar gibi bir takım bilgileri içerebilir. Güvenlik headerları ise istemci tarafında bir dizi güvenlik önlemini devreye alan, bir dizi davranışı etkinleştiren ya da deaktif eden HTTP yanıt headerlarıdır.

X-Frame-Options

x-frame-options
2009 yılında Clickjacking başta olmak üzere UI Redressing saldırılarına karşı önerilen ve bugün tüm major browserlar tarafından desteklenen bir güvenlik headerıdır.
UI Redressing saldırıları basit olarak, hedef sitenin bir iframe içerisinde yüklenmesi esasına dayanıyor. Saldırıda amaçlanan, hedef sitedeki bilgilerin, kullanıcı kandırılarak, saldırgan sitesindeki arayüzlere girilmesini sağlamak ya da kullanıcının, MASUM görünümlü saldırgan site üzerinde gerçekleştirdiğine inandığı/düşündüğü hareketleri, hedef siteye yönlendirmek ve kullanıcı yetkileriyle işlem gerçekleştirmektir.
Clickjacking saldırı yönteminde saldırgan hedef siteyi opacity değeri düşük bir iframe içerisinde yükleyerek, ziyaretçinin transparan hale gelen hedef sitenin altında gördüğü masum sitede işlem yapıyormuş hissine kapılmasını sağlar. Böylece saldırgan, kurbanı zararsız görünen bağlantılara tıklamaya ikna ederken, hedef sitedeki bir dizi aksiyonun tetiklenmesine yol açar.
x-frame-options-2
Resim: https://www.tinfoilsecurity.com/blog/what-is-clickjacking
Resimde görülen örnekte eBay sitesi opacity değeri düşük bir iframede yükleniyor. Bu sebeple kullanıcı tarafından görülemiyor. eBay'in yüklendiği iframe'in opacity değeri düşük olduğu için Buy butonunu değil de Free butonunu görüyor. Kullanıcı Free butonuna bastığında, aslında bu butonun üzerine binen eBay'deki Buy butonuna tıklamış oluyor. Buy butonuna tıklandığında da eBay sitesi, bu buton için kurgulanan gerekli işlemleri yapıyor.
Bu işlemlerin tamamı kullanıcının (ya da kurbanın) kendi browserı üzerinden gerçekleştiği için eBay için tetiklenen bu isteğe, browser kendisinde tuttuğu credentials (örneğin Cookie) bilgilerini de ekleyecek. (Not: Bu anlatılan tamamen hayali, anti-CSRF token gibi güvenlik mekanizmalarının söz konusu olmadığı ve X-Frame-Options güvenlik headerının olmadığı bir örnek vakadır.)
Clickjacking, kullanıcılarımızı, yani zincirin zayıf halkasını hedef alan bir saldırıdır. Bu saldırıdan korunmak için Frame Busting başta olmak üzere, pek çok yöntem denenmiştir. Bunlardan en geçerli olan X-Frame-Options yöntemi ise 2009 yılında Microsoft tarafından IE browserlarına eklenmiştir.
Ziyaretçilerimizi Clickjacking vb. saldırılardan korunmanın en temel yolu, sayfalarımızın iframe, frame gibi yollarla embed edilmesini engellemek ya da buna bir kısıtlama getirmektir. Bunu yapmak için güvenlik headerlarından biri olan X-Frame-Options'ı kullanabiliriz.
X-Frame-Options değerinin, alabileceği üç farklı değer vardır.
X-Frame-Options: DENY | SAMEORIGIN | ALLOW-FROM URL
DENY: Sitenin hiçbir şekilde iframe ya da benzeri bir yol ile embed edilmesine izin vermez.
SAMEORIGIN: Sitenin yalnızca şema + hostname + port olarak eşleştiği bir site tarafından embed edilmesine izin verir. Örneğin, https://www.example.com yalnızca https://www.example.com üzerinden yüklenebilir.
ALLOW-FROM URL: Yalnızca belirtilen URL tarafından sitenin embed edilmesine izin verir.
X-Frame-Options'da iki önemli noktayı hatırlatmakta fayda var. Chromium tabanlı browserlarda X-Frame-Options kısmi olarak desteklenmektedir. Örneğin ALLOW-FROM özelliği kullanılamamaktadır.
ALLOW-FROM URL Parametresi ile yalnızca 1 adet domain'i whitelist edip, sitemizi iframe içerisinde yüklemesine izin verebiliriz.
Önemi noktalar
  • X-Frame-Options headerı bütün sayfaların HTTP yanıtlarında yer almalıdır.
  • X-Frame-Options yerine, Content-Security-Policy frame-ancestors direktifi kullanılabilir.
Content-Security-Policy: frame-ancestors 'none'; // Hiçbir URL sayfayı iframe içerisinde yükleyemez.
Content-Security-Policy: frame-ancestors 'self'; // SAMEORIGIN parametresindeki işlevin aynısı.
X-Frame-Options ile birlikte yalnızca bir URL'i whitelist'e alırken, CSP frame-ancestors ile birden fazla domain'i, güvenilir URL'ler listesinde belirtip, sayfalarımızı iframe olarak yüklemelerine izin verebiliriz.
Devamı

0 comentários:

Yorum Gönder