18Ekim

Windows Sistemlerde Yanlış Servis Yapılandırmalarından Kaynaklanan Privilege Escalation İşlemleri

Bu yazı ilk olarak Medium.com’da yayınlanmıştır. İlgili sayfayı görmek için tıklayınız.

Sızma testleri sırasında bir makineye sızma işlemi gerçekleştikten sonra bambaşka evreler ortaya çıkar. Eğer sızma işlemi gerçekleştirilen makineye düşük hak ve yetkilere sahip bir kullanıcı hesabı üzerinden erişim sağlanırsa, bu durum makine üzerinde yüksek yetkiler gerektiren işlemlerin yapılmasına izin vermeyecektir. Bunun için makine üzerinde bulunan birtakım zafiyetlerden yararlanılarak privilege escalation (hak ve yetki yükseltme) işleminin gerçekleştirilmesi gerekecektir. Bu yazımda düşük yetkilerle erişim sağlanan bir Windows makine üzerinde yanlış servis yapılandırmalarından yararlanılarak nasıl hak ve yetki yükseltileceğinden bahsedeceğim.
Yanlış servis yapılandırmalarından kaynaklanan hak ve yetki yükseltme işlemlerini 4 başlık altında inceleyeceğiz. Bu başlıklar aşağıda listelenmiştir:
• Unquoted Service Path (Tırnak İçine Alınmamış Servis Yolu)
• Weak Folder Permissions (Zayıf Dizin İzinleri)
• Weak Service Permissions (Zayıf Servis İzinleri)
• Weak Registry Permissions (Zayıf Kayıt Defteri İzinleri)
İşlemler yetkisiz bir hesap ile erişim sağlanmış Windows Server 2016 makine üzerinde gerçekleştirilecektir. Yanlış yapılandırmaları kontrol etmek amacıyla accesschk uygulaması kullanılacaktır. Uygulamayı buradan indirebilirsiniz.

Unquoted Service Path

Windows sistemlerde oluşturulan servisler başlatıldığında, servis oluşturma sırasında “binpath” parametresi ile belirtilen dosya yolunda bulunan uygulama çalıştırılır. Fakat dosya yolunda boşluk karakterleri varsa servis başlatma işlemi farklı bir şekilde gerçekleşecektir. Eğer belirtilen servis için dosya yolunda boşluk karakterleri mevcut ise boşluktan önceki kısım baz alınarak o dizinde bulunan bir uygulamanın çalıştırılması denenir. Eğer o yolda bir dosya varsa çalıştırılır ve asıl servis dosyasına ulaşılana kadar aynı işlemler devam eder. Örneğin; “C:\Program Files\Service Folder\services.exe” yolunun belirtildiği bir servis olsun. Bu servis başlatıldığında “Program Files” dizin isminde bulunan boşluk karakteri nedeniyle boşluktan önceki “C:\Program” kısmı baz alınır ve “C:\Program.exe” uygulaması çalıştırılır. Eğer C: dizininde Program.exe adlı bir uygulama varsa çalıştırılacaktır. Eğer yoksa bu bir problem değildir ve uygulama çalışsa da çalışmasa da adımlar devam edecektir. Daha sonra yol üzerindeki “Service Folder” dizin isminde bulunan boşluk karakteri nedeniyle boşluktan önceki “C:\Program Files\Service” kısmı baz alınır ve “C:\Program Files\Service.exe” uygulaması çalıştırılır. Yine aynı şekilde uygulama dosyası olsa da olmasa da asıl servis uygulaması çalıştırılana kadar adımlar devam edecektir. Son olarak “C:\Program Files\Service Folder\services.exe” dizin yolunda bulunan uygulama çalışacak ve servis başlayacaktır. Eğer bu servis yüksek yetkilerle çalışıyorsa ve bu dizinlere düşük yetkilere sahip kullanıcıların yazma yetkisi varsa, yukarıda belirtilen boşluktan önceki baz alınan dizin yoluna zararlı bir program yerleştirilebilir. Böylece servis başlatıldığında zararlı uygulama yüksek hak ve yetkilerle çalışacaktır ve privilege escalation işlemi gerçekleşmiş olacaktır.

Resim 1.1 – Boşluk karakteri geçen dizin araması

Yukarıdaki resimde girilen
wmic service get name,displayname,startmode,pathname | findstr /i /v “C:\Windows\” |findstr /i /v “””
WMI komutu ile içerisinde boşluk geçen servis dizinleri listelenmiştir. En alttaki “Unquoted Service Path” adlı dizin yolu “C:\Program Files\Service\Unquoted Service Path\services.exe” şeklindedir. Bu durumda boşluktan önceki kısımlar baz alındığında “C:\Program Files\Service\Unquoted” kısmından yararlanılarak “C:\Program Files\Service” dizinine “Unquoted.exe” adlı bir zararlı dosya yerleştirilebilir.

Resim 1.2 – Zararlı dosyanın dizine yerleştirilmesi

Bu işlemden sonra servisin başlatılması durumunda “Unquoted.exe” adlı meterpreter zararlısı çalışacak ve yüksek haklarla meterpreter oturumu elde edilecektir.

Resim 1.3 – Meterpreter oturumu

Yukarıdaki resimde görüldüğü üzere servisin başlatılması durumunda (servis makine başlatılınca otomatik başlayabilir ya da yetkili hesap tarafından başlatılabilir) yüksek yetkilerle meterpreter oturumu elde edilmiştir.

Weak Folder Permissions

Yüksek hak ve yetkiler ile çalışan servis uygulamasının bulunduğu dizinin erişim yetkileri önem taşımaktadır. Bu dizinler üzerinde düşük yetkilere sahip kullanıcıların yazma izinlerinin bulunması durumunda, kullanıcılar servis dosyasını aynı isimde farklı bir zararlı dosya ile değiştirebilirler. Böylece servisin başlatılması durumunda gerçek servis dosyası yerine zararlı dosya çalışır.
Öncelikle accesschk uygulaması ile yetkisiz kullanıcının ilgili servis dizini üzerindeki yetkileri incelenecektir.

Resim 2.1 – Yetki kontrolü

Yukarıdaki resimde görüldüğü üzere dizin üzerinde “unprivileged” adlı yetkisiz kullanıcının yazma yetkisi bulunmaktadır. Bu durumda bir meterpreter zararlısı servis dosyası yerine konulabilir.

Resim 2.2 – Meterpreter zararlısı

Meterpreter zararlısının adı “service.exe” olarak değiştirilecek ve asıl servis uygulaması bu dizinden kaldırılacaktır.

Resim 2.3 – Adı değiştirilen meterpreter zararlısı

Görüldüğü üzere 8KB boyutundaki meterpreter zararlısının adı değiştirilmiştir. Servis başlatıldığında meterpreter oturumu gelecektir.

Resim 2.4 – Meterpreter oturumu

Yukarıdaki resimde görüldüğü üzere yüksek yetkilerle meterpreter oturumu elde edilmiştir.

Weak Service Permissions

Oluşturulan servisler üzerinde işlemler gerçekleştirmek için ilgili kullanıcı hesaplarının servisler üzerinde yetkilerinin bulunması gerekmektedir. Böylece servisler üzerinde konfigürasyon yapabilirler. Eğer düşük yetkilere sahip kullanıcı hesaplarının yüksek yetkilerle çalışan servisler üzerinde yetkileri olursa, bu
durumda servis konfigürasyonu ile ilgili değişiklik yapabilirler ve bu durum hak ve yetki yükseltmeye olanak verebilir.
Öncelikle accesschk uygulaması ile “unprivileged” adlı yetkisiz hesabın “wsp” adlı servis üzerindeki yetkileri incelenecektir.

Resim 3.1 – Yetki kontrolü

Resimde görüldüğü üzere düşük yetkili “unprivileged” hesabı “wsp” servisi üzerinde tüm yetkilere sahiptir. Bu durumda wsp servisi üzerinde konfigürasyon değişikliği yapılabilir.

Resim 3.2 – Konfigürasyon Değişikliği

sc config wsp binpath=”C:\Users\unprivileged\Desktop\reverse_shell.exe” obj=LocalSystem
komutuyla “unprivileged” kullanıcısının masaüstü dizininde bulunan meterpreter zararlısı “wsp” servisi için servis uygulaması olarak belirlendi ve servisin çalışması durumunda zararlı SYSTEM haklarıyla çalışacaktır.

Resim 3.3 – Meterpreter oturumu

Yukarıdaki resimde görüldüğü üzere servisin çalıştırılması sonucunda meterpreter oturumu elde edilmiştir.

Weak Registry Permission

Windows sistemlerde oluşturulan tüm servisler için “HKLM\SYSTEM\CurrentControlSet\Services” altında aynı isimde anahtarlar oluşturulur. Düşük yetkilere sahip kullanıcılara, servislere ait kayıt defteri anahtarları üzerinde yetkilere sahip olması durumunda, düşük yetkilere sahip kullanıcılar bu dizinler üzerinde konfigürasyon değişiklikleri yapabilirler.
Accesschk uygulaması ile “unprivileged” adlı kullanıcının “HKLM\SYSTEM\CurrentControlSet\Services” kayıt defteri anahtarı altındaki anahtarlar üzerinde sahip olduğu yetkileri kontrol edilecektir.

Resim 4.1 – Yetki kontrolü

Yetki kontrolü sonucunda “unprivileged” kullanıcısının “wrp” servisi üzerinde tüm yetkilere sahip olduğu görülmektedir. Böylece bu servis için kayıt defteri üzerinden değişiklikler yapılabilir.

Resim 4.2 – Servis kayıt defteri anahtarı

Yukarıdaki resimde görüldüğü üzere “unprivileged” hesabı servis üzerinde tüm yetkilere sahiptir. Böylece “ImagePath” değeri yerine meterpreter zararlısının yolu girilebilir ve servisin yeniden başlatılması durumunda meterpreter oturumu elde edilebilir.

Resim 4.3 – Konfigürasyon değişikliği

Bu işlemden sonra servisin başlatılmasıyla birlikte meterpreter shell gelecektir.

Resim 4.4 – Servisin başlatılması
Resim 4.5 – Meterpreter oturumu

Yukarıdaki resimde görüldüğü üzere SYSTEM haklarıyla meterpreter oturumu elde edilmiştir.