2Ağustos
Nishang Framework

Nishang ile Windows Post Exploitation – Part 4

Nishang, Nikhal Mittal tarafından geliştirilen bir post-exploitation araçlar takımıdır. Nishang içerisinde post-exploitation işlemleri sırasında kullanılabilecek olan, Powershell dilinde yazılmış script kodları bulunmaktadır. Nishang’e ait script kodları ile; port taraması, bilgi toplama, hak yükseltme, kimlik bilgilerini ele geçirme, backdoor(arka kapı) bırakma gibi işlemler gerçekleştirilebilir. Powershell ile oluşturulduğundan dolayı Windows işletim sisteminde herhangi bir kurulum gerektirmeden çalıştırılabilir. Aracın önemli özelliklerinden biri de çalıştırılan script’lerin disk üzerinde değil, bellek üzerinde çalışmasıdır.

1. Bölümü okumak için: https://www.priviasecurity.com/kaynaklar/makale/Nishang-ile-Windows-Post-Exploitation-Part-1

2.Bölümü okumak için: https://www.priviasecurity.com/kaynaklar/makale/Nishang-ile-Windows-Post-Exploitation-Part-2

3.Bölümü okumak için: https://www.priviasecurity.com/kaynaklar/makale/Nishang-ile-Windows-Post-Exploitation-Part-3

2.12. Prasadhak

Bu script makine üzerinde çalışan her bir process için MD5 hash değerini alır ve malware incelemesi yapar. Bu script sızma testlerinde, çalışan zararlı yazılımları tespit etmek için ele geçirilen makine üzerinde bir antivirüs uygulaması kurmak yerine, bu işi powershell kullanarak daha kolay bir şekilde halletmek amacıyla yazılmıştır. Script, alınan MD5 hash değerlerini, VirusTotal API kullanarak VirusTotal veritabanında bulunan değerler ile karşılaştırır. Eğer eşleşme sağlanırsa “Something malicious is found” uyarısı ve zararlı ile ilgili yapılan analize ait VirusTotal linki ekrana basılır. Bu scriptin VirusTotal veritabanını kullanabilmesi için, VirusTotal üzerinde bir üyelik açılmalıdır ve oluşturulan hesaba ait olan APIKey, bu script için kullanılan “apikey” parametresine değer olarak atanmalıdır.

Resim 2.12.1 – Invoke-Prasadhak

2.13. Scan

Sızma testlerinde bir makine ele geçirildikten sonra, post-exploitation gerçekleştirmek için öncelikle ele geçirilen makinenin bağlantı kurabildiği makineler tespit edilmelidir ve bu makinelere bağlanabilmek için makinelerin açık portları tespit edilmelidir. Buradan yola çıkarak çeşitli yöntemler ile diğer makineler ile bağlantı kurulabilir. Bu yöntemlerden bir tanesi, bir kelime listesine dayanan Brute Force saldırılarıdır. Bu işlemleri yapabilmek için Nishang, “Scan” dizini altında Brute Force saldırısı ve port taraması yapmak için 2 adet script sunmaktadır: Invoke-BruteForce, Invoke-PortScan. Bu scriptler aşağıda açıklanmıştır.

2.13.1. Invoke-BruteForce

Bu script SQL Server, Active Directory, yerel hesaplar, Web ve FTP servislerine yönelik Brute Force saldırısı gerçekleştirmektedir. Bu script için kullanılan parametreler aşağıda açıklanmıştır:

  • ComputerName: Brute Force saldırısı yapılacak olan makinenin adını veya IP adresini belirlemek için kullanılır.
  • UserList: Brute Force saldırısı yapılacak olan makine üzerinde denenecek olan kullanıcı adlarının bulunduğu dosyanın yolunu belirtir.
  • PasswordList: Brute Force saldırısı yapılacak olan makine üzerinde denenecek olan parolaların bulunduğu dosyanın yolunu belirtir.
  • Service: Brute Force saldırısı yapılacak olan servisi belirler.
  • StopOnSuccess: Bu parametre kullanılırsa, kullanıcı adı ve parola doğrulandığı an saldırı durur.
  • Delay: Brute Force geciktirmesi yapmak için belirlenen süredir. (Varsayılan 0)
Resim 2.13.1.1 – Invoke-BruteForce

2.13.2. Invoke-PortScan

Bu script ile ayakta olan makinelerin hostları bulunur ve makineler üzerinde port taraması yapılır. Ayakta olan makinelerin IP adreslerinin bulunması için “StartAddress” ve “EndAddress” parametreleri kullanılır. Bu parametreler ile başlangıç ve bitiş IP adresi belirlenir ve bu IP adresleri aralığındaki tüm IP adreslerine ping atılarak, o IP adresine sahip makine olup olmadığı tespit edilir. “ResolveHost” parametresi kullanılarak bulunan tüm makinelerin isimleri çözülür. Port taraması yapmak içinse, “ScanPort” parametresi kullanılır. Bu parametre ile varsayılan olarak aşağıdaki portlar taranır:

21,22,23,53,69,71,80,98,110,139,111,389,443,445,1080,1433,2001,2049,3001,3128,5222,6667,6868,7777,7878,8080,1521,3306,3389,5801,5900,5555,5901

Eğer belirli portların taranması istenirse, “Port” parametresi kullanılır ve taranacak portlar virgül ile ayrılarak belirtilmelidir.

Resim 2.13.2.1 – Invoke-PortScan

2.14. Shells

Bir saldırgan bir makineyi ele geçirdikten sonra, o makine üzerinden farklı bir yöntem ile farklı bir noktadan shell almak isteyebilir. Nishang, ele geçirilen makineden shell elde etmek için bazı yöntemler sunmaktadır. Bu yöntemler aşağıda açıklanmıştır.

2.14.1. Invoke-JSRatRegsvr

Bu script, regsvr32.exe uygulamasını kullanarak HTTP üzerinden Reverse shell elde etmek amacıyla kullanılmaktadır.

Aşağıdaki resimde görüldüğü üzere “Invoke-JSRatRegsvr” komutu ile HTTP üzerinden bir dinleme modu başlatılmıştır:

Resim 2.14.1.1 – Invoke-JSRatRegsvr

“IPAddress” parametresi ile dinleme modu başlatılan makinenin IP adresi ve “Port” parametresi ile dinleme portu belirlenmektedir. Bu komutun çalıştırılmasıyla birlikte bir, “file.sct” adlı dosyayı HTTP üzerinden indirip regsvr32.exe uygulaması ile çalıştıracak ve scrobj.dll dosyasını kayıt defterine kaydedecek bir komut oluşmaktadır. Bu komut kurban makinede çalıştırıldığı zaman, kurban makine üzerinden reverse shell elde edilecektir. Bağlantı elde edilmesi, “file.sct” dosyası içerisinde bulunan javascript kodları tarafından sağlanmaktadır.

Resim 2.14.1.2 – Regsvr32
Resim 2.14.1.3 –Reverse shell

Yukarıdaki resimde görüldüğü üzere, kurban makine (192.168.228.130) 49787 portunu açıp, o port ile dinleme modu başlatılan makinenin 80. portuna bağlanmıştır ve reverse shell elde edilmiştir. Aradaki bağlantıyı kurban makinede çalıştırılan “regsvr32.exe” uygulaması sağlamaktadır.

Resim 2.14.1.4 –Regsvr

2.14.2. Invoke-JSRatRundl

Bu script rundll32.exe uygulaması kullanılarak reverse shell elde etmek amacıyla kullanılır. “IPAddress” ve “Port” parametreleri kullanılarak bir dinleme modu başlatılır ve rundll32.exe uygulaması ile çalıştırılacak ve saldırgan makine tarafında oluşturulan http://<saldırgan_IP>:<dinleme_portu>/connect bağlantısına GET isteği atacak bir komut oluşur. Bu komut kurban makinede çalıştırıldığında, bağlantı sayfasındaki reverse shell sağlayan javascript komutları sayesinde, bir bağlantı alınır ve reverse shell elde edilir.

Resim 2.14.2.1 –Invoke-JSRatRundll
Resim 2.14.2.2 – rundll32.exe
Resim 2.14.2.3 – ReverseShell

2.14.3. Invoke-PoshRatHttp

Bu script ile “IPAddress” ve “Port” parametreleri kullanılarak bir dinleme modu başlatılır. “IPAddress” ile saldırgan makinenin yerel IP adresi, “Port” parametresi ile dinleme portu belirlenir. Böylece HTTP protokolü üzerinden erişilebilen http://<IPAddress>:<Port>/rat bağlantısı açılır ve kurban makine ile bu URL adresine istek atıldığında, saldırgan makine tarafından bir reverse shell oturumu elde edilir.

Resim 2.14.3.1 – Invoke-PoshRatHttp
Resim 2.14.3.2 – HTTP İsteği
Resim 2.14.3.3 – Bağlantının Sniff Edilmesi
Resim 2.14.3.4 – Reverse shell Bağlantısı

2.14.4. Invoke-PoshRatHttps

Bu script saldırgan makineye bir SSL sertifikası yükler ve kurban makine ile şifreli iletişim kurulmasını sağlar. Böylece HTTPS protokolü ile kurban makine üzerinden bir reverse shell elde edilir. Script, “IPAddress” ve “Port” parametreleri ile birlikte çalıştırılarak, bir dinleme işlemi başlatılır. “IPAddress” parametresi saldırgan makinenin yerel IP adresini belirtir. “Port” parametresi ise dinleme işlemini yapar ve kurban makine ile şifreli iletişim kurulmasını sağlar. Kurban makineden HTTPS protokolü ile https://<IPAddress>:<Port>/rat  adresine bir istek atıldığında, saldırgan makinede bir reverse shell oturumu elde edilir.

Resim 2.14.4.1 – Invoke-PoshRatHttps
Resim 2.14.4.2 – HTTPS İsteği
Resim 2.14.4.3 – Bağlantının Sniff Edilmesi
Resim 2.14.4.4 – Reverse shell Bağlantısı

2.14.5. Invoke-PowerShellIcmp

Bu script, kurban makineden ICMP protokolü aracılığıyla reverse Powershell bağlantısı elde etmek için kullanılmaktadır. ICMP’ye güvenlik duvarları izin vermektedir. Bu nedenle ICMP ile Shell almak mantıklı bir yöntemdir. Script, shell alınacak saldırgan makinenin IP adresinin “IPAddress” parametresi ile belirlenmesi sonrasında çalıştırılır. Böylece makine bilgileri ve Powershell Shell, ICMP paketleri ile saldırgan makineye gönderilir. Saldırgan makinenin bu paketleri alıp interaktif Shell kullanabilmesi için bir dinleme modu başlatması gerekir. Bunun için “icmpsh_m.py” uygulaması kullanılabilir. Bu uygulama ile kaynak ve hedef IP adresi olmak üzere iki argüman belirtilir ve hedef makineden gelen istekler dinlenir.

Resim 2.14.5.1 – ICMPSH_M
Resim 2.14.5.2 – Invoke-PowershellIcmp
Resim 2.14.5.3 – Reverse Powershell
Resim 2.14.5.4 – ICMP Paketleri

2.14.6. Invoke-PowerShellTcp

Bu script, TCP protokolü üzerinden reverse veya bind yöntemleriyle, Powershell shell elde etmek için kullanılmaktadır. Öncelikle shell elde etmek için bir dinleme modu başlatılır. Bunun için “netcat” veya “powercat” uygulaması kullanılabilir. Ardından script çalıştırılarak Powershell Shell elde edilir. Bu script için IP adresi ve bağlantı portu belirlemek için “IPAddress” ve “Port” parametreleri kullanılır. Reverse ve bind yöntemlerinden birini kullanmak için, “Reverse” veya “Bind” parametresi kullanılır.

Resim 2.14.6.1 – Netcat Dinleme Modu
Resim 2.14.6.2 –Invoke-PowerShellTcp
Resim 2.14.6.3 – Reverse shell
Resim 2.14.6.4 – TCP Paketleri

2.14.7. Invoke-PowerShellUdp

Bu script kullanılarak, kurban makineden UDP protokolü ile bir Powershell Shell bağlantısı elde edilir. Shell elde etmek için UDP protokolünü kullanmak, genel olarak UDP protokolü siber güvenlik ekiplerinin gözünden kaçtığından dolayı oldukça avantajlıdır. Özellikle 53, 161 ve 389 portları gibi çok kullanılan UDP portlarının filtrelenmemesinden kaynaklı olarak, bu portlar aracılığı ile shell elde edilebilir. Bu script için 4 parametre mevcuttur. Bağlantı elde etmek amacıyla “IPAddress” ve “Port” parametreleri ile bağlantı adresi ve bağlantı portu belirlenir. “Reverse” veya “Bind” parametreleri kullanılarak bağlantı yöntemi belirlenir.

Resim 2.14.7.1 – Netcat Dinleme Modu
Resim 2.14.7.2 – Invoke-PowershellUdp
Resim 2.14.7.3 – Reverse shell
Resim 2.14.7.4 – UDP Paketleri

​​​​​​​2.14.8. Invoke-PowerShellWMI

WMI (Windows Management Instrumentation), Windows sistemlerde bulunan nesnelerin kontrolünü sağlayan, işletim sistemi operasyonlarını gerçekleştiren ve işletim sistemi üzerinde yönetimsel işlevleri gerçekleştiren bir teknolojidir. WMI, RPC (Remote Procedure Call) servisinin çalışmasına bağlı olarak çalışır. WMI, çalıştırdığı komutlar sonucunda çıktı üretmez. Onun yerine komutun başarılı bir şekilde çalıştırılmış olabileceğini belirtmek için, “ReturnValue” ile bir değer belirtir.

Resim 2.14.8.1 – Invoke-WMIMethod

Bu durumu çözmek için “WMI namespace”den yararlanılmıştır. Bu script, kurban makineden alınan bir PowerShell shell üzerinde çalıştırılan bir komutu Base64 ile encode eder ve bu encode edilmiş metni, geçici olarak WMI namespace’de saklar. Namespace üzerinden alınan encode edilmiş metin decode edilir ve çalıştırılır. Scriptin çalışması için alınan shell, yönetici haklarına sahip olmalıdır.

Resim 2.14.8.2 – Invoke-PowershellWMI

Bu script için parametreler aşağıda açıklanmıştır:

  • IPAddress: Kurban makinenin IP adresini belirtir.
  • Username: Kimlik bilgileri belirtilecek olan hesabın kullanıcı adını belirtir. Eğer bu hesap bir domain hesabı ise, kullanıcı adı “<Domain>\<Kullanıcı_Adı>” formatında belirtilmelidir.
  • Payload: Kurban makinede çalıştırılacak olan Powershell komutunu belirler.
  • PayloadScript: Kurban makinede bir powershell script dosyası çalıştırmak amacıyla kullanılır.
  • Interactive: “Payload” ya da “PayloadScript” parametrelerini kullanarak komut çalıştırmak yerine, interaktif olarak komut çalıştırılabilecek bir komut satırı arayüzü başlatır.
  • Namespace: Encode edilen metnin saklanacağı namespace bu parametre ile belirlenir. (Varsayılan: root\default)
  • Tag: Namespace’e eklenecek olan etiketi belirler. (Varsayılan: SYSINFOS)

​​​​​​​2.14.9. Remove-PoshRat

Invoke-PoshRatHttp(s), HTTP(S) protokolü ile kurban makineden Powershell shell bağlantısı elde edilmesini sağlamaktadır. Bunun için kurban makineye “WindowsUpdate HTTPS” ve “WindowsUpdate HTTP” güvenlik duvarı kuralları eklemektedir. Bu script ile eklenen bu kurallar “netsh” komutu ile güvenlik duvarı kuralları arasından kaldırılır.

Resim 2.14.9.1 – Remove-PoshRat