Loading...

Defansif Dünyaya Ofansif Dokunuş: SpookFlare

Halil Dalabasmaz

Bir Red Teamer olarak işimde (Red Teaming) yoğun efor sarf ettiğim alanlardan birisi güvenlik ürünlerinin atlatılması alanıdır. Hedeflenmiş bir saldırının adımlarına; Reconnaissance (Keşif), Weaponisation (Silahlanma), Delivery (Gönderim), Exploitation (İstismar), Installation (Yükleme), Command & Control (Komuta & Kontrol), Actions On Objectives (Eyleme Geçme) baktığımızda bu sarf edilen eforun doğru olduğu görülebilir. Hedef hakkında yaptığımız keşif çalışmasında çok nadiren zorlanırız. Yine hazırlanan zararlıların hedef veya hedeflere gönderimi konusu da görece olarak bizim tarafımızda kolaydır. Bunun için herhangi bir iletişim kanalını (siber alanda veya fiziksel alanda) seçip, hayal gücünüzü ve inandırıcılığınızı konuşturursunuz. Gerçekleştirdiğimiz operasyonda ilgili adımları başarılı olarak tamamlayıp, zararlının hedef sistem ve sistemlerde çalışma adımına gelindiğinde işler bambaşka bir duruma dönüşüyor. Her geçen gün sistemleri savunan uzmanlar, kullandıkları ürünler gelişmekte ve saldırılara karşı adaptasyonunu arttırmaktadır. Bu noktada ofansif taraf olarak aynı adaptasyonu bizlerin de sağlaması gerekmektedir. SpookFlare bu noktada devreye girerek ofansif tarafa adaptasyonunda kolaylık sağlamayı hedeflemektedir.

Hedef Sistemi Neler, Nasıl Koruyor?

Hedef sistemi ve üzerinde konumlandırılan önlemlerin çalışma alanlarını ikiye ayırabiliriz. Birinci alan client-side (istemci tarafı, son kullanıcı sistemleri) ve ikinci alan ise network-side (ağ tarafı, hedefin içeriden dışarı veya dışarıdan içeri izlediği trafik) şeklindedir. Geliştirilen zararlı her iki alanda alınan önlemleri atlatabilirse ve geriye kalan operasyon adımları da sağlıklı bir şekilde gerçekleştirilirse saldırgan olarak başarıya ulaşmanız kaçınılmazdır. İstemci tarafında alınan önlemlere bakıldığında karşımıza birçok farklı tanıma sahip ürünler çıkmaktadır. Genelde bu önlemlerin başlıca tanımları Anti-Virus, Anti-Malware, Endpoint Security vs. şeklindedir. Ağ tarafında ise hedefi koruyan ürünlere baktığımızda; IDS, IPS, Content Filter, Proxy, DNS Firewall vb. ürünler ile karşılaşmaktayız. Ayrıca hedef ile aramızda kimi durumlarda Sandbox ürünleri olduğu durumlar da olabiliyor. Hedef sistemler genelde Sandboxları ya E-posta Gateway’ine konumlandırıyor ya da istemci sistemi izleyip şüpheli durumlarda kendileri çalıştıracak şekilde kullanıyor.

Saldırı simülasyonu gerçekleştirdiğim hedefler son kullanıcı sistemlerinde yoğun olarak isminin sonunda “endpoint security” geçen ürünler kullanmaktadır. Kendimizi hedefin yerine koyduğunuzda da bu tercihlerinde haklı olduklarını görebiliriz çünkü bu ürünler son kullanıcı sistemlerinin savunulması alanında birçok avantaj ve kolaylığı sağlamaktadır. İlgili ürünleri incelediğinizde çalıştıkları sistemi korurken birçok tespit çeşidini bir arada kullandıklarını görürüz. Bunları İmza Tabanlı Tespit, Davranışsal Tespit ve Ağ Tabanlı Tespit olarak özetleyebiliriz.

İmza Tabanlı Tespit olarak tanımlanan tespit türünde, sistemi koruyan ürün daha önce zararlı olarak tespit edilmiş dosyalara ait imzaları (dosya türü, bulaşma yolları ve binary desenleri vs.) veritabanında barındırır ve sisteme ilgili zararlılardan birisi dokunduğunda imza veya imzalar eşleştiğinde ürün tepki verir. İmza eşleştiği anda artık ürün ilgili zararlıyı tespit etmiş ve önceden ayarlanmış tepkisini verir. Bu tür bir tespiti atlatmanın birçok yolu bulunmaktadır. Bu yolların temel mantığı sistemi koruyan ürünün imza veritabanındaki desenler dışında bir desene sahip ama yine aynı işi yapacak zararlı üretmektir.

İmza Tabanlı Tespit’i atlamak görece olarak diğer tespit yöntemlerini atlatmaktan daha kolay olduğu için üreticiler sistemlerde çalışan uygulamaların davranışlarını izlemeye yönelmiştir. Davranış Tabanlı Tespit olarak tanımlanan bu tespit türünde, sistemi koruyan ürün daha önce zararlı olarak tespit edilmiş dosyalara ait davranışları bilmektedir. Örneğin, bir Windows işletim sisteminde yerel kullanıcılara ait parola özetlerini veya açık (clear-text) paroları elde etmek istiyoruz diyelim. Bu işlemi gerçekleştirmenin yollarından bir tanesi, Windows işletim sisteminin en temel uygulamalarından bir tanesi olan lssas.exe’nin hafıza (memory) alanını okumaktadır. Sistemi koruyan ürünü geliştirenler ürünlerine; “eğer herhangi bir uygulama lssas.exe’nin hafıza alanını okuyama çalışırsa, zararlı olarak sınıflandır ve engelle” kabiliyetini kazandırmaktadır. Çünkü lssas.exe çok kritik bir uygulamadır ve normal şartlarda bir uygulamanın lssas.exe’nin hafıza alanını okuması beklenmez. Bu durumda zararlının ilgili tespiti atlamak için başvuracağı yol, davranışını değiştirmekten geçmektedir. Ulaşmak istediği hedefe lssas.exe’nin hafıza alanını okumadan erişmeyi denemelidir. Denenecek davranış, sistemi koruyan ürün tarafından bilinmiyor ise zararlı hedefine başarılı şekilde ulaşacaktır.

Her iki tespit türünü piyasada bulunan çoğu ürün kullanmaktadır ve beraberinde destekleyici olması için hedef sisteme dokunan dosyaların repütasyonlarını da dikkate almaktadır. Bu alanda yine birçok kontrol yapılmaktadır; İlgili dosya karalistede bulunan bir veya birden fazla sistem çağırısı kullanıyor mu? İmzalanmış bir dosya mı? İmzalandıysa güvenilir bir otorite tarafından mı imzalanmış? Güvenilir olmayan sertifika ile şifrelenen bir HTTPS bağlantısı yapıyor mu? gibi. Örneğin, çalıştırılabilir dosya otorite tarafından imzalanmış geçerli bir sertifikaya sahip ise daha güvenilir bir uygulama kabul edilebilir ve ürünün tepki verme olasılığı düşürülebilir. Geçmişte bunun örneklerine de rastlanmaktadır. Örneğin zararlı dosya imzalandığı zaman (hem de self-signed sertifika ile) sistemi koruyan ürün zararlı için herhangi bir tepki vermemekteydi. Yine aynı zararlı imzalanmadan hedef sisteme gönderildiğinde ise ürün zararlı olarak sınıflandırıp tepki vermekteydi.

SpookFlare

SpookFlare çeşitli modüller barındıran ve bu modüllerde birden fazla tekniği kullanan, zararlılarınızı hedef sistemde çalıştırmak için yükleyici (loader veya dropper) oluşturabileceğiniz bir projedir.

SpookFlare ile hali hazırda piyasada bulunan Meterpreter, Empire veya Koadic vb. projeler için veya diğer projeler için yükleyici oluşturabileceğiniz gibi hedefin işletim sisteminde çalıştıracağınız komutlar için de zararlı oluşturabilirsiniz. SpookFlare obfuscation (karmaşıklaştırma), encoding, run-time code compiling (çalışma anında kod derleme), run-time payload generation (çalışma anında zararlı oluşturma) gibi birçok tekniği beraber kullanmaktadır. Python dili ile projenin kendisini C#, PowerShell, VBScript ve JavaScript ile yükleyici modülleri geliştirdiğim SpookFlare’e Github sayfası (https://github.com/hlldz/SpookFlare) üzerinden erişebilirsiniz. Şu an yayında olan versiyonda dört farklı modül bulunmaktadır.

Çalıştırılabilir dosya türünde (.EXE) Meterpreter Reverse HTTP, HTTPS (Staged) payloadları için yükleyiciler meterpter/binary modülü ile oluşturulabilir. Bu modül kullanılarak oluşturulan yükleyiciler asıl yükleyici kodunu çalışma esnasında derleyerek (.NET Framework içerisindeki CodeDom ile) bizlere ciddi oranda avantaj sağlamaktadır. SpookFlare’in ilk versiyonunda asıl yükleyici kod şifrelenerek (encryption) ile saklanmaktaydı. Fidye yazılımları (Ransomware) ve diğer zararlılar da aynı şifreleme kütüphanesini yoğun olarak kullandığından güvenlik ürünleri tarafından SpookFlare ile oluşturulan yükleyiciler, zararlı olarak sınıflandırılmaya başlanmıştı. Yeni versiyonda asıl yükleyici kodunda şifreleme yerine rastgele karakterler eklenerek bu durumun üstesinden gelinmiştir.

Örneğin, asıl yükleyici kodunda CreateThread kısmı C%&/()=?_<>£#r%&/()=?_<>£#e%&/()=?_<>£#a%&/()=?_<>£#t%&/()=?_<>£#e%&/()=?_<>£#T%&/()=?_<>£#h%&/()=?_<>£#r%&/()=?_<>£#e%&/()=?_<>£#a%&/()=?_<>£#d%&/()=?_<>£# şeklinde olacaktır ve çalıştırılırken %&/()=?_<>£# karakterleri temizlenip nihai kod elde edildikten sonra derlenip çalıştırılacaktır. Çalışma esnasında kod derleyip çalıştırmak sistemleri koruyan güvenlik ürünlerine karşı çok büyük avantaj sağlamaktadır.

Aynı zamanda meterpreter/powershell modülü kullanılarak, Meterpreter Reverse HTTP, HTTPS (Staged) için PowerShell tabanlı (.PS1) loader oluşturulabilir. Modül ekstradan powershell.exe’nin çalıştırılmasının yasaklandığı sistemlerde PowerShell arayüzüne erişim sağlayıp Meterpreter çekirdeğini çalıştıracak yükleyiciyi de (.EXE) oluşturmaktadır.

Yukarıda bahsedilen her iki modül ile Meterpreter için yükleyici oluşturulabileceğinden bahsettim ancak işin içine ağ seviyesindeki önlemler (IDS, IPS, Content Filter, Proxy vs.) girebilir. İlgili güvenlik önlemleri ağ seviyesindeki zararlıları, çok büyük oranda imza tabanlı tespit ile tespit ederler. SpookFlare ile oluşturulan yükleyici çalıştığı anda Meterpreter komuta kontrol merkezinden Meterpreter’in çekirdeğini indirmeyi deneyecektir. Eğer aradaki güvenlik önlemi indirilmek istenen Meterpreter çekirdeğini ağ seviyesinde tespit ederse yükleyici başarısız olacaktır. Bu noktada izlenebilecek birkaç tane yol bulunmaktadır. Bunlardan bir tanesi ki aynı zamanda SpookFlare’in kullandığı yol olan; Meterpreter çekirdeğini yamalamak!? SpookFlare ile yamalanmış (patched) Meterpreter çekirdeklerini çalıştırabilirsiniz. Metasploit üzerinde yapılacak işlemler ile SpookFlare yükleyicisinin yapacağı istek sonrasında verilecek Meterpreter çekirdeğinin üzerine istenilen boyutta rastgele byte eklenebilir ve SpookFlare’a kaç adet rastgele byte bulunduğunu söylemeniz yeterli olacaktır. Bu işlemin teknik detaylarına https://artofpwn.com/spookflare.html adresinden erişebilirsiniz.

Hedef sisteme her zaman çalıştırılabilir dosya türündeki zararlıların gönderilmesi mümkün olmayabilir ve bu gibi durumlarda genelde script tabanlı zararlılar tercih edilir. SpookFlare, javascript/hta modülü ile bu gibi durumlarda avantaj sağlamaktadır. İlgili modül ile hedef işletim sisteminde çalıştırılmak istenen komut için zararlı oluşturulabilir. Normal şartlarda kurumsal ağlarda e-posta ekinde veya herhangi bir internet sitesi üzerinden HTA (HTML Application) indirmeniz mümkün değildir. SpookFlare içerisindeki ilgili modül ile bu mümkün olmaktadır. Modülün önemli iki özelliği bulunmaktadır. Birincisi, modül çıktısı HTML dosyadır ve hedef sistemde herhangi bir internet tarayıcısı ile HTML dosya çağırıldığında, çalışma esnasında JavaScript ile HTA yükleyici oluşturulup indirilme işlemi başlatılır. Böylece hedef sistemi ağ seviyesinde izleyen bir ürün veya uzman varsa trafik içerisinde HTA türündeki yükleyiciyi tespit edemeyecektir. Çünkü trafik içerisinde geçen bir HTA dosya yoktur, JavaScript ile çalışma esnasında oluşturulmuştur. İkincisi modül çıktısı olan HTML dosyanın içeriği JavaScript ile encode edilmiştir ve böylece olası imza yazma, tespit ve analiz işlemleri zorlaştırılmıştır.

Hedef sisteme gönderimi kolay olacak dosya türlerinden olan Office ailesi ürünlerin (Word, Excel, PowerPoint vb.) dosyaları, bizlere çalıştırılabilir dosyaların gönderilemediği durumlarda avantaj sağlamaktadır. İlgili ürünlerin dosyalarına makro kodu eklenerek hedef sistemde komut çalıştırılabilir. SpookFlare içerisinde vba/macro modülü kullanılarak bu konuda zararlılar oluşturulabilir. Bu modül kullanılarak oluşturulan zararlıların önemli iki özelliği bulunmaktadır. Birincisi ilgili dosya (Word, Excel, PowerPoint) içerisindeki macro kodu çalıştığı zaman hedef sistemde çalıştırılacak komut, dosyanın META verisinden (EXIF) okunur. Böylece gerçekleştirilecek statik analizlerde avantaj elde edilmesi amaçlanmıştır. Bu şekilde makro kodu eklenerek oluşturulan dosyalar genelde Auto_Open, AutoOpen, Document_Open, Workbook_Open gibi eventleri kullanırlar. İlgili eventlerin isimlerinden de anlaşılacağı üzere zararlı dosya açıldığı anda makro kodu tetiklenir. Bu eventler o kadar çok kullanıldı ki siz zararlı işlem yapmayıp ilgili eventleri kullanmasanız bile zararlı olarak sınıflandırılıyorsunuz. SpookFlare ile oluşturulan makro kodları AutoClose, Auto_Close eventlerini kullanır ve dosya kapatıldığı anda makro kodu çalışır. Bu eventler henüz zararlı olarak kullanım yoğunluğuna sahip olmadığı için kullanımı avantajlıdır. Son olarak modül ile oluşturulan dosyanın meta verisinde bulunan komuta rastgele karakter eklenerek karmaşıklatırılır ve statik analizler için avantaj elde edilmektedir. Örneğin, oluşturulan dosyadaki cmd.exe komutu c!#+%&/m!#+%&/d!#+%&/. !#+%&/e!#+%&/x!#+%&/e!#+%&/ şeklinde olacaktır ve çalıştırılırken !#+%&/ karakterleri temizlenip nihai komut elde edildikten sonra çalıştırılacaktır.

Bir Tık Yeter…

Hedef sistemlerin birçok ürün tarafından korunduğunu ve SpookFlare içerisindeki modüllerin avantajlarından yukarıda bahsettim. Şöyle bir senaryo düşünelim, çok sıkı korunan bir hedefimiz var. Herhangi bir binary dosyayı ne e-posta eki ile ne de bir web sunucusu üzerinden hedefe indirtip çalıştıramıyoruz. Yapmak istediğimiz bu işleme hem e-posta sunucusu izin vermiyor hem de hedefin trafiğini izleyip aksiyon alan proxy ürünü izin vermiyor.

Bu gibi durumlarda javascript/hta modülü biçilmiş kaftandır. Yukarda da detaylarına değinilmiş olan bu modül ile oluşturulacak zararlılar, asıl zararlıyı çalışma esnasında (run-time) oluşturup, indirilmesini sağlar.

Örnek olarak SpookFlare’i kullanarak .HTA zararlı nasıl oluşturulur adım adım inceleyelim. Hedef sistem üzerinde SpookFlare ile oluşturulan zararlı başarıyla çalıştıktan sonra Koadic’e ait komutu çalıştırmasını istiyoruz. Koadic’in bize hedefte çalıştırılmasını istediği komut aşağıdaki ekran görüntüsündeki gibidir. İlgili komutu command.txt dosyasını oluşturup içerisine ekliyoruz.

Ardından SpookFlare’e geçip javascript/hta modülünü aktif ediyoruz. FNAME parametresine oluşturup indirtilecek dosyanın ismini veriyoruz, örneğin SpookFlare-Test.PDF gibi. Hedef tarafta bu isim SpookFlare-Test.PDF.hta olarak görünecektir. CMD parametresine ise command.txt dosyasının tam dizin yolunu yazıyoruz ve SpookFlare’a çalıştıracağı komutun bu dosya içerisinde olduğunu belirtiyoruz. Son olarak generate komutu ile SpookFlare’e zararlıyı oluşturmasını belirtiyoruz.

SpookFlare zararlıyı output dizini altında CvwanVXrxGzd.html olarak oluşturdu. İlgili dosyanın ismini sf.html olarak değiştirip, saldırgan sistemdeki web sunucusunun dizinine kopyalıyoruz ve hedef sistemde http://192.168.0.173/sf.html adresini ziyaret ediyoruz. Hedef sayfayı ziyaret eder etmez sırasıyla zararlı şu şekilde hareket edecektir;

  1. sf.html, kendini decode edecektir.
  2. Çalışma esnasında (run-time) .HTA uzantılı zararlı oluşturulacaktır.
  3. Zararlının indirilme isteğini oluşturacaktır.
  4. Oluşturulan bu isteği tarayıcı yorumlayacak ve kullanıcıya ne istediğini (çalıştır, kaydet, farklı kaydet gibi) soracaktır.

Aşağıdaki ekran görüntülerinde Internet Explorer ve Microsoft Edge tarayıcılarının verdiği tepki görülebilir. Bu modül ayrıca Chrome ve Firefox tarayıcılarında da sorunsuz şekilde çalışmaktadır. Normalde e-posta ekinde .HTA uzantılı dosya hedefimize gönderemiyorduk çünkü e-posta sunucusu buna izin vermiyordu. Yine normal şartlarda hedefi bir linke tıklayıp .HTA uzantılı dosya indirilmesini sağlayamıyorduk çünkü hedefin kullandığı proxy buna izin vermiyordu. SpookFlare’in bu modülü kullanılarak bu sorunlar aynı anda aşılabilir.

Hedef, zaralıyı çalıştırdığı anda aşağıdaki ekran görüntüsünde de görüleceği üzere Koadic üzerinde oturum elde edeceğiz. Oturum elde edildikten sonra örnek olarak Koadic içerisinde bulunan implant/gather/clipboard modülü ile hedefin Clipboard’ında bulunan veri alınmıştır.

Sonuç

Güvenlik ürünlerini, nasıl çalıştıklarını ve SpookFlare’i kısaca özetlemeye çalıştım. Hedefi koruyan güvenlik ürünlerini atlamak için birçok teknik bulunmaktadır ve kimi zaman birden fazla teknik beraber kullanılarak başarıya ulaşılabilir kimi zaman tek bir teknik yeterli olabilir. SpookFlare’in kullanım oranı arttığında güvenlik ürünü üreten firmalar SpookFlare için imza ve davranış veritabanlarını geliştirecektir. Bu olduğunda, imzaları ve davranışları değiştireceğim, değiştireceksiniz veya yeni teknikler üreteceğim, üreteceksiniz. Günün sonunda önlemleri büyük olasılıkla atlatacağım, atlatacağız. Çünkü bu, sonu olmayan bir kedi-fare oyunudur.

Stay in shadows!