Sysinternals Process Explorer ile Süreç Analizi

Windows ortamlarında bir şeyler ters gittiğinde, yani bir sunucu yavaşladığında, ağ trafiği aniden artığında ya da bir uygulama garip davranışlar sergilemeye başladığında, ilk başvurduğun araç ne olur? Görev Yöneticisi mi? Güzel bir başlangıç, ama ciddi bir analiz için yetersiz kalır. İşte tam bu noktada Sysinternals Process Explorer sahneye çıkıyor ve sana gerçek anlamda görünürlük sağlıyor.

Process Explorer, Microsoft’un Sysinternals suite’inin belki de en güçlü üyesidir. Basit bir süreç listesi göstericinin çok ötesine geçerek, her sürecin hangi DLL’leri yüklediğini, hangi handle’ları tuttuğunu, ağ bağlantılarını, CPU/bellek tüketimini ve hatta VirusTotal entegrasyonuyla hash bazlı kötü amaçlı yazılım kontrolünü tek bir arayüzden sunuyor. Güvenlik olaylarına müdahale ederken, performans sorunlarını incelerken ya da şüpheli bir süreci araştırırken bu araç olmadan iş yapmak gerçekten zorlaşıyor.

Process Explorer Neden Görev Yöneticisinden Farklı?

Standart Windows Görev Yöneticisi, günlük kullanım için yeterlidir. Ama sysadmin olarak elimizde farklı sorular olur: “Bu svchost.exe neden 400MB RAM tüketiyor?”, “Bu process hangi DLL’i yüklüyor?”, “Şu anda açık olan dosya handle’ları neler?” gibi sorular Görev Yöneticisi’nin cevap veremeyeceği sorulardır.

Process Explorer’ın temel farkları şunlardır:

  • Ağaç yapısı görünümü: Süreçler parent-child ilişkisiyle görüntülenir, hangi process’in neyi başlattığı net olarak görünür
  • DLL görünümü: Herhangi bir sürecin yüklediği tüm DLL’leri ve dosyaları görebilirsiniz
  • Handle görünümü: Açık registry anahtarları, dosyalar ve diğer sistem nesneleri listelenir
  • VirusTotal entegrasyonu: Process’lerin hash değerlerini otomatik olarak VirusTotal’e gönderip sonuçları alabilirsiniz
  • Detaylı CPU/bellek istatistikleri: Sadece anlık değil, geçmişe dönük grafikler de mevcut
  • Renk kodlama: Farklı süreç türleri farklı renklerle gösterilir (servisler, job’lar, suspended süreçler vs.)

Kurulum ve İlk Ayarlar

Process Explorer’ı Sysinternals web sitesinden ya da doğrudan live.sysinternals.com üzerinden çalıştırabilirsiniz. İkinci yöntem, kurulum gerektirmeden ağ üzerinden çalıştırma imkanı sunar.

# PowerShell ile Sysinternals Suite indir
Invoke-WebRequest -Uri "https://download.sysinternals.com/files/SysinternalsSuite.zip" -OutFile "C:ToolsSysinternalsSuite.zip"
Expand-Archive -Path "C:ToolsSysinternalsSuite.zip" -DestinationPath "C:ToolsSysinternals"

# Direkt ağ üzerinden çalıştır (UNC path)
\live.sysinternals.comtoolsprocexp.exe

Process Explorer’ı yönetici olarak çalıştırmanız kritik önem taşıyor. Aksi hâlde sistem süreçlerinin detaylarını göremez, bazı handle’lara erişemezsiniz.

# Yönetici olarak başlatmak için
Start-Process "C:ToolsSysinternalsprocexp.exe" -Verb RunAs

# Ya da komut satırından
runas /user:Administrator "C:ToolsSysinternalsprocexp.exe"

İlk açılışta yapmanız gereken en önemli ayar, VirusTotal entegrasyonunu aktif etmektir. Options menüsünden “VirusTotal.com” seçeneğini etkinleştirin. Bu sayede her sürecin yanında kaç tane antivirus motorunun o hash’i zararlı olarak işaretlediğini görebilirsiniz.

Temel Arayüz ve Renk Kodları

Process Explorer’ın arayüzü üst kısımda CPU/RAM grafikleri, alt kısımda ise ağaç şeklinde süreç listesini gösterir. Alt panel DLL ya da handle görünümü için kullanılır.

Renk kodlaması şu şekilde çalışır:

  • Mor/Pembe: Packed (sıkıştırılmış) executable’lar, kötü amaçlı yazılımların favori yöntemi
  • Cyan/Açık Mavi: Yeni başlatılmış süreçler, kısa süre önce hayata geçenler
  • Kırmızı: Az önce sonlandırılmış süreçler
  • Sarı: Servis olarak çalışan süreçler (svchost.exe gibi)
  • Koyu Mavi: Kendi kullanıcınız tarafından çalıştırılan süreçler
  • Gri: Suspended (durdurulmuş) durumdaki süreçler

Gerçek Dünya Senaryosu 1: Şüpheli Svchost.exe Tespiti

Svchost.exe, Windows’un en çok kötüye kullanılan süreçlerinden biridir. Kötü amaçlı yazılımlar sıklıkla kendilerini svchost.exe olarak gizlemeye çalışır ya da meşru svchost süreçlerine enjekte edilir. İşte bu noktada Process Explorer gerçek gücünü gösterir.

Şüpheli bir svchost.exe’yi analiz ederken bakmanız gerekenler:

  • Parent process’i ne? Meşru bir svchost.exe mutlaka services.exe‘den başlamalıdır
  • Çalıştığı dizin neresi? C:WindowsSystem32 dışında bir yerden çalışıyorsa alarm zilleri çalmalı
  • Hangi servisleri barındırıyor? Svchost’a sağ tıklayıp Properties > Services kısmından görebilirsiniz
  • VirusTotal skoru nedir?
# PowerShell ile tüm svchost süreçlerini ve parent process'lerini listele
Get-WmiObject Win32_Process -Filter "name = 'svchost.exe'" | 
Select-Object ProcessId, ParentProcessId, CommandLine, ExecutablePath |
Format-List

# Parent process adını da görmek için
Get-WmiObject Win32_Process -Filter "name = 'svchost.exe'" | ForEach-Object {
    $parent = Get-WmiObject Win32_Process -Filter "ProcessId = $($_.ParentProcessId)"
    Write-Host "PID: $($_.ProcessId) | Parent: $($parent.Name) | Path: $($_.ExecutablePath)"
}

Process Explorer’da svchost.exe’ye çift tıkladığınızda açılan Properties penceresinde “Services” sekmesi o svchost instance’ının hangi Windows servislerini barındırdığını gösterir. Eğer bu liste boşsa ya da tanımadığınız bir şey varsa, tehlike çanları çalmaya başlayabilir.

Gerçek Dünya Senaryosu 2: DLL Injection Tespiti

DLL injection, bir kötü amaçlı yazılımın meşru bir sürecin bellek alanına kendi kodunu yerleştirme tekniğidir. Process Explorer’ın alt panelinde DLL görünümüne geçerek bunu tespit edebilirsiniz. View menüsünden “Lower Pane View > DLLs” seçeneğini aktif edin.

Şüpheli bir DLL’i arayın:

  • Imzasız DLL’ler: Columns ekranından “Verified Signer” sütununu ekleyin. Microsoft ya da bilinen bir yazılım firmasının imzası olmayan DLL’ler dikkat çekicidir
  • Temp klasöründen yüklenen DLL’ler: C:UserskullanıcıAppDataLocalTemp gibi dizinlerden yüklenen DLL’ler çok şüpheli
  • Garip isimler: Rastgele karakter dizilerinden oluşan DLL isimleri kırmızı bayrak
# PowerShell ile belirli bir process'in yüklediği DLL'leri listele
$processName = "explorer.exe"
$process = Get-Process -Name $processName | Select-Object -First 1
$process.Modules | Select-Object ModuleName, FileName, FileVersionInfo | 
Where-Object {$_.FileName -notlike "C:Windows*"} |
Format-List

# Tüm processlerin dışarıdan yüklediği DLL'leri tara
Get-Process | ForEach-Object {
    $p = $_
    try {
        $p.Modules | Where-Object {$_.FileName -notlike "C:Windows*" -and $_.FileName -notlike "C:Program Files*"} | 
        ForEach-Object {
            Write-Host "Process: $($p.Name) ($($p.Id)) | DLL: $($_.FileName)"
        }
    } catch {}
}

Handle Analizi ile Kilitli Dosyaları Bulma

“Bu dosyayı silemiyorum, başka bir program kullanıyor” hatasını kim almadı ki? Handle görünümü tam da bu iş için var. View > Lower Pane View > Handles seçeneğiyle alt paneli handle moduna alın ve ardından Ctrl+F ile dosya adını arayın.

# Handle.exe (Sysinternals) komut satırından belirli bir dosyayı kimin tuttuğunu göster
handle.exe "C:logsuygulama.log"

# Tüm açık dosya handle'larını listele
handle.exe -a > C:Temptum_handlelar.txt

# Belirli bir process'in handle'larını göster
handle.exe -p notepad.exe

Bu yaklaşımı gerçek hayatta kullanmanın tipik bir senaryosu şudur: Log rotasyonu sırasında eski log dosyasını silmeye çalışıyorsunuz ama işletim sistemi izin vermiyor. Handle aramasıyla hangi servisin dosyayı tuttuğunu bulup, servisi yeniden başlatarak sorunu çözebilirsiniz.

CPU ve Bellek Analizi

Process Explorer’ın CPU sütununa tıkladığınızda süreçler tükettikleri CPU’ya göre sıralanır. Ama daha değerli bilgi “CPU History” sütunundadır; bu küçük mini grafik o sürecin zaman içindeki CPU kullanımını gösterir.

Bellek analizi için Properties penceresinin “Performance” sekmesi altındaki grafikler oldukça bilgilendiricidir. Özellikle şu değerlere dikkat edin:

  • Private Bytes: Sadece o process tarafından kullanılan, paylaşılmayan bellek. Memory leak tespiti için bu değerin zaman içinde sürekli artması önemli bir işarettir
  • Virtual Size: Process’in sanal adres alanı kullanımı
  • Working Set: Şu anda fiziksel RAM’de bulunan sayfalar
  • Peak Working Set: En yüksek RAM kullanımı
# PowerShell ile memory leak şüphesi olan processler için periyodik izleme
$processName = "w3wp"
$logFile = "C:Tempmemory_log.csv"
"Zaman,PID,PrivateBytes,WorkingSet" | Out-File $logFile

while ($true) {
    $procs = Get-Process -Name $processName -ErrorAction SilentlyContinue
    foreach ($p in $procs) {
        $line = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss'),$($p.Id),$($p.PrivateMemorySize64),$($p.WorkingSet64)"
        $line | Add-Content $logFile
        Write-Host $line
    }
    Start-Sleep -Seconds 60
}

VirusTotal Entegrasyonu ile Kötü Amaçlı Yazılım Tespiti

Bu özellik, özellikle bir güvenlik olayı sırasında inanılmaz hız kazandırıyor. Options > VirusTotal.com > Check VirusTotal.com seçeneğini aktif ettiğinizde, Process Explorer her çalışan process’in MD5 hash’ini VirusTotal’e gönderir ve sonuçları “VirusTotal” sütununda gösterir.

Sütundaki format “X/Y” şeklindedir; X kaç motorun zararlı bulduğunu, Y toplam motor sayısını gösterir. 0/70 gibi bir sonuç genellikle temiz anlamına gelirken, 15/70 gibi bir sonuç ciddi bir sorun olduğunu işaret eder.

# PowerShell ile çalışan processlerin hash'lerini hesapla ve dosyaya yaz
Get-Process | Where-Object {$_.MainModule -ne $null} | ForEach-Object {
    try {
        $hash = Get-FileHash $_.MainModule.FileName -Algorithm MD5 -ErrorAction Stop
        [PSCustomObject]@{
            Name = $_.Name
            PID = $_.Id
            Path = $_.MainModule.FileName
            MD5 = $hash.Hash
        }
    } catch {
        [PSCustomObject]@{
            Name = $_.Name
            PID = $_.Id
            Path = "Erişim Engellendi"
            MD5 = "N/A"
        }
    }
} | Export-Csv "C:Tempprocess_hashleri.csv" -NoTypeInformation -Encoding UTF8

# VirusTotal API ile hash sorgulama (API key gerekli)
$apiKey = "YOUR_API_KEY"
$hash = "d41d8cd98f00b204e9800998ecf8427e"
$url = "https://www.virustotal.com/api/v3/files/$hash"
$headers = @{"x-apikey" = $apiKey}
Invoke-RestMethod -Uri $url -Headers $headers | ConvertTo-Json

Gerçek Dünya Senaryosu 3: Ağ Bağlantılarını İzleme

Process Explorer’da bir sürece sağ tıklayıp Properties > TCP/IP sekmesine gittiğinizde o sürecin aktif ağ bağlantılarını görebilirsiniz. Ama daha kapsamlı bir görünüm için Sysinternals’tan TCPView’ı da Process Explorer ile birlikte kullanmanızı öneririm.

# netstat ile process bazlı bağlantıları göster
netstat -b -n -o

# PowerShell ile belirli bir process'in ağ bağlantılarını detaylı göster
$targetPID = (Get-Process -Name "chrome" | Select-Object -First 1).Id
Get-NetTCPConnection | Where-Object {$_.OwningProcess -eq $targetPID} |
Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, State |
Format-Table -AutoSize

# Tüm processlerin dış bağlantılarını listele (sadece ESTABLISHED)
Get-NetTCPConnection -State Established | ForEach-Object {
    $proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
    [PSCustomObject]@{
        Process = $proc.Name
        PID = $_.OwningProcess
        LocalPort = $_.LocalPort
        RemoteAddress = $_.RemoteAddress
        RemotePort = $_.RemotePort
    }
} | Sort-Object Process | Format-Table -AutoSize

Özellikle bir process’in alışılmadık port’lara ya da bilinmeyen IP adreslerine bağlandığını görürseniz, bu bir C2 (Command and Control) bağlantısına işaret ediyor olabilir.

Süreç Karşılaştırma ve Baseline Oluşturma

Sağlıklı bir sistemin “normal” durumunu bilmek, anomali tespitinin temelidir. Process Explorer’da File > Save As seçeneğiyle mevcut süreç listesini TXT formatında kaydedebilirsiniz. Bu baseline’ı daha sonra şüpheli bir anın snapshot’ıyla karşılaştırabilirsiniz.

# PowerShell ile detaylı süreç snapshot'ı al ve kaydet
$snapshot = Get-Process | Select-Object Name, Id, CPU, WorkingSet64, 
    MainWindowTitle, StartTime, Path, Company, Description |
    Sort-Object Name

$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
$snapshot | Export-Csv "C:Baselinesprocs_$timestamp.csv" -NoTypeInformation -Encoding UTF8

# İki snapshot arasındaki farkları bul (yeni başlayan processler)
$baseline = Import-Csv "C:Baselinesprocs_baseline.csv"
$current = Get-Process | Select-Object Name, Id, Path
$yeni_prosesler = $current | Where-Object {$_.Name -notin $baseline.Name}
$yeni_prosesler | Format-Table -AutoSize

Otomatik Analiz İçin Komut Satırı Alternatifleri

Process Explorer harika ama her zaman GUI’ye erişiminiz olmayabilir. Uzak bir sunucuya RDP ile bağlanmak mümkün olmadığında ya da otomatize bir izleme scripti yazmanız gerektiğinde aşağıdaki araçlar işe yarar.

# PsList ile detaylı process listesi (Sysinternals)
pslist.exe -x

# Belirli bir process'in detayları
pslist.exe -x svchost

# PsKill ile process sonlandırma
pskill.exe -t 1234  # PID 1234 ve tüm child process'leri sonlandır

# Listdlls ile process'lerin DLL listesi
listdlls.exe -u  # İmzasız DLL'leri göster
listdlls.exe chrome.exe  # Sadece chrome için

# Autorunsc ile başlangıç kayıtlarını tara
autorunsc.exe -a * -c -h -v -vt > C:Tempautoruns_rapor.csv

Güvenlik Olaylarında Hızlı Kontrol Listesi

Bir güvenlik olayına müdahale ederken Process Explorer ile yapmanız gereken ilk 10 şey şunlardır:

  • VirusTotal entegrasyonunu aktif et ve sütunları güncelle, yüksek skora sahip process’leri hemen işaretle
  • Imzasız process’leri bul: Options > Highlight Unsigned Images seçeneğiyle imzasız executable’lar vurgulanır
  • Mor renkli process’lere dikkat: Bunlar packed (sıkıştırılmış) executable’lar ve kötü amaçlı yazılımlar için yaygın bir teknik
  • Parent-child ilişkilerini kontrol et: Beklenmedik parent’lardan doğan process’ler şüphelidir (örneğin word.exe’den doğan cmd.exe)
  • Temp klasörü kaynaklı process’leri ara: Kolona sağ tıklayıp Image Path’i ekle ve filtrele
  • Ağ bağlantılarını incele: Her şüpheli process için TCP/IP sekmesini kontrol et
  • Handle’ları tara: Özellikle LSASS gibi hassas process’lere erişen başka process var mı bak
  • DLL listesini incele: Tanımadığın ve Temp’ten yüklenen DLL’ler kötü haber
  • String analizi yap: Properties > Strings sekmesinde URL, IP adresi gibi şüpheli stringler arayın
  • Snapshot al ve sakla: Olayın o anının kayıt altına alınması sonraki forensic çalışma için değerlidir

Sonuç

Sysinternals Process Explorer, Windows sistem yöneticileri ve güvenlik uzmanları için olmazsa olmaz bir araçtır. Görev Yöneticisi’nin size göstermediği her şeyi, yani DLL’leri, handle’ları, ağ bağlantılarını, VirusTotal sonuçlarını ve process ağacını tek bir yerden sunar.

Gerçek anlamda faydalı hâle gelmesi için birkaç şey gereklidir: Düzenli kullanım, sisteminizin “normal” hâlini bilmek ve anomalileri tanıma reflexi geliştirmek. Bu refleks, özellikle bir güvenlik olayında saatlerce hata aramak yerine dakikalar içinde sorunu tespit etmenizi sağlar.

Bugün yapmanızı önereceğim şey şu: Kritik sunucularınızda bir baseline snapshot alın, VirusTotal entegrasyonunu aktif edin ve arayüzü tanımak için biraz zaman harcayın. Acil bir durumda bu aracı ilk kez açmak yerine, daha önce tanışmış olmak sizi hem stres hem de zaman açısından kurtarır. Sysinternals suite’ini araç kutunuzun köşesine kaldırmanın zamanı geçti; ön sıraya alın.

Bir yanıt yazın

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