Sysmon Kurulum ve Yapılandırma ile Gelişmiş Sistem İzleme

Windows ortamlarında neler olup bittiğini gerçek zamanlı takip etmek istiyorsanız, varsayılan Windows Event Log’ları çoğu zaman yetersiz kalır. Kim hangi prosesi başlattı, hangi ağ bağlantısı kuruldu, registry’de ne değişti… Bunları standart araçlarla takip etmek neredeyse imkânsız. İşte tam bu noktada Microsoft Sysinternals’ın ücretsiz aracı Sysmon devreye giriyor. Bu yazıda Sysmon’u sıfırdan kurarak, anlamlı bir konfigürasyonla yapılandırıp gerçek dünya senaryolarında nasıl kullanacağınızı adım adım ele alacağım.

Sysmon Nedir ve Neden Lazım?

Sysmon (System Monitor), Windows sistem aktivitelerini ayrıntılı biçimde loglayan bir sistem servisi ve aygıt sürücüsüdür. Windows Event Log altyapısına entegre çalışır, bu yüzden mevcut SIEM araçlarınızla kolayca konuşturabilirsiniz.

Standart Windows logları size bir prosesin başlatıldığını söyler ama hangi parent process’ten geldiğini, hangi komut satırı argümanlarıyla çalıştığını veya hangi hash değerine sahip olduğunu söylemez. Sysmon bütün bunları ve çok daha fazlasını kaydeder.

Sysmon’un takip ettiği başlıca olaylar şunlardır:

  • Process oluşturma ve sonlanma: Tam komut satırı, hash, parent process bilgisiyle
  • Ağ bağlantıları: Kaynak/hedef IP, port, process adı
  • Dosya oluşturma: Özellikle executable dosyalar
  • Registry değişiklikleri: Kritik anahtarlarda yapılan her türlü ekleme, silme, değiştirme
  • Driver yükleme: İmzasız sürücü tespiti için kritik
  • DNS sorguları: Hangi prosesin hangi domain’i sorguladığı
  • WMI aktivitesi: Lateral movement tespiti için çok değerli
  • Pipe oluşturma: Named pipe tabanlı saldırıları yakalamak için

Kurulum

İndirme ve Temel Kurulum

Sysmon’u Microsoft’un resmi Sysinternals sayfasından veya winget ile indirebilirsiniz.

# winget ile indirme
winget install Microsoft.Sysinternals.Sysmon

# Manuel indirip çalıştırma (PowerShell)
Invoke-WebRequest -Uri "https://download.sysinternals.com/files/Sysmon.zip" -OutFile "C:ToolsSysmon.zip"
Expand-Archive -Path "C:ToolsSysmon.zip" -DestinationPath "C:ToolsSysmon"

Sysmon kurulumu için yönetici yetkisi gereklidir. En basit haliyle şöyle kurabilirsiniz:

# Temel kurulum (konfigürasyon dosyası olmadan, önerilmez)
cd C:ToolsSysmon
.Sysmon64.exe -accepteula -i

# Konfigürasyon dosyasıyla kurulum (önerilen)
.Sysmon64.exe -accepteula -i C:Toolssysmon-config.xml

Kurulum sonrası Sysmon bir Windows servisi olarak çalışmaya başlar. Loglar Applications and Services Logs > Microsoft > Windows > Sysmon > Operational altında görünür.

Servis Durumu Kontrolü

# Servis durumunu kontrol et
Get-Service Sysmon64

# Sysmon sürümünü öğren
.Sysmon64.exe -s

# Event Log boyutunu kontrol et
Get-WinEvent -ListLog "Microsoft-Windows-Sysmon/Operational" | Select-Object LogName, MaximumSizeInBytes, RecordCount

Konfigürasyon Dosyası Oluşturma

Sysmon’un asıl gücü XML tabanlı konfigürasyon dosyasında yatar. Konfigürasyonsuz çalışan Sysmon, ya çok az şey loglar ya da her şeyi loglar ki bu da sisteminizi log gürültüsüyle boğar.

Konfigürasyon dosyasında iki temel yaklaşım vardır:

  • Include (dahil et): Yalnızca belirtilen koşullara uyan olayları logla
  • Exclude (hariç tut): Her şeyi logla ama belirtilen koşullara uyanları atlat

Gerçek dünyada genellikle “her şeyi logla, gürültüyü filtrele” yaklaşımı daha güvenlidir. Bir şeyi exclude ettiğinizde, saldırgan tam da o kör noktayı kullanabilir.

Temel Konfigürasyon Yapısı

<Sysmon schemaversion="4.90">
  <HashAlgorithms>MD5,SHA256,IMPHASH</HashAlgorithms>
  <CheckRevocation>False</CheckRevocation>
  <EventFiltering>

    <!-- Process Oluşturma - Event ID 1 -->
    <RuleGroup name="" groupRelation="or">
      <ProcessCreate onmatch="exclude">
        <!-- Güvenilir sistem araçlarını filtrele -->
        <Image condition="is">C:WindowsSystem32svchost.exe</Image>
        <Image condition="is">C:WindowsSystem32wuauclt.exe</Image>
      </ProcessCreate>
    </RuleGroup>

    <!-- Ağ Bağlantıları - Event ID 3 -->
    <RuleGroup name="" groupRelation="or">
      <NetworkConnect onmatch="exclude">
        <!-- DNS trafiğini filtrele, zaten Event ID 22 var -->
        <DestinationPort condition="is">53</DestinationPort>
      </NetworkConnect>
    </RuleGroup>

    <!-- DNS Sorguları - Event ID 22 -->
    <RuleGroup name="" groupRelation="or">
      <DnsQuery onmatch="exclude">
        <QueryName condition="end with">.microsoft.com</QueryName>
        <QueryName condition="end with">.windows.com</QueryName>
      </DnsQuery>
    </RuleGroup>

  </EventFiltering>
</Sysmon>

SwiftOnSecurity Konfigürasyonu

Sıfırdan başlamak yerine topluluğun hazırladığı olgun konfigürasyonları kullanabilirsiniz. En çok tercih edilen SwiftOnSecurity konfigürasyonudur:

# SwiftOnSecurity config'ini indir
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/SwiftOnSecurity/sysmon-config/master/sysmonconfig-export.xml" -OutFile "C:Toolssysmon-config.xml"

# Mevcut kuruluma uygula
.Sysmon64.exe -c C:Toolssysmon-config.xml

# Uygulandığını doğrula
.Sysmon64.exe -c

Kritik Event ID’leri ve Anlamları

Sysmon onlarca farklı event üretir, ama güvenlik açısından en kritik olanları bilmek log analizi sırasında hayat kurtarır.

Event ID 1: Process Oluşturma

Bir prosesin başlatıldığını kaydeder. En değerli alanlar şunlardır:

  • CommandLine: Tam komut satırı argümanları
  • ParentImage: Hangi prosesin başlattığı
  • Hashes: MD5, SHA256 değerleri
  • User: Hangi kullanıcı bağlamında çalıştığı

Örneğin cmd.exe‘yi başlatan parent process winword.exe ise bu ciddi bir alarm işaretidir. Word, PowerPoint gibi Office uygulamalarının komut satırı başlatması klasik bir kötü amaçlı makro belirtisidir.

Event ID 3: Ağ Bağlantısı

Outbound ağ bağlantılarını kaydeder. Özellikle beklenmedik portlara veya external IP’lere bağlanan sistem prosesleri dikkat çekmelidir.

Event ID 7: Driver/Image Yükleme

DLL ve sürücü yüklemelerini takip eder. İmzasız bir DLL’in yüklenmesi Signed alanının false olmasıyla anlaşılır.

Event ID 8: CreateRemoteThread

Bir prosesin başka bir proseste thread oluşturmasını loglar. Bu klasik process injection tekniğidir ve neredeyse her zaman şüphelidir.

Event ID 11: Dosya Oluşturma

Yeni dosya oluşturma işlemlerini kaydeder. Özellikle %TEMP%, %APPDATA% veya C:UsersPublic gibi konumlarda executable oluşturulması kritik alarm noktasıdır.

Event ID 13: Registry Değeri Ayarlama

Registry’de özellikle persistence mekanizmalarıyla ilgili anahtarları (Run, RunOnce, Services) izlemek için kullanılır.

PowerShell ile Log Analizi

Sysmon loglarını GUI üzerinden Event Viewer ile açabilirsiniz ama gerçek analizde PowerShell çok daha hızlıdır.

# Son 1 saatteki tüm Sysmon olaylarını listele
$StartTime = (Get-Date).AddHours(-1)
Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" |
    Where-Object { $_.TimeCreated -gt $StartTime } |
    Select-Object TimeCreated, Id, Message |
    Format-List
# Şüpheli PowerShell komutlarını ara (Event ID 1)
Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" |
    Where-Object { $_.Id -eq 1 } |
    Where-Object { $_.Message -match "powershell" -and
                   ($_.Message -match "EncodedCommand" -or
                    $_.Message -match "bypass" -or
                    $_.Message -match "hidden") } |
    Select-Object TimeCreated,
                  @{N="CommandLine";E={($_.Properties[10]).Value}} |
    Format-List
# Dışa bağlantı kuran şüpheli prosesleri bul (Event ID 3)
Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" |
    Where-Object { $_.Id -eq 3 } |
    Where-Object { $_.Message -notmatch "chrome|firefox|edge|svchost" } |
    Select-Object TimeCreated,
                  @{N="Process";E={($_.Properties[4]).Value}},
                  @{N="DestIP";E={($_.Properties[14]).Value}},
                  @{N="DestPort";E={($_.Properties[15]).Value}} |
    Sort-Object DestPort | Format-Table -AutoSize
# Registry persistence noktalarını izle (Event ID 13)
$PersistenceKeys = @(
    "HKLMSOFTWAREMicrosoftWindowsCurrentVersionRun",
    "HKCUSOFTWAREMicrosoftWindowsCurrentVersionRun",
    "HKLMSYSTEMCurrentControlSetServices"
)

Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" |
    Where-Object { $_.Id -eq 13 } |
    ForEach-Object {
        $TargetObject = ($_.Properties[5]).Value
        foreach ($Key in $PersistenceKeys) {
            if ($TargetObject -match [regex]::Escape($Key)) {
                [PSCustomObject]@{
                    Time       = $_.TimeCreated
                    Process    = ($_.Properties[3]).Value
                    TargetKey  = $TargetObject
                    Value      = ($_.Properties[6]).Value
                }
            }
        }
    } | Format-List

Gerçek Dünya Senaryoları

Senaryo 1: Ransomware Tespit Etme

Ransomware genellikle şu davranış kalıplarını sergiler: çok sayıda dosyayı hızla değiştirme ve yeniden adlandırma, shadow copy silme komutları çalıştırma, ağa yayılmaya çalışma.

Sysmon üzerinde Event ID 1 için şu filtreyi ekleyebilirsiniz:

<!-- Shadow copy silme girişimlerini yakala -->
<RuleGroup name="Ransomware Indicators" groupRelation="or">
  <ProcessCreate onmatch="include">
    <CommandLine condition="contains">vssadmin delete shadows</CommandLine>
    <CommandLine condition="contains">wmic shadowcopy delete</CommandLine>
    <CommandLine condition="contains">bcdedit /set recoveryenabled no</CommandLine>
    <CommandLine condition="contains">wbadmin delete catalog</CommandLine>
  </ProcessCreate>
</RuleGroup>

Bu komutlardan herhangi birini içeren bir Event ID 1 görürseniz, güvenlik ekibinizi hemen uyandırın.

Senaryo 2: Lateral Movement Tespiti

Bir saldırgan ağda yatay hareket etmeye çalışırken genellikle PsExec, WMI veya PowerShell Remoting kullanır. Bunların hepsinin Sysmon’da karakteristik izleri vardır.

# WMI üzerinden uzak komut çalıştırma tespiti
Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" |
    Where-Object { $_.Id -eq 1 } |
    Where-Object {
        ($_.Message -match "WmiPrvSE.exe") -and
        ($_.Message -match "cmd.exe|powershell.exe")
    } |
    Select-Object TimeCreated, Message | Format-List

Senaryo 3: DLL Hijacking Tespiti

Meşru bir uygulamanın beklenmedik bir dizinden DLL yüklemesi DLL hijacking işaretçisidir.

# İmzasız DLL yüklemelerini bul (Event ID 7)
Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" |
    Where-Object { $_.Id -eq 7 } |
    Where-Object { ($_.Properties[7]).Value -eq "false" } |
    Select-Object TimeCreated,
                  @{N="Process";E={($_.Properties[3]).Value}},
                  @{N="ImageLoaded";E={($_.Properties[5]).Value}},
                  @{N="Signed";E={($_.Properties[7]).Value}} |
    Format-Table -AutoSize

Log Boyutu Yönetimi

Sysmon çok detaylı log üretir. Yönetilmezse disk dolabilir. Özellikle Event ID 3 (ağ bağlantıları) aktif bir sistemde binlerce kayıt üretebilir.

# Sysmon log boyutunu 1 GB olarak ayarla
$LogName = "Microsoft-Windows-Sysmon/Operational"
$Log = New-Object System.Diagnostics.Eventing.Reader.EventLogConfiguration($LogName)
$Log.MaximumSizeInBytes = 1073741824  # 1 GB
$Log.LogMode = [System.Diagnostics.Eventing.Reader.EventLogMode]::Circular
$Log.SaveChanges()

# Mevcut log boyutunu kontrol et
Get-WinEvent -ListLog $LogName | Select-Object LogName,
    @{N="SizeMB";E={[math]::Round($_.FileSize/1MB,2)}},
    @{N="MaxSizeMB";E={[math]::Round($_.MaximumSizeInBytes/1MB,2)}},
    RecordCount

Kurumsal ortamda Sysmon loglarını Winlogbeat veya NXLog gibi araçlarla merkezi SIEM sistemine (Elasticsearch, Splunk, Sentinel) göndermek standart yaklaşımdır. Logları endpoint’te tutmak hem yer kaplar hem de bir saldırganın logları silmesine zemin hazırlar.

Konfigürasyonu Güncelleme ve Yönetme

Sysmon konfigürasyonunu canlı sistemde servis yeniden başlatmadan güncelleyebilirsiniz:

# Konfigürasyonu güncelle
.Sysmon64.exe -c C:Toolsyeni-config.xml

# Sysmon'u kaldır (zorunlu olmadıkça yapma)
.Sysmon64.exe -u

# Sysmon sürümünü güncelle
.Sysmon64.exe -u force
.Sysmon64.exe -accepteula -i C:Toolssysmon-config.xml

Konfigürasyon değişikliklerini versiyon kontrol sisteminde (Git) tutmanızı şiddetle tavsiye ederim. Hangi değişikliği ne zaman neden yaptığınızı görmek, bir olay sonrası analizde çok işe yarar.

Sonuç

Sysmon, özellikle kurumsal Windows ortamlarında görünürlüğü dramatik biçimde artıran ücretsiz ve güçlü bir araçtır. Yapılandırılmış haliyle EDR çözümlerine yakın bir telemetri kalitesi sunar. Elbette Sysmon tek başına yeterli değildir; onu bir SIEM, anlamlı alerting kuralları ve olay müdahale süreçleriyle birleştirdiğinizde gerçek değerini gösterir.

Başlamak için SwiftOnSecurity konfigürasyonunu indirip kullanın, ardından ortamınıza özgü gürültü kaynaklarını exclude listesine ekleyin. Log boyutunu takip edin ve logları merkezi sisteme aktarın. Birkaç hafta sonra ürettiği verilerin ne kadar değerli olduğunu göreceksiniz. Daha önce hiç fark etmediğiniz şeyler, örneğin yanlış yapılandırılmış servisler, yetkisiz yazılım kurulumları veya gerçek tehdit aktiviteleri, gün yüzüne çıkmaya başlayacak.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir