WMI ve Uzaktan Erişim
Tags: wmi, dcom, remote, uzak
Published: 2024-03-06 20:38:30

WMI yani "**Windows Management Instrumentation**", Windows 2000'den beri önkurulu olarak gelen ve Windows işletim sistemi altyapısındaki bir çok bileşenin izlenebilmesi ve yönetilebilmesini sağlayan bir altyapıdır. WMI altyapısı işletim sistemi ile ilgili çeşitli bileşenleri kullanabilmek için endüstri standartı kullanılmaktadır.

WMI aynı zamanda uzak bilgisayarları yönetmek ve veri edinmek için kullanılan standart yöntemlerden birisidir. WMI altyapısına alternatif olarak Windows'un Windows Remote Management (**WinRM**) altyapısı da bulunmaktadır ki aslında ilgili yöntem de WS-Management adındaki SOAP tabanlı bir protokolle uzaktaki cihazın WMI altyapısını yönetmeyi içermektedir. 

# WMI altyapısına uzaktan erişim açılması

WMI, uzaktan erişim için DCOM "**Distributed Component Object Model**" adındaki bir altyapıyı kullanmaktadır. Dolayısıyla uzak erişim sırasında özellikle ilk iki maddenin uzaktan GPO ile veya elle yapılması gerekmektedir. Bu ayarlar yetkisiz bir kullanıcı için de yapılmak isteniyorsa son maddenin, daha detaylı işlemlerin yapılması isteniyorsa da 3. maddenin de yapılması gerekmektedir. 

1. Yerel Güvenlik Duvarı izni 
2. Uzak WMI yetkisi
3. UAC "User Account Control" (bazı durumlarda) 
4. DCOM objelerine erişim için kullanıcı izinleri (erişecek kullanıcı yetkili bir kullanıcı değil ise yapılması gerekir)

izinlerine ihtiyaç duymaktadır.

## 1. Yerel Güvenlik Duvarı erişim hakkında

Uzaktan WMI erişimi **TCP 135** portu ve 49152-65535 port aralığında RPC dinamik port aralığını kullanmaktadır. Dolayısıyla uzaktan bağlanılacak makinenin güvenlik duvarı kurallarını port bazında değil standart kurallarla yapılması daha uygun olacaktır. 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kwogcidd84ojueh16jfr.png)

İlgili kuralı belirli bir IP'den erişim alacak şekilde yapılabilmesine ek olarak komut satırı üzerinden de aşağıdaki şekilde yapılabilmektedir.

> netsh advfirewall firewall set rule group="windows management instrumentation (wmi)" new enable=yes

Eğer sadece özel bir IP adresine yetki verilmesi isteniyorsa "remoteip=192.168.0.12" parametresini ekleyebilirsiniz.

İstenildiği takdirde Microsoft'un belgelerinden ve ekteki kaynaklardan daha detaylı kısıtlı erişim ayarları da yapılabilmektedir.

## 2. Uzak WMI yetkisi

Uzak WMI sorgulama yetkisi için "Computer Management" uygulaması içerisindeki WMI Control uygulamasının ayarlarındaki "Güvenlik" kısmında "Root" isimli WMI Namespace'ine remote olarak erişebilecek ve erişemeyecek kişilerin belirlenmesi önemlidir. 


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sh3if3v89ho5w5xo9cxr.png)

Uzaktan erişmesi istenen kullanıcı için "Uzak Erişim" yetkisi verilmiş olması gerekecektir. Yine sıkılaştırma için diğer kullanıcılarda bu erişim olmamasına önem gösterilmesi doğru olabilir. Çünkü bu ayar sonucunda hangi kullanıcının WMI objelerine erişebileceği belirlenmektedir.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ckp4jxs54czrc2cwk05f.png)

## 3. UAC "User Account Control"

Temel olarak bu adımın yapılması gerekmemektedir.

UAC, Microsoft'un görece daha yeni geliştirdiği bir uygulama olarak WMI üzerinde bazı işlemleri yapmanızda filtre uygulayabilir. 

Yine de ileri komutlarda yaşanabilecek olası sorunlar için çözüm regedit üzerinde aşağıdaki adresteki DWORD anahtarını eklemek veya düzenleme yaparak "1" seçilerek filtreyi kapatmak gerekmektedir.

```
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system\LocalAccountTokenFilterPolicy
```

> 0 = Remote UAC access token filtering is enabled.
> 1 = Remote UAC is disabled.

## 4. DCOM objelerine erişim

Temel olarak bu adımın yapılması gerekmemektedir.

Bu adım da aslında yetkili olmayan kullanıcılara da DCOM verilerine erişim verilebilmesi dolayısıyla WMI sorgularına cevap dönebilmesi için gereklidir. Fakat hali hazırda yetkili bir kullanıcı ile sorgu atılıyorsa bu adımın yapılması gerekmemektedir.

Bu adımda yetkisiz bir kullanıcıya iki yetki verilecektir.
* DCOM objelerine uzaktan çalıştırma
* DCOM objelerine uzaktan erişim

Bu işlemler için dcomcnfg uygulamasında yani "component services" uygulaması içerisinde "my computer" altında "COM Config" kısmına girilir.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nv6n2m3kckrty7n5vspi.png)

Güvenlik sekmesinde önce "Launch and Activation Permission" kısmına sonrasında "Access Permission" kısımlarını düzenlemek gerekecektir. 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l0s3f4gv7lzqifufknmf.png)

Her iki seçenekte de aşağıdaki gibi yetki verilmek istenen kullanıcı için "Remote Launch" içinde "Remote Activation" seçilmesi gerekmektedir. 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0m9y9bqveloxcvy4omri.png)

# Kontrol

Ayarlar açıldıktan sonra en temel ve basit kontrol için Powershell betik dili kullanılabilmektedir. Bunun için aşağıdaki betik kullanılabilir:

```powershell
$strComputer = "BilgisayarAdiveyaIP"
$colSettings = Get-WmiObject Win32_OperatingSystem -Credential ACIKLAB\administrator -ComputerName $strComputer
```

İlgili betik içerisinde BilgisayarAdiveyaIP stringi yerine IP Adresi de yazılabilmektedir. Credential olarak aşağıdaki tüm tipler kullanılabilmektedir.
- kullanici01
- DomainAdi\kullanici01
- kullanici@domainadi.lab

Bu adımdan sonra ilgili kullanıcı için parola bilgisi sorulduktan sonra yukarıdaki ağ ve sistem erişim yetkileri doğru şekilde tanımlanmışsa işletim sistemi ile ilgili WMI nesnelerine erişim sağlanabilecektir.

Sonrasında WMI objelerine erişim konusu ise apayrı bir konu olduğu için bu yazıda değinmiyorum ama ilgili kişiler için aşağıdaki yapıda inceleme yapılabilir.

- https://powershell.one/wmi/root/cimv2/win32_operatingsystem
- https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-operatingsystem

# WMIC hakkında

Tüm bu süreçlere ek olarak WMI'ın komut satırından kullanımını sağlayan araç olan [wmic](https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmic), 2024 itibariyle desteklenmeyen sürüme düşmüş olup Powershell üzerinden kullanılması önerilmektedir. Dolayısıyla internette bulunabilecek bir çok eski komut yeni sistemlerde çalışmayacaktır.

# Kaynaklar:

- https://learn.microsoft.com/en-us/windows/win32/wmisdk/connecting-to-wmi-remotely-starting-with-vista
- https://support.vscope.net/setting-up-wmi-access-through-ad-gpo
- https://www.heelpbook.net/2018/enable-wmi-windows-management-instrumentation/
- https://softcomet.freshdesk.com/support/solutions/articles/6000222183-using-wmi-without-having-full-administrator-permissions
- https://learn.microsoft.com/en-us/windows/win32/wmisdk/connecting-to-wmi-on-a-remote-computer