2017 yılında başlayan DDE tabanlı oltalama saldırıları, 2020 yılı itibariyle yerini Excel 4.0 Makro (XLM) oltalama saldırılarına bıraktı. Ufak bir araştırma yaptığınızda XLM makrolarının hayatımıza girişinin 1992 yılında Microsoft Excel 4.0‘ın yayınlanması ile olduğunu görebilirsiniz. Tehdit aktörleri tarafından sıklıkla kötüye kullanılan VBA makroları ise Excel 5.0 ile duyurulması ile hayatımıza girmiş ve günümüzde de en güncel Microsoft Office sürümünde hala desteklenmektedir.

Yanlış anımsamıyorsam XLM makroları ile ilgili ofansif güvenlik üzerine okuduğum ilk teknik makale Outflank firmasına ait bu blog yazısıydı. XLM makrolarını VBA makroları gibi tespit edip, analiz etmenin pek de kolay olmadığı XLM makrolarına yönelik yapılan güvenlik araştırmaları ile ortaya çıkmaya başladıktan sonra her zaman olduğu gibi ofansif güvenlik uzmanlarının yanı sıra tehdit aktörlerinin de dikkatini çekmeye başladı. Aradan çok zaman geçmeden de kurumlar XLM makro içeren oltalama saldırıları ile karşılaşmaya başladılar.

XLM makro içeren bir Office dosyasını analiz etmenin zorluğu, Microsoft Office Makro Analizi başlıklı blog yazımda belirttiğimin aksine Office’nin arayüzünden kolaylıkla görüntülenememesinden (view macro) kaynaklanmaktadır. Durum böyle olunca da zararlı XLM makro içeren Office dosyalarının tecrübesiz siber güvenlik uzmanlarının dikkatinden kaçma ihtimali (“Bu Office dosyası bozuk”, “Makro içermiyor” gibi) artmaktadır. Ben de hem siber güvenlik analisletlerine XLM makro içeren Microsoft Office dosyalarının nasıl analiz edilebileceğini göstermek hem de XLM makro içeren Microsoft Office dosyalarına karşı farkındalık yaratmak adına gerçek bir olaydan yola çıkarak bir blog yazısı yazmaya karar verdim.

2020 yılının Mayıs ayında çok sayıda SMTP ip adresinden gönderilen ve gönderici adresi @wp.pl uzantılı olan yüzlerce e-posta için güvenlik sistemlerinde engellendiğine dair alarmlar üremeye başladı. E-postalar incelendiğinde eklerinde rastgele isimle oluşturulmuş XLS uzantılı Excel dosyaları bulunuyordu. Bu gibi durumlarda siber güvenlik analistlerinin yapması gereken en önemli adımlardan biri zararlı doküman içinde yer alan komuta kontrol merkezine ait adreslerini tespit etmek, web trafiği kayıtlarında aramak ve kurum genelinde erişimi engellemektedir.

Tabii mevzu bahis XLM makro içeren Office dosyası olduğunda statik ve dinamik analiz yapan kum havuzu (sandbox) sistemlerinin anti kum havuzu yöntemleri karşısında yetersiz kaldığı durumlar söz konusu (Örnek: Kum Havuzu Tespiti) olabilmektedir. Alarma konu olan zararlı Excel dosyası da tam da bu şekilde kum havuzunda çalıştığını anlamaya yönelik kontroller gerçekleştirdiği için komuta kontrol merkezinin adresi bu analizler (VirusTotal, Hybrid-Analysis) esnasında ortaya çıkmamaktadır. Bu durumda siber güvenlik analistinin yapması gereken iş bu zararlı Excel dosyasını alıp zararlı yazılımı analizi amacıyla oluşturduğu sanal sistemine kopyalamak ve orada analiz etmek olmalıdır.

Excel dosyasını sanal sistemde çalıştırdığımızda karşımıza iki tane sayfa (Sheet1 & Sheet2) çıkmaktadır. Birinci sayfada kötü emellerini gerçekleştirebilmek için makroyu aktif hale getirmemiz gerektiğini belirten sahte bir resim/mesaj, ikinci sayfada ise bomboş hücreler (aslında boş değil :)) karşımıza çıkmaktadır. Her ne kadar Excel bize bu dosyada makro olduğuna dair uyarı verse de dosyada yer alan makroyu görüntülediğimizde içinin boş olduğu görünmektedir.

XLM Macro Analysis
XLM Macro Analysis
XLM Macro Analysis

Dosyayı herhangi bir hex editörü ile açıp içinde yer alan karakter dizilerine (strings) baktığımızda Excel 4.0 Macros dizisinden şüphe ettiğimiz gibi bunun XLM makrosu içerdiğini görebiliyoruz. Dosyanın içinde makro olduğundan emin olmak için dosyayı mraptor aracı ile analiz ettiğimizde dosyada makro olduğu ve otomatik olarak çalışabilmesi adına Auto_Open isminde (VBA makrosundaki AutoOpen() fonksiyonu gibi) bir hücreye (cell) sahip olduğu anlaşılıyordu. Bu hücrenin adını öğrenip görüntülemek ve analiz etmek için ise Didier STEVENS‘ın oledump aracından faydalanarak (oledump.py -p plugin_biff.py –pluginoptions “-o LABEL -s” C:\Users\Mert\Desktop\ea74b9a274c0c73cad990ddd089927b6.xls) ilk çalıştırılan hücrenin Auto_OpencfitK adına sahip olduğunu gördüm. Analistin Excel üzerinden Go To (CTRL-G) ile Auto_Open ismine sahip hücreye giderek analize başlayacağını bilen zararlı kod geliştiricisi akıllılık yaparak adını bu hücrenin adını Auto_OpencfitK olarak değiştirmiştir.

XLM Macro Analysis
XLM Macro Analysis
XLM Macro Analysis
XLM Macro Analysis

Başlangıç hücresine gittikten ve dosya genelinde 42 tane FORMULA ifadesi ve CHAR fonksiyonundan oluşan gizlenmiş (obfuscated) bir makro olduğunu öğrendikten sonra her birini teker teker çözmek ve analiz etmek bir hayli zaman alacağı için hata ayıklaması (debugging) ile ilerlemeye karar verdim. Auto_OpencfitK hücresine gidip ALT + F8 kısa yoluna bastıktan sonra Step Into butonuna bastığımda haliylen Excel beni devam etmek için makro çalıştırmaya izin vermemi ve ardından dosyayı kapatıp açmamı istedi. Dosyayı açar açmaz Excel hızlıca Auto_OpencfitK hücresinden ilerleyeceği için bu adımı kaçırmamak için bu hücrede yer alan =SET.VALUE(FG22029, -490-GET.CELL(17,HX17320)) formülünü =HALT() ile değiştirerek makronun sonlanmasını sağladım. Ardından =HALT() formülünü =SET.VALUE(FG22029, -490-GET.CELL(17,HX17320)) ile değiştirip bu hücre üzerinde ALT + F8 kısa yoluna bastığımda sorunsuz bir şekilde ilk hücreden makroyu dinamik olarak analiz etmeye başlayabildim.

XLM Macro Analysis
XLM Macro Analysis

Step Into ve Evaluate butonlarından faydalanarak gizlenmiş hücrelerin çözülmesi ile analize devam ettikçe Excel 4.0 Macro Functions Reference belgesinden faydalanarak makronun hata ayıklamaya ve kum havuzuna karşı çeşitli kontroller gerçekleştirdiğini gördüm. Hata ayıklama kontrolü yapan AT41104 hücresine geldiğimde bu kontrolü atlatmak için hata ayıklama tespit edilememesi durumunda devam ettiği hücredeki =GOTO(AY23948) değerini AT41104 hücresine kopyaladım.

=IF(GET.WORKSPACE(31),GOTO(HV23758),) Makro hata ayıklama modunda mı ? (Anti-debugging)
=IF(GET.WORKSPACE(19),,GOTO(HV23758),) Sistemde fare var mı ? (Anti-sandbox)
=IF(GET.WORKSPACE(42),,GOTO(HV23758),) Ses dosyası çalınabiliyor mu ? (Anti-sandbox)

XLM Macro Analysis
XLM Macro Analysis
XLM Macro Analysis
XLM Macro Analysis
XLM Macro Analysis
XLM Macro Analysis
XLM Macro Analysis
XLM Macro Analysis
XLM Macro Analysis

Hata ayıklamaya devam ettiğimde internet bağlantısını kontrol etmek için https://docs.microsoft.com/en-us/officeupdates/office-msi-non-security-updates web adresine bağlandığını ve hata alması durumunda çalışmayı durdurduğunu farkettim. Kayıt defteri (registery) üzerinden sistemde makro kullanımına izin verilip verilmediğini de kontrol ettikten sonra https://dehabadi[.]ir/wp-keys[.]php ve https://eleventalents[.]com/wp-keys[.]php adresleri ile iletişim kurmaya çalıştığını gördüm. Analiz esnasında bu iki adres de aktif olmadığı için analize devam edememiş olsam da yapmış olduğum araştırmalar sonucunda Zloader zararlı yazılımına ait komuta kontrol merkezleri olduğunu tahmin ettiğim bu adresleri ortaya çıkararak başarıyla amacıma ulaşmış oldum.

XLM Macro Analysis
XLM Macro Analysis

Bu yazı ile işin temelini öğrendiğinize göre bundan sonra XLMMacroDeobfuscator gibi bir araç ile gizlenmiş XLM makroyu hızlıca çözebilir ve zamandan tasarruf edebilirsiniz. :) Bu yazının XLM makro analizi yapmak isteyen analistlere ışık tutacağını ümit ederek bir sonraki yazıda görüşmek dileğiyle herkese güvenli günler dilerim.

XLM Macro Analysis
XLM Macro Analysis

Not: XLM makro analizine dair daha fazla kaynak arayanlara şu yazılara da (#1, #2, #3, #4, #5) göz atmalarını tavsiye edebilirim.

Yazıyı PDF formatında indirmek için tıklayın.