PowerShell Empire Serisi – II | Agent, Listener, Stager ve Module Yapılandırması ve Kullanımı

Bu yazıda, bir önceki yazıda kısaca değinmiş olduğum ve Empire’ın temel bileşenleri olan 4 ana yapının kullanımından bahsedeceğim. Bu dört ana yapıyı kısaca hatırlamak gerekirse:

  • Agent: Hedef sistemde istediğimiz görevleri yapacak ajanlar
  • Listener: Açılan bağlantıları dinleyecek olan dinleyiciler
  • Stager: Hedef sistemde çalıştıracağımız kodlar
  • Module: Hedef sistemde çalıştıracağımız modüller

Yazıya başlamadan önce kullanılacak sistemlerden bahsetmek istiyorum. Bu yazı dizisi kapsamında Windows işletim sistemi yüklü olan bir sanal makineyi hedef olarak kullanacağız. Halihazırda elinizde Windows işletim sistemine sahip olan bir sanal makine var ise onu kullanabilirsiniz. Eğer yoksa, Windows’un kendi sitesinde ücretsiz olarak kullanıma sunduğu sanal makinelerden birini indirip kullanabilirsiniz. Bahsettiğim makinelere buradan ulaşabilirsiniz. En düşük özelliklere sahip olan IE8 on Win7(x86) makinesi işimizi görecektir.

./empire komutu ile Empire’ı çalıştırıyoruz.

help komutu ile program hakkında bilgi alabileceğimiz ve işleyişini öğrenebileceğimiz yardım kısmına ulaşabiliriz.

Sık kullanacağımız komutlardan kısaca bahsedelim.

agents komutu ile hedef sistemde bizim için çalışan ajanların menüsüne ulaşıyoruz, bu menüde daha oluşturulan tüm ajanları görebiliriz. interact komutu ile oluşturulan bu ajanlar ile iletişime geçebiliriz.

listeners komutu ile dinleyici menüsünü görüntüleyebiliyoruz. Bu menü vasıtasıyla yeni bir dinleyici oluşturabilir ve hedef makinelerden açılacak bağlantıları dinleyebilir, oluşturulan bütün dinleyicileri görebiliriz.

usestager komutu ile hedef sistemde bize bağlantı açabilecek bir stager oluşturabiliriz.

usemodule komutu ile ise bağlantı kurduğumuz hedef sistem üzerinde Empire modüllerini çalıştırabiliriz.

Birinci Adım: Dinleyici Oluşturma

Empire’ı kullanmaya ilk olarak açılacak bağlantıları dinleyecek bir dinleyici oluşturarak başlayacağız. Bunun için yukarıda bahsettiğimiz gibi listeners komutunu kullanarak menüye ulaşmamız gerekiyor. Daha sonra uselistener komutunu kullanarak ilk dinleyicimizi oluşturacağız. Komutu yazdıktan sonra, Empire bize ne tür dinleyiciler sağlıyor görmek için 2 kere TAB tuşuna basalım.

Çıkan listeden http seçeneğini seçip devam ediyoruz. Bu dinleyici ile alakalı bilgileri görmek için info komutunu kullanıyoruz.

Açıklama kısmında HTTPS üzerinden GET ve POST metodlarının kullanıldığı yazıyor. Karşıdan gelecek bilgileri gecikmesiz olarak dinleyebilmek için DefaultDelay seçeneğini 1 saniye olarak ayarlıyoruz. Ardından dinleyiciyi oluşturmak ve başlatmak için execute komutunu kullanıyoruz.

Yukarıdaki resimde görüldüğü gibi, ilk dinleyicimiz başarılı bir şekilde oluşturuldu ve gelecek verileri dinlemek için hazır.

main komutu ile ana menüye gelebiliriz. Burada 1 dinleyicinin şu an aktif olduğu bilgisini görüyoruz. listeners komutu ile tekrar dinleyici menüsüne gelelim ve oluşturduğumuz dinleyiciyi görelim.

Görüldüğü gibi dinleyicimiz bilgisayarımızın 80 portuna gelen verileri dinliyor.

İkinci Adım: Hedef Sistemden Kendi Sistemimize Bağlantı Açacak Kodu Oluşturma

Artık hedef sistemden açılan bağlantıları başarılı bir şekilde dinleyebiliyoruz. Şimdi sırada, bu bağlantıyı açacak olan kodu oluşturacağımız kısım var. usestager komutunu yazalım ve yine 2 kere TAB tuşuna basarak Empire’ın bize sağlamış olduğu stager’ları görelim.

Çıkan stager’lar arasından ‘multi/launcher’ı kullanacağız.

Stager hakkında bilgi elde etmek için yine info komutunu kullanabiliriz.

Language kısmında, stager’ın oluşturacağı kodun yazıldığı dili görüyoruz. Bu değer varsayılan olarak PowerShell. Oluşturulacak kod Base64 olarak kodlanacak.

Ayarlamamız gereken tek yer, stager kodunun açacağı bağlantının türü. Listener kısmını http olarak atayalım. Bunun için set Listener http komutunu kullacağız. Son olarak generate komutunu kullanarak işlemlerimizi tamamlıyoruz.

Hedef sistemden bağlantı açma kodumuz başarıyla üretildi. Şimdi tek yapmamız gereken şey bu kodu hedef sistemde çalıştırmak.

Not: Önceki yazıda bahsettiğimiz gibi, Empire temel olarak istismar sonrası için kullanılıyor. Yani Windows işletim sistemine sahip bir sistemi ele geçirmiş olmamız gerekiyor. Bu yazı dizisi istismar sonrası süreci anlattığı için, istismar aşamasının başarılı bir şekilde tamamlandığını varsayarak devam ediyoruz. Şimdilik, oluşturulan kodu hedef sistemde çalıştırmak için Kopyala-Yapıştır yapacağız fakat ileriki yazılarda bu konunun detaylarına girip, hedef sistemde kodu çalıştırmak için ne gibi yöntemler izleyebiliriz diye bakacağız.

Oluşturulan kodu hedef sistemde çalıştırmadan önce kısaca inceleyelim. Base64 olarak kodlanan kodu çözmeyi deneyelim. Takipçilerimizden Enes Aydın’ın uyarısı ve önerisi ile https://raikia.com/tool-powershell-encoder/ sitesini kodu çözmek için kullanacağız çünkü PowerShell encoding kodları için karakter seti olarak UTF-8 değil UTF-16LE kullanıyor.

İşte bize hedef sistemde bağlantı açacak kodun bir kısmı. Fakat tespit edilmeyi zorlaştırmak için Empire tarafından kodlanmış.

Üçüncü Adım: Stager Kodunu Kullanarak Ajan Oluşturma

Stager’ı başarıyla oluşturduk. Sonraki adım olarak, bu kodu hedef sistemde çalıştıracağız ve o sistemde yapmak istediğimiz işlemleri bizim için gerçekleştirecek olan ajanı oluşturacağız.

Kodu, hedef sistemde cmd.exe kullanarak çalıştırdık. Kod çalıştıktan sonra cmd ekranının kendiliğinden kapanması, oluşturulan kodun başarıyla çalıştığını gösteriyor. Ardından kendi sistemimize döndüğümüzde görüyoruz ki, ilk ajanımız başarıyla oluşturulmuş.

agents komutunu kullanarak ajanların menüsüne gidelim. Görüldüğü gibi ajanımız başarılı bir şekilde oluşturulmuş.

Oluşturulan ajana Empire tarafından rastgele bir ad verilmiş. Kullanımı pratikleştirmek açısından ajanımıza yeni bir ad verebiliriz. Bunun için rename komutunu kullanacağız.

Dördüncü Adım: Oluşturulan Ajan ile İletişime Geçme ve Modül Çalıştırma

Hedef sistem ile iletişime geçmek için gereken tüm işlemleri başarıyla gerçekleştirdik. Artık ajanımıza hedef sistemde bizim için yapacağı görevleri verebiliriz.

İlk olarak ajanımız ile iletişime geçmemiz gerekiyor. Bunun için interact komutunu kullanacağız.

Ajan hakkındaki bilgileri görüntülemek için yine info komutunu kullanabiliriz.

Artık hedef sistemde Empire’ın bize sağlamış olduğu imkanlar çerçevesinde işlemler gerçekleştirebiliriz.

Empire, hedef sistemde shell komutları çalıştırmaya imkan vermektedir. shell <komut_adı> söz dizimi ile yazacağımız komutlar hedef sistemde ajanımız vasıtasıyla çalışacak ve ardından önceden oluşturduğumuz ve aktif bir şekilde dinleme yapan dinleyiciye gönderilecek, dinleyici tarafından dinlenen veriler ekranımıza getirilecektir.

Sırasıyla whoami ve systeminfo komutlarını çalıştıralım ve sonuçlarını görelim.

Oluşturduğumuz ajan asenkron bir şekilde çalıştığı için komut çıktıları ekrana düzensiz bir şekilde bastırıldı.

Sonraki adım olarak hedef sistemde çalıştırabileceğimiz modüllere bakalım. usemodule komutunu yazıp 2 kere TAB tuşuna basalım ve Empire’ın bünyesinde bulunan modülleri inceleyelim.

Görüldüğü gibi birçok modül mevcut. İleriki yazılarda bu modülleri daha detaylı inceleyeceğiz fakat bu yazı kapsamında da bir modülün işleyişini görelim.

trollsploit adlı eğlenceli birkaç modül mevcut. Bu modüllerden birini kullanarak, Empire’da bir modül nasıl çalıştırılır görelim. usemodule komutu ile modülü seçiyor, info komutu ile modül hakkındaki bilgileri görebiliyor, execute komutu ile seçtiğimiz modülü hedef sistemde çalıştırabilliyoruz.

Hedef sistemde ASCII karakterler ile dans eden Lee Holmes oluşturan bir modül olan ‘trollsploit/rick_ascii’ modülünü kullanalım ve birazcık eğlenelim. 🙂

Beşinci ve Son Adım: Hedef Sistemde Temizlik

İstismar sonrası aşamasında hassas ve kıymetli veri elde ettikten sonra yapmamız gereken şey, yaptığımız işlemler ile ilgili kayıtları silmek ve geride iz bırakmamaktır. Biz de hedef sistemde iz bırakmamak için, oluşturduğumuz ajanı ve ajanın yaptığı işlemlerin tutulduğu veri tabanını temizleyeceğiz.

agents komutu ile tekrar ajan menüsüne gidelim ve ajanımızı görüntüleyelim. Ardından kill <ajan_adı> komutu ile ajanımızı silelim. Birçok ajan mevcutsa ve tek tek silmek istemiyorsak kill all komutunu kullanabiliriz.

Tebrikler ajan Win7, hedef sistemde Lee Holmes oluşturarak büyük bir iş başardın ve görevini yerine getirdin. Seni özleyeceğiz.

Son işlem olarak clear all komutu ile görev veri tabanını temizliyor, hedef sistemden iz bırakmadan ayrılıyoruz.

Ahmet Selim Kaya

Ofansif Güvenlik Araştırmacısı, TOBB ETU Siber Güvenlik Yüksek Lisans öğrencisi. Bilmediklerinin öğrencisi, bildiklerinin öğretmeni.