SSL Sertifika Analizi Açık Port Tespiti Web Uygulama Tarama DNS Güvenlik Denetimi HTTP Başlık Analizi Yanlış Yapılandırma Tespiti Yazılım Parmak İzi Alt Alan Adı Tarama
SSL Sertifika Analizi Açık Port Tespiti Web Uygulama Tarama DNS Güvenlik Denetimi HTTP Başlık Analizi Yanlış Yapılandırma Tespiti Yazılım Parmak İzi Alt Alan Adı Tarama

Tüm Kayıtlar

Kategori Güvenlik Yapılandırma Hatası / Taşıma Katmanı Koruması
Tipik Önem Derecesi Orta
OWASP A05:2021 – Güvenlik Yapılandırma Hatası
CWE CWE-319 – Hassas Bilgilerin Düz Metin Olarak İletilmesi
İlgili RFC RFC 6797 – HTTP Strict Transport Security (HSTS)
Diğer İsimler Eksik HSTS, Strict-Transport-Security başlığı yok, HSTS tanımlı değil
Etkilenen Sistemler Strict-Transport-Security yanıt başlığı eksik olan HTTPS etkin her web uygulaması veya API uç noktası

Genel Bakış

HTTP Strict Transport Security (HSTS), RFC 6797'de tanımlanan bir web güvenlik politikası mekanizmasıdır. Bu mekanizma, tarayıcılara belirli bir süre boyunca bir siteyle yalnızca HTTPS üzerinden iletişim kurmasını bildirir. Strict-Transport-Security yanıt başlığı eksik olduğunda, tarayıcılar HTTP ve HTTPS'yi eşit derecede kabul edilebilir taşıma protokolleri olarak ele alır. Bu durum, sunucu HTTP'den HTTPS'ye yönlendirme (redirect) uygulasa bile kullanıcıları SSL soyma saldırılarına ve istem dışı düz metin iletişimine karşı savunmasız bırakır.

Sensagraph, web varlıklarını sürekli tarama sürecinde eksik veya hatalı yapılandırılmış HSTS başlıklarını otomatik olarak tespit eder.

Nasıl Çalışır?

HSTS olmadan aşağıdaki saldırı yüzeyi ortaya çıkar:

  • İlk ziyaret açığı: Bir kullanıcının siteye yaptığı ilk istek (ya da HSTS önbellek girişinin süresi dolduktan sonra yapılan istek) genellikle sunucunun HTTPS yönlendirmesinden önce düz HTTP olarak gönderilir. Ağ üzerinde konumlanan bir saldırgan bu ilk isteği yakalayabilir.
  • SSL soyma (SSL stripping): Ortadaki adam (MitM) saldırısı gerçekleştiren bir saldırgan, sslstrip gibi araçlarla HTTPS bağlantısını sessizce HTTP'ye düşürebilir. Sunucu 301/302 yönlendirmesi gönderir; ancak saldırgan bunu keser ve bağlantıyı HTTP üzerinden proxy'ler; kurbanın tarayıcısı yalnızca HTTP alır.
  • Karma içerik ve yer imi sorunları: http:// varyantını yer imine ekleyen veya doğrudan yazan kullanıcılar HTTPS'yi tamamen atlar; HSTS olmadan tarayıcı kaynaklı bir yükseltme de gerçekleşmez.
  • Çerez hırsızlığı: Secure bayrağı taşımayan oturum çerezleri, düşürülmüş HTTP bağlantısı üzerinden iletildiğinde oturum ele geçirme (session hijacking) saldırılarına zemin hazırlar.
  • Süresi dolmuş veya eksik max-age: max-age=0 ile gönderilen bir başlık HSTS'yi fiilen iptal eder ve başlığın hiç bulunmamasıyla aynı riski doğurur.

Strict-Transport-Security başlığının söz dizimi şu şekildedir:

Strict-Transport-Security: max-age=<saniye>[; includeSubDomains][; preload]

Tarayıcı geçerli bir HSTS başlığı aldıktan sonra, max-age süresi boyunca söz konusu domain için tüm HTTP isteklerini otomatik olarak HTTPS'ye yükseltir; ilk HTTP isteğini göndermez.

İş Etkisi

HSTS'nin yokluğu, özellikle kimlik doğrulama, ödeme veya kişisel veri işleyen uygulamalar için ciddi sonuçlar doğurabilir:

  • Kimlik bilgisi ve oturum hırsızlığı: Ortak ağlarda (örn. halka açık Wi-Fi) bulunan saldırganlar, SSL soyma veya HTTP trafiğinde pasif dinleme yoluyla giriş bilgilerini ve oturum token'larını ele geçirebilir.
  • Veri bütünlüğü ihlali: HTTP üzerinden sunulan içerikler, MitM saldırganı tarafından kötü amaçlı komut dosyaları, reklamlar veya yönlendirmelerle zehirlenebilir.
  • Yasal ve uyumluluk riski: Taşıma güvenliği kontrolleri zayıf veya atlatılabilir durumdaysa PCI DSS, HIPAA ve KVKK/GDPR kapsamındaki aktarım sırasında veri koruma yükümlülükleri karşılanmamış sayılabilir.
  • İtibar zararı: Kullanıcı verilerini açığa çıkaran başarılı bir MitM saldırısı, müşteri güvenini sarsar ve kamuoyu bildirimi yükümlülüğü doğurabilir.

Nasıl Düzeltilir?

  1. Tüm HTTPS yanıtlarına Strict-Transport-Security başlığı ekleyin. Başlığı web sunucusu veya uygulama katmanında yapılandırın. Önerilen minimum max-age değeri 31536000 saniyedir (bir yıl):
    Strict-Transport-Security: max-age=31536000; includeSubDomains
  2. includeSubDomains direktifini ekleyin — böylece HSTS zorunluluğu tüm alt domainlere genişler ve saldırganların HTTP üzerinden bir alt domaini hedef alarak HSTS'yi atlatması engellenir.
  3. preload direktifini ekleyin ve domaininizi HSTS Ön Yükleme Listesi'ne gönderin; bu işlem ilk ziyaret açığını tamamen ortadan kaldırır. Ön yükleme, includeSubDomains ve en az 31536000 değerinde bir max-age gerektirir.
  4. Başlığı yalnızca HTTPS üzerinden gönderin. HTTP üzerinden gönderilen HSTS başlıkları tarayıcılar tarafından yoksayılır ve yapılandırma sorunlarına yol açabilir.
  5. HSTS'yi kasıtlı olarak iptal etmek dışında max-age=0 ayarlamaktan kaçının (örn. bir domainde HTTPS'yi devre dışı bırakmadan önce).
  6. Tüm HTTP trafiğini HTTPS'ye yönlendirin (HTTP 301), ardından HSTS'ye dayanın; böylece başlık tüm istemcilere iletilir.
  7. Yaygın web sunucularında yapılandırmayı doğrulayın:
    • Nginx: add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    • Apache: Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
    • IIS: HTTP Yanıt Başlıkları özelliği veya web.config aracılığıyla özel bir yanıt başlığı ekleyin.

Kaynaklar

Sıkça sorulan sorular

Hayır. HTTP'den HTTPS'ye yönlendirmeler, yalnızca ilk istek sunucuya ulaştıktan sonra etkili olur. Ağ üzerinde konumlanan bir saldırgan, yönlendirme alınmadan önce bu ilk HTTP isteğini yakalayabilir. HSTS ise tarayıcıya sonraki ziyaretlerde HTTP'yi tamamen atlamasını emreder ve bu açığı kapatır.

RFC 6797 bir minimum değer belirtmemekle birlikte, güvenlik en iyi uygulamaları ve HSTS ön yükleme listesi gereksinimleri en az 31536000 saniye (bir yıl) öngörür. Daha kısa değerler koruma penceresini daraltır ve tarayıcı önbellekte süre dolduğunda maruziyeti artırır.

Yalnızca tüm alt domainleriniz yalnızca HTTPS üzerinden erişilebilir durumdaysa güvenlidir. Bazı alt domainler hâlâ yalnızca HTTP sunuyorken includeSubDomains eklenirse, HSTS politikasını önbelleğe almış kullanıcılar bu alt domainlere erişemez.

HSTS ön yüklemesi, domaininizi doğrudan tarayıcılara (Chrome, Firefox, Safari, Edge) yerleştirilmiş bir listeye ekler. Bu sayede tarayıcı, sitenize hiç bağlanmadan ve HSTS başlığı almadan önce bile HTTPS'yi zorunlu kılar; ilk ziyaret açığını tamamen ortadan kaldırır.

Evet. Pek çok çerçeve (örn. Django'nun SECURE_HSTS_SECONDS ayarı, Spring Security'nin hsts() yapılandırması, ASP.NET Core'un UseHsts() ara yazılımı) HSTS başlığını uygulama katmanında enjekte etmeyi destekler. Her iki yaklaşım da geçerlidir; ancak sunucu düzeyinde yapılandırma genellikle statik varlıklar ve hata sayfaları dahil tüm yanıtları kapsar.