TLS düzeyinde veri sıkıştırma, CRIME saldırısı (2012) ile çerez gibi gizli verilerin sıkıştırılmış trafiğin boyutundan tahmin edilebildiğini göstermiştir. Bu nedenle TLS sıkıştırması pratikte her yerde kapalı tutulur ve TLS 1.3 protokolden tamamen kaldırmıştır.
TLS sıkıştırması ile HTTP sıkıştırması farklıdır
- TLS compression: Şifreleme katmanında yapılır, kapatılmalıdır.
- HTTP gzip/brotli: Uygulama katmanındadır, performans için kullanılır. Yanıtta gizli bir değer (CSRF token gibi) ile kullanıcı girdisi birlikte yansıtılıyorsa BREACH saldırısı bu katmanı hedef alır; bu ayrı bir risktir.
Sunucuda durum kontrolü
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | grep -i compression
Beklenen çıktı Compression: NONE şeklindedir. Başka bir değer görürseniz sıkıştırma açıktır.
Kapatma
Apache 2.4'te seçenek SSLCompression yönergesidir ve 2.4.3 sürümünden beri varsayılan olarak kapalıdır. Açıkça belirtmek için:
SSLCompression off
Nginx'te bunun için ayrı bir yönerge yoktur; durum kullanılan OpenSSL derlemesine bağlıdır. Güncel dağıtım paketlerinde OpenSSL sıkıştırmayı varsayılan olarak devre dışı bırakır. Uygulamanız kendi TLS kütüphanesini kullanıyorsa (ör. eski Java sürümleri) sürümü güncellemek gerekebilir.
Kontrol listesi
- OpenSSL ve sunucu yazılımını güncelleyin.
- TLS 1.3 ve 1.2'yi etkinleştirin; eski protokolleri kapatın.
- Yukarıdaki komutla
Compression: NONEgörün. - Dış denetimde uyarı çıkıyorsa SSL kontrol aracıyla karşılaştırma yapın.
Neden CRIME tehlikeliydi?
Saldırgan, kurbanın tarayıcısına kendi ürettiği verileri gizli çerezle aynı istekte gönderttirir. Sıkıştırma tekrarlayan metni kısalttığından, tahmin doğru olduğunda paket boyutu küçülür ve saldırgan çerezi karakter karakter çıkarır. Şifreleme bu bilgi sızıntısını engellemez; bu nedenle çözüm sıkıştırmanın kapatılmasıdır.
Sunucu sertifikası seçimi için SSL sertifikaları sayfasına göz atabilirsiniz.