2Ağustos

Nishang ile Windows Post Exploitation – Part 1

1. GENEL BAKIŞ

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, ayrıcalık yükseltme, kimlik bilgilerini alma, arka kapı bırakma gibi işlemler gerçekleştirilebilir. Bu aracın en önemli avantajları; Powershell dili ile yazıldıklarından dolayı antivirüs sistemlerini geçebilmeleri, Powershell Windows işletim sistemi versiyonları ile uyumlu çalışabildiğinden ve varsayılan olarak kurulu olduğundan dolayı ek bir kurulum gerektirmemesi ve çalışan script kodlarının disk ile ilgisi olmayıp, sadece bellekte çalışmasıdır.

Nishang aracı,

https://github.com/samratashok/nishang

adresinden indirilebilir. Ayrıca Nishang’e ait tüm kod dosyaları Linux tabanlı Kali dağıtımının kurulmasıyla bilrlikte, /usr/share dizini altında bulunan “nishang” dizini içerisinde varsayılan olarak gelmektedir.

Nishang aracı belirtildiği üzere bir post-exploitation aracıdır ve içerisinde exploit içermez. Nishang, örnek bir araç olarak Metasploit Framework gibi exploitation modülleri bulundurmaz. Ayrıca Nishang aracı bir post-exploitation framework olan Empire aracı gibi, makine üzerinde interaktif işlemlerin gerçekleştirilebileceği bir agent elde etme imkanı da sunmaz. Dolayısıyla exploit edilmiş ve oturum bağlantısı alınmış bir sisteme Nishang aracına ait script kodları yüklenir ve o makine üzerinde çalıştırılır. Kodların hepsi Powershell dili ile yazıldığı ve Windows sistemlerde varsayılan olarak Powershell bulunduğundan dolayı, yüklenen script dosyalarının “Import-Module” cmdlet ile eklenmesi, komutların çalıştırılabilmesi için yeterli olacaktır.

Nishang, Powershell script kodlarından oluşan bir araçlar takımı olduğu için, elde edilen sistem üzerinde bir Powershell Shell çalıştırılmalıdır ve Powershell üzerinden bağlantı alınmalıdır. Bunun dışında eğer Meterpreter veya varsayılan Windows CMD Shell gibi araçlar ile bir bağlantı alınırsa, komutları çalıştırabilmek için “powershell.exe” uygulaması çalıştırılmalıdır. Meterpreter komut satırında “powershell.exe” uygulamasının çalıştırılması pek iyi görünmemektedir. Çünkü etkileşimli bir powershell konsolu elde edilemeyecektir.

Aşağıdaki görüntüde “PRIVIA” Domain’ine bağlı bir Windows Server 2016 makineden elde edilmiş Meterpreter oturumu görülmektedir.

Resim 1.1 – Meterpreter Oturumu

Nishang’in sunduğu imkanlar ile Windows Server 2016 makine üzerinden yola çıkılarak, çeşitli post-exploitation işlemleri gerçekleştirilebilir. Daha sonra ilerlenerek Domain Controller makine üzerinden bir bağlantı elde edilip yine o makine üzerinde de çeşitli işlemler gerçekleştirilebilir. Bu işlemlerin gerçekleştirilmesi için Nishang’i kullanmak adına, gerekli script kodları makineye yüklenmelidir. Örnek olarak iç ağdaki makinelere ait portları taramak için “Invoke-PortScan.ps1” dosyası yüklenebilir. Bunun için meterpreter aracına ait olan “upload” komutu kullanılabilir.

Resim 1.2 – Dosya Yükleme

Dosya yükleme işleminden sonra, etkileşimli bir powershell çalıştırmak için “shell” komutu kullanılarak Windows’a ait shell komut satırına geçilmelidir. Ardından “powershell” komutu ile bir powershell uygulaması başlatılmalıdır.

Resim 1.3 – Powershell

Yüklenen dosya “Import-Module” cmdlet ile modüller arasına eklendiğinde artık kullanılabilir hale gelecektir.

Resim 1.4 – Modül Ekleme

Modülün yüklenmesinin ardından, “Invoke-PortScan” modülü Powershell üzerinde bir cmdlet olarak çalışabilir. Aşağıdaki görüntüde belirli aralıktaki IP adreslerine bağlı olarak, makinelere yönelik port taraması yapılmıştır ve  IP aralığında aktif 1 adet makine tespit edilmiş olup bu makinenin açık portlarının numaraları ekrana basılmıştır.

Resim 1.5 – Port Taraması

Görüldüğü üzere Nishang ile çalışmak son derece kolaydır.

Nishang, örnekte gösterilen port tarama modülü gibi birçok modül sunar. Bütün modüller yaptıkları işe göre belirli isimlere sahip dizinlerin altında toplanmıştır. Aşağıdaki görüntüde, Nishang script dosyalarının bulunduğu dizinler görülmektedir.

Resim 1.6 – Nishang Dizinler

Görüldüğü üzere her scriptin yaptığı işe göre dizinler oluşturulmuş ve bu script dosyaları dizinler altında toplanmıştır. Örneğin; tarama işlemi yapan script dosyaları “Scan”, ayrıcalık yükseltme işlemi yapan script dosyaları “Escalation” dizini altında yer almıştır. Dizinler dışında, dizinlerin arasında bulunan tek dosya olan “nishang.psm1” dosyası ise çalıştırıldığı takdirde bütün script dosyalarını tek seferde modüller arasına ekler.

2. NISHANG ile POST EXPLOITATION

Sızma testlerinin olmazsa olmazı post-exploitation işlemleridir. Bir makine exploitation yöntemleri ile ele geçirilebilir. Fakat bu sızma testinin bittiği anlamına gelmez. Çünkü, bir saldırgan bir makineyi ele geçirdikten sonra durmayıp, mümkün olduğunca ilerlemeye çalışacaktır. Bu nedenle exploitation aşamasının ardından, ilerleme kaydetmek için post-exploitation yöntemlerini kullanmak gerekmektedir. Nishang, bu işin rahatlıkla gerçekeleşebilmesi için, işlevsel modüller sunmaktadır. Post-exploitation aşamaları sırasıyla;

• Ayrıcalık Yükseltme

• Bilgi Toplama

• Yanal Hareket

• Kalıcılık

olarak genellenebilir. Nishang bu aşamaları gerçekleştirmek için, Windows sistemler üzerinde etkili çalışan scriptler sunar. Özellikle bu script kodlarının arasında, Windows sistemler üzerinde genel olarak bulunan mimari tabanlı zafiyetlerden faydalanmak için kullanılabilecek scriptler de bulunmaktadır.

Aşağıda Nishang’e ait scriptler açıklanmıştır.

2.1 Active Directory

2.1.1 Add-ConstrainedDelegationBackdoor

Windows sistemlerde, servislerin yönetilmesinden sorumlu olan kısıtlı servis hesapları bulunmaktadır. Bu script, ActiveDirectory modülünün bulunduğu ortamlara kısıtlı bir servis hesabı eklemek için kullanılır. Böylece eklenen bu servis hesabı, s4u2self ve s4u2proxy protokolleri aracılığı ile servisleri ele geçirmek için TGS biletini almak adına backdoor sağlar.

Aşağıda bu scripte ait olan parametreler açıklanmıştır:

SamAccountName: Oluşturulacak olan kullanıcı adını belirler ve SAM veritabanına bu isimle kaydeder.

Password: Oluşturulacak hesabın parolasını belirler. Bu parametre kullanılmadığı takdirde otomatik olarak “[email protected]!” parolası atanır.

ServicePrincipalName: Delegasyonun etkinleştirilebilmesi için kullanıcı atanan SPN (Service Principal Name) değeridir.

AllowedToDelegateTo: Oluşturulan hesabın hangi servis üzerinde yetkili olacağı belirlenir.

Aşağıdaki örnekte bir backdoor hesap oluşturulmuştur ve bu hesaba WinRM servisini kontrol etme hakkı tanımlanmıştır.

Resim 2.1.1.1 – Kısıtlı Backdoor Hesabı Oluşturma

2.1.2 Set-DCShadowPermissions

DCShadow atağı ile sahte bir Domain Controller aracılığı ile Active Directory şeması değiştirilir. Böylece Sahte Domain Controller ile Domain Controller üzerinde bulunan kullanıcılar, bilgisayarlar vb. bilgileri değiştirilebilir. DCShadow atağı, kimlik bilgileri veya parolaları almak için kullanılan DCSync atağının, yeni nesne enjekte edememe engelini ortadan kaldırır.

DCShadow atağının yapılması için, mimikatz aracının yönetici hakları ile çalıştırılmasına gerek yoktur. Belirli haklara sahip olan bir  kullanıcı hesabı ile bu atak gerçekleştirilebilir. Bu script ile, mimikatz aracında bulunan DCShadow atağı için minimum Active Directory gereksinimleri sağlanır. Gerekli haklar aşağıdaki gibidir:

• DS-Install-Replica (Add/Remove Replica in Domain)

• DS-Replication-Manage-Topology (Manage Replication Topology)

• DS-Replication-Synchronize (Replication Synchornization)

Aşağıda bu scripte ait olan parametreler açıklanmıştır:

FakeDC: DCShadow komutlarının yürütüldüğü bilgisayar nesnesini belirler.

Object: Bu parametre ile bir bilgisayar nesnesi, kullanıcı nesnesi veya başka bir nesne adı belirlenir.

SamAccountName: Hedeflenen kullanıcı nesnesi için SamAccountName değerini belirler.

ADSPath: LDAP yolunun atanacağı hedef nesne belirlenir.

Username: DCShadow tekniklerini uygulayacak olan kullanıcıyı belirler.

Remove: Komut dosyası ile eklenen izinleri kaldırmak için kullanılır.

2.2 Antak

Antak, Nishang içerisinde bulunan, Powershell tabanlı bir webshell’dir. Antak, “antak.aspx” adında tek bir dosyadır ve web üzerinden powershell konsolu kullanmayı sağlar. Aşağıda Antak’a ait giriş sayfası bulunmaktadır.

Resim 2.2.1 – Antak Giriş Sayfası

Antak ile powershell komut satırını kullanmak için, ilk olarak giriş sayfasıyla karşılaşılmaktadır. Bir penetrasyon testinde, antak.aspx sayfasına istenmeyen kimselerin erişebilmesi durumundan dolayı direk erişim yerine, bir kullanıcı adı ve parola girişi istenmektedir. Bu bilgiler, Antak web sunucusuna yüklenmeden önce, kaynak kodlar üzerinden değiştirilebilir.

Resim 2.2.2 – Giriş Kontrolü

Yukarıdaki resimde görüldüğü üzere bir kimlik kontrolü gerçekleşmektedir. Antak için varsayılan kullanıcı adı “Disclaimer” ve varsayılan parola “ForLegitUseOnly” dir. Girilen bilgiler doğru ise, kullanıcı formu görünümü kapatılacak ve powershell konsolu görünümü aktif edilecektir.

Sayfa üzerinde powershell konsolu ve hemen altında komut girişi yapmak için bulunan bir metin kutusu bulunmaktadır. Metin kutusuna girilen komut çalıştırıldıktan sonra senkronize olarak bir POST isteği gidecektir ve girilen komut “powershell.exe” uygulamasının bir argümanı olarak çalışacaktır. Dönen çıktı ise web arayüzünde görüntülenecektir. Çalıştırılan bütün komutlar için ExecutionPolicy “bypass” değerini almaktadır ve girilen komutların çalıştırılması için bir kısıtlama bulunmamaktadır (Kısıtlamadan kasıt, Execution Policy tarafından yapılan kısıtlardır. Genel olarak IIS servisi ile çalışan web sayfaları kısıtlı hak ve yetkilere sahip bir servis hesabı ile çalışmaktadır. Dolayısıyla Execution Policy “bypass” değeri aldığı için tüm komutlar çalışacaktır. Fakat servis hesabından dolayı her komut çıktı döndürmeyebilir.). Aşağıda giriş sonrası antak.aspx arayüzü görülmektedir:

Resim 2.2.3 – Antak Web Arayüzü

Antak ile powershell komutları çalıştırmak dışında, metin kutusunun altında bulunan butonlar kullanılarak çeşitli işlemler yapılabilmektedir. Bu işlemler aşağıda listelenmiştir:

• Dosya İndirmek

• Sunucuya dosya yüklemek

• Web.config dosyası içerisindeki bilgileri ayrıştırıp ekrana basmak

• SQL sorguları ile veritabanına sorgu göndermek

2.2.1 Dosya İndirme

Antak ile sunucuda bulunan bir dosya indirilebilir. “Download” butonu, komut çalıştırmak için kullanılan metin kutusuna yazılan dosya yolunda bulunan dosyayı indirebilir.

Resim 2.2.1.1 – İndirme İşlemine Ait Kodlar

Yukarıdaki resimde görüldüğü üzere, dosya yolu HTTP başlığına eklenecektir ve TransmitFile() fonksiyonu aracılığı ile indirilecektir.

2.2.2 Web.config Dosyası Içerisindeki Bilgileri Ayrıştırıp Ekrana Basma

Web.config, XML ile yazılmış olan Microsoft ASP.NET sitesinin bir uygulama yapılandırma dosyasıdır. Antak ile “Parse Web.config” butonuna tıklanarak, Web.config dosyası içerisindeki bilgiler ayrıştırılarak ekrana basılabilir.

Resim 2.2.2.1 – Web.config MSSQL Veritabanı Bağlantı Bilgileri

2.2.3 Dosya Yükleme

Antak, kullanıcının istediği bir dosyayı, erişim kısıtlaması olmayan bir dizine yüklemesini sağlar. Bu işleve ait fonksiyon aşağıdaki gibidir:

Resim 2.2.3.1 – Dosya Yükleme İşlemine Ait Kodlar

Yukarıdaki resimde görüldüğü üzere; öncelikle yüklenecek dosyanın seçilip seçilmediği kontrol edilmektedir. Ardından dosya aynı isim ile console.Text kutusu içerisine yazılan erişim kısıtlaması olmayan dizine yüklenecektir.

Resim 2.2.3.2 Dosya ve Dizin Seçimi
Resim 2.2.3.3 – Yüklenmiş Resim

2.2.4 SQL Sorguları ile Veritabanına Sorgu Göndermek

Antak ile veritabanına yönelik sorgular yapılabilmektedir. Bunun için veritabanı bağlantı bilgilerinin girileceği, “sqlconnectiostr” adlı bir metin kutusu bulunmaktadır. Bu metin kutusuna girilen metinden sonra, veritabanı sorguları çalıştırmak için konsol metin kutusu kullanılacaktır. Aşağıdaki resimde bulunan kodlarda görüldüğü üzere metin kutularından alınan metinler, powershell kodu ile  veritabanına yollanacaktır.

Resim 2.2.4.1 Veritabanı Sorgulama Fonksiyonu
Resim 2.2.4.2 – Veritabanı sorgusu

Bir sonraki bölümü okumak için: