# önder online
Teknoloji ve siber güvenlik dünyasına hoş geldiniz Güncel siber tehditler ve korunma yöntemleri Yapay zekâ ve otomasyonun güvenliğe etkileri Microsoft 365 ve Active Directory güvenlik rehberleri Yazılım geliştirmede güvenlik odaklı yaklaşımlar Teknoloji ve siber güvenlik dünyasına hoş geldiniz Güncel siber tehditler ve korunma yöntemleri

Menu

Windows'da SIEM Entegrasyonu

Windows'da SIEM Entegrasyonu

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:

  1. Çalıştır (Win + R) → wmimgmt.msc

  2. WMI Control → Properties → Security’e git.

  3. Aşağıdaki namespace’lere Remote Enable gibi 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 .ps1 dosyası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"