Incognito ile Impersonate Token Saldırısı

Merhabalar, bu yazımda iç ağ (Intranet) sızma testlerinde kullanmakta olduğum Impersonate Token saldırısının ne olduğunu, bu saldırının neden ve nasıl kullanılabileceğini örnek senaryolar kurgulayarak anlatmaya çalışacağım.

Access Token Nedir?

Windows sistemler üzerinde bir kullanıcı başarılı bir şekilde oturum açtığı durumda LSA (Local Security Authority) açılan oturum için bir “Logon Session” oluşturur ve bu Logon Session için bir Access Token üretir.

https://www.elastic.co/blog/introduction-to-windows-tokens-for-security-practitioners

Impersonate Token Nedir?

Hedef sistemde mevcut olan bir Token kullanılarak yani taklit edilerek, o Token değerinin sahip olduğu yetkiler dahilinde parola veya hash bilgileri gerekmeksizin bir sunucuya veya servise bağlantı sağlanabilir. Çünkü kullanıcı hakları yani yetki kontrolü Token değerine tanımlanır ve Windows sistemler arka tarafta bu token değerini kullanarak doğrulama (Authenticate) yapabilir.

Intranet sızma testleri sırasında karşılaştığım/karşılaşılabilecek örnek senaryo ise;

Zafiyetli olan sistem & servis sömürülerek (exploit) veya network üzerinde yer alan (NTLM Relay vb.) zafiyetler sömürülerek hedef sistemden saldırgan cihazına doğru bağlantı (shell) alınır.

Sonrasında Active Directory üzerinde yanal haraketler (Lateral Movement) için shell alınan sistem üzerinden Mimikatz vb. araçlar kullanılarak açık-metin (clear-text) olarak parolalar elde edilmeye çalışılır veya sistem üzerinde daha önceden oturum açmış olan kullanıcıların hash bilgileri elde edilmeye çalışılır. Çünkü elde edilen parola veya hash bilgileri kullanılarak (Pass the Hash atağı ile) farklı sistemlere zıplanabilir.

Ancak karşılaştığımız senaryoda açık-metin olarak parola elde edemedik, elde ettiğimiz hash bilgilerini de Pass the Hash atağı ile birlikte kullanamıyoruz çünkü kurum Pass the Hash atağına karşın gerekli önlemleri almış.

Bu noktada shell aldığımız cihaz üzerinden farklı sistemlere zıplayabilmemizin senaryosu bir hayli zorlaşmış oluyor. Shell alınan cihaz üzerindeki klasörler ve dosyalarda enumeration yaparak parola vb. bilgileri aranabilir. Bu işlem, uzun soluklu ve sonucunda başarısızlık ihtimali olan bir metodoloji olduğu için biz bu adım öncesinde Incognito aracını kullanarak sistem üzerinde farklı kullanıcılara ait Token’lar var mı bunu kontrol edeceğiz ve eğer var ise Impersonate Token saldırısını gerçekleştireceğiz.

Sömürme (Exploitation)

Meterpreter shelli aldığımız sistemde Incognito aracını yükleyelim.

load incognito

Incognito komutları arasında da gözüktüğü üzere, list_tokens komutu ile sistem üzerinde bulunan mevcut tokenları görebiliriz.

list_tokens

Sistem üzerinde mevcut olan tokenları kullanıcı adlarına göre sıralamak için

list_tokens -u

Sistem üzerinde mevcut olan tokenları grup adlarına göre sıralamak için ise

list_tokens -g

Aslında burada grup adlarına göre sıralamak istediğimizde Incognito aracı aşağıdaki durumu tespit ederek bizlere gösteriyor.

Hedef sistemimizde birden fazla farklı kişinin Access Token’ı mevcut durumda olabilir. Bu farklı kişilerde Active Directory üzerinde farklı gruplara ekli olabilir. Örnek olarak Palpatine adlı kullanıcı Domain Admins grubunda yer alırken Anakin adlı kullanıcı Helpdesk grubunda yer alıyor diyelim.

Incognito aracını kullandığımız sistemde Palpatine ve Anakin kullanıcısının Access Token’ı mevcut durumda ise biz list_tokens -g komutunu çalıştırdığımızda Domain Admins ve Helpdesk gruplarını aşağıda görebilecektik.

Bu adımda biz Domain Admins grubunun tokenini taklit etmek istediğimizde aslında direkt olarak “Palpatine” kullanıcısının Access Token’ını taklit etmiş olacağız. Yani bu işlevin bize sağladığı yarar şu şekilde;

Access Token’ları taklit edilebilecek tüm kullanıcıların Active Directory üzerinde hangi gruplarda yer aldığını direkt olarak bize gösteriyor, biz işimize en çok hangi kullanıcı grubu yarayacak ise (Domain Admins, Enterprise Admins vb.) o grubun tokenini taklit etmeye çalışıyoruz. Gidip tek tek kullanıcıların Tokenlarını taklit ederek o kullanıcının hangi gruplara erişebileceğini yani hangi haklara sahip olduğunu kontrol etmemize gerek kalmıyor diyebiliriz.

Şimdi tokeni taklit edelim.

Hedef sistemden shellimizi şuan sistem üzerinde “NT AUTHORITY\SYSTEM” haklarına sahibiz.

Sistemde manipüle&taklit edebileceğimiz Tokenları görüntüledik ve Win7-PC\Win7 kullanıcı haklarına geçiş sağladık. Sonrasında “shell” komutunu çalıştırarak veya “execute -f cmd.exe -i -t” komutu ile hedef sistemin cmd satırına indiğimizde göreceğiniz üzere, kullanıcımız win7-pc\win7 oldu. Artık bu kullanıcının hakları ile cmd üzerinde işlemler gerçekleştirebiliriz.

impersonate_token Win7-PC\\Win7

Meterpreter üzerinde Token taklit edildikten sonra, taklit edilen kullanıcı tokeni hakları ile komut satırına inmek için “shell” komutunun yanı sıra aşağıdaki komutta kullanılabilir;

execute -f cmd.exe -i -t

Sızma testlerinde Incognito ile Impersonate Token saldırısını aşağıdaki durumlar sebebi ile kesinlikle kullanıyorum:

Shell aldığım sistemler üzerinde “Domain Admins” grubunda yer alan kullanıcıların tokenleri var ise impersonate_token ile bu kullanıcı haklarına geçiş yapıyor, sonrasında bu kullanıcı hakları ile sistemin komut satırına (cmd) inerek Active Directory’e yeni bir kullanıcı ekliyor ve bu kullanıcıyıda Domain Admins grubuna ekliyorum.

Eğer domain admin yetkilerine sahip kullanıcının tokenini kullanarak komut satırına inebildiysem, Active Directory’e yeni bir kullanıcı eklemek ve bu kullanıcıyı Domain Admins grubuna eklemek için kullandığım komutlar;

net user <Kullanıcı Adı> <Parola> /add /domain
net group 'Domain Admins' <Kullanıcı Adı> /add

Ve eklediğim kullanıcı artık Active Directory üzerinde en yüksek yetkilere sahip olan Domain Admins grubunda oluyor.

0x037

Yorum bırakın

WordPress.com'da bir web sitesi veya blog oluşturun

Yukarı ↑