HTTP Strict Transport Security, nâmı diğer HSTS, kullanıcıların internet tarayıcılarını her talep için HTTPS kullanmaya zorlayarak downgrade adı verilen saldırılara karşı çözüm üretmek ve tüm trafiğin güvenliğini sağlamak adına güzel bir çözümdür.
HSTS aktif etmek için aşağıdaki HTTP Header bayrağı yeterlidir.
Strict-Transport-Security: max-age=16070400; includeSubDomains
İnternet tarayıcısı bu bayrağı gördükten sonra max-age değişkeninde tanımlanan saniye kadar cache’te tutulacaktır. Belirlenen bu zaman dilimi içerisinde kullanıcı tarafından oluşturulan tüm talepler doğrudan HTTPS olarak başlatılacaktır. Örneğin; kullanıcı https://www.mehmetince.net veya protokol tanımlamasını belirtmeden direk mehmetince.net olarak web sitesine erişim yapılmak istenirse, internet tarayıcısı otomatik olarak protokolü https olarak belirtecek ve güvenli bağlantı gerçekleştirecektir.
Preloaded HSTS
HTTPS hizmet veren web sitelerinin kullanıcılarına yapılan MITM saldırısında, saldırgan kendi sertifikasını kullanıcıya göndermektedir. Normal şartlar altında internet tarayıcıları bir hata sayfası göstererek “Beni bu sayfadan kurtar” veya “Ayrıcalık tanı. Devam et!” butonlarını sunmaktadır. Bu uyarıya rağmen son kullanıcının olayı fark etmeyip devam ettiği durumlar maalesef çok fazla olmakta.
Bu bağlamda, kullanıcıları korumanın yöntemi gene HSTS özelliğinde. Chrome ve Firefox’un bir arada ortaklaşa kullandığı HSTS Public key fingerprints havuzu bulunmakta. Bu havuz, belli başlı firmaların hizmet verdiği sertifikaların hash’lerinin bulunduğu bir veri tabanı. Eğer kullanıcı bu listedeki web sitelerinden herhangi birine gitmek istediğinde internet tarayıcısı kendisine gelen sertifikanın imzasını alarak kendi veri tabanındakiler ile doğru mu ? diye kıyaslama yapmaktadır. Olası bir MITM saldırısında imzalar uyuşmadığı için hata sayfası çıkartacaktır. Ama bu sefer kullanıcının “Ayrıcalık tanı. Devam et!” butonu yoktur. Hatta Burp Suite ile twitter’da zafiyet aramak için proxy tanımlaması yapan arkadaşlar bu hatayı gayet iyi bilmektedir :)
https://code.google.com/p/chromium/codesearch#chromium/src/net/http/transport_security_state_static.json addressed HSTS ön tanımlamalarını görebilirsiniz.
Özetle HSTS ile sertifika kontrolü ve tüm trafiği HTTPS içerisinde göndermenize yarayan son derece önemli bir internet tarayıcısı güvenlik özelliğidir.
OWASP’ın HSTS’i olası saldırı senaryolarını anlattığı aşağıdaki kısa videoyu izlemenizi öneririm.
Olası saldırı senaryolarına karşı HSTS çözümleri
Benim en çok karşılaştığım olaylardan bir tanesine HSTS tam olarak çözüm getirmektedir. Karşılaştığım olay ise şu şekilde;
E-ticaret sitesi kullanıcının login işlemlerini www.eticaret.com/login/ linki üzerinden gerçekleştirmektedir. Bu nedenle sadece ve sadece bu link üzerinde HTTPS trafik aktif edilmektedir. Kullanıcının herhangi bir ürünü ve magazayı görüntülediği durumlarda trafik HTTP trafiktir. Örneğin; www.eticaret.com/kirmizi-ayakkabi/.
Burada ki problem temel bir güvenlik / performans ters orantısıdır. Tüm trafiği HTTPS’e geçirerek sunucuda oluşacak yoğunluğu önlemek adına sadece ve sadece login ve ödeme sayfalarında HTTPS trafik aktif edilmektedir.
Bu mimari kullanıcıların username & password ikililerini korusa bile, oturum sonucunda kullanıcıya verilen Session Key‘in açık bir trafik olan HTTP üzerinden kullanıcıya gönderilip alınmasıdır. HSTS ile hem sertifika kontrolü, hemde CSS/JS eklemeleride dahil olmak üzere tüm trafik HTTPS kullanımına zorlanmalıdır.
Peki ülkemizde hangi firmalar HSTS kullanmakta ?
Kendi sertifikanızın imzasını Chrome ve Firefox ön tanımlı listesine eklemek ücretsiz ve son derece kolay olduğunu düşünürsek ( https://hstspreload.appspot.com ) hangi banka veya e-ticaret şirketinin bu özelliği devreye aldığını benim gibi sizde merak ediyor olmalısınız ? Hatta ön tanımlı olmasını geçelim, hangi firmalar Strict-Transport-Security tanımlamasını kullanmaktadır ?
Malesef ben herhangi bir firma/banka göremedim… Umarım bu yazı, internet tarayıcılarının bu enfes güvenlik özelliğini kullanmaya teşvik olur.