16 Mayıs 2018 Çarşamba

Oltalama e-Postalarında Punycode Kullanımı


Merhabalar,

Bu sayıda, Punycode’un oltalama e-postalarında kullanımı konusundan bahsedeceğim. Punycode nedir sorusunun cevabı ile başlayalım.

Punycode, Unicode karakterleri ASCII karakterlere çevirmek için kullanılan bir yöntemdir. Kayıt edilecek alan adında ASCII’de yer almayan karakterler kullanılacaksa, bu karakterler punycode ile ASCII karakterlere çevirilmelidir. Örnek olarak, kril alfabesi karakterleri verilebilir.[1]
Geçtiğimiz aylarda, punycode kullanılarak kayıt edilen bazı web adreslerinin gerçeği ile aynı görünüme sahip olabileceğini görmüştük. Saldırganlar, ücretsiz SSL sertifikası kullanarak senaryolarını daha gerçekçi hale getirmekteler.[2] Bu örnekte, saldırganlar kril alfabesindeki “a” harfinin latin alfabesindeki “a” harfine benzerliğinden faydalanmışlar.
Biz de bu yazıda, punycode’u oltalama saldırılarını daha gerçekçi kılmak için nasıl kullanabileceğimizi göreceğiz.

E-postalarda, iki farklı gönderen kısmı bulunmaktadır. Bunlardan birincisi SMTP komutlarından MAIL FROM: komutunun parametresi olarak girilen protokol gönderenidir. İkincisi ise mailin DATA komutundan sonra kullanılan From: alanında girilen zarf gönderenidir.
Kullanıcı tarafından kullanılan e-posta uygulamaları genellikle zarf gönderenini kullanmaktadır. Bu parametre manipülasyona açık olması sebebi ile saldırganlar tarafından oltalama saldırılarında sıklıkla tercih edilmektedir.
Aşağıdaki örnekte, msesli@gmail.com adresinden gelen e-posta kullanıcı tarafında sesli@mehmet.com adresinden gönderilmiş gibi görünmektedir.


Ekran Görüntüsü 1: Data kısmındaki From: parametresi manipüle edilmiş e-posta




Ekran Görüntüsü 2: Gönderilen e-posta’nın SMTP komutları
Bu senaryoda, mehmet.com alan adını kullanan bir e-posta adresine sesli@mehmet.com adresinden e-posta geliyormuş gibi gösteriyoruz. Normal şartlar altında, mehmet.com adresine mehmet.com e-posta sunucuları dışında bir sunucudan, gönderen kısmında mehmet.com olan bir mail gönderilemiyor olması gerekir.
SMTP Gateway ürünleri burada bu iki parametreyi de kontrol edebilir. Protokol göndereni de, zarf göndereninde de mehmet.com geçen maillerin bloklanması sağlanabilmektedir.
İşte bu noktada, punycode devreye giriyor. Zarf göndereninde yer alan adres punycode ile manipüle edildiğinde, SMTP gateway ürünleri bu kontrolleri varsayılan olarak yapmadığı için e-postalar  sunuculara iletilmektedir.
Aşağıdaki örnekte punycode kullanılan e-posta’nın SMTP komutlarını görüyoruz.


Ekran Görüntüsü 3: Punycode kullanılan e-posta’nın SMTP komutları



Ekran Görüntüsü 4:Punycode kullanılan e-posta’nın kullanıcı tarafındaki görünümü
Ekran görüntüsü 3’ten de görülebileceği gibi, Zarf göndereninde sesli@mehmet.com yerinde sesli@--xnmhmet-zwe.com kullanılmıştır. Bu iki adreste kullanıcı tarafında aynı şekilde görünmektedir. Bu yöntem ile SMTP gateway ürünlerinin yaptığı kontroller atlatılıp, kullanıcıya legal görünümlü e-posta ulaştırılabilmektedir.

Alınabilecek Önlemler;
--Öncelikle maillerin gerçek adreslerden kontrolünü sağlamak için SPF, DKIM kontrolü kullanılabilir.
-- Punycode kullanılan alan adlarının (IDN:Internationalized Domain Names) da kontrol edildiği bir siber istihbarat servisi kullanılabilir.
Böylece saldırıda kullanılacak alan adını, Siber İstihbarat servisinin sağladığı liste üzerinden kontrol ederek, oltalama e-postalarının engellenmesini sağlayabilirsiniz.
Nebula Siber İstihbarat servisi ile ilgili bilgi almak için aşağıdaki bağlantıyı kullanabilirsiniz.
--SMTP gateway ürününüzde, zarf göndereni de kontrol edilebilir.
Varsayılan olarak bu kontrol, bazı SMTP gateway ürünlerinde gerçekleştirilmeyebiliyor.
-- Aşağıdaki adresten alan adınızda yer alan karakterlerin diğer alfabelerdeki eşleniklerini belirleyip, kendi sözlüğünüzü hazırlayabilirsiniz. http://www.unicode.org/cldr/utility/confusables.jsp?a=&r=IDNA2008
Gelen postaların gönderen kısmındaki alan adını hazırlamış olduğunuz sözlük ile kontrol ederek oltalama e-postalarını engelleyebilirsiniz.
-- Sözlük yerine regex ile de bu kontrolü sağlayabilirsiniz. Senaryomuz için örnek regex;
^(?:xn--).*(?:m|e|h|t)(?:-)?
Burada alan adımızda yer alan m,e,h,t harflerini alternatifli olarak bir punycode kullanılmış bir alan adında geçip geçmediğini kontrol ediyoruz.
Saldırganlar, alan adlarında her seferinde farklı karakterin punycode alternatifini kullanabilmektedirler. Bu yüzden, alan adında yer alan her harfin latin alfabedeki halini içeren alan adlarını kontrol ediyoruz.
Ayrıca, SMTP gateway ürününde bu kontrolü yaparken, adres “–xn” ile başlıyorsa ve regexte yer alan şablonumuz ile eşleşiyorsa blokla şeklinde yapılandırırsak her mailde regex kontrolü yapılmayacağı için performans açısında da iyileştirme sağlayacaktır.
--Yapmış olduğum araştırmalarda, protokol göndereni ile zarf göndereni birbirinden farklı olan e-postaların engellenmesi için e-posta güvenlik ürünlerinde anti-spam kuralları olabilmektedir. Konu ile ilgili üreticinize danışmanızı öneririm.
Bir sonraki yazıda görüşmek üzere.
Kaynaklar;
[1]https://www.punycoder.com
[2]https://www.xudongz.com/blog/2017/idn-phishing/

Not: Bu makale BeyazŞapka dergisinin Ağustos 2017 sayısında yayınlanmıştır.
Bu köşede anlatılan yöntemler, bilgi güvenliği farkındalığını arttırmak adına anlatılmaktadır. Doğabilecek yasal sorumluluklar bu yöntemleri uygulayan kişilere aittir.

Hiç yorum yok:

Yorum Gönder