PowerShell ile Active Directory Kullanıcı Hesabı Kilitlenmeleri Nasıl Tespit Edilir?

Merhaba Arkadaşlar,

Bu makalemde Active Directory adminlerinin sıklıkla karşılaştıkları kullanıcı hesabı kilitlenmelerinin hangi cihazdan kaynaklandığının tespiti nasıl yapılır konusunu ele alacağız. Gördüğüm kadarı ile genelde thirt party ürünler veya free tool lar ile bu işlemler yapılıyor.

Bunun powershell ile ne kadar kolay olduğunu hep birlikte görüyor olacağız. Makalemizin sonunda oluşturduğumuz komut setinin parametreleri ile oynayarak dilediğiniz gibi kullanabileceğinizi de göreceksiniz.

Powershell konusunda deneyimli iseniz bu makaleyi okumadan makalenin sonundaki komutları copy-paste ile alıp kullanabilirsiniz. Bu konuyu bir makale olarak ele almamın sebebi powershell de yeni olan arkadaşların bu süreci adım adım görmeleri içindir.

Makalemize başlamadan önce şunları belirtmemiz gerekiyor. Bu makaleden sistem adminleri, help desk uzmanları ve powershell geliştiricileri faydalanabilirler.

Uygulama gereksinimleri olarakta Client tarafında Windows Vista ve üzeri, sunucu tarafındada Windows Server 2008 ve üzeri, powershell olarakta V2.0 ve üzeri olması yeterlidir. Ayrıca komutları çalıştırabilmemiz için uygun yetkilere sahip olmamız gerekiyor.

Şimdi işlemlerimize başlayalım. Birinci adım olarak AD sunucularımızdan hangisinin PDC Emulatör olduğunu buluyoruz. Bunun için Get-ADDomain komutunu kullanabiliriz.

Önerim komutları Domain Controller olan sunucu üzerinde uygulamanızdır.

Ashampoo_Snap_7 Mayıs 2018 Pazartesi_10h02m29s_035_

Bu ekrandan PDCEmulator sunucumuzu buluyoruz. Tek bir Domain Controller kullananlar için bu adımı uygulamaya gerek yoktur.

PDCEmulator sunucusunu bulduktan sonra sunucu üzerinde oluşan logları incelemek için Get-Winevent komutunu kullanıyor olacağız. Bu komut tek başına kullanıldığında tüm logları listeleyecektir. Biz bu komutu parametreli bir şekilde kullanarak istediğimiz sonuçlara adım adım ulaşacağız.

Get-Winevent -Computername localhost -FilterHashTable @{logname='security';ID=4740}

Komutumuzda -Computername parametresi komutun hangi sunucuda çalışacağını belirtir. Ben komutlarımı DC üzerinde çalıştırdığım için localhost ifadesini kullandım. Aslında -Computername parametresinide vermeme gerek yoktu. Komutlara ve parametrelere aşina olun diye belirtmek istedim. İkinci parametremiz hash tipinde bir parametredir. Bu sayede komuta daha fazla bilgi sağlayabiliyoruz. Bu komutta logname i security olan Event ID si 4740(hatalı giriş olay kaydı) olan parametreler tablosu oluşturup hashtable üzerinde tuttuk. Komutumuzu bu şekilde çalıştırdığımızda aşağıdaki gibi bir çıktı alırız.

Ashampoo_Snap_7 Mayıs 2018 Pazartesi_11h50m40s_036_

Get-Winevent -Computername localhost -FilterHashTable @{logname='security';ID=4740;starttime=(get-date).AddDays(-10)}

Komutu ile son 10  gün içinde oluşan security kategorisinde ve 4740 Id sinde olan kayıtları listeler.

Dilersek hash parametresini bir değişkende tutup üzerinde değişiklikler yapabiliriz.

$filter=@{

Logname=’Security’;

Id=4740;

StartTime=(get-date).AddDays(-10)

}

Ashampoo_Snap_7 Mayıs 2018 Pazartesi_13h14m39s_037_

şimdi aşağıdaki komutu kullanabiliriz. Artık $filter parametresi bir hashtable ı temsil ediyor.

Get-Winevent -Computername localhost -FilterHashTable $filter

 

$filter.Add(‘Data’=’xxxxxxx’)

Komutu ile hashtable a kayıt ekleyebiliriz

$filter

hashtable ı görmek için kullanıyoruz

Get-Winevent -Computername localhost -FilterHashTable $filter

komut setimizi tekrar çalıştırıp filtrelenmiş kayıtları görüyoruz.

$filter.Remove(‘starttime’) komutu ile filtremizden starttime parametresini çıkartıyoruz.

Get-Winevent -Computername localhost -FilterHashTable $filter

komut setimizi tekrar çalıştırıp filtrelenmiş kayıtları görüyoruz.

İlgili komutların ekran görüntüleri aşağıda olduğu gibidir.

Ashampoo_Snap_7 Mayıs 2018 Pazartesi_14h05m01s_038_

Get-Winevent -Computername localhost -FilterHashTable $filter |Select-Object -Properties * -first 1

Sonuçları Select-Object ile tekrar filtreliyoruz. Bu sefer -first parametresi ile tek bir kaydı  -properties * ile de kaydın tüm özelliklerini görüntülüyoruz.

Ashampoo_Snap_7 Mayıs 2018 Pazartesi_14h15m45s_039_

Özellikleri incelediğimizde “Caller Computer Name” özelliği kilitlemenin nerden geldiği bilgisini veriyor. Komutumuzu yeniden yapılandıralım.

Get-Winevent -Computername localhost -FilterHashTable $filter |Select-Object -ExpandProperty properties  -firtst 1

Ashampoo_Snap_7 Mayıs 2018 Pazartesi_14h35m29s_041_

Bu sefer daha sade bir ekranla kullanıcının hangi client tan kilitleme denemeleri yapıldığını görebiliyoruz.  -ExpandProperty Select-Object komutuna özel bir parametredir. Özelliklerin sadece değerlerini görmeye yarar.

Komutumuzu biraz daha özelleştiriyoruz.

Get-WinEvent -ComputerName localhost -FilterHashtable $filter |Select-Object -Property timecreated,@{label='Username';Expression={$_.Properties[0].Value}},@{label='Computername';Expression={$_.Properties[1].Value}}

Ashampoo_Snap_7 Mayıs 2018 Pazartesi_14h48m14s_042_

Nihayetinde toplu olarak hangi kullanıcı hangi device dan hatalı giriş yapmış listesini alabiliyoruz.

Bir makalemizin daha sonuna geldik. Yorum ve önerilerinizi bekliyorum… Bir Sonraki makalemde görüşmek üzere hoşcakalın.

Kürşat ARI / System Engineer & PowerShell  Developer

Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s