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ığı:
Securebayrağı 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=0ile 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?
- 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-agedeğeri 31536000 saniyedir (bir yıl):Strict-Transport-Security: max-age=31536000; includeSubDomains includeSubDomainsdirektifini 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.preloaddirektifini 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,includeSubDomainsve en az 31536000 değerinde birmax-agegerektirir.- 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.
- HSTS'yi kasıtlı olarak iptal etmek dışında
max-age=0ayarlamaktan kaçının (örn. bir domainde HTTPS'yi devre dışı bırakmadan önce). - 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.
- 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.configaracılığıyla özel bir yanıt başlığı ekleyin.
- Nginx:
Kaynaklar
- RFC 6797 – HTTP Strict Transport Security (HSTS) – IETF
- OWASP Güvenli Başlıklar Projesi – Strict-Transport-Security
- OWASP Top 10 A05:2021 – Güvenlik Yapılandırma Hatası
- CWE-319 – Hassas Bilgilerin Düz Metin Olarak İletilmesi – MITRE
- Strict-Transport-Security – MDN Web Docs
- HSTS Ön Yükleme Listesi Başvurusu – hstspreload.org