|
Kama Crusher'ın birkaç gün önce yayımlanan söylentisi "Halka açık WiFi ile internet erişimi, banka hesaplarının güvenliğini tehlikeye atacak mı? Makale, ağ şifreli iletim için HTTPS kullanımında bazı durumları tanıtıyor ve yanıttan anlaşıldığı kadarıyla hâlâ anlaşmazlıklar var. İnternet giderek daha popüler hale geldikçe, uygulama giderek daha yaygın hale geliyor ve bazı ağ güvenliği sorunları da internet kullanıcılarının dikkatini çekecek; burada TLS/SSL (genellikle HTTPS dediğimiz şey) ilkesinden uygulamaya kadar ne olduğunu ve HTTPS ile ilgili güvenlik tekniklerini kullanırken hangi sorunlara dikkat edilmesi gerektiğini görmek için konuşacağız. Siber güvenlik, kişisel bilgisayarların, protokollerin, veri iletiminin ve yazılım geliştirme şirketleri ile web sitelerinin güvenliğini içeren bütünsel bir olaydır. Umarım gelecekte güvenlikle ilgili konuları yavaş yavaş açıklayarak, daha fazla insan ağ güvenliğini anlayabilir ve böylece ağı daha güvenli kullanabilirler. Makale uzun olacak ve şimdilik üç bölüme ayrılması planlanıyor: İlk bölüm esas olarak HTTPS ilkesini tanımlar; İkinci bölüm ise ağırlıklı olarak SSL sertifikası doğrulama sürecini ve kullanım için bazı önlemleri anlatır. Üçüncü bölüm bazı HTTPS saldırı örneklerini sunar. 1. HTTPS nedir?HTTPS'ten bahsetmeden önce, genellikle web'de gezinirken kullandığımız HTTP protokolünden bahsedelim. HTTP protokolü ile iletilen veriler şifresiz, yani açık metin olarak kullanılır; bu nedenle HTTP protokolü kullanılarak özel bilgi iletmek çok güvensizdir. Bu özel verilerin şifrelenip iletilabilmesini sağlamak için Netscape, HTTP protokolü tarafından iletilen verileri şifreleyen SSL (Secure Sockets Layer) protokolünü tasarladı ve böylece HTTPS'in doğuşunu sağladı. SSL'nin mevcut sürümü 3.0'dır; bu versiyon IETF (Internet Engineering Task Force) tarafından RFC 6101'de tanımlanmıştır ve ardından IETF tarafından SSL 3.0'ı yükseltmiştir; bu da RFC 2246'da tanımlanan TLS (Taşıma Katmanı Güvenliği) 1.0'ı ortaya çıkarmıştır. Aslında, mevcut HTTPS'imiz TLS protokolü, ancak SSL nispeten erken ortaya çıktığı ve hâlâ mevcut tarayıcılar tarafından desteklendiği için SSL hala HTTPS ile eşanlamlıdır, ancak TLS mi yoksa SSL mi olduğu geçen yüzyılın bir konusu, SSL'nin son sürümü 3.0 ve TLS gelecekte de bize şifreleme hizmetleri sunmaya devam edecek. TLS'nin mevcut sürümü 1.2'dir, RFC 5246'da tanımlanmıştır ve henüz yaygın olarak kullanılmamaktadır. Tarihle ilgilenenler için TLS/SSL'nin ayrıntılı bir açıklaması olan http://en.wikipedia.org/wiki/Transport_Layer_Security'ye bakabilirsiniz.
2. HTTPS güvenli mi?Cevap evet, güvenli. Önümüzdeki haftalarda, Google dünya genelindeki tüm yerel alan adları için HTTPS etkinleştirecek, kullanıcıların arama yapmadan önce sadece Google hesablarıyla giriş yapması yeterli ve tüm arama işlemleri TLS protokolü kullanılarak şifrelenecek, bkz: http://thenextweb.com/google/2012/03/05/google-calls-for-a-more-secure-web-expands-ssl-encryption-to-local-domains/。
3. HTTPS nasıl çalışırHTTPS, veri iletilmeden önce istemci (tarayıcı) ile sunucu (web sitesi) arasında bir el sıkışma gerektirir ve her iki tarafın şifre bilgileri el sıkışma işlemi sırasında belirlenir. TLS/SSL protokolü sadece şifrelenmiş iletim protokolleri seti değil, aynı zamanda sanatçılar tarafından özenle tasarlanmış bir sanat eseridir; assimetrik şifreleme, simetrik şifreleme ve HASH algoritmaları kullanılır. El sıkışma sürecinin basit bir açıklaması şöyledir:
- Tarayıcı, desteklediği bir dizi şifreleme kurallarını web sitesine gönderir.
- Web sitesi, bunlardan bir dizi şifreleme algoritması ve HASH algoritmasını seçer ve kimlik bilgilerini bir sertifika şeklinde tarayıcıya geri gönderir. Sertifika, web sitesi adresi, şifreleme açık anahtarı ve sertifikanın veren kişi gibi bilgileri içerir.
- Web sitesi sertifikası alındıktan sonra tarayıcı aşağıdakileri yapar:
- Sertifikanın meşruiyetini doğrulayın (sertifikayı veren otoritenin meşru olup olmadığı, sertifikadaki web sitesi adresinin ziyaret edilen adresle aynı olup olmadığı vb.), sertifika güveniliyorsa tarayıcı çubuğunda küçük bir kilit gösterilir, aksi takdirde sertifikanın güvenilmediğine dair bir uyarı verilir.
- Sertifika güvenilirse veya kullanıcı güvenilmeyen bir sertifikayı kabul ederse, tarayıcı rastgele sayıda şifre oluşturur ve bunları sertifikada verilen açık anahtarla şifreler.
- El sıkışma mesajı, üzerinde anlaşılan HASH kullanılarak hesaplanır, mesaj oluşturulan rastgele sayı ile şifrelenir ve son olarak önceden oluşturulan tüm bilgiler web sitesine gönderilir.
4. Tarayıcıdan veri alındıktan sonra, web sitesi şunları yapar: - Şifreyi çözmek için kendi özel anahtarınızı kullanın, tarayıcı tarafından gönderilen el sıkışma mesajını şifre olarak kullanın ve HASH'in tarayıcı tarafından gönderilenle aynı olduğunu doğrulayın.
- Bir el sıkışma mesajı şifreyle şifrelenir ve tarayıcıya gönderilir.
5. Tarayıcı, el sıkışma mesajının HASH'ini çözer ve hesaplar; eğer bu mesaj sunucu tarafından gönderilen HASH ile tutarlıysa, el sıkışma süreci sona erer ve tüm iletişim verileri önceki tarayıcı tarafından oluşturulan rastgele şifreyle simetrik şifreleme algoritması kullanılarak şifrelenir.
Burada, tarayıcı ve web sitesi birbirlerine şifreli bir el sıkışma mesajı gönderir ve doğrular; böylece her iki tarafın da aynı şifreyi aldığından emin olur, verileri normal şekilde şifreleyip çözebilir ve gerçek verinin sonraki iletimi için bir test yapılır. Ayrıca, HTTPS tarafından yaygın olarak kullanılan şifreleme ve HASH algoritmaları şunlardır: - Asimetrik şifreleme algoritmaları: RSA, DSA/DSS
- Simetrik şifreleme algoritmaları: AES, RC4, 3DES
- HASH algoritması: MD5, SHA1, SHA256
Bunlar arasında, el sıkışma sürecinde oluşturulan şifreyi şifrelemek için asimetrik şifreleme algoritması, gerçek iletilen veriyi şifrelemek için simetrik şifreleme algoritması ve verinin bütünlüğünü doğrulamak için HASH algoritması kullanılır. Tarayıcı tarafından oluşturulan şifre, tüm verinin şifrelenmesinin anahtarı olduğundan, iletim sırasında asimetrik bir şifreleme algoritması kullanılarak şifrelenir. Asimetrik şifreleme algoritması halka açık ve özel anahtarlar üretir, açık anahtarlar yalnızca verileri şifrelemek için kullanılabilir, böylece istendiği gibi iletilabilir ve web sitesinin özel anahtarları verilerin şifresini çözmek için kullanılır; bu nedenle web sitesi özel anahtarını sızıntıyı önlemek için çok dikkatli tutar. TLS el sıkışma sürecinde herhangi bir hata şifreli bağlantıyı bozabilir ve özel bilgilerin iletilmesini engelleyebilir. HTTPS'nin çok güvenli olması nedeniyle saldırganlar bir başlangıç noktası bulamıyor, bu yüzden müşterileri aldatmak için sahte sertifikalar kullanarak açık metin bilgisi elde ediyorlar, ancak bu yöntemler tanımlanabiliyor; bunu sonraki bir makalede anlatacağım. Ancak, 2010 yılında güvenlik uzmanları TLS 1.0 protokolünün işlenişinde bir zafiyet keşfetti: http://www.theregister.co.uk/2011/09/19/beast_exploits_paypal_ssl/ aslında BEAST adlı bu saldırı yöntemi güvenlik uzmanları tarafından 2002 gibi erken bir tarihte keşfedildi, ancak kamuoyuna açıklanmadı. Microsoft ve Google bu zayıflığı düzeltti. Bakınız: http://support.microsoft.com/kb/2643584/en-us https://src.chromium.org/viewvc/chrome?view=rev&revision=90643 HTTPS'nin basitleştirilmiş versiyonu ayrıca Simetrik Şifreleme ile Asimetrik Şifreleme arasında da çalışır. |