Yazıda incelenecek şekilde başka bir kullanıcının oturumu çalmak için SYSTEM yetkisine geçmek yani o bilgisayar üzerinden çok yetkili bir hesap olmak gerekir. Bu sebeple, Microsoft bu durumu bir “bug” olarak değerlendirmemektedir. Bazı kaynaklar tarafından, oturum çalmaya sebebiyet veren bu durum bir “feature” olarak da değerlendirilmemektedir. Nasıl değerlendiriliyor olursa olsun, aşağıda detayları verilecek olan konu, windows ortamı sızma testleri için bir saldırı vektörü olarak değerlendirilebilir.
1) Ortamın İncelenmesi
Windows işletim sisteminde bir kullanıcı RDP ile veya fiziksel olarak oturum açtığında, Windows ortamında varsayılan kabuk programı olan explorer.exe adlı proses başlatılır. Her kullanıcı için bir adet bu prosesten oluşur.
Örnek olarak kullanılacak ortamda, 3 adet kullanıcı bulunmaktadır: Administrator, Yonetici ve YerelHesap. Bu kullanıcıların tamamının yerel bilgisayarda yönetici yetkisi (Administrators grup üyeliği) bulunmaktadır.
whoami
net user yenihesap
Not: Yazıda incelenen RDP oturumunu çalma işlemleri için, sadece oturumu çalacak olan kullanıcının (YeniHesap) yerel yönetici yetkisinin olması yeterlidir.
Oturumlar incelendiğinde Yonetici adlı kullanıcı hesabının oturumunun (ID: 1) koptuğu (Disconnected durumda olduğu), Administrator kullanıcısına ait oturumun (ID: 2) ise aktif ve konsoldan gerçekleştirildiği görülmektedir. Bu komutu çalıştıran YeniHesap kullanıcısına ait oturumun (ID: 3) ise 7 numaralı RDP oturumu üzerinden gerçekleştiği görülmektedir.
query user
qwinsta
Görev Yöneticisi (Task Manager – taskmgr.exe) üzerinden incelendiğinde Administrator kullanıcısında KeePass adlı bir uygulamanın çalıştığı görülmektedir.
Bu veya benzer uygulamaların parolasını almak için üçüncü taraf bir araç (keylogger gibi) kullanılarak kullanıcının parolayı girmesi sağlanabilir. Bir diğer yöntem de bu uygulamayı Administrator kullanıcısının disk sisteminden alarak sözlük saldırısı ile kırmaya çalışmaktır. Ancak üçüncü taraf bir aracın kullanılamaması gereken ortamlarda, uygulamanın zafiyetinin olmadığı veya parolanın kırmak için çok karmaşık olduğu durumlarda, hedef kullanıcının (bu ortamdaki Administrator veya Yonetici gibi) oturumunu bir şekilde ele geçirme yöntemine gidilebilir.
Not: Şifreli bir dosyayı elde etmek haricinde oturum zaman aşımı olmayan veya uzun olan iş kritik uygulamalarda (ana bankacılık uygulamaları, ödeme sistemleri, kritik kullanıcıların oturumları,… gibi) oturumu ele geçirmek gibi amaçlar için de hedef kullanıcının oturumuna geçme ihtiyacı olabilir. Benzer olarak bu işlemler bir saldırgan tarafından değil, kurum içindeki yerel yönetici yetkisine sahip herhangi bir kullanıcı (Domain Admins dahil) tarafından gerçekleştirilebileceği de göz önünde bulundurulmalıdır.
2) RDP Oturumuna Geçiş Denemeleri
Bir kullanıcı oturumundan (YeniHesap) başka bir kullanıcının (Administrator) oturumuna geçiş için görev yöneticisi konsolu kullanılabilir.
Bu yöntemde açık metin parola bilgisi istenmektedir. Açık metin parola bilgisi olmadığı için hedef kullanıcının (Administrator) oturumuna geçiş sağlanamayacaktır.
İşletim sistemindeki doğrudan Mimikatz aracını çalıştırarak veya LSASS.exe prosesini alarak hedef kullanıcının parolasını alma gibi bir yöntem uygulanabilir. Ancak Windows 2012 sonrası ve bir takım önlemlerin alındığı işletim sistemlerinde RAM üzerinden parolaların açık metin olarak elde edilememesine sebep olur.
privilege:debug
sekurlsa::logonPasswords
Windows işletim sistemindeki “tscon.exe” aracı ile de benzer işlem gerçekleştirilebilir.
tscon /?
“tscon.exe” aracı ile iligli detaylar için kaynaklardaki docs.microsoft bağlantıları incelenebilir. En önemli hususlar aşağıdaki gibi sıralanabilir.
- Bir kullanıcı oturumundan başka bir kullanıcı oturumuna geçmek için “/dest:MevcutOturumAdi” ifadesinin yazılması gerekir.
- Bir kullanıcı oturumundan başka bir kullanıcı oturumuna geçmek için Full Control veya Connect erişim yetkilerinin olması gerekir.
- Bir kullanıcı oturumundan başka bir kullanıcı oturumuna geçmek için hedef kullanıcıya ait parolanın açık metin halinin bilinmesi gerekir (Bu yazıda parolanın gerekmediği incelenecektir)
Yönetici yetkisi olan YeniHesap ile normal bir şekilde erişim denendiğinde, açık metin parola olmadığı için geçiş yapılamamaktadır.
tscon console /dest:rdp-tcp#7
tscon 2 /dest:rdp-tcp#7
Ancak SYSTEM yetkisine sahip olduğunda veya SE_TCB_NAME (SeTcbPrivilege – Act as part of the operating system) yetkisine sahip olunduğunda başka bir kullanıcı gibi işlem (CreateProcessAsUser) yapılabilmektedir. Bu yetki yerel yönetici kullanıcısında (YerelHesap) yokken, “psexec” aracı yükseltilen haklar sayesinde SYSTEM kullanıcısında vardır.
whoami
whoami /all | findstr SeTcbPrivilege
psexec.exe /s \\localhost cmd
whoami
whoami /all | findstr SeTcbPrivilege
3) Servis Oluşturarak RDP Oturumuna Geçiş Sağlanması
Başka bir kullanıcının oturumuna geçmek için “nt authority\system” yetkisine geçmek gereklidir. Bu amaçla, yerel yönetici yetkisi kullanılarak, LocalSystem yetkisi ile çalışan bir servis oluşturulabilir. Bu servis de “tscon” aracını çalıştırabilir.
sc create RdpOturumunuAl binpath= “cmd /k tscon 2 /dest:rdp-tcp#7” type= OWN
Böylece LocalSystem yetkisi ile çalışacak bir servis oluşmuş olur.
Yukarıdaki konsoldan servis başlatıldığında “Administrator” kullanıcısının oturumuna geçiş sağlanabilir.
Not: Benzer olarak komut satırından da bu servis başlatılabilir.
net start RdpOturumunuAl
Oturum incelendiğinde YeniHesap kullanıcısına ait oturumunun (ID:3) düştüğü, Administrator kullanıcısına ait oturum adının ise “console“‘dan “RDP-TCP#7“‘ye döndüğü görülür. Yani, RDP yapan kişi (saldırgan), artık Administrator kullanıcısının oturumuna geçiş yapmıştır.
query user
qwinsta
Not: Tekrar “YeniHesap” kullanıcısının oturumuna geçildiğinde (YerelHesap kullanıcısının adı ve parolası ile yeniden RDP yapıldığında) servisin tetiklendiği ancak Service Control Manager (SCM) tarafından durdurulduğu görülmektedir.
Oluşturulan servis incelendiğinde, servis başlamadığı için herhangi bir prosesin oluşmadığı görülmüştür.
sc queryex RdpOturumunuAl
wmic service where Name=”RdpOturumunuAl” get ProcessId, PathName, Started, StartMode, StartName, State
Not: Aynı işlem kopmuş (Disconnected) bağlantılar için denendiğinde, kopmuş bağlantının masaüstüne de erişim sağlanabilmektedir.
4) Servis Oluşturmadan RDP Oturumunu Çalma
Servis oluşturmadan da SYSTEM yetkisi ile doğrudan başka bir kullanıcının oturumuna geçilebilir. Normalde Administrator kullanıcısının parolasını kullanarak Administrator kullanıcısının oturumuna (ID:1) geçilebilir.
qwinsta
tscon 1 /PASSWORD:Aa123456
Parola bilindiğinde oturum açılabildiği görülmüştür. Zaten bu işlemin standart RDP ile erişmek ile pek bir farkı yoktur.
Parola kullanmamak için aynı komutları SYSTEM yetkisi ile çalıştırılmak istendiğinde ise başarılı olunamadığı görülmüştür.
psexec.exe /s \\localhost cmd
whoami
tscon 1
Bunun yanında YeniHesap kullanıcısının oturumu (ID:2) ile etkileşimli modda görev yöneticisi açılarak da oturum çalma işlemi gerçekleştirilebilir.
exit
whoami
qwinsta
psexec.exe /s \\localhost -i 2 taskmgr
SYSTEM yetkisi ile YeniHesap kullanıcısının oturumunda (ID:2 – RDP-TCP#15) açılan görev yöneticisi ile bağlantı denendiğinde, kopmuş (Disconnected) oturuma sahip olan Administrator kullanıcısının (ID:1) oturumuna geçiş yapılabilmektedir.
Bu oturum incelendiğinde RDP-TCP#15 oturum adının Administrator oturumuna geçtiği görülür.
Tekrar “YeniHesap” kullanıcısının oturumuna geçildiğinde (YerelHesap kullanıcısının adı ve parolası ile yeniden RDP yapıldığında) oturum adının RDP-TCP#17 olduğu görülür. Yukarıda görev yöneticisi ile yapılan işlemin komut satırında gerçekleştirmek için, “tscon” aracı mevcut oturum adı (RDP-TCP#17) belirtilerek çalıştırılabilir.
psexec.exe /s \\localhost cmd
whoami
qwinsta
tscon 1
tscon 1 /dest:rdp-tcp#17
5) Diğer Yöntemler
SYSTEM yetkisi elde edildikten sonra benzer işlemler gerçekleştirilebilir. SYSTEM yetkisi almak için oturum açma ekranına (Windows Logon User Interface) arka kapı bırakılabilir, işletim sistemi zafiyeti kullanılabilir, hak yükseltilebilir, servis oluşturmak gibi zamanlanmış görevler kullanıabilir. Ayrıca üçüncü taraf araç olarak Mimikatz ile de RDP çalma işlemi gerçekleştirilebilir.
mimikatz
ts::sessions
privilege::debug
token::elevatets::remote /id:2
Örnek:
https://cdn-images-1.medium.com/max/800/1*oFF3A3KhTzGrEnS_3vV36g.gif
Kaynaklar:
http://blog.gentilkiwi.com/securite/vol-de-session-rdp
http://www.korznikov.com/2017/03/0-day-or-feature-privilege-escalation.html
https://medium.com/@networksecurity/rdp-hijacking-how-to-hijack-rds-and-remoteapp-sessions-transparently-to-move-through-an-da2a1e73a5f6
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/cc770988(v=ws.11)
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc731007(v=ws.11)