Empire 2.0 Kurulumu ve Kullanımı

Empire Ana Menü

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.

  • Listeners,
  • Stagers ve
  • Agents

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

Empire Listeners

DBX; Empire Dropbox Listener’ıdır.

Empire DBX

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.

Empire http

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.

Empire http com

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

Empire http FOREIGN

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

Empire http hop

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.

empire HTTP_MAPI

METERPRETER; Klasik Meterpreter listener’i oluşturur.

Empire METERPRETER

ONEDRIVE; Listener olarak Onedrive kullanır.

Empire onedrive

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

empire REDIRECTOR

Empire Stagers

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

Yeni eklenen stagerlar: (OSX/Python)

  • Jar files
  • ELF Pyinstaller source generation
  • Empire AppBundles
  • Empire .pkg installers

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

Windows Stager’ları

empire 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/BunnyLauncher

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

Windows/C# Powershell Launcher

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

Windows/DLL Loader

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/Ducky Script

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

Windows/HTA Launcher

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

Windows/BAT Launcher

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

Windows/LNK Launcher

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

Windows/Regsrv Launcher

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

Windows/VBS Launcher

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

Windows/MSBUILD XML

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

Windows/Office Macro

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

Windows/Macroless Word

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

Windows ShellCode Launcher

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

Windows/TeensyLauncher

OSX Stager’ları

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

Empire Apple Script Launcher

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

OSX/Application

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

OSX/DuckyLauncher

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

OSX/Dynamic Library Extension

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

OSX/Jar File

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

OSX/Launcher

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

OSX/Macho

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

OSX/Macro

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

OSX/ .PKG STAGER

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

OSX/HTML Launcher

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

OSX/Teensy Launcher

Multi Stager’ları

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

Multi/ Bash

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

Multi/ Launcher

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

Multi Macro

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

Multi/PyInstaller/ELF

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

Multi/War

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.

Empire Agent’ları

Interact Komutu Kullanımı:

Interact Komutu Kullanımı:

Agent Komutları

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

Agent Komutları

Empire Modülleri

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

Empire Modülleri

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

empire searchmodule

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 Trafiği

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 HTTP Request Davranışı

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.

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

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:

Empire Event Log

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 Empire agentlarını

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)

IDS (Snort/Suricata)

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:

Empire Suricata kuralı örnek

Ş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

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

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.

  • İlk olarak process_name = powershell.exe olmalı,
  • En az 1 network bağlantısı yapmış olmalı,
  • Commandline parametresi olarak en az yukardaki -ENC, -EXEC şeklinde bir parametre kullanmalı.

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

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

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.

Splunk Nerwork Trafik
Splunk Search for IEX

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:

  • Scheduled Tasks (Zamanlanmış Görevler)
  • Auto-run (Başlangıçta otomatik çalıştırılanlar)
  • WMI subscriptions (WMI eventleri)
  • Security Support provider
  • Ease of Access Center backdoors
  • Machine account password disable

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

Yorum Yaz

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*
*

Mail listemize üye olarak eğitim fırsatlarını kaçırmayın!
Eğitim ve ücretsiz etkinliklerizden haberdar olmak için e-posta listesimize üye olun!.