highway

HSTS ( HTTP Strict Transport Security ) ile HTTPS trafik güvenliği

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.

İ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.

  • Özgür Koca

    Tarayıcıların fingerprint veritabanını modifiye etmeye yönelik bir MITM gerçekleştirilebilir mi?

    • Biraz daha detaylı ifade edebilir misiniz ? Tam olarak nasıl bir senaryodan bahsediyoruz ? Benim anladığım HSTS kullanan siteleri ziyaret eden kullanıcılara yönelik MITM yaparak track etmek mi tıpkı HTML5 Canvas Fingerprinting ile yapıldığı gibi ?

      • TheOrder

        Hocam
        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ı.
        (Sizin yazıdan alıntı)
        Bu veritabınından gelen veriler yine mitm saldırsından görüneceğinden bunları modifiye ederek kullanıcıya aktararak doğrulamayı aşamazmıyız hani veritabanından gelen bilgiye bizim fingerprinti eklemek gibi

        • Bu veri tabanı bildiğim kadarıyla Chrome ve Firefox ile kurulum esnasında gelmekte. Ayrıca kurulum esnasında gelmiyor olsa bile bu veriler gene güvenilir otoriteler tarafından imzalanmış geçerli SSL sertifikası ile hizmet sunan bir web adresi üzerinden temin edilmektedir diye düşünüyorum.

          • TheOrder

            Haklısınız Hocam Adamlar Benden 10 Adım ilerde XD