BGA Cyber Security – Siber Güvenlik Çözümleri

Empire 2.0 Kurulumu ve Kullanımı

Empire, kriptolojik olarak güvenli iletişim sağlayan ve esnek bir mimariye dayanan bir PowerShell post-exploitation ajandır. Empire, Powershell.exe’ye gerek kalmadan PowerShell çalıştırmayı sağlayabilen, Keyloggerlardan Mimikatz’a kadar post-exploitation modülleri hızlıca yerleştirilebilin ve ağ tespit sistemlerinden kaçınmak için farklı teknikler barındıran bir uygulamadır.

Empire 2015 yılında BSidesLV’de yayınlanmıştır. Bugüne kadar da yenilenmeye devam etmiştir. Güncel kullanımda Empire 2.0 sürümü kullanılmaktadır. Empire hakkında tüm dokümantasyonu ve proje açıklamalarını powershellempire.com adresini inceleyebilirsiniz.

Empire, kriptolojik olarak güvenli bir iletişim sunan, çoğu mimari üzerine rahatça çalışabilen bir PowerShell Exploitation aracıdır.

Empire Kurulumu ve Kullanımı

Empire kurulumu için öncelikle Github reposundan Empire son sürümü klonlanır.

git clone https://github.com/EmpireProject/Empire

Debian sistemlerde “./setup/install.sh” dizininde bulunan bash script çalıştırılarak gerekli işlemler tamamlanarak kurulacaktır. Fakat script’in RHEL tabanlı bir sistemde çalışması mümkün olmadığından yine setup dizininde bulunan req.txt dosyası içerisindeki Python modülleri PIP aracılığıyla kurulabilmektedir. Daha sonra ./empire komutu ile Empire başlatılır.

Empire Ana Menüsü

Empire başlatıldığında yukarıdaki resimdeki gibi bir ana menüden oluşmaktadır. “Help” yani yardım komutu Empire üzerinde kullanabileceğiniz diğer komutları görmenizi sağlar.

Empire Ana Menüsü

Empire Çalışma Yapısı

PowerShell Empire, üç ana bileşenden oluşmaktadır.

Listener, saldırdığımız makineden yani C&C üzerinde bağlantı dinleyen bir process’tir.

Empire Listeners

DBX; Empire Dropbox Listener’ıdır.

Agent’lar ile iletişim için Dropbox kullanır.

http; Standart HTTP listener’ıdır. Back-end’te Flask kullanır. Default profile olarak /admin/get.php, news.php /login/process.php gibi GET ve POST istekleri atarak konuşur. Python ya da Powershell olarak dil seçimi yapılabilmektedir. HTTPS için SSL sertifikası kullanılabilmektedir.

HTTP_COM; HTTP/HTTPS listener oluşturur fakat http listener’dan farklı olarak yine GET/POST request’leri atarak iletişim kurmuş olsa da bu modül, Net.WebClient yerine iletişim kurmak için gizli Internet Explorer COM nesnelerini kullanır. Eğer https kullanılmak isteniyorsa valid bir sertifika kullanılmalıdır.

HTTP_FOREIGN; http foreign, birden fazla C&C server kullanılıyorsa foreign bir http listener oluşturulmasını sağlar.

HTTP_HOP; http_hop, Metasploit’teki reverse hop HTTP payload’ı gibi çalışır ve gelen bağlantılar başka bir dinleyiciye gönderilir.

HTTP_MAPI; Liniaal, bir Exchange sunucusu aracılığıyla Empire agent’ları için bir C2 kanalı oluşturulmasını sağlar.  Tüm iletişim MAPI/HTTP veya RPC/HTTP üzerinden ve doğrudan Liniaal agent’ı ile Exchange sunucusu arasında yapılır. Hiçbir trafik HTTP olarak gerçekleşmez ve çoğu network-based Detection’ları atlatır.

METERPRETER; Klasik Meterpreter listener’i oluşturur.

ONEDRIVE; Listener olarak Onedrive kullanır.


REDIRECTOR; Internal redirector listener ayarlar. Listener’dan farklı bir internal listener’a peer to peer bağlantı sağlar.

Empire Stagers

Empire 1.0’dan farklı olarak Empire2.0 da daha fazla stager bulunmaktadır.

Yeni eklenen stagerlar: (OSX/Python)

Empire stagerları işletim sistemi ortamlarına göre ayırılmıştır. Windows/Osx/Multi olarak kategorilendirilmiştir.

Windows Stager’ları

Windows/BackdoorLnkMacro: .lnk dosyalarını kullanarak Backdoor oluşturur. Kullanıcı tıkladığında bir empire launcher’ı indirir ve başlatır.  Örneğin Internet Explorer.lnk dosyası oluşturulup kullanıcının tıklamasıyla etkinleştirilir.

Windows/BunnyLauncher: Tek satırdan oluşan bir bunny script oluşturur.

Windows/C# Powershell Launcher: Powershell’in de içinde gömülü olduğu bir c# exe dosyası oluşturur.

Windows/DLL Loader: Stager koduyla birlikte enjekte etmek için bir PowerPick Reflective DLL’i oluşturur.

Windows/Ducky Script: Rubber Ducky için bir satırlık stager kodu içeren ducky script oluşturur.  

Not: Ducky kodu aynı şekilde Digispark’a dönüştürülebilir.

Windows/HTA Launcher: İçerisinde stager kodu bulunduran .HTA dosyası oluşturur.

Windows/BAT Launcher: İçerisinde stager kodu bulunan bir BAT launcher oluşturur. Ayrıca bu bat dosyası daha sonra kendini silmektedir.

Windows/LNK Launcher: Stager kodu bulunduran bir LNK dosyası oluşturur.

Windows/Regsrv Launcher: İçerisinde stager kodu bulunduran SCT (COM Scriptlet) dosyası oluşturur.

Windows/VBS Launcher: İçerisinde stager kodu bulunan .VBS dosyası oluşturur.

Windows/MSBUILD XML: Msbuild.exe ile birlikte çalıştırılması için içerisinde stager kodu bulunduran xml dosyası oluşturur.

Windows/Office Macro: Office 97-2003 ve 2007 dosya türevlerinde çalışmak üzere MACRO oluşturur.

Windows/Macroless Word: Kod yürütme için bir formül alanı kullanarak bir makro olmayan belge oluşturur.


Windows/ShellCode Launcher: Windows shellcode stager’ı oluşturur.

Windows/TeensyLauncher: Teensy için stager kodu içeren script oluştur.

OSX Stager’ları

OSX/Apple Script Launcher: Empire stager’ı çalıştıran bir applescript oluşturur.

OSX/Application: OSX için Empire Application’ı oluşturur.

OSX/DuckyLauncher: OSX için stager kodu içeren ducky script oluşturur. (Digispark’a dönüştürülebilir.)

OSX/Dynamic Library Extension: OSX için stager kodu içeren .dylib oluşturur.

OSX/Jar File: Stager kodu içeren .jar dosyası oluşturur.

OSX/Launcher: Bir satırlık stager kodu oluşturur.

OSX/Macho: OSX için stager kodu içeren bir macho dosyası oluşturur.

OSX/Macro: Ofisin yeni versiyonlarını da destekleyen OSX Office macro’su oluşturur.

OSX/ .PKG STAGER: OSX için PKG installer oluşturur. Kurulum tamamlandığında empire launcher başlatır.

OSX/HTML Launcher (Safari): HTML payload launcher oluşturur.

OSX/Teensy Launcher: OSX için Teensy script oluşturur.

Multi Stager’ları

Multi/ Bash: Kendi kendisini silen launcher başlatan bir bash script oluşturur.

Multi/ Launcher: Tek satırdan oluşan launcher kodu oluşturur.

Multi/Macro: Hem Windows için hem OSX için 97-2016 ofis versiyonları için macro oluşturur.

Multi/PyInstaller/ELF File: Pyinstaller kullanarak oluşturulmuş empire çalıştıran bir elf dosyası oluşturur.

Multi/War: Deploy edilebilir WAR dosyası oluşturur.

Empire Agent’ları

Bir agent bağlandığında aşağıdaki gibi bir mesaj gelir: Örneğin, [+] Initial agent CGUBKC1R3YLHZM4V from 192.168.52.168 now active. Agents yazarak agents menüsüne ulaşılabilir. Aktif agent’lar ile ilgili temel bilgiler bulunmaktadır.

Belirli agentlar üzerinde üzerinde veya agent menüsünden çeşitli komutlar uygulanabilir, Örneğin “Kill All” diyerek tüm agent’lar kapatılabilir.  Agent ile ilgili işlem yapmak için “interact AGENT_ISMI” komutunu kullanılır. Agent ismi tüm komutlar için aynı olmalıdır.

Interact Komutu Kullanımı:

Agent Komutları

Agentları kontrol etmek için aşağıdaki komutlar kullanılır.

Empire Modülleri

Kullanılabilir modülleri görmek için, usemodule <tab> yazılması yeterlidir.

Modül adlarını/açıklamalarını aramak için, örneğin “searchmodule privesc” kullanılabilmektedir.

Bir modülü kullanmak için örneğin PowerView’dan netview kullanmak için usemodule situational_awareness/network/sharefinder yazılması yeterlidir.

Custom Script Modül Kullanımı

Default tanımlı gelen modüllere ek olarak, Empire .ps1 scriptlerini kolayca içe aktarabilmektedir. Scripti import etmek için scriptimport ./path/ komutunu kullanılır.

Daha sonra script içerisindeki tüm fonksiyonlar “scriptcmd” komutu kullanılarak aktif shell ile uyumlu hale gelecektir. Bir modüle ek olarak fonksiyon eklenebilimesi gibi faydalı bir durum oluşturmaktadır.

Empire Trafiği

Varsayılan olarak, Empire HTTP listener’ları, üç özel URL ile sürekli olarak konuşacak şekilde ayarlanmıştır. Aşağıda resimde gösterilmiştir.

Empire HTTP Request Davranışı

Empire URL’leri kolayca değiştirilebilmektedir. Empire C2 farklı HTTP GET ve POST talepleri üretebilmektedir.

Örneğin, Empire agent’ları komut çalıştırmak veya dosya yüklemek gibi görevlerde HTTP GET isteklerini kullanır. Empire C2 agent’ları Empire kontrol sunucusuna cevap verilerini göndermek için HTTP POST isteklerini kullanmaktadır.

Bu özellikler normal ağ aktivitesi taban hatlarına göre incelenebilir. Örneğin, zaman içinde, Empire kurbanları muhtemelen aşırı sayıda HTTP bağlantısı sergileyecek ve tek bir IP adresine veya domain’e değiştirilen anormal bir veri hacmi gösterecektir.

Blue team’ler ayrıca HTTP POST taleplerinde potansiyel olarak anormal davranışlar gözlemleyebilir. Genellikle, HTTP / TCP port 80 üzerinden gönderilen veriler şifrelenmez.

Saldırgan, Empire’ın giden iletişiminde 80 numaralı TCP bağlantı noktasını kullanıyorsa, blue-team şifreli verilerin şifrelenmemiş olmamasını beklemeledir. Bu durum fark edilebilir.  Fakat bu durum saldırgan normal HTTPS kullanıldığında geçersiz olacaktır.

Empire’ın Sistemde Bıraktığı Windows Event Logları İncelemek

Windows Event Logları; Yapılandırmaya bağlı olarak, saldırganın faaliyetlerini bütünüyle ayrıntılandıran PowerShell kullanımının bütün log’larını yakalamaktadır. Windows 8, 10 ve Server 2012 R2 gibi işletim sistemleri, varsayılan olarak ayrıntılı PowerShell logları toplamaktadır. Bu loglar, hangi PowerShell komutlarının belirli bir sistemde ne zaman ve nereden (uzaktan veya yerel olarak) yürütüldüğünü gösterecektir. Aşağıdaki ekran görüntüsü, saldırganın Empire C2 kullanmasından sonra oluşturulan log’ları gösterir.

Dolayısıyla burada analizcilerden Powershell log’larını bir şekilde Windows üzerinde açmaları (Sysmon ile Powershell log’lanabilir) ve event’ler takip edilmesi gerekmektedir.

Empire Tespit Yöntemleri Sysmon ile Powershell Empire Kullanımı Tespit Etmek

Bir blue team üyesi için log’ları okumak ve kontrol etmek oldukça zor olabilmektedir. Powershell Empire’ın agent’ları memory üzerinde çalışmaktadır ve minimum düzeyde log üretmektedir. Ayrıca, yeni bir agent dağıtıldığında başlangıç komut dosyasını gizlemektedir. Bu nedenle Powershell ScriptBlock log’larından bir şey elde etmek neredeyse imkansızdır. Temelde aktivitesini gizleme yeteneği ve çeşitli exploitation modüllerini çalıştırabilme yeteneği ile Powershell Empire’ı analistlerin tespit etmesi resmen bir kâbus olmaktadır. Fakat sysmon Powershell Empire’ın kullanımını etkili bir şekilde tanımlamanın bir yöntemi olabilir.

Powershell Empire’ı Sysmon ile ve Event Log 1 ve 3 ile etkili bir şekilde tespit etmenin iki yolu vardır.

1) Yeni bir agent yüklemesi üzerine, bu olayların her ikisi de tetiklenir. Event Log 1, aşağıdakine benzer:

Sysmon Event Log 1 “CommandLine” parametresinde, “-NoP -sta -w 1 -enc” anahtarlarıyla Powershell’i çalıştıran ve ardından uzun bir base64 kodu ile başlar.

Kontrol etmek istediğiniz ilk şey, şu anda Sysmon ile Powershell kullanımını takip ettiğinizden emin olmaktır. Sysmon’u powershell.exe kullanımını içerecek şekilde yapılandırdığınızdan emin olmak için, Sysmon.xml konfigürasyon dosyanızdaki hem Event Log 1 ve 3’ün yapılandırmasına, hem de powershell.exe için ayrı bir konfigurasyon eklemeniz gerekmektedir.

Sysmon konfigurasyon dosyasını şuradan bulabilirsiniz:

https://github.com / ion-storm/sysmon-config / blob/master/ sysmonconfig-export.xml

https://github.com / sametsazak/sysmon

Powershell kullanımını loglara kaydedecek şekilde yapılandırılmış bir Sysmon’a sahip olduğunuzda ve powershell’in tam yolundan başlayarak “CommandLine” alanına dayalı uyarıları tetiklemek için bazı koşulları yapılandırmanız gerekmektedir. Yukarıdaki konfigürasyonları kullanıyorsanız, yapılandırmışsınız demektir. Powershell agent’larından birisi çalıştığında bu parametrelerle bir Powershell başlatıldığının log’larını üretecektir.

2) Powershell Empire agentlarını tanımlamak için kullanılabilecek ikinci yol ise Sysmon Event Log 3’ü izlemektir. Event Log 3 şuna benzer:

Powershell’i kullanarak external (dışarı doğru) bir ağ bağlantısı başlatılması çok nadiren olur ve kullanıcının genellikle bundan haberi olur yani kullanıcı tarafından yapılmış bir işlem sayılabilir. Bu tür bir olayı izleyerek, yalnızca birinin Powershell Empire agent’ını kullanabileceğini değil, aynı zamanda powershell ile dosya indirilmesi, yüklenmesi gibi Powershell’i bu amaçla kullanıldığında da logları üretilmiş olur ve bu logları SIEM’inize yönlendirebilirsiniz ve farklı korelasyonlar oluşturabilirsiniz.

IDS (Snort/Suricata) ile Powershell Empire Tespit Etmek

Daha önce yazımızda Powershell Empire agentlarının HTTP Request trafiğinden bahsetmiştik, test ortamı olarak bir Windows7 kurup üzerinde powershell empire çalıştırıp bir süre packet capture yaptık. Daha sonra bu pcap kaydını Snort/Suricata ile çalıştırdığımızda güncel kural seti ile aldığımız sonuç…

(networktotal.com)

ETPRO TROJAN PowerShell Empire Request HTTP Pattern alarmının oluştuğunu görmekteyiz, fakat bu kural ETPRO seti içerisinde mevcut. EmergingThreats’in paralı olan kural seti.

Emerging Threats Open Suricata kuralları içerisinde aşağıdaki gibi bir kural var:

Şimdi bu kural bize ne söylemektedir? Adım adım inceleyeceğiz:

  1. Bu kuralın tetiklenmesi için trafiğin $HOME_NET : any port olarak tanımlanmış olan yerden örneğin(192.168.0.0/16) $EXTERNAL_NET : any port olarak tanımlanmış yere gitmesi gerekiyor:
  2. HTTP content içerisinde POST methodu olmaası gerekiyor.
  3. HTTP content içerisinde “/admin/get.php” olması gerekiyor.
  4. HTTP content içerisinde User Agent pattern’i aşağıdaki gibi olması gerekiyor.
  5. ”User-Agent | 3a 20 | Mozilla/5.0 (Windows NT 6.1|3b| WOW64|3b| Trident/7.0|3b| rv|3a|11.0) like Gecko | 0d 0a|”
  6. HTTP Header content’i şu pattern/patternleri içermemesi gerekiyor. “Referer | 3a 20| “;” |0d 0a | Accept”;”| 0d 0a |Accept”
  7. “/Cookie\ x3a\x 20SESSIONID = [A-Z0-9]{16}\r\n/” regex pattern’i ile bir http header beklenmektedir.

Powershell Empire bu kurala her ne kadar şuanki trafiği ile yakalanıyor olsa da trafiğin bu kurala ya da benzer kurallara yakalanmaması için düzenlenmesi zor bir işlem değil. Örneğin burada admin/get.php yerine farklı bir dosya/dizin kullanılsaydı ve diğer content içerikleri değiştirilmiş olsaydı kural bypass edilmiş olurdu.

Bu kuralların dışında PTResearch tarafından 2 adet kural daha yazılmış Powershell Empire’ı tespit etmek için:

https://github.com/ ptresearch /AttackDetection/ blob/master/ PowerShell%20Empire/ power_shell_empire.rules

Carbon Black İle Powershell Empire Tespit Etmek

Carbon Black, Üst düzey güvenlik operasyon merkezleri ve blue team ekipleri için filtrelenmemiş görünürlük sağlayan ölçeklenebilir, gerçek zamanlı tehdit avcılığı ve olay müdahale (IR) çözümüdür.  Hali hazırda Carbon Black kullanıyorsanız birazdan aşağıda örneğini vereceğim kurallar muhtemelen zaten deploy edilmiş ve aktifleştirilmiştir. Powershell Empire’ı tespit etmek için oluşturulan kurallara yakından bakalım:

Kural 1: process_name:powershell.exe AND netconn_count:[1 TO *] AND (cmdline:”-Enc” OR cmdline:”-Exec” OR cmdline:”bypass” OR cmdline:”hidden”)

Şimdi bu kuralı adım adım inleyelim.

Bu kural deploy edildiğinde sadece Empire değil bu şekilde çalışan bütün Powershell kullanımlarını yakalayacaktır.

Splunk ile Powershell Empire Tespit Etmek

Splunk, Enterprise bir SIEM ürünüdür. Daha önce yazımızda anlattığımız Sysmon ve Windows event log’ları takip ederek Powershell Empire tespit yöntemi gibi Splunk’ta Powershell Empire agent’larını tespit etmek için aynı yöntemi uygulamaktadır.

Yani kısaca Powershell log’ları üzerinden gidilerek tespit edilecektir.

Windows Üzerinde Powershell Empire Temizleme

Bu kısımda aslında Powershell Empire’ın “Persistence” yani sistem üzerinde kalıcı olmayı sağlayan modülleri üzerine ve bu modüllerin nasıl kaldırılacağına değineceğiz. Kalıcılık modüllerinin amacı, sunuculara sürekli olarak erişebilmenizi sağlamaktır. Powershell Empire agent’ları memory üzerinde çalışır ve herhangi bir dosya oluşturmaz. Ancak saldırganlar için olumsuz olan şey, yeniden başlatma veya herhangi bir işlerin ters gitme olasılığına karşı kalıcılık sağlamak için diske dokunmaktadır. Bu, savunucuların bulabileceği veya güvenlik araçlarının algılayabileceği eserler bırakır.

Powershell Empire persistence modüllerini tespit etmek ve temizlemek için NorkNork adında bir araçtan faydalanacağız:

Github: https://github.com/ n00py/NorkNork

Bu araç kısaca aşağıdaki Empire’ın “kalıcılık” için uyguladığı yöntemleri Windows üzerinde bulur ve düzeltir:

Nasıl Kullanılır?

İndirdikten sonra aşağıdaki komutlar kullanılarak çalıştırılabilir:

PS C:\Users\>python norknork.py

PS C:\Users> .\norknork.exe

Exit mobile version