17 Eylül 2014

Certificate Pinning (İğnelenmiş Onay Belgesi)

Bu makalede, “Certificate Pinning” ya da Türkçe ifade edersek “İğnelenmiş Onay Belgesi” konusundan bahsedeceğiz.

 “Certificate Pinning” ya da “İğnelenmiş Onay Belgesi” konusu, çok yeni bir konu olmamakla birlikte, uygulanmasını ve özellikle Türkiye’de geliştirilen uygulamalarda karşımıza çıkmasını, göreli yeni bir gelişme olarak değerlendirebiliriz. Öncelikle konuyu tanımlamaya ve ifade etmeye çalışalım, sonrasında bu tür bir gereksinimin ortaya çıkışındaki etmenlerden, uygulanış şekillerinden ve ortaya çıkardığı sorunlardan bahsedelim.

Certificate Pinning (İğnelenmiş Onay Belgesi) Nedir?

İğnelenmiş Onay Belgesi denildiğinde, ifadede geçen “Onay Belgesi”nden yola çıkmak gerekir. Belirtilen Onay Belgesi, güvenlik sertifikası olarak da dilimize yerleşen, bağlandığımız uygulama sunucularının hakikiliğini anlamamıza yarayan bir güvenlik belgesidir. Bağlanılan sunucu, kullanıcıya, elinde bulunan onay belgesini iletir. Belge kontrol edildikten sonra bu belgeye dayanarak, çeşitli sebeplerle bağlandığımız web ya da mobil uygulama sunucularının gerçekten erişmek istediğimiz sunucular olup olmadığını anlayabiliriz. Ek olarak sunucu ile aramızda gerçekleşen trafik şifrelendiğinden, dahil olduğumuz ağda bulunması muhtemel saldırgan kişilerin, hassas bilgileri elde etmesinin önüne geçilebilmektedir. Bu mekanizmanın tanımlandığı protokole kısaca SSL / TLS protokolü denilmektedir. Bu protokolle ilgili daha ayrıntılı bilgiye, http://blog.btrisk.com/2014/04/ssl-nedir-2bolum_16.html adresinde bulunan makaleden erişilebilir.

SSL / TLS Protokolü Ne Kadar Güvenilirdir?

Peki hepimizin güvenli olarak bildiği SSL / TLS protokolü ne kadar güvenlidir? Bu protokolün güvenliği, onay belgesinin gerçekliğine ve bilinen sertifika otoritelerince üretilmiş ve onaylanmış olmasına bağlıdır. Kullanıcı, daha ziyade kullandığımız internet tarayıcıları, kendisine iletilen onay belgesinin güvenilir sertifika otoritelerince üretilip üretilmediğini ve sertifikanın, bağlanılan sunucu adıyla eşleşip eşleşmediğini kontrol eder. Böylelikle bir güven ilişkisi kurulur. Ne var ki geçmişte güvenilir sertifika otoritelerinden kaynaklanan bazı olaylar, bu güven ilişkisinin zedelenmesine neden olmuştur.

Certificate Pinning(İğnelenmiş Onay Belgesi) Nasıl Bir Yapıdadır?

Yukarıda belirtilen sebeplerden dolayı, güvenliği artırıcı bir tedbir olarak makalemizin de konusu olan Certificate Pinning yani İğnelenmiş Onay Belgesi mekanizması ifade edilmiştir. Mekanizma, sunucu sertifikalarının istemci tarafından önceden bilinirliğine dayanmaktadır. Bu bilinirlik, mobil uygulamalarda, sertifikanın uygulama kaynak kodu içine hard-coded olarak yerleştirilmesine dayanırken; web uygulamalarında ise tarayıcılar bir tür beyaz liste(white list) uygulamaktadır.

Örneğin Google firması, kendi geliştirdiği tarayıcı olan Chrome’un belirli bir sürümünden itibaren Certificate Pinning işlemini uygulamaya başlamıştır. Bir Google hizmeti olan google.com, gmail.com gibi kaynaklara erişmek isteyen kullanıcılar, Chrome üzerinde “whitelist” olarak bulunan Public Keylere sahip sertifikalarla karşılaşmadıkça, belirtilen kaynaklara bağlantı kurulamamakta ve istek reddedilmektedir. Sunucu tarafından iletilen sertifikaya ait Public Key, Chrome’un white list’inde bulunuyorsa, erişim sağlanmaktadır.

Mobil uygulama tarafında ise bağlanılacak sunucunun sertifika bilgileri, hard-coded olarak uygulama geliştiriciler tarafından uygulama kaynak kodlarına gömülmektedir. Böylelikle mobil cihazlardan uygulamaya bağlanan kullanıcıların iletişimi de güven altına alınmaktadır.

Certificate Pinning’in Neden Olduğu Sorunlar

Bu güvenlik önleminin ortaya çıkardığı bir handikap, uygulama güvenlik denetimlerinde(pentest, sızma testi) ortaya çıkmaktadır. Denetim sırasında tarayıcı ya da mobil uygulama ile uygulama sunucusu arasına girilerek(Man-in-the-Middle) ilgili trafik dinlenilmekte ve gerekli güvenlik kontrollerinin uygulanıp uygulanmadığı incelenmektedir. Araya girmek için kullanılan örneğin Burp Suite gibi araçlar, HTTPS trafiğini dinlemek için kendi güvenlik sertifikalarını kullanmaktadır. Dolayısıyla, bağlanılmak istenilen asıl sunucunun sertifika bilgisi, güvenlik denetimi araçlarının sertifikalarından farklı olduğundan denetim zorlaşabilmekte ve araya girme işleminde sorunlar ortaya çıkabilmektedir.

Certificate Pinning (İğnelenmiş Onay Belgesi) Gerçekleştirimi Nasıl Yapılabilir?

Tüm bunlardan bahsettikten sonra son olarak, Certifika Pinning işlemi uygulanmak istendiğinde, neyi ya da neleri iğneleyebileceğimiz konusu üzerinde duralım.

Güvenlik belgesinin kendisi ya da sertifikanın açık anahtarı(Public Key), iğneleme işlemine tabi tutulabilir. Eğer iğneleme işleminde sertifika açık anahtarını kullanacaksak, bu noktada önümüzde iki seçenek bulunuyor. Bunlardan ilki subjectPublicKeyInfo bilgisinin iğnelenmesi, diğeri de RSAPublicKey yahut DSAPublicKey bilgisinin iğnelenmesidir.

Her konuda olduğu gibi bu konuda da, kullanmak istediğimiz yöntemin güçlü yanları ve zayıf yanları bulunmaktadır. Örneğin sertifikanın kendisini iğnelemek, bahsedilen iğneleme yöntemleri arasında, gerçekleştirimi en kolay olanıdır. Ancak burada da sertifikanın süresi dolduğunda beyaz listelerin güncellenmesi ya da uygulama bir mobil uygulamaysa, yeni sürümün son kullanıcılarca yüklenmesi gerekecektir. Sertifikanın geçerlilik süresinin uzunluğuna bağlı olarak, “end user experience” bağlamında bu durum bir sorun oluşturabilir.

Sertifika açık anahtarının iğnelenmesi yöntemi ise, sertifikanın kendisinin iğnelenmesi yöntemine göre daha esnek bir yapı sağlamakla birlikte, gerçekleştirim anlamında daha zordur ve ilave işlemler gerektirmektedir. Dolayısıyla sertifika iğneleme işlemi yapılacağı zaman bu iki yöntem incelenmeli ve kurum bilgi güvenliği politikaları da gözönünde bulundurularak en uygun yapı seçilmelidir.