PowerShell ile Kolay Olay Günlüğü Sorgulama


Bugün herhangi bir tür yerel Active Directory (AD) denetimi kullanıyorsanız, muhtemelen güvenlik olay günlüğünde oluşturduğu bilgileri seviyorsunuzdur. Yerel AD denetimi, ne olduğu ve ne zaman olduğu konusunda birçok yararlı bilgi üretme konusunda harikadır. Sorun, bu bilgiyi gerçekten okuyup neler olduğunu anlamak istediğinizde ortaya çıkıyor! Yerel AD denetimi, denetim türüne bağlı olarak birçok farklı etki alanı denetleyicisinden veya istemci sisteminden birinde yüzlerce olay türü oluşturur.

Yerel AD denetiminin çok sayıda yararlı bilgi üretmesiyle bilinir, ancak aynı zamanda çok sayıda yararlı olmayan veri de üretir. Aynı zamanda yararlı bilgiler, "A Kullanıcısı Y bilgisayarında oturum açtı" veya "B Kullanıcısı, H etki alanı denetleyicisine bağlıyken bir GPO'yu kaldırdı" gibi tek bir olay olarak kaydedilmez. Bu o kadar basit değil. AD denetimi, potansiyel olarak aradığınız tek bir gerçek olayla ilişkilendirilen 3, 4 veya daha fazla farklı türde olay üretebilir, bu da olay günlüğüne göz atmayı imkansız hale getirir.

PowerShell'in yerel olay günlüğü ayrıştırmasını kullanarak tüm bu olayları ortaya çıkarabilir ve doğru kodlanırsa gerçek dünya olaylarını olay kimlikleriyle eşleştirebilirsiniz.

Bunun nasıl yapılacağına dair bir örnek üzerinden gidelim. Diyelim ki not defterini birkaç farklı bilgisayarda kimin, ne zaman başlattığını bulmam gerekiyor. Denetim Süreci Oluşturmayı etkinleştirip söz konusu makinelere uyguladıktan sonra, etkilenen makinelerden birinde not defterini çalıştırıyorum ve şöyle bir olay alıyorum; olay kimliği 4688, saat ve başlatılan EXE (notepad.exe) ile birlikte.

Bu harika ama bu olay binlerce başka olayın altında gömülü. Bu bilgiye hızlı bir şekilde ve birden fazla makinede nasıl ulaşabilirim? PowerShell betiğiyle öncelikle denetim ilkesini uyguladığımız kuruluş birimindeki tüm bilgisayarları bulmamız gerekecek. Basit olması açısından bizim durumumuzda Etki Alanı Denetleyicileri OU'sunu kullandım. Bu kuruluş birimindeki tüm bilgisayarları almam gerekecek. Bunu yapmak için Get-ADComputer cmdlet'ini kullanacağım.

Get-ADComputer -SearchBase 'OU=Domain Controllers,DC=lab,DC=local' -Filter * | Nesne Adı Seç

Artık hedeflemek istediğim tüm bilgisayarların bir listesine sahibim. Daha sonra hangi etkinlik kimliklerini aradığımı bilmem gerekiyor. MS Technet AD denetim bağlantısından olay kimliği 4688'i aradığımı öğrendim. Tüm bu bilgisayarlarda olay kimliği 4688'i kontrol edelim.

(Get-ADComputer -SearchBase 'OU=Domain Controllers,DC=lab,DC=local' -Filter *).Ad | Get-EventLog -LogName Security -InstanceId 4688

Pek çok olayı geri aldığımı görüyorsunuz ama bu olayların artık benim için hiçbir anlamı yok. Olay hangi bilgisayardan geldi? Notepad.exe olayı mıydı? Daha ayrıntılı konuşalım. Bu noktadan sonra, yaptıklarımı tam olarak takip etmenizi beklemiyorum. Ne yazık ki mesaj kutusunu olay kimliği varmış gibi sorgulamanın bir yolu yok, dolayısıyla bunu yapmak için Get-EventLog'u kullanamıyoruz. Get-WinEvent 'i kullanmamız gerekecek.

## XPath sorgusunu oluşturun

$EventFilterXPath=“Event[System[EventID='4688′]] ve Event[EventData[Data[@Name='NewProcessName'] ve (Data='C:WindowsSystem32notepad.exe')]]”

## Sorguyu tüm bilgisayarlarda çalıştırın

(Get-ADComputer -SearchBase 'OU=Domain Controllers,DC=lab,DC=local' -Filter *).Ad | foreach { Get-WinEvent -ComputerName $_ -LogName Security -FilterXPath $EventFilterXPath

Artık aslında ihtiyacımız olan tüm olaylara sahibiz ancak bunların geldiği bilgisayar adlarını bulmamız gerekiyor ve ayrıca kullanıcı adını da bilmiyoruz. Bunu düzeltelim.

(Get-ADComputer -SearchBase 'OU=Domain Controllers,DC=lab,DC=local' -Filter *).Ad | foreach { Get-WinEvent -ComputerName $_ -LogName Security -FilterXPath $EventFilterXPath } | Select-Object @{n='ComputerName';e={$_.MachineName}},@{n='Time';e={$_.TimeCreated}},@{n ='Hesap';e={[regex]::Matches($_.Message,'Hesap Adı:s+(.*)n').Groups[1].Value.Trim()}} | Format-Tablo -Otomatik Boyutlandırma

Korkunç kod, biliyorum. Bazen senaryo yazarken yapmanız gereken şey budur. AD denetimini bu şekilde raporlayabilen ve bunu çok daha basit hale getirebilen bir ürün var mı acaba?

İlgili makaleler