1. Anasayfa
  2. Linux

HSTS Eksikliği (RFC 6797) HTTPS Sunucularında Sık Görülen Güvenlik Açığının Giderilmesi


HTTP Strict Transport Security (HSTS) web tarayıcılarına bir siteye yalnızca HTTPS üzerinden bağlanmaları gerektiğini bildiren güvenlik mekanizmasıdır. Normalde bir kullanıcı tarayıcıya http://example.com yazdığında tarayıcı bu isteği HTTP üzerinden başlatır ve daha sonra HTTPS’e yönlendirilir. Bu kısa süreçte saldırganlar araya girip:

  • SSL Stripping (HTTPS bağlantısını HTTP’ye düşürme),
  • Session Hijacking (çerezleri çalarak oturum ele geçirme),
  • Downgrade Attack (kullanıcıyı zayıf veya eski protokollere yönlendirme) gibi saldırılar gerçekleştirebilir.

HSTS etkinleştirildiğinde tarayıcı ilk başarılı HTTPS bağlantısından sonra siteyi yalnızca HTTPS üzerinden ziyaret etmeyi zorunlu kılar.

Özetle: HSTS, HTTPS’i “opsiyonel” değil “zorunlu” hale getirir.

Zafiyetin Ciddiyet Derecesi

  • Severity Rating: Orta (Medium)
  • HSTS olmaması HTTPS’i tamamen işlevsiz kılmaz; ancak kullanıcılar aktif saldırılara karşı savunmasız kalır.
  • Özellikle bankacılık, sağlık, e-ticaret gibi hassas veriler işleyen sitelerde HSTS eksikliği büyük bir risk oluşturur.

Zafiyetin Tespiti

1. Nessus ile Tespit

  • Nessus Plugin ID 142960 kullanılarak sunucuda HSTS eksikliği kolayca saptanabilir.

2. testssl.sh ile Manuel Kontrol

  1. Aracı indirin: testssl.sh
  2. Aşağıdaki komutu çalıştırın: testssl.sh –headers yourdomain.com:443
  3. Eğer çıktıdaki “Strict Transport Security” satırı boşsa veya “not configured” yazıyorsa → HSTS devre dışı demektir.

Çözüm: HSTS Nasıl Etkinleştirilir?

HSTS, sunucuya basit bir HTTP header eklenerek aktif hale getirilir.

Apache için

  1. Konfigürasyon dosyasını açın sudo nano /etc/httpd/conf/httpd.conf (Alternatif: /etc/httpd/conf.d/ssl.conf veya sanal host dosyası olabilir.)
  2. HSTS Header ekleyin
    <VirtualHost *:443> bloğuna ekleyin: Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
    • max-age=31536000 → 1 yıl boyunca HTTPS zorunlu tutulur.
    • includeSubDomains → Alt alan adları da HTTPS zorunluluğuna dahil edilir.
  3. Servisi yeniden başlatın sudo systemctl restart httpd

Nginx için

  1. Konfigürasyon dosyasını açın sudo nano /etc/nginx/nginx.conf veya /etc/nginx/sites-available/example.conf
  2. Server bloğuna ekleyin add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
  3. Servisi yeniden başlatın sudo systemctl restart nginx

Rollback (Geri Alma İşlemi)

Yanlış ayar sonrası erişim sorunu yaşarsanız, HSTS satırını kaldırarak geri dönüş yapabilirsiniz.

Apache’de:

sudo nano /etc/httpd/conf/httpd.conf

HSTS satırını silin:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

Servisi yeniden başlatın:

sudo systemctl restart httpd

Nginx’te:

sudo nano /etc/nginx/nginx.conf

HSTS satırını silin:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

Servisi yeniden başlatın:

sudo systemctl restart nginx

Fix Sonrası Doğrulama

Nessus ile

  • Plugin ID 85582 kullanılarak tarama yapılır. Artık HSTS’nin etkin olduğu görülmelidir.

testssl.sh ile

testssl.sh –headers yourdomain.com:443

Beklenen çıktı:

Strict Transport Security (HSTS)      max-age=31536000; includeSubDomains

En İyi Uygulamalar (Best Practices)

HSTS’yi etkinleştirmek tek başına yeterli değildir. Güvenliği artırmak için şu önerileri dikkate alın:

  1. Kısa süreli max-age ile test edin
    İlk denemelerde max-age=300 (5 dakika) gibi kısa bir değer verin. Sorun olmadığından emin olduktan sonra 31536000 (1 yıl) değerine yükseltin.
  2. Preload listesine eklenin
    Tarayıcı üreticilerinin yönettiği HSTS preload list’e sitenizi ekleyin. Böylece tarayıcı, siteye ilk bağlantıda bile HTTP üzerinden deneme yapmaz.
    https://hstspreload.org/
  3. Alt alan adlarını unutmayın
    includeSubDomains parametresi ile www, api, mail gibi alt alan adlarını da kapsayın.
  4. HTTPS yönlendirmelerini HSTS ile pekiştirin
    Tüm HTTP trafiğini HTTPS’e yönlendirin. HSTS, bu güvenliği tamamlayıcı rol oynar.