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.