Sızma testleri esnasında bir makineye sızma işlemi gerçekleştikten sonra farklı aşamalara gereksinim duyulur. Düşük hak ve yetkilere sahip bir kullanıcı hesabı üzerinden sızma işlemi gerçekleştirilen makineye erişim sağlanması halinde, bu durum makine üzerinde yüksek yetkiler gerektiren işlemlerin yapılmasına izin vermeyecektir.
Bunun için makinenin barındırdığı birtakım zafiyetlerden faydalanılarak privilege escalation (hak ve yetki yükseltme) işleminin gerçekleştirilmesi gerekecektir. Bu yazıda düşük yetkilerle erişim sağlanan bir Windows makine üzerinde yanlış servis yapılandırmalarından yararlanılarak hak ve yetki yükseltilmesi işleminden bahsedilecektir.
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.
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.
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.
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.
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.
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.
Meterpreter zararlısının adı “service.exe” olarak değiştirilecek ve asıl servis uygulaması bu dizinden kaldırılacaktır.
Görüldüğü üzere 8KB boyutundaki meterpreter zararlısının adı değiştirilmiştir. Servis başlatıldığında meterpreter oturumu gelecektir.
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.
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.
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.
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.
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.
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.
Bu işlemden sonra servisin başlatılmasıyla birlikte meterpreter shell gelecektir.
Yukarıdaki resimde görüldüğü üzere SYSTEM haklarıyla meterpreter oturumu elde edilmiştir.