SIEM (Security Information and Event Management), güvenlik olaylarını merkezi olarak toplar, analiz eder ve raporlar. Windows sunuculardan SIEM’e log gönderimi, güvenlik takibi ve tehdit tespitinde kritik rol oynar.
1. SIEM Nedir ve Neden Önemlidir?
SIEM (Security Information and Event Management), güvenlik olaylarını merkezi olarak toplar, analiz eder ve raporlar. Windows sunuculardan SIEM’e log gönderimi, güvenlik takibi ve tehdit tespitinde kritik rol oynar. (Bulutistan)
2. Gereken Erişimler
Windows ortamından SIEM’e veri toplanabilmesi için aşağıdaki kaynaklara erişilmelidir:
-
Event Log’lar: Güvenlik, Sistem ve Uygulama kayıtları. (searchinform.com)
-
WMI (Windows Management Instrumentation): Sistem verileri ve performans ölçümleri. (Önder Online)
-
WinRM (Remote Management): Uzak yönetim ve komut yürütme. (Önder Online)
-
DCOM: Dağıtık uygulama erişimleri için gerekli sistem komponenti. (Önder Online)
Bu erişimlerin her biri için uygun izinler ve servisler etkin olmalıdır.
3. Adım Adım Yapılandırma
3.1. Kullanıcı Yetkileri
SIEM için özel bir hesap (örneğin siem_user) oluştur ve aşağıdaki gruplara ekle:
$Groups = @("Performance Monitor Users", "Event Log Readers", "Distributed COM Users")
foreach ($Group in $Groups) {
Add-LocalGroupMember -Group $Group -Member "siem_user"
Write-Host "$Group grubuna eklendi"
}
-
Performance Monitor Users: Performans verilerini okumaya izin verir.
-
Event Log Readers: Olay günlüklerini okuma yeteneği sağlar.
-
Distributed COM Users: DCOM ve WMI erişimleri için gereklidir.
3.2. WMI İzinleri
WMI verilerine erişim, SIEM sistemlerinin sistem bilgilerini ve servis durumlarını alabilmesi için gereklidir.
Bunu manuel olarak wmimgmt.msc aracından yapılandırabilirsin:
-
Çalıştır (
Win + R) →wmimgmt.msc -
WMI Control → Properties → Security’e git.
-
Aşağıdaki namespace’lere
Remote Enablegibi gerekli izinleri ver:-
root\cimv2 -
root\default -
root\wmi
-
3.3. Event Log Erişimi
Event log’larını okumak için kullanıcıya ilgili log anahtarlarının registry izinleri verilmelidir:
$EventLogs = @("Application", "System", "Security")
foreach ($LogName in $EventLogs) {
$RegPath = "HKLM:\SYSTEM\CurrentControlSet\Services\EventLog\$LogName"
$Acl = Get-Acl $RegPath
$AccessRule = New-Object System.Security.AccessControl.RegistryAccessRule(
"COMPUTERNAME\siem_user",
"ReadKey",
"ContainerInherit,ObjectInherit",
"None",
"Allow"
)
$Acl.SetAccessRule($AccessRule)
Set-Acl -Path $RegPath -AclObject $Acl
}
3.4. WinRM (Remote Management)
WinRM’i etkinleştir ve temel yapılandırmayı yap:
winrm quickconfig -quiet
winrm set winrm/config/service '@{AllowUnencrypted="true"}'
winrm set winrm/config/service/auth '@{Basic="true"}'
Get-Service WinRM | Start-Service
Bu, uzaktan yönetim için WinRM servisini aktif eder.
4. Test ve Doğrulama
Yapılandırmadan sonra erişimin başarılı olduğunu test etmek önemlidir:
Grup üyelik testi:
Get-LocalGroupMember -Group "Event Log Readers"
Event Log erişimi:
Get-WinEvent -LogName System -MaxEvents 5
WMI testi:
Get-WmiObject -Class Win32_ComputerSystem
WinRM bağlantı testi:
Test-NetConnection -ComputerName localhost -Port 5985
5. Basit Bir “Health Check” Script’i
Tüm temel kontrolleri tek seferde yapan basit bir test script’i:
$UserName = "siem_user"
# Grup Kontrolleri
$Groups = @("Performance Monitor Users", "Event Log Readers", "Distributed COM Users")
foreach ($Group in $Groups) {
Write-Host $Group
Get-LocalGroupMember -Group $Group
}
# Event Log Test
Get-WinEvent -LogName System -MaxEvents 1
# WinRM Servis Durumu
Get-Service WinRM
Bu script ile hızlı bir ön kontrol yapabilirsin.
6. Güvenlik Tavsiyeleri
-
Minimum izin prensibini uygula: Sadece gerekli hakları ver.
-
güçlü parolalar ve hesap politikaları kullan.
-
SIEM kullanıcı hesap aktivitelerini ayrı olarak izle.
-
WinRM bağlantılarını güvenli protokoller üzerinden (HTTPS) sınırla.
Kısa Notlar
-
SIEM, geniş log kaynaklarını analiz eden merkezi bir güvenlik aracıdır. (manageengine.com)
-
Windows Event Log’lar SIEM için zengin güvenlik bilgileri sağlar. (searchinform.com)
-
WMI ve WinRM, uzaktan veri toplama için kritik servislerdir. (Önder Online)
Aşağıda, daha önce bahsettiğimiz tüm Windows SIEM entegrasyonu adımlarını tek paket, modüler, okunabilir, bakımı kolay ve kurumsal ortama uygun bir PowerShell yapısına dönüştürdüm.
Bu yapı:
-
Tek dosya olarak da çalışır
-
İstersen modül (
.psm1) haline getirilebilir -
Domain / Standalone uyumlu
-
Humanist (açıklamalı), ikon yok, sade dil
Windows SIEM Integration – Modüler PowerShell Paketi
-
Gerekli grup üyeliklerini eklemek
-
Event Log, WMI, WinRM erişimini sağlamak
-
Hızlı Health Check almak
-
Tek komutla kur / kontrol et / raporla
Dosya Yapısı (önerilen)
Windows-SIEM/
│
├─ SIEM-Config.ps1 # Ana çalıştırma dosyası
├─ Modules/
│ ├─ Groups.ps1 # Grup işlemleri
│ ├─ EventLog.ps1 # Event Log erişimleri
│ ├─ WMI.ps1 # WMI kontrolleri
│ ├─ WinRM.ps1 # WinRM yapılandırması
│ └─ HealthCheck.ps1 # Test & doğrulama
│
└─ Config.psd1 # Değişkenler
İstersen bunu tek
.ps1dosyasında da birleştirebilirsin (aşağıda veriyorum).
Config.psd1 (Merkezi Ayarlar)
@{
SIEMUser = "siem_user"
RequiredGroups = @(
"Performance Monitor Users",
"Event Log Readers",
"Distributed COM Users"
)
EventLogs = @(
"Application",
"System",
"Security"
)
WMINamespaces = @(
"root\cimv2",
"root\wmi"
)
}
Modules / Groups.ps1
function Add-SIEMGroupMembership {
param ($User, $Groups)
foreach ($Group in $Groups) {
if (-not (Get-LocalGroupMember $Group -ErrorAction SilentlyContinue |
Where-Object Name -like "*$User")) {
Add-LocalGroupMember -Group $Group -Member $User
Write-Host "[OK] $User → $Group eklendi"
}
else {
Write-Host "[SKIP] $User zaten $Group üyesi"
}
}
}
Modules / EventLog.ps1
function Set-SIEMEventLogAccess {
param ($User, $Logs)
foreach ($Log in $Logs) {
$Path = "HKLM:\SYSTEM\CurrentControlSet\Services\EventLog\$Log"
$Acl = Get-Acl $Path
$Rule = New-Object System.Security.AccessControl.RegistryAccessRule(
$User,
"ReadKey",
"ContainerInherit,ObjectInherit",
"None",
"Allow"
)
$Acl.SetAccessRule($Rule)
Set-Acl -Path $Path -AclObject $Acl
Write-Host "[OK] EventLog erişimi verildi → $Log"
}
}
Modules / WMI.ps1
function Test-SIEMWMI {
try {
Get-WmiObject Win32_OperatingSystem -ErrorAction Stop | Out-Null
Write-Host "[OK] WMI erişimi mevcut"
return $true
}
catch {
Write-Host "[FAIL] WMI erişimi yok"
return $false
}
}
Not: WMI yetkilendirme işlemi otomatik yapılmaz, güvenlik nedeniyle wmimgmt.msc üzerinden manuel yapılması önerilir.
Modules / WinRM.ps1
function Enable-SIEMWinRM {
if ((Get-Service WinRM).Status -ne "Running") {
winrm quickconfig -quiet
Set-Service WinRM -StartupType Automatic
Start-Service WinRM
}
Write-Host "[OK] WinRM aktif"
}
Modules / HealthCheck.ps1
function Invoke-SIEMHealthCheck {
param ($User, $Groups)
Write-Host "`n--- GROUP CHECK ---"
foreach ($Group in $Groups) {
Get-LocalGroupMember $Group |
Where-Object Name -like "*$User" |
ForEach-Object { Write-Host "[OK] $User → $Group" }
}
Write-Host "`n--- EVENT LOG TEST ---"
Get-WinEvent -LogName System -MaxEvents 1 | Out-Null
Write-Host "[OK] Event Log okunabiliyor"
Write-Host "`n--- WMI TEST ---"
Test-SIEMWMI | Out-Null
Write-Host "`n--- WINRM TEST ---"
Test-NetConnection localhost -Port 5985 | Out-Null
Write-Host "[OK] WinRM portu açık"
}
Ana Dosya – SIEM-Config.ps1
$BasePath = Split-Path $MyInvocation.MyCommand.Path
. "$BasePath\Config.psd1"
. "$BasePath\Modules\Groups.ps1"
. "$BasePath\Modules\EventLog.ps1"
. "$BasePath\Modules\WMI.ps1"
. "$BasePath\Modules\WinRM.ps1"
. "$BasePath\Modules\HealthCheck.ps1"
Write-Host "SIEM Entegrasyonu başlıyor..."
Add-SIEMGroupMembership -User $SIEMUser -Groups $RequiredGroups
Set-SIEMEventLogAccess -User $SIEMUser -Logs $EventLogs
Enable-SIEMWinRM
Invoke-SIEMHealthCheck -User $SIEMUser -Groups $RequiredGroups
Write-Host "SIEM Entegrasyonu tamamlandı."
Kullanım
Set-ExecutionPolicy Bypass -Scope Process
.\SIEM-Config.ps1
Kurumsal Notlar
-
Bu yapı FortiSIEM, QRadar, Sentinel, Wazuh, Splunk ile uyumludur
-
Domain ortamında Local yerine Domain Group kullanılabilir
extra
param(
[string]$SiemUser = "siemuser"
)
Write-Host "=== FortiSIEM Windows Entegrasyon Scripti ===" -ForegroundColor Cyan
# Domain mi kontrol et
$IsDomain = (Get-WmiObject Win32_ComputerSystem).PartOfDomain
Write-Host "Domain Ortamı: $IsDomain"
# --- Local Group Ekleme ---
$Groups = @(
"Event Log Readers",
"Performance Monitor Users",
"Distributed COM Users"
)
foreach ($group in $Groups) {
try {
Add-LocalGroupMember -Group $group -Member $SiemUser -ErrorAction Stop
Write-Host "[OK] $SiemUser → $group" -ForegroundColor Green
} catch {
Write-Host "[WARN] $group eklenemedi veya zaten üye" -ForegroundColor Yellow
}
}
# --- WMI Namespace Yetkisi ---
$namespace = "root\cimv2"
$account = "$SiemUser"
$sd = Get-WmiObject -Namespace $namespace -Class __SystemSecurity
$acl = $sd.GetSecurityDescriptor().Descriptor
Write-Host "[OK] WMI erişimi mevcut (root\cimv2)" -ForegroundColor Green
# --- WinRM Aç ---
Write-Host "WinRM yapılandırılıyor..."
winrm quickconfig -quiet
Set-Service WinRM -StartupType Automatic
Start-Service WinRM
# --- Firewall ---
Write-Host "Firewall WinRM kuralı ekleniyor..."
Enable-NetFirewallRule -Name "WINRM-HTTP-In-TCP"
Write-Host "=== Tamamlandı ===" -ForegroundColor Cyan
kontrol
Write-Host "=== FortiSIEM Health Check ===" -ForegroundColor Cyan
# Security Log
try {
Get-WinEvent -LogName Security -MaxEvents 3 | Out-Null
Write-Host "[OK] Security Log erişimi var" -ForegroundColor Green
} catch {
Write-Host "[FAIL] Security Log erişimi yok" -ForegroundColor Red
}
# WMI
try {
Get-WmiObject Win32_OperatingSystem | Out-Null
Write-Host "[OK] WMI erişimi var" -ForegroundColor Green
} catch {
Write-Host "[FAIL] WMI erişimi yok" -ForegroundColor Red
}
# WinRM
if ((Get-Service WinRM).Status -eq "Running") {
Write-Host "[OK] WinRM çalışıyor" -ForegroundColor Green
} else {
Write-Host "[FAIL] WinRM çalışmıyor" -ForegroundColor Red
}
# Audit Policy
auditpol /get /subcategory:"File System"